Примеры составления программ для алгоритмов с ветвлением
Задачи первого типа, когда действие выполняется только при выполнении (невыполнении) какого-либо условия.
При решении задач этого типа используется неполный условный оператор вида
IF условие THEN действие; или IF not(условие) THEN действие;
ЗАДАЧА 1. Составьте программу, в которой пользователю задаются три вопроса и выдаётся количество правильных ответов.
var otv : string[20]; kotv : byte;
begin
kotv:=0;
write(‘Как называется устройство отображения информации?’); readln(otv);
if (otv=‘Дисплей’) or (otv=‘дисплей’) or (otv=‘ДИСПЛЕЙ’) then kotv:=kotv+1;
write(‘Для ввода алфавитно-цифровой информации служит -’); readln(otv);
if (otv=‘Клавиатура’) or (otv=‘клавиатура’) or (otv=‘КЛАВИАТУРА’) then kotv:=kotv+1;
write(‘Основное устройство для обработки информации - это ’); readln(otv);
if (otv=‘Процессор’) or (otv=‘процессор’) or (otv=‘ПРОЦЕССОР’) then kotv:=kotv+1;
write(‘Правильных ответов - ‘, kotv);
end.
Задачи второго типа: выбор из двух возможных вариантов.
ЗАДАЧА 1. Вычислить значение функции

Блок-схема этой задачи проста.

Составить программу по приведенной блок-схеме можно разными способами.
| 1 СПОСОБ. Program Y1_1 (input, output); var x,y: real; begin write(‘Введи х:’); readln(x); if x= 2 then y:=sqrt(x-2) else y:=sqr(x) - 4; write(‘y=’, y); end; | 2 СПОСОБ. Program Y1_2 (input, output); var x,y: real; b: boolean; begin write(‘Введи х:’); readln(x); b:= x=2; case b of true: y:= sqrt(x-2); false: y:=sqr(x) - 4; end; write(‘y=’, y); end; |
| 3 СПОСОБ Program Y1_1 (input, output); var x,y: real; begin write(‘Введи х:’); readln(x); if x= 2 then y:=sqrt(x-2); if x write(‘y=’, y); end; | |
ЗАМЕЧАНИЕ. При решении задачи третьим способом следует заботиться о том, чтобы условия в условных операторах были противоречащими друг другу (чтобы не осталось “неохваченных вниманием” значений переменной).
ЗАДАЧА 2. Для заданного целого х вычислить значение функции

Так как нет никаких условий, то кажется, что это обычная вычислительная задача. На самом деле областью определения данной функции является множество X = [2;3) U (3;+). Значение функции y можно вычислить, если х Х, в противном случае функция не определена.
Для разнообразия значение х не будем вводить от пользователя, а определим с помощью датчика случайных чисел из интервала (-20; 20)
var x : integer;
y : real;
begin
x:= random(40) - 20;
write(‘Для x=’,x);
if (x=2) and (x 3) then begin
y= SQRT(x-2) / (x*x*x - 27);
writeln(‘ y=‘,y:6:2);
end
else writeln (‘значение функции не определено’);
end.
ЗАДАЧА 3. От пользователя вводится его имя. Определить, с какой буквы - гласной или согласной - оно начинается.
Основная вопрос при решении данной задачи - как определить, является ли буква гласной. Можно, конечно написать сложное условие типа:
(s = ‘А’) or (s = ‘а’) or (s = ‘Е’) or ... (s = ‘я’), но в языке Pascal есть возможность работать с множествами и существует операция проверки вхождения элемента в множество - IN. Поэтому одним из способов решения задачи будет следующий:
var Name : string;
S : char;
begin
write (‘Как Вас зовут?’); readln(Name);
S:= Name[1]; {что равнозначно оператору S:=copy(Name,1,1);}
write(‘Первая буква -’);
if S in [‘A’,‘a’,‘E’,‘e’,‘Ё’,’ё’,‘И’,’и’,’О’,’о’,’У’,’у’,’Ы’,’ы’,’Э’,’э’,’Ю’,’ю’,’Я’,’я’] then write (‘гласная’) else write (‘согласная’);
end.
ЗАДАЧА 4. От пользователя вводится слово. Добавьте в конец слова один или два восклицательных знака, так чтобы во вновь полученном слове было четное количество символов. Например: “Ура” - “Ура!”, “Привет” - “Привет!!”
var old, new : string;
begin
write(‘Введите текст -’); readln(old);
if length(old) mod 2 =0 then new:=old+’!!’ else new:=old+’!’;
writeln(new);
end.
Задачи третьего типа: осуществляется выбор из трех возможных вариантов, условия выбора связаны со значениями одной переменной;
ЗАДАЧА 1. Вычислить значение функции

Блок-схема решения выглядит следующим образом.

Если программу составлять в полном соответствии с блок-схемой, то она будет выглядеть так:
var x: real; y: integer;
begin
write(‘Введи х:’); readln(x);
if x
else if x=0 then y:=0
else y:=1;
writeln(‘y=’, y);
end.
Основную часть программы (вычисление значения y) можно реализовать следующим образом:
if x
if x=0 then y:=0;
if x0 then y:=1;
Но нельзя написать так:
if x
if x=0 then y:=0 else y:=1;
Ошибка состоит в том, что для всех значений х, меньших 0, первый оператор действительно присвоит переменной y значение -1, но выполнение второго оператора изменит это значение на +1 (так как отрицательное число не равно нулю).
ЗАПОМНИТЕ. Если при решении задачи Вам нужно предусмотреть выбор одного варианта из трех возможных, то можно использовать конструкцию
IF условие 1 THEN выбор 1
ELSE IF условие 2 THEN выбор 2
ELSE выбор 3;
или конструкцию IF условие 1 THEN выбор 1;
IF условие 2 THEN выбор 2;
IF условие 3 THEN выбор 3;
Причем, условия 1-3 должны “перекрывать” все возможные значения переменной.