Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ОАП.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
1.1 Mб
Скачать

Тема 7 «Операторы цикла»

7.1. Типы циклических процессов

Командой повторения или циклом называется такая форма организации действий, при которой одна и та же последовательность действий повторяется до тех пор, пока сохраняется значение некоторого логического выражения. При изменении значения логического выражения на противоположное повторения прекращаются (цикл завершается).

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

  • перед началом цикла задать начальное значение параметра;

  • внутри цикла изменять параметр цикла с помощью оператора присваивания;

  • проверять условие повторения или окончания цикла;

  • управлять циклом, т.е. переходить к его началу, если он не закончен, или выходить из цикла в противном случае.

Различают циклы с известным числом повторений (цикл с параметром) и итерационные (с пред- и постусловием).

7.2 Цикл с известным числом повторений for

В случаях, когда число повторений заранее известно, для организации циклической обработки информации применяется оператор цикла с параметром FOR. Циклы с фиксированным числом повторений изображаются в графических схемах алгоритма с помощью специального блока, называемого блоком модификации (см. рис.)

Здесь в записи блока модификации переменная I называется параметром цикла, значения N, K задают соответственно начальное и конечное значение параметра цикла.

Блок модификации задает следующую последовательность действий:

1. Параметру цикла I присваивается начальное значение N.

2. Проверяется условие I > K. Если условие выполняется, то происходит выход из цикла, в противном случае осуществляется переход на следующий пункт - пункт 3.

3. Выполняются предложения, составляющие тело цикла.

4. К параметру цикла добавляется значение шага.

5. Выполняется переход к пункту 2.

Оператор повтора for.

FOR- для TO - до DO- делать, выполнять

. Оператор повтора состоит из заголовка ( FORDO) и тела цикла.

Формат записи :

FOR <имя переменной>:=<выражение1> ТО <выражение 2> DO <тело цикла>

FOR <имя переменной>:=<выражение1> DOWNТО <выражение 2> DO <тело цикла>

выражение1- определяет начальное значение параметра цикла

выражение2- определяет конечное значение параметра цикла

Тело цикла - это последовательность действий, которая выполняется многократно.

  • Тело цикла может быть простым или составным оператором.

  • Оператор FOR обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны все значения параметра цикла от начального до конечного.

  • Значения управляющей переменной изменяется на +1(TO) или -1 (DOWNTO).

  • Переменная-счетчик должна быть порядкового типа (чаще- целая, реже- символьная CHAR или логическая BOOLEAN или др. кроме вещественного). Начальное и конечное значения переменной могут быть константами, переменными, выражениями и должны иметь тип, совместимый с типом параметра цикла.

  • В теле цикла запрещается явное изменение значения параметра цикла, после завершения оператора цикла значение параметра цикла становится неопределенным, если только выполнение оператора не было прервано оператором перехода.

Пример 1.Сравните программы:

PROGRAM PRIMER1;

VAR N:BYTE;

LABEL M,D;

BEGIN

N:=1;

D:IF N>10 THEN GOTO M

WRITELN(N, ‘ ‘,SQR(N));

N:=N+1;

GOTO D;

M:END;

PROGRAM PRIMER2;

VAR N:BYTE;

BEGIN

FOR N:=1 TO 10 DO WRITELN(N, ‘ ‘,SQR(N));

END;

Пример 2.Что будет выведено на экран?

For i:=10 to 14 do write(i:3);

Выведет на экран последовательность цифр в виде: 10 11 12 13 14

Пример 3.Что будет выведено на экран?

For i:=14downto 10 do write(i:3);

Выведет на экран последовательность цифр в виде: 14 13 12 11 10

Пример 4. Если переменная-счетчик имеет символьный тип Char, то оператор:

For сh:=’a’ to ‘e’do write(ch:2);

Выведет на экран последовательность букв в виде: a b c d e

Пример 5. Если переменная-счетчик имеет символьный тип Char, то оператор:

For сh:=’e’ downto ‘a’ do write(ch:2);

Выведет на экран последовательность букв в виде: e d c b a

Пример 6.

Обратите внимание- Цикл FOR удобно использовать для организации вывода данных программы. Вместе с оператором IF процедурой READLN он позволяет выполнить постраничный вывод. Например, при выполнении следующего цикла программа будет приостанавливать вывод после заполнения экрана столбцом цифр до нажатия клавиши <ENTER>

For i:=1 to150 do

Begin

Writeln(i);

If I mod 24=23 then readln;

End;

Замечание.

Для досрочного выхода из цикла можно использовать оператор GOTO или BREAK . Процедура CONTINUE позволяет прервать выполнение тела любого цикла и передает управление на его заголовок, заставляя цикл немедленно перейти к следующему выполнению (итерации)

Пример 7. Фрагмент программы с досрочным выходом из цикла:

f:=0;

For i:=1 to 45 do

Begin

f:=f+I;

If (f>100)or(i=39) then break;

End;

Пример 8. Дано натуральное n, действительное x. Вычислить

Разработаем алгоритм решения задачи:

1) ввести данные - количество слагаемых n и число x;

2) присвоить переменной, в которой будем хранить степени sin x, значение 1; S := 0;

3) присвоить параметру цикла значение 1;

4) если значение параметра цикла меньше n, перейти к следующему пункту, иначе к п. 9;

5) вычислить очередную степень sin x;

6) добавить вычисленное значение к сумме;

7) увеличить параметр цикла на 1;

8) перейти к п.4;

9) вывести на печать сумму S;

10) конец.

{Программа вычисления суммы степеней sin x}

Program Summa;

Var S, X, Pr : Real; N, I : Integer;

Begin

Write('Введите число слагаемых и x: '); ReadLn(N, X);

Pr := 1; {в этой переменной хранятся последовательные степени sin x}

S := 0;

For I := 1 To N Do

Begin

Pr := Pr * Sin(X); {Очередная степень Sin(x)}

S := S + Pr

End;

WriteLn('Сумма равна ', S : 7 : 4)

End.

Функция random (диапазон)- возвращает случайное число х (0<=x<диапазон). Тип аргумента и результата word. Если нам необходимы целые случайные числа из диапазона a<=x<b, нужно использовать выражение random(b-a)+a. Если параметр диапазона не указан, то random возвращает число х в диапазоне 0<=x<1, тип результата- real. Перед первым обращением к функции random нужно с помощью вызова процедуры randomize инициализировать программный генератор случайных чисел. В противном случае при каждом запуске программы датчик будет выдавать одни и те же числа.

Пример 9. Тест по таблице умножения

Uses crt;

Var s1,s2,otvet,k,prav:integer;

Begin

Randomize;

Clrscr;

For k:=1 to 5 do

begin

S1:=random(18)+2; s2:=random(18)+2;{чтобы не умножать на 0 и 1}

Write(‘сколько будет’,s1,’*’,s2,’?’);

Readln(otvet);

If otvet=s1*s2 then begin

Writeln(‘правильно!’);

prav:=prav+1;

End

Else write(‘неверно…’);

End;

Clrscr;{очистка экрана}

Writeln(‘Ваша оценка=> ’,prav);

Readln;

End.

Пример 10. Определение максимального, минимального, и среднего числа.

Var

A:real;

N: integer;

Sum,average:real;

Min,max:real;

I:integer;

Begin

Writeln(‘Введите кол-во чисел последовательности’);

readln(n);

Writeln(‘Вводите последовательность’);

Writeln(‘->’); readln(a);

Min:=a;

Max:=a;

Sum:=a;

{Введем остальные числа}

For a:=1 to n-1 do

begin

Write(‘->’); readln(a);

Sum:=sum+a;

If a<min then min:=a;

If a>max then max:=a;

End;

Average:=sum/n;

Writeln(‘количество чисел=’, n);

Writeln(‘среднее арифметическое=’average:7:3);

Writeln(‘минимальное число=’,min:7:3);

Writeln(‘максимальное число=’, max:7:3);

End.