Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль_Конспект лекций.doc
Скачиваний:
41
Добавлен:
27.05.2015
Размер:
1.39 Mб
Скачать

7.1.2 Обратная форма оператора for

Запись обратной формы этого оператора имеет вид:

for <идентификатор переменной порядкового типа> :=

n1 downto n2 do <оператор>;

nl — начальное (большее) значение соответствующего типа; n2 – конечное (меньшее) значение соответствующего типа. На каждой итерации параметр цикла изменяется на величину -1. Если n1 < n2, то оператор цикла вообще не выполняется.

Примеры. Эти примеры повторяют вышеприведённые примеры, но счётчик цикла изменяется в обратном направлении.

1)

for i:= 100 downto 1 do S:= S + i*i;

2)

for c:= 'Z’ downto 'A' do Writeln(ord(c), ' - ', c) ;

3)

for t:= 400 downto 300 do if (t mod 3) = 0 then Writeln(t);

Как вы заметили, в теле цикла может выполняться только один оператор, который записан непосредственно за структурой fordo. Поэтому, если возникает необходимость, мы можем воспользоваться составным оператором и объединить в теле цикла несколько операторов.

Примеры:

1)

for i: = 1 to 100 do

begin

Writeln(i , ‘)’ );

S:= S + i*i ;

Writeln(S);

end;

2)

for h:= 'F’ to 'X do

begin

readln(b, c);

k: = chr(ord(b) - ord(h));

m: = m + chr(ord(c) + ord(h));

writeln (k, m);

end;

Как уже было сказано, счетчиком цикла могут быть переменные любого порядкового типа, даже если это тип пользователя.

Пример:

program р7_1;

type

Month = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov);

var

i: Month;

z: integer;

begin

z : = 0 ;

for i := Jan to Sep do z := z + Ord(i)*32;

Writeln(z);

end.

7.1.3 Советы для начинающих и примеры

  1. Постарайтесь не изменять счетчик цикла в самом цикле. Если хорошо подумаете, то поймете, что в этом нет необходимости, а последствия этого могут оказаться непредсказуемыми.

  2. В Object Pascal нет понятия - шаг цикла (step), вещественный тип не может быть типом счетчика цикла, так как не является перечислимым, но при возникшей необходимости в цикле можно воспользоваться любой вещественной переменной. Для этого на каждой итерации необходимо изменять ее на определенное вещественное значение - шаг.

3. Перед использованием цикла постарайтесь точно понять, «почувствовать» как он работает, что происходит со счетчиком, сколько раз он выполняется, как изменяются переменные в выражениях типа S := S + ..., Р:= Р * . . . и т. п. Их корректность зависит от построения выражения и начальных значений переменных.

Например:

p := 0;

for i: = 1 to n do p: = p* i;

Стандартная ошибка. В этом примере незадачливый, начинающий программист попытался решить задачу нахождения факториала, а получил ноль.

Задача. Табулировать функцию f(x) на отрезке [а,b] с шагом h.

program p7_3;

var

a, b, h, x, y : Real;

i, n : integer;

begin

Writeln('введите начало и конец отрезка’);

Read(a, b);

Writeln('введите шаг');

Read(h);

х:= а; { начальное значение переменной х }

n:=round((b-a)/h); { количество полных интервалов }

for i:= 1 to n do

begin

y:= sin(x); { находим значение функции,

для текущего значения аргумента }

Writeln(i, ' х= ' , х, ' у= ' , у) ; { выводим на экран номер шага,

значение аргумента и значение функции }

x:=x+h; { увеличиваем аргумент на значение шага }

end;

end.

Задача. Вычислить выражение .

program p7_4;

var

S, f: real;

i, n: integer;

begin

Write('Введите n: ’);

Read(n); { Ввод значения переменной n }

f: = 1;

S: = 0; { начальное значение переменных f и S }

for i: = 1 to n do

begin

f: = f*2;

S:= S + sin(i)/f;

end;

Writeln(' S= ', S: 6: 4) ;

end.

Задача. Вычислить выражение

,

где n, а и b вводятся с клавиатуры.

program p7_5;

var

a, b, P, k, 1: real;

i, n: integer;

begin

Write('Введите значения a, b и n: ');

Readln (a, b, n);

k:= 1; { начальное значение переменных k,1 и Р }

1:= 1;

P:= 1;

for i:= 1 to n do

begin

k:= k * a;

1:= 1 * b;

P:= P * (sin(k) + cos(l));

end;

Writeln(‘ Произведение = ', P: 6: 4);

end.

Часто возникает необходимость организации вложенных циклов, действие которых можно понять при анализе работы следующей программы:

program р7_6;

var

i, j : integer;

begin

for i:= 1 to 5 do

for j:= 1 to 5 do writeln ('i= ', i, ' j= ', j);

end.

Программа выводит на экран всевозможные пары значений целых чисел до пяти.

i=1 j=1

i=l j=2

i=l j=3

i=l j= 4

i=l j= 5

………

………

………

i=5 j= 2

i=5 j= 3

i=5 j= 4

i=5 j= 5

Каждая строка, выводимая на экран, соответствует одному выполнению тела цикла.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]