Ответ: 440
B9 (базовый уровень, время – 4 мин)
Тема: Умение исполнить простейший циклический алгоритм, записанный на алгоритмическом языке.
Что нужно знать:
· Алгоритмы описывают последовательность действий, производимых над объектами, определенными условием задачи;
· переменная – это величина, которая имеет имя, тип и значение; переменная может изменяться во время исполнения алгоритма;
· оператор присваивания служит для записи значения в переменную, который записывается так: <имя переменной> =: <выражение>;
· значение, присвоенное переменной, сохраняется в ней до следующего присваивания этой переменной нового значения; если в переменную записывают новое значение, старое стирается;
· знаки +, -, *, / используются для обозначения операций сложения, вычитания, умножения и деления. Правила выполнения операций и порядок действий соответствуют правилам арифметики.
· запись вида a div b означает результат целочисленного деления a на b (остаток отбрасывается);
· запись вида a mod b означает остаток от деления a на b;
· запись вида a := с + 4*d + 1; означает «вычислить значения выражения справа от знака присваивания := и записать результат в переменную a»; при этом значения других переменных (кроме a) не изменяются;
· циклы используют для многократного выполнения одинаковых операций;
· тело цикла – это последовательность действий, многократно повторяющаяся в процессе выполнения цикла;
· цикл с переменной выполняется N раз, в этом примере переменная i принимает последовательно все значения от 1 до N с шагом 1
for i:=1 to N do begin
{ последовательность действий}
end;
· цикл с условием выполняется до тех пор, пока условие в заголовке цикла не нарушится;
while { условие } do begin
{ последовательность действий}
end;
· зацикливание - эта такая ситуация, когда цикл с условием работает бесконечно долго из-за того, что условие все время остается истинным.
Задача 1: Определите значение переменной c после выполнения следующего фрагмента программы.
a := 40;
b := 10;
b := - a / 2 * b;
if a < b then
c := b - a
else
c := a - 2 * b;
Решение:
1) выполним вручную все действия программы;
2) составим таблицу, где в первом столбце записаны операторы программы, а в остальных показаны изменения переменных при выполнении этих операторов;
3) в задаче используются три переменные: a, b, c;
a | b | c | |
a := 40; b := 10; |
4) операторb := - a / 2 * b;
ВНИМАНИЕ: умножение и деление имеют равный приоритет, и в такой цепочке сначала выполнится деление, а потом умножение
b := - (40 / 2) * 10 = - 20 * 10 = - 200
a | b | c | |
a := 40; b := 10; | |||
b := - a / 2 * b; | -200 |
5) проверяем условие «a < b»; оно «ложно», поэтому выполняется оператор, стоящий после слова else: c := a-2*b = 40 – 2*(-200) = 440:
a | b | c | |
a := 40; b := 10; | |||
b := - a / 2 * b; | -200 | ||
c := a-2*b |
Ответ: 440
Задача 2:Запишите значение переменной s, полученное в результате работы следующей программы. Текст программы приведён на трёх языках программирования.
Алгоритмический язык | Бейсик | Паскаль |
алг нач цел s,k s:=8 нц для k от 3 до 8 s:=s+8 кц вывод s кон | DIM k, s AS INTEGER s = 8 FOR k = 3 TO 8 s = s + 8 NEXT k PRINT s | Var s,k: integer; Begin s := 8; for k := 3 to 8 do s := s + 8; writeln(s); End. |
Решение:
1) рассмотрим этот алгоритм, записанный на разных языках;
2) в задаче использованы переменные k и s целочисленного типа:
Алгоритмический язык | Бейсик | Паскаль |
цел s, k | DIM k, s AS INTEGER | Var s,k: integer; |
3) Далее переменной s присваивается значение 8:
Алгоритмический язык | Бейсик | Паскаль |
s := 8 | s = 8 | s := 8 |
4) далее описывается цикл, где в качестве параметра выступает переменная k, которая изменяется от 3 до 8 с шагом 1 (т. е. будет принимать последовательно значения 3, 4, 5, 6, 7 и 8).
Алгоритмический язык | Бейсик | Паскаль |
нц для k от 3 до 8 s := s + 8 кц | FOR k = 3 TO 8 s = s + 8 NEXT k | for k := 3 to 8 do s := s + 8; |
В теле цикла только одна команда s := s + 8, т.е. эта операция будет выполняться на каждом шаге цикла.
5) В итоге на экран выводится значение переменной s:
Алгоритмический язык | Бейсик | Паскаль |
вывод s | PRINT s | writeln(s); |
В теле цикла происходит увеличение значения переменной s на 8. Т.к. параметр цикла увеличивается от 3 до 8 с шагом 1, то при выполнении программы тело цикла будет выполняться 6 раз ( k будет равно 3, 4, 5, 6, 7, 8). Следовательно, переменная s увеличится на 8 * 6 = 48. А если начальное значение переменной s = 8 и после выполнения программы оно увеличится на 48, то в конечном итоге значение переменной s станет равным 56.