Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
К.р.№1.doc
Скачиваний:
3
Добавлен:
13.11.2019
Размер:
177.15 Кб
Скачать

Образцы решения задач: Структура ветвления

Задача 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.