Циклы в Pascal

Download Report

Transcript Циклы в Pascal

Циклы на языке Pascal
повторение
Циклы позволяют многократно выполнять одну
или группу команд, причем в тексте программы
нет необходимости записывать эти команды
несколько раз.
В языке программирования PASCAL существует три
вида циклов:
1. Арифметический (перечисляемый) цикл FOR
2. Логический цикл с предусловием WHILE
3. Логический цикл с послеусловием REPEAT
Арифметический цикл FOR
Особенностью арифметического цикла является
то, что число повторений операторов цикла
должно быть известно заранее. Решение о
выполнении или невыполнении в очередной раз
тела цикла принимается до начала его
прохождения, поэтому может случиться так, что
тело цикла не будет выполнено ни разу.
Порядок выполнения цикла FOR
Количество выполнений тела цикла определяется до
первого выполнения тела цикла, поэтому, если в
выражении n2 используются переменные,
которые изменяются в теле цикла, это никак не
повлияет на количество выполнений тела цикла.
Например, в следующей последовательности
операторов:
n := 10;
For i := 1 to n do
Begin
Write (i);
n := 100;
End;
тело цикла будет выполняться 10 раз, хотя уже после
первого выполнения тела цикла конечное
значение параметра цикла станет равным 100.
Цикл под номером 1 будет выполняться для счетчика,
последовательно принимающего значения –10, –9, –8,
–7, –6, –5, –4,то есть 7 раз.
Цикл под номером 2 не будет выполняться ни разу, так
как начальное значение счетчика больше конечного.
Цикл под номером 3 будет выполняться 1 раз для
счетчика, равного 3.
Значение счетчика цикла может использоваться в
выражениях, входящих в операторы тела цикла, но
изменение значения счетчика цикла этими
операторами недопустимо.
Правильно записаны фрагменты под номерами 1 и 4.
Во фрагментах 2 и 3 в операторах тела цикла
производится изменение значение счетчика цикла.
В Турбо-Паскале имеются два способа для организации
регулярного цикла: прямой и обратный.
Прямой пересчет идет от известного меньшего числа до
известного большего, на каждом шаге прибавляется единица
(например, от 20 до 25: 20, 21, 22, 23, 24, 25).
Обратный пересчет – от большего к меньшему. И на каждом
шаге вычитается единица.
Использование оператора цикла for.
начало
y:=1, 10
Kw:=sqr(y)
Y,kw
y:=10, 1
Kw:=sqr(y)
Y,kw
конец
Вывести на экран значение y2 (y=1,2,…,10)
в возрастающем и убывающем порядке
Var kw, y: integer;
Begin
For y:=1 to 10 do
Begin
kw:= sqr(y);
Writeln (y,’ -‘,kw);
End;
Writeln;
For y:=10 downto 1 do
Begin
kw:=sqr(y);
Writeln (y,’ -‘,kw);
End;
End.
начало
Выбрать наименьшие значение из 20 чисел,
вводимых с клавиатуры:
Ввести первое число Х
i:=2, 20
Ввести второе число Y
+
Y<X
X:=Y
Вывести X
конец
-
var i:integer;
x,y : real;
begin
writeln (‘Введи первое');
readln (x);
for i:=2 to 20 do
begin
write (‘Введи следующее');
readln (y);
if y<x then x:= y
end;
writeln ('min=',x:6:2);
end.
Вычислить
сумму
n чисел,
вводимых
с клавиатуры.
var I, n :integer;
x, sum : real;
begin
writeln (‘Enter n’);
readln (n);
sum:=0;
for i:=1 to n do
begin
write (‘Enter x’);
readln (x);
sum:=sum+ x;
end;
writeln (‘sum=’, sum:6:2);
end.
Среди всех двузначных
чисел найти те, сумма
цифр которых равна n var n, i, k, p1, p2:integer;
(0<n≤18) и количество begin
k:=0;
этих чисел.
writeln (‘Vvesti n’);
readln (n);
for i:=10 to 99 do
begin
p1:=i div 10;
p2:= i mod 10;
if (p1+ p2) =n then
begin
writeln (i);
k:=k+1;
end;
end;
writeln (‘Количество чисел ’, k);
end.
Задания для самостоятельного
выполнения
1.
2.
Написать программу, которая находит сумму целых
положительных чисел, которые больше 20, меньше 100,
кратны 3 и заканчиваются на 2, 4 или 8.
Написать программу, которая выводит на экран таблицу
стоимости порций мороженного.
Количество
1
2
...
10
Пломбир
0.80
1.60
Каштан
1.60
3.20
Крем-брюле
1.00
2.00
8.00
16.00
10.00
При составлении программ часто
возникают ситуации, когда
1. Заранее не известно количество
повторений цикла;
2. Переменная – счетчик цикла должна
изменяться с шагом ≠ 1.
В таких случаях используют
- Это циклическое повторение блока
команд, пока выполняется (или не
выполняется) некоторое условие
1. В цикле While проверка условия
выполнения цикла находится в начале
цикла, а в Repeat – в конце.
Цикл Repeat всегда выполняется хотя
бы один раз, а цикл While может не
выполнятся ни разу.
2. В цикле While выход из цикла
осуществляется, если условие ложно,
а в Repeat – если условие истинно.
3. Между словами Repeat и Until
можно размещать несколько
операторов без Begin и End, а цикл
While…do может содержать только
один оператор тела цикла; поэтому
нужно использовать Begin и End.
Найти все двузначные
числа, кратные 7.
При использовании
Начало
логических циклов
необходимо
всегда
k:=14
заботиться о том, чтобы
переменная,
K<=99
использующаяся в
+
условии завершения
цикла, каким-то
Вывести kобразом
обязательно изменялась в
теле цикла. Это может
k:=k+7
быть команда
присваивания ( как в
данной программе) или
команда ввода.
Конец
Var k: integer;
Begin
k:=14;
While k<=99 do
Begin
Writeln(k);
k:=k+7;
end;
end.
При каком количестве слагаемых последовательности их
сумма превысит 10?
1 1
1
1    ... 
2 3
k
Начало
sum:=0 k:=1
sum<=10
-
+
Sum:=sum+1/k
k:=k+1
Kolichestvo elementov
=k
Конец
Var sum, x: real;
K: integer;
Begin
sum:=0;
k:=1;
While sum<=10 do
Begin
Sum:=sum+1/k;
k:=k+1;
end;
Writeln('Kolichestvo elementov=',k);
end.
Даны числа a, b (a > 1).
Получить все члены
бесконечной
последовательности
a, a2, a3, … an
пока an <b
При выполнении этой
программы переменная с
последовательно принимает
значение a, a2, a3 … .
Изменение с происходит до
тех пор, пока оно не станет
больше b.
Если а>b, то не будет
выводить ни одного
значения.
var a,b,c : real;
begin
writeln ( ‘ Введите числа a и b ’ );
readln ( a, b );
c := a;
while c < b do
begin
writeln (c:8:2) ;
c := c*a;
end;
end.
- Это алгоритм вычисления наибольшего общего делителя
(НОД) двух целых положительных чисел.
Он основан на следующих свойствах величин: пусть a и bодновременно ≠ 0, и пусть a b.
Если b=0, то НОД(a,b) = a,
Если b ≠ 0, то для чисел a,b,c, где c- остаток от деления a на b
(c=a mod b) выполнено равенство: НОД(a,b)=НОД(b,c),
Например:
НОД(15,6)=НОД(6,3)=НОД(3,0)=3.
Начало
Задать a, b
B>0
C:= a MOD b
A:= b B:= c
‘НОД =‘ a
Конец
Var a,b,c: integer;
begin
Writeln (‘Enter a, b. (a>b)’);
readln( a, b);
While b>0 do
begin
c:= a MOD b;
a:= b;
b:= c;
end;
Writeln (‘NOD(a,b)= ‘,a);
end.
Задания для самостоятельного
выполнения
С клавиатуры вводится произвольная
последовательность положительных чисел, за
которой следует 0. Определить:
1. Максимальное число в этой последовательности.
2. Количество четных чисел.