Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB2bak.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
184 Кб
Скачать
☆

Оператор цикла For.

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

Синтаксис оператора For по возрастающим значениям параметра:

For I: =N1 to N2 do ST;

и по убывающим значениям параметра:

For I:=N1 downto N2 do ST;

где. 1) I- переменная (параметр) цикла; 2) N1 - начальное значение параметра цикла, a N2 - конечное; 3) ST - оператор (часто составной), составляющий тело цикла.

Замечания:

(1) Переменные I, N1, N2 должны быть одного и того же скалярного(простого) типа, но не типа Real, и значение N2 должно быть больше, чем значение N1 для оператора For по возрастающим значениям параметра (и наоборот, значение N1 должно быть больше, чем значение N2 для оператора For по убывающим значениям параметра). Переменная I принимает по­следовательные значения данного типа от N1 до N2. В частном случае, когда N1 и N2 -целые числа, а I - переменная типа Integer или Byte, то шаг всегда равен единице;

(2) Значение переменной цикла не рекомендуется изменять (т.е. присваивать новое значение) внутри тела цикла, это может привести к неправильному выполнению количества раз тела цикла;

(3) Следует обратить внимание на то, что перед первым выполнением тела цикла в операторе For вычисляются границы числа повторений тела цикла, поэтому если до этого они были неизвестны, то необходимо указать выражения для их вычисления (или указать значения, предварительно их вычислив).

Например, если

For I:=1 to 20 do A:= A+1;

то для I типа Integer, принимающего значения I = 1,2,3,...,20 (в случае, когда используется downto, то I принимает соответственно последовательные убывающие значения от N2 до N1 I = 20,19,18, … 2,1) будет выполняться оператор А:= А+1. Если же N1 и N2 символьного типа и имеют значения, например, 'А' и 'Z' соответст­венно, то переменная I принимает последовательные значения в порядке букв алфави­та ‘А’;’В’;’C’, ..;’Z’.

Параметр цикла часто еще называют счетчиком цикла.

Процедуры Break и Continue.

Изменения в выполнении циклов в операторах FOR, WHILE и REPEAT можно внести вызовом процедур:

BREAK - реализует немедленный выход из цикла; действие процедуры заключается в передаче управления оператору, стоящему сразу за концом циклического оператора;

CONTINUE – прерывает выполнение текущего оператора цикла и начинает снова выполнение цикла с самого начала.

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

Демонстрационные примеры

Пример 1. (Алгоритм суммирования или произведения членов ряда)

Вычислить сумму S=l + 1/2 + 1/3 + ...+ 1/50 (произведение ).

а) с использованием цикла While:

для суммы для произведения

PROGRAM Primer_1W; PROGRAM Proizv_1W;

var n: Integer; var n: Integer;

S: Real; S: Real;

BEGIN BEGIN

S := 0; n := 1; S := 1; n := 2;

While n<=50 do While n<=50 do

begin S := S+1.0/n; n := n+1 end; begin S := S*1.0/n; n := n+1 end;

WriteLn ('S=',S:8:2) WriteLn ('S=',S:8:5)

END. END.

б) с использованием цикла For.

для суммы для произведения

PROGRAM Primer_1F; PROGRAM Proizv_1F;

var I: Integer; var I: Integer;

S: Real; S: Real;

BEGIN BEGIN

S :=0; S := 1;

For I := 1 to 50 do S := S+1/i; For I := 2 to 50 do S := S*1/I;

WriteLn ('Сумма равна:',S:9) WriteLn ('Произведение равно :',S:9)

END. END.

в) с использованием цикла Repeat.

для суммы для произведения

PROGRAM Primer_1R; PROGRAM Proizv_1R;

var n: Integer; var n: Integer;

S: Real; S: Real;

BEGIN BEGIN

S := 0; n := 1; S := 1; n := 2;

Repeat Repeat

S := S+1.0/n; S := S*1.0/n;

n := n+1 n := n+1

until n>50; until n>50;

WriteLn ( ‘Результат: ',S) WriteLn ( ‘Результат: ',S)

END. END.

Пример 2.

Вычислить факториал числа N!=N·(N-1)·(N-2)…3·2·1.

Program Fakt;

var F,N,I:integer;

Begin

writeln;

write('Введите число N='); readln(N);

F:=1;

For I:=2 to N do F:=F*I;

writeln('Факториал‘, N:3,’ N!=', F)

End.

Пример 3.

Программа, моделирующая микрокалькулятор

PROGRAM Primer_2;

var

Operator: Char; { Символ арифметической операции }

n: Real;

Answer: Real; { Результат вычисления }

BEGIN

Answer := 0; { Вначале обнулим результат }

Operator := '+'; { Присвоить операцию ‘-‘,‘*‘ или ‘/‘ нельзя }

WriteLn ('Введите арифметическое выражение ‘);

WriteLn ('(каждый символ - с новой строки)...’);

Repeat

ReadLn (n);

Case Operator of

'+': Answer :=Answer + n;

'-': Answer :=Answer - n;

'*': Answer :=Answer * n;

'/': Answer :=Answer / n

end;

ReadLn (Operator)

until Operator = '=' ;

WriteLn (Answer:8:3)

END.

Пример 4.

Пусть А и В - положительные вещественные числа и А>В Найти такое натураль­ное m, что т В > А

PROGRAM Primer_3;

var А,В: Real;

m: Integer;

BEGIN

Write (' Введите числа А и В... '); Read (A); Write (' ');

ReadLn (В); m := 1;

While m*B<=A do m := m+1;

WriteLn ('Результат ', m:3, ' * ', В:3:2, ' >’, А:6:2)

END.

Пример 5.

Определение для используемого компилятора TURBO Pascal наименьшего поло­жительного числа Eps такого, что 1+Eps>1

PROGRAM Primer_4;

const

C1 = 1.0;

С2 = 2.0;

var

Eps, Eps1: Real;

BEGIN

Eps := C1; Eps1 := C2;

While Eps1>1.0 do

begin Eps := Eps/2; Eps1 := Eps+1 end;

Eps := Eps*2;

WriteLn (' Приближенное значение Eps равно: ‘, Eps)

END.

Пример 6. Разложение целого числа на простые множители

PROGRAM Primer_5;

var x,m: Integer;

BEGIN

Write ('Введите целое число '); ReadLn (x);

WriteLn ('Разложение числа х на простые множители');

m := 2;

While m<=x do

If (x MOD m)=0

then begin Write (' * ',m); x := x DIV m end

else m :=m+1

END.

Пример 7.

Программа, позволяющая угадать целое число из отрезка [0,99]

PROGRAM Prlmer_6;

var x,z : Integer;

ugadal: Boolean;

BEGIN

Randomize;

WriteLn ('Угадай число' ); WriteLn ('от 1 до 100');

z := Random (100); ugadal := FALSE;

While NOT ugadal do

begin Write (' число='); Read (x);

If x=z

then begin ugadal :=TRUE; WriteLn ('Правильно' ) end

else If x<z

then WriteLn (' Мало ... ')

else If x>z

then WriteLn ('Много.. ')

end

END.

Пример 8.

Вычисление целой части корня квадратного из положительного числа Идея алго­ритма заключается в том, что сумма К первых нечётных чисел равна А?, например, 1+3=22, 1+3+5=32 т д.

PROGRAM Primer_7;

var I, J: Integer;

x : Real; { Результат }

BEGIN

Write ('Введите положительное число из которого' );

Write (' хотите извлечь корень '); ReadLn (х);

I := -1; J := 0;

While j<=x do

begin I := I+2; J := J+I end;

Write (' Результат ',(I-1) DIV 2)

END.

Пример 9.

Найти все простые числа на заданном отрезке (использовать цикл с параметром)

PROGRAM Primer_8;

var M : Integer; { Нижняя граница отрезка }

N : Integer; { Верхняя граница отрезка }

i, j : Integer; { Параметры циклов }

kl : Integer;

BEGIN

Write ('Введите нижнюю границу отрезка '); ReadLn (M);

Write ('Введите верхнюю границу отрезка '); ReadLn (N);

WriteLn ('Все простые числа из отрезка [', M, ', ', N, ']');

For i := M to N do

Begin kl := 0;

For j :=2 to i-1 do If (i MOD j)=0 then kl:=kl+1;

If kl=0 then write(i, ' ');

end

END.

Пример 10.

Подсчитайте, сколько палиндромических чисел лежат в промежутке от 100 до 1000 (число М называется палиндромическим, если оно равно своему обращенному) Выведите их на экран дисплея.

PROGRAM Primer_9;

var d: Integer; { Результат работы программы }

x, y, z : Integer; { Параметры циклов }

n : Integer; { Палиндром }

m : Integer; { Вспомогательная переменная }

BEGIN

d:=0;

For х :=1 to 9 do

For у :=0 to 9 do

For z :=0 to 9 do

begin n := 100*x+10*y+z; m := 100*z+10*y+x;

If n=m

then begin d := d+1; Write (n, ', ' ) end

end;

WriteLn; WriteLn ('Результат: ', d)

END.

Контрольные вопросы

Перед выполнением заданий по программированию показать преподавателю умение отвечать на контрольные вопросы

1. Замените оператор «if C then A else B» равносиль­ным ему фрагментом программы, использовав, оператор «while».

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

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

3. Вычисление f=10! описать каждым из трех вариантов оператора цикла.

4. Определить значение переменной s после выполнения следующих операторов:

s:=0; i:=0;

while i<5 do i:=i+1; s:=s+1/i;

5. Определить значение переменной s после выполнения следующих операторов:

s:=0; i:=1;

while i>1 do begin s:=s+1/i; i:=i-1 end;

6. Определить значение переменной s после выполнения следующих операторов:

s:=0; i:=1;

repeat s:=s+l/i; i:=i-1 until i<=1;

7. Определить значение переменной s после выполнения следующих операторов:

s:=1; n:=1;

for i:=2 to n do s:==s+1/i

8. var k,i: integer; x,y:real;

Найти ошибки в следующем фрагменте программы:

у:=0; for х:=0.1 to 0.9 do y:=y+sin(x);

9. var k,i: integer; x,y:real;

Найти ошибки в следующем фрагменте программы:

k:=81; y:=l; for i:=l to sqrt(k) do y:=2*y;

10. var k,i: integer; x,y:real;

Найти ошибки в следующем фрагменте программы:

k:=0; for i:=l to 9 do k:=k+sqr(i); k:=k*i;

11. var k,i: integer; x,y:real;

Найти ошибки в следующем фрагменте программы:

k:=l; for i:=l to 64 do begin i:=2*i; k:=k+i end

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