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

Post on 02-Jan-2016

74 Views

Category:

Documents

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

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

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

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

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

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

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

For пц:=кц DownTo нз Do

оператор;

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

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

ЭТЮД ЭТЮД

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_

ЭТЮД ЭТЮД

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

ЭТЮД ЭТЮД

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;… Какие изменения нужно внести во

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

ЭТЮД ЭТЮД

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 значения параметра цикла. Всё это может приводить при одной и той же записи оператора к разным действиям.

Например, при входе в цикл 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.

В 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.То есть, если не знать особенностей транслятора языка, изменение параметра цикла может привести к непредвиденным последствиям. При этом отыскать синтаксическую ошибку бывает очень трудно.

ЭТЮД ЭТЮД

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

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

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

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

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

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

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

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

ЭТЮД ЭТЮД

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

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

begin

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

end;Write(k, n);

На экране:

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

ЭТЮД ЭТЮД

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.

ЭТЮД ЭТЮД

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.

ЭТЮД ЭТЮД

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

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

На экране:

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

ЭТЮД ЭТЮД

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»

ЭТЮД ЭТЮД 1111

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

WHILE not (keypressed) Do;

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

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

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

REPEAT операторы UNTIL

условие;

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

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

ЭТЮД ЭТЮД 1212

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

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

На экране:

информатика

ЭТЮД ЭТЮД 1313

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

REPEAT UNTIL keypressed

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

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

REPEAT UNTIL readkey=‘*’;

ЭТЮД ЭТЮД 1414

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

…REPEAT

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

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

ЭТЮД ЭТЮД 1515

ЭТЮД ЭТЮД 1616

top related