25
Алгоритмические этюды Алгоритмические этюды на использование операторов цикла

Алгоритмические этюды

Embed Size (px)

DESCRIPTION

Алгоритмические этюды. на использование операторов цикла. Формат оператора : For пц:=нз To кз Do оператор ; For пц:=кц DownTo нз Do оператор ;. Особенности использования арифметического оператора цикла с заданным числом повторений. Особенности:. - PowerPoint PPT Presentation

Citation preview

Page 1: Алгоритмические этюды

Алгоритмические этюдыАлгоритмические этюдына использование операторов цикла

Page 2: Алгоритмические этюды

ОСОБЕННОСТИ ОСОБЕННОСТИ

ИСПОЛЬЗОВАНИЯ ИСПОЛЬЗОВАНИЯ

АРИФМЕТИЧЕСКОГО АРИФМЕТИЧЕСКОГО ОПЕРАТОРА ЦИКЛАОПЕРАТОРА ЦИКЛА С С

ЗАДАННЫМ ЧИСЛОМ ЗАДАННЫМ ЧИСЛОМ

ПОВТОРЕНИЙПОВТОРЕНИЙ

Формат оператора:For пц:=нз To кз Do оператор;

For пц:=кц DownTo нз Do

оператор;

Page 3: Алгоритмические этюды

Особенности:Особенности:• Правило 1. Параметр цикла (пц) может быть простого дискретного типа: byte, integer, char, интервального, перечислимого.• Правило 2. Начальное значение параметра цикла (нз) должно быть не больше конечного значения (кз). Если начальное значение больше конечного, то тело цикла не выполняется ни разу.• Правило 3. Начальное и конечное значения параметра цикла вычисляются один раз до выполнения тела цикла и не меняются, пока цикл не завершён.• Правило 4. Нецелесообразно менять значение параметра цикла в теле цикла.• Правило 5. В теле цикла может быть только один оператор, поэтому, если нужно выполнить несколько

действий, они заключаются в операторные скобки begin … end;• Правило 6. После выполнения тела цикла параметр цикла автоматически переходит к следующему значению (To) или к предыдущему значению (DownTo).

Page 4: Алгоритмические этюды

ЭТЮД ЭТЮД

11Определить, что будет выведено на экран после выполнения следующей программы:

Program et1;Uses crt;Var n,k: byte;BEGIN

n:=5;WriteLn(‘цикл 1’);For k:=1 To n Do Write(k); WriteLn; WriteLn(‘цикл 2’); For k:=1 DownTo n Do Write(k); WriteLn; WriteLn(‘цикл 3’); For k:=nTo 1 Do Write(k); WriteLn; WriteLn(‘цикл 4’); For k:=1 DownTo n Do Write(k);

END.

На экране:цикл 1

12345цикл 2

цикл 3

цикл 454321_

Page 5: Алгоритмические этюды

ЭТЮД ЭТЮД

22Определить, что будет выведено на экран после выполнения следующей программы:

Program et2;Uses crt;Var n,k: byte;BEGIN

n:=5;For k:=1 To n Do begin n:=n+1;

WriteLn(‘k=’,k,’n=‘,n);end;END.

На экране:

k=1 n=6k=2 n=7k=3 n=8k=4 n=9k=5 n=10

Page 6: Алгоритмические этюды

ЭТЮД ЭТЮД

33Определить, что будет выведено на экран после выполнения следующих фрагментов программ:

На экране:

На экране:

…1) S:=0; For k:=1 to 5 do s:=s+k; Write(s);…

15

1361015…2) S:=0; For k:=1 to 5 do begin s:=s+k; Write(s); end;… Какие изменения нужно внести во

второй фрагмент, чтобы значения сумм выводились на экран монитора через пробел?

Page 7: Алгоритмические этюды

ЭТЮД ЭТЮД

44Определить, что будет выведено на экран после выполнения следующей программы, т.е. какое значение будет иметь переменная k после выхода из цикла:

Program et2;Uses crt;Var n,k: byte;BEGIN

n:=5;For k:=1 To n Do k:=k+2;

WriteLn(‘k=’,k);END.Правило 4 гласит, что нецелесообразно менять значение параметра цикла for в теле цикла. Не запрещено, но нецелесообразно, потому что результат может быть непредсказуем. Всё зависит от того, как проверяется условие на конец цикла. В разных версиях языка используются разные варианты проверки: k<n, k<=n, k=n. Причём проверка может осуществляться до и после автоматического увеличения (уменьшения) на 1 значения параметра цикла. Всё это может приводить при одной и той же записи оператора к разным действиям.

Page 8: Алгоритмические этюды

Например, при входе в цикл k равно 1. В теле цикла оно увеличивается на 2 и становится равным 3. Так как 3 меньше 5, то значение k автоматически увеличивается ещё на 1, становится равным 4. Тело цикла выполняется ещё раз, k становится равным 6. Так как 6 не меньше 5, выполнение оператора цикла заканчивается. На экран выводится значение k=6.Program et2;

Uses crt;Var n,k: byte;BEGIN

n:=5;For k:=1 To n Do k:=k+2;

WriteLn(‘k=’,k);END.

Ручной счёт:k n k<=n

51 1<=5 да3 3<=5 да4 4<=5 да6 6<=5 нет

На экране:k=6

Так происходит, например, в версии PascalABC.

Page 9: Алгоритмические этюды

В Borland Pascal реализуется сравнение k=n (строгое совпадение).При выполнении оператора цикла k будет последовательно принимать значения 3,6,9,12,…,252, 255, 2, 5. (Для переменной k задан тип byte, поэтому она может принимать значения от 0 до 255.) Тело цикла при этом будет выполняться 87 раз.А если в Borland Pascal включить в программу оператор: For k:=1 To n Do k:=k+3; то произойдёт зацикливание, поскольку k будет меняться таким образом (4, 8, 12, …, 252, 0, …), что никогда не станет равным 5.То есть, если не знать особенностей транслятора языка, изменение параметра цикла может привести к непредвиденным последствиям. При этом отыскать синтаксическую ошибку бывает очень трудно.

Page 10: Алгоритмические этюды

ЭТЮД ЭТЮД

55Какая из приведенных ниже программ не содержит ошибку и что будет выведено на экран после её выполнения?А)

uses crt;TYPE x=(b1,b2,b3);VAR b: x;BEGIN For b:=b1 to b3 do write(b);END.

Б) uses crt;TYPE x=(b1,b2,b3);VAR b: x;BEGIN For b:=b1 to b3 do case b of b1: write(‘b1’); b2: write(‘b2’); b3:write(‘b3’);end;

END.

В) uses crt;TYPE x=(b1,b2,b3);VAR b: x;BEGIN For b:=b1 to b3 do case b of b1: write(b1); b2: write(b2); b3:write(b3);end;END.

На экране: b1b2b3

Данные перечислимого типа могут быть параметрами цикла. Поэтому во всех трех программах в записи тела оператора цикла ошибок нет.Выполнится только программа варианта Б).В случаях А) и В) будет выдана ошибка, что данные перечислимого типа выводить нельзя.

Page 11: Алгоритмические этюды

ОСОБЕННОСТИ ОСОБЕННОСТИ ИСПОЛЬЗОВАНИЯ ИСПОЛЬЗОВАНИЯ ОПЕРАТОРА ОПЕРАТОРА ЦИКЛА С ЦИКЛА С ПРЕДУСЛОВИЕМПРЕДУСЛОВИЕМ

Формат оператора:

WHILE условие DO оператор;

Page 12: Алгоритмические этюды

Особенности:Особенности:• Правило 1. Тело цикла

выполняется, пока условие верно.• Правило 2. Если условие с самого начала неверно, то тело цикла не выполнится ни разу. • Правило 3. В теле цикла может быть только один оператор, поэтому если нужно выполнить несколько действий, то они заключаются в

операторные скобки begin … end;. • Правило 4. Значение параметра цикла (переменной, входящей в условие) должно быть определено до цикла и должно изменяться в теле цикла, чтобы не произошло зацикливания.

Page 13: Алгоритмические этюды

ЭТЮД ЭТЮД

66Определить, что будет выведено на экран после выполнения приведённого ниже фрагмента программы:…

k:=1; n:=2;WHILE k < n Do

begin

k:=k+2; n:=n+3;

end;Write(k, n);

На экране:

Произойдет зацикливание, поскольку значение переменной k будет всегда меньше значения переменной n (правило 1)

Page 14: Алгоритмические этюды

ЭТЮД ЭТЮД

77Определить, что будет выведено на экран после выполнения приведённого ниже фрагмента программы:…

k:=2; n:=1;WHILE k < n Do

begin

k:=k+2; n:=n+3;

end;Write(k, n);

На экране:

21

Тело цикла не выполнится ни разу, поскольку условие при входе в цикл изначально ложно (правило 2). На экран выведутся значения k=2 и n=1.

Page 15: Алгоритмические этюды

ЭТЮД ЭТЮД

88Определить, что будет выведено на экран после выполнения приведённого ниже фрагмента программы:…

k:=1; n:=5;WHILE k < n Do k:=k+2;

n:=n+3; Write(k, n);

На экране:

58

В теле цикла только один оператор k:+k+2; (правило 3). Он выполнится два раза. На экран выведутся значения k=5 и n=8.

Page 16: Алгоритмические этюды

ЭТЮД ЭТЮД

99Определить, что будет выведено на экран после выполнения приведённого ниже фрагмента программы:…

s:=0; k:=1; n:=5;WHILE k < n Do begin readln(x);s:=s+x; end; Write(s);

На экране:

Программа зациклится, поскольку параметры цикла не меняются в теле цикла (правило 4 ).

Page 17: Алгоритмические этюды

ЭТЮД ЭТЮД

1010Определить, что будет выведено на экран после выполнения приведённого ниже фрагмента программы, если k и n определены как: a) integer;

б) byte;

…k:=1; n:=5;WHILE k < n Don:=n - 3; Write(k:3, n:3);

На экране:

a) 1 -1 б)

a)Переменная k так и останется равной 1, переменная n станет равной-1

б) Выполнение прервётся с сообщением об ошибке «выход за границы диапазона переменной типа byte»

Page 18: Алгоритмические этюды

ЭТЮД ЭТЮД 1111

Каков смысл приведённого ниже фрагмента программы?

WHILE not (keypressed) Do;

… В Borland Pascal – ожидание нажатия какой-либо клавиши.

Page 19: Алгоритмические этюды

ОСОБЕННОСТИ ОСОБЕННОСТИ ИСПОЛЬЗОВАНИЯ ИСПОЛЬЗОВАНИЯ ОПЕРАТОРА ОПЕРАТОРА ЦИКЛА С ЦИКЛА С ПОСТУСЛОВИЕМПОСТУСЛОВИЕМ

Формат оператора:

REPEAT операторы UNTIL

условие;

Page 20: Алгоритмические этюды

Особенности:Особенности:• Правило 1. Тело цикла выполняется, пока условие

неверно.• Правило 2. Тело цикла выполняется хотя бы один раз. • Правило 3. Значение параметра цикла (переменной, входящей в условие) целесообразно определять до цикла. В теле цикла оно должно изменяться, чтобы не произошло зацикливания.

Page 21: Алгоритмические этюды

ЭТЮД ЭТЮД 1212

Определить, что будет выведено на экран после выполнения приведённого ниже фрагмента программы:

…S:=‘информатика’; k:=1; n:=5;REPEAT gotoxy(35,12);write(s); delay(1000);clrscr; delay(1000); k:=k+1;UNTIL k>n; …

На экране:

информатика

Page 22: Алгоритмические этюды

ЭТЮД ЭТЮД 1313

Каков смысл приведённого ниже фрагмента программы?

REPEAT UNTIL keypressed

ОТВЕТ: Ожидание нажатия какой-либо клавиши.Если нужно дождаться конкретной клавиши,

например, ‘*’, то можно использовать конструкцию:

REPEAT UNTIL readkey=‘*’;

Page 23: Алгоритмические этюды

ЭТЮД ЭТЮД 1414

В чём смысл приведённого ниже фрагмента программы?

…REPEAT

Write(‘Введите верно год:’); ReadLn(g);UNTIL (g>=1990) and (g<=2010); …

ОТВЕТ:Ввод данных с проверкой правильности введённого значения.

Page 24: Алгоритмические этюды

ЭТЮД ЭТЮД 1515

Page 25: Алгоритмические этюды

ЭТЮД ЭТЮД 1616