Образцы решения задач: Структура ветвления
Задача 1.
Чему будет равно значение переменной d после выполнения фрагмента алгоритма?
a:=5; b:=3; c:=1
если a+b+c<1
то d:=2*(a+b+c)/3
иначе
если a<b
то d:=8*(b+c)
иначе d:=5*(a+c)
все
все
Анализ постановки задачи.
Исходными данными для решения задачи является три целых числа.
Введем обозначения объектов алгоритма:
a, b, c -целые числа, подлежащие обработке; d – результат вычисления.
Для решения данной задачи воспользуемся вложенной алгоритмической структурой ветвления, т.к.:
если условие a+b+c<1 истинно, то d:=2*(a+b+c)/3, иначе проверяем условие если a<b, то d:=8*(b+c), иначе d:=5*(a+c)
Решение.
a:=5; b:=3; c:=1 {переменным a, b, c будут присвоены начальные значения 5, 3, 1 соответственно}
если a+b+c<1 {9<1 – ложь, значит переходим на ветвь иначе}
то d:=2*(a+b+c)/3
иначе
если a<b {5<3 - ложь, значит переходим на ветвь иначе}
то d:=8*(b+c)
иначе d:=5*(a+c) {выполняем d=5*(5+1)=30}
все
все
Анализ предложенного алгоритма позволяет сделать следующий вывод, т.к. условия a+b+c<1 и a<b являются ложными, то значение d подсчитывается по формуле d:=5*(a+c), поэтому значение переменной d после выполнения фрагмента алгоритма равно 30.
Ответ: d=30.
Программный код на Free-Паскале: при написании программного кода значения переменных а, b, с, введем с помощью команды ввода Readln(), для того чтобы программа работала на любом наборе данных.
Var a, b, c: integer; : real;
Begin
Readln(a, b, c);
If a+b+c<1 Then d:=2*(a+b+c)/3
Else If a<b
Then d:=8*(b+c)
Else d:=5*(a+c);
Writeln(‘d=’,d)
End.
Структура цикл
Задача 2.
Сколько раз выполнится тело цикла во фрагменте алгоритма:
b:=нет; r:=45;
нц пока не b
b:=(r=15);
r:=mod(r, 4)+15
кц
Анализ постановки задачи.
Исходными данными для решения задачи является логическая переменная и целое число.
Введем обозначения объектов алгоритма:
b – переменная логического типа; r – результат вычисления; i - счетчик подсчета количества итераций.
Для решения данной задачи воспользуемся алгоритмической структурой цикл (выберем цикл с предусловием, т.к. неизвестно, сколько необходимо выполнить итераций, чтобы b=true).
Решение.
b:=нет; {логической переменной b будет присвоено значение ложь}
r:=45 {целой переменной r присваивается значение 45}
нц пока не b {проверка условия, пока b будет ложно, тело цикла будет выполняться}
b:=(r = 15); {b будет присваиваться значение ложь, пока r<>15}
r:=mod(r, 4) + 15 { значения переменной r изменится }
кц
Исполнение алгоритма занесем в таблицу:
B |
r |
Условие |
Признак |
Кол-во итераций |
нет |
45 |
начальные значения |
||
нет |
16 |
не b |
истина
|
1
|
нет |
15 |
не b |
истина |
2 |
да |
18 |
не b
|
истина |
3 |
|
|
не b |
ложь |
цикл завершен |
Ответ: 3 раза.
Программный код на Free - Паскале: при написании программного кода значение переменной r, введем с помощью команды ввода Readln(), для того чтобы программа работала на любом наборе данных. Введем счетчик i для того, чтобы программа подсчитывала количество итераций, т.е. сколько раз будет выполнен цикл с предусловием.
Var b : boolean;
r, i : integer;
Begin
Readln(r);
b:=false;
i:=0; {счетчик подсчета количества итераций}
While not (b) do
Begin
b:=(r=15);
r:=mod(r, 4)+15;
i:=i+1;
end;
Writeln(‘r=’, r, ‘i=’, i)
End.