Цикл
Цикл – команда исполнителю повторить многократно указанную последовательность команд алгоритмического языка или, другими словами, многократно повторяющаяся часть программы.
Существует три разновидности оператора цикла.
2. Оператор цикла с параметром.
Используется, когда известно, сколько раз выполняется циклическая часть программы.
for <параметр цикла>:=<начало> to/downto <конец> do <оператор>;
для до делать
параметр цикла - числовая переменная типа integer
начало, конец - арифметическое выражение
to - используется когда начало меньше конца
downto - используется когда начало больше конца
оператор - тело цикла, любой оператор, в том числе и составной
Принцип работы:
§ Параметру присваивается значение начало
§ Выполняется оператор - тело цикла.
§ Затем параметр сравнивается с концом.
§ Если параметр больше/меньше конца, то начинает работать следующий оператор за оператором цикла, в противном случае к параметру прибавляется/отнимается единица.
§ Снова выполняется оператор.
§ Так продолжается пока параметр не станет больше/меньше конца.
3. Цикл с предварительным условием
while <условие> do <оператор>;
пока делать
условие
- логическое выражение
оператор
- любой оператор, в том числе и составной.
Принцип работы:
§ Проверяется истинность условия
§ Если условие истинно выполняется оператор
§ Цикл работает, пока условие не станет ложным.
4. Цикл с последующим условием
repeat <операторы> until <условие>
повторять до тех пор пока
условие
- логическое выражение
операторы
- любое количество любых операторов, в том числе и составной.
Принцип работы:
§ Выполняются все операторы между repeat и until
§ Проверяется ложность условия
§ Цикл работает, пока условие не станет истинным.
5. Особенности и отличия операторов цикла
- Вход в цикл возможен только через его начало
- Переменные оператора должны быть определены до входа в цикл
- Необходимо предусмотреть выход из цикла, чтобы он не повторялся бесконечно.
- Оператор while repeat может ни разу не выполнится
- оператор repeat обязательно выполниться хотя бы раз
6. Примеры программ
Проверить, является ли целое число простым. |
Uses crt; Var n{введенное число},i:integer; Begin Readln(n); For i:=2 to n-1 do If n mod i =0 then begin writeln(n,’не простое’);readkey; halt;end; writeln (n, ‘простое’); readkey; end. |
Написать программу, которая выводит на экран табл. умножения, например на 7. |
Uses crt; Var m,n,p:integer; Begin For i:=1 to 10 do Writeln(7,’*’,I:2,’=’,7*I:2); Readkey; end. |
Написать программу, которая выводит табличные значения функции у=|x|+2. Диапазон изменения аргумента от – 4 до 4, приращение аргумента - 0.5 |
uses crt; var x,y:real; begin; clrscr; writeln('y':20,' : ','x':5); writeln(' --------------'); x:=-4; repeat y:=abs(x)+2; writeln(y:20:1,' : ',x:5:1); x:=x+0.5; until x>4; readkey; end. |
Написать программу, которая определяет максимальное число из введенной последовательности положительных чисел. Завершение ввода – 0. |
Uses crt; Var a{очередное число}, m{макс.число}:integer; Begin M:=0; Repeat Writeln(‘введи число’);Readln(a); If a>m then m:=a; Until a=0; Writeln(‘max=’,m); Readkey; end. |
Имеются или не имеются среди чисел cos(i3)sin(in), i=1,…,n, числа меньше 0,0001. Если имеются, то выводить «есть», если нет – «нет» |
uses crt; label 1; var i,n:integer; begin clrscr; writeln ('Введите n'); readln (n); for i:=1 to n do if cos(i*i*i)*sin(i*n)<0.0001 then begin writeln ('есть');goto 1; end; writeln ('нет'); 1:readkey;end. |
Написать программу, которая позволяет найти наибольший общий делитель двух целых чисел |
program nod; uses crt; var n1,n2,nod: integer; begin clrscr; writeln ('Введите два целых числа'); readln (n1,n2); while n1<>n2 do if n1>n2 then n1:=n1-n2 else n2:=n2-n1; nod:=n1; writeln 'Наибольший общий делитель -',nod); readkey;end. |
Написать программу, которая позволяет найти наименьшее общее кратное двух целых чисел |
program nok1; uses crt; var nok,n1,n2:byte;i:word; begin clrscr; writeln('введите два числа'); readln(n1,n2); nok:=1; for i:=n1*n2 downto 2 do if (n1 mod i=0) and (n2 mod i=0) then nok:=i; write('NOK -',nok); readkey;end. |
7. По тексту готовой программы составить условие задачи:
1) program pt1; uses crt; var a,i,j:integer; begin clrscr; randomize; for i:=1 to 15 do begin a:=trunc((random(7))*5)-10; write(a:4); end; readln; end. |
2) program pt1; uses crt; var a,i,j:integer; begin clrscr; randomize; for j:=1 to 10 do begin a:=trunc((random(9))*5)-20; write(a:4); end; readln; end. |
3) program pt1; uses crt; var a,i,j:integer; begin clrscr; randomize; for i:=1 to 15 do begin a:=trunc((random(11))*5)-20; write(a:4); end; readln; end._ |
4) program pt1; uses crt; var a,i,j:integer; begin clrscr; randomize; for i:=1 to 4 do begin for j:=1 to 5 do begin a:=trunc((random(7))*5)-10; write(a:4); end; writeln; end; readln; end._ |
5) program pt1; uses crt; var a,i,j:integer; begin clrscr; randomize; for i:=1 to 5 do begin for j:=1 to 5 do begin a:=trunc((random(9))*5)-20; write(a:4); end; writeln; end; readln; end. |
8. Ответить на вопросы
- Сколько раз будут выполнены инструкции между Begin и End?
For i:=j to j+1 do
Begin
…
end;
- Чему будет равен x после выполнения инструкций?
X:=0;
For i:= -5 to 0 do
N:=i*i;
X:=X+N;
- Что будет выведено на экран в результате выполнения инструкций?
N:=5;
X:=0;
For i:=1 to N do X:=i;
Writeln(X);
- Сколько звездочек будет выведено на экран в результате выполнения инструкций?
For i:=1 to 5 do
For j:=1 to 5 write (‘*’);