
Язык программирования Паскаль (версия PascalABC.NET)
Операторы цикла в языке Pascal

Операторы цикла Цикл с предусловием (с заданным условием продолжения работы, цикл «ПОКА»)
условие
нет
While do ;
да
тело цикла
Используется тогда, когда количество повторов заранее неизвестно . Выполнение оператора тела цикла повторяется, пока условие истинно . Если условие ложно , то управление передается следующему оператору. Если в теле цикла более одного оператора, то необходимо использовать составной оператор begin . . . end .

Трассировка программы с циклом «ПОКА»
Для данного алгоритма составьте таблицу значений переменных при указанных значениях x и y. Что появится на экране?
начало
Program cikl_while;
Var x, y, q, r: integer ;
Begin
write ( 'Введите x, y: ' );
readln (x, y);
r:=x;
q:= 0 ;
while r=y do
begin
r:=r-y;
q:=q+ 1
end ;
writeln ( 'q=' , q, ' r=' , r)
End .
ввод x,y
r := x
q := 0
нет
r ≥ y
да
r := r-y
q := q+1
вывод q,r
конец

Трассировка программы с циклом «ПОКА»
Для данного алгоритма составьте таблицу значений переменных при указанных значениях x и y. Что появится на экране?
При x=17, y=5
Переменные
x
y
r
Условие
q
-
-
r = y
Program cikl_while;
Var x, y, q, r: integer ;
Begin
write ( 'Введите x, y: ' );
readln (x, y);
r:=x;
q:= 0 ;
while r=y do
begin
r:=r-y;
q:=q+ 1
end ;
writeln ( 'q=' , q, ' r=' , r)
End .
17
5
-
-
17
0
17 ≥5 (да)
12
1
Щелчок – шаг программы

Трассировка программы с циклом «ПОКА»
Для данного алгоритма составьте таблицу значений переменных при указанных значениях x и y. Что появится на экране?
При x=17, y=5
Переменные
x
y
r
Условие
q
-
-
r = y
Program cikl_while;
Var x, y, q, r: integer ;
Begin
write ( 'Введите x, y: ' );
readln (x, y);
r:=x;
q:= 0 ;
while r=y do
begin
r:=r-y;
q:=q+ 1
end ;
writeln ( 'q=' , q, ' r=' , r)
End .
17
5
17
0
17 ≥5 (да)
12
1
12 ≥5 (да)
7
2
Щелчок – шаг программы

Трассировка программы с циклом «ПОКА»
Для данного алгоритма составьте таблицу значений переменных при указанных значениях x и y. Что появится на экране?
При x=17, y=5
Переменные
x
y
r
Условие
-
q
-
r = y
Program cikl_while;
Var x, y, q, r: integer ;
Begin
write ( 'Введите x, y: ' );
readln (x, y);
r:=x;
q:= 0 ;
while r=y do
begin
r:=r-y;
q:=q+ 1
end ;
writeln ( 'q=' , q, ' r=' , r)
End .
17
5
17
0
17 ≥5 (да)
12
1
12 ≥5 (да)
7
2
7≥5 (да)
2
3
Щелчок – шаг программы

Трассировка программы с циклом «ПОКА»
Для данного алгоритма составьте таблицу значений переменных при указанных значениях x и y. Что появится на экране?
При x=17, y=5
Переменные
x
y
r
Условие
-
q
-
r = y
Program cikl_while;
Var x, y, q, r: integer ;
Begin
write ( 'Введите x, y: ' );
readln (x, y);
r:=x;
q:= 0 ;
while r=y do
begin
r:=r-y;
q:=q+ 1
end ;
writeln ( 'q=' , q, ' r=' , r)
End .
17
5
17
0
17 ≥5 (да)
12
1
12 ≥5 (да)
7
2
7≥5 (да)
2
3
2≥5 (нет)
Щелчок – шаг программы

Задача 1
Лыжник в первый день тренировок пробежал 10 км. Каждый следующий день он увеличивал пройденное расстояние на 10% от пройденного в предыдущий день. В какой день он пробежит больше 20 км?
начало
Program Trenirovka;
Var n: integer ; x: real ;
Begin
n:= 1 ; //день номер 1
x:= 10 ; //расстояние в 1 день
while xdo //пока x
begin
n:=n+ 1 ; //номер следующего дня
x:=x+ 0.1 *x; //расст. в след. день
writeln (n: 3 , x: 6 : 1 ); //вывод на экран
end ;
End .
n := 1
x := 10
нет
x ≤ 20
да
n := n+1
x := x+0,1 ∙x
вывод n,x
конец

Задача 2
Получить таблицу значений функции y=x 2 для x=1; 2; 3; …; 10 .
начало
Program Kvadraty;
Var x, y: integer ;
Begin
writeln ( 'Квадраты чисел:' );
x := 1 ; //начальное значение x
while x do //пока x
begin //нц
y := x*x; //вычисление функции
writeln (x: 5 , y: 5 ); //вывод на экран
x := x+ 1 //следующее значение x
end ; //кц
End .
x := 1
нет
x ≤ 10
да
y := x 2
вывод x,y
x := x+1
конец

Задача 3а
Вычислить значение суммы s = 1+2+3+…+n для заданного n .
Program Summa_natur;
Var x, n, s: integer ;
Begin
writeln ( 's=1+2+3+...+n' );
write ( 'Введите n: ' ); readln (n);
s:= 0 ; //начальное знач. суммы
x:= 1 ; //нач. знач. слагаемого
while xdo //пока x
begin
s:=s+x; //добавить к сумме слаг.
x:=x+ 1 ; //следующ. знач. слаг.
end ;
writeln ( 's=' , s);
End .
начало
ввод n
s := 0
x := 1
нет
x ≤ n
да
s := s+x
x := x+1
вывод s
конец

Задача 3б
Вычислить значение суммы s = 1+3+5+7+…+n для заданного нечётного n .
Program Summa_nechet;
Var x, n, s: integer ;
Begin
writeln ( 's=1+3+5+7+...+n' );
write ( 'Введите n: ' ); readln (n);
s:= 0 ; //начальное знач. суммы
x:= 1 ; //нач. знач. слагаемого
while xdo //пока x
begin
s:=s+x; //добавить к сумме слаг.
x:=x+ 2 ; //следующ. знач. слаг.
end ;
writeln ( 's=' , s);
End .
начало
ввод n
s := 0
x := 1
нет
x ≤ n
да
s := s+x
x := x+2
вывод s
конец

Задача 4
Вычислить факториал числа k ( k не более 12 ).
k! = 1∙2∙3∙ … ∙k
начало
Program Faktorial;
Var k, i, p: integer ;
Begin
write( 'Введите k (
p:= 1 ; //начальное знач. произведения
i:= 1 ; //начальное знач. числа
while ido //пока i
begin
p:=p*i; //добавить число к произвед.
i:=i+ 1 //следующее число
end ; //конец цикла
writeln(k, '!=' , p); //факториал числа
End .
ввод k
p := 1
i := 1
нет
i ≤ k
да
p := p*i
i := i+1
вывод p
конец

Задача 5
Вычислить сумму ряда ( n слагаемых).
a 1 = 1/2; a 2 = 1/4 = a 1 /2; a 3 = 1/8 = a 2 /2; …; a i = a i-1 /2
начало
Program Summa_rjada;
Var s, a: real ; i, n: integer ;
Begin
writeln ( 'S = 1/2+1/4+1/8+1/16+ ... ' );
write ( 'Введите N: ' ); readln (n);
s:= 0 ; //начальное значение суммы
i:= 1 ; //номер первого слагаемого
a:= 1 / 2 ; //первое слагаемое
while ido //цикл пока i
begin
s:=s+a; //добавление к сумме
i:=i+ 1 ; //следующий номер слагаемого
a:=a/ 2 //следующее слагаемое
end ;
writeln ( 'S = ' , s)
End .
ввод n
s := 0
i := 1
a := 1/2
нет
i ≤ n
да
s := s+a
i := i+1
a := a/2
вывод s
конец

Задача 6
Подсчитать количество введённых положительных и отрицательных целых чисел, при вводе 0 программа завершает работу.
Program pol_otr;
Var n, k1, k2: integer ;
Begin
k1:= 0 ; //кол-во положительных
k2:= 0 ; //кол-во отрицательных
n:= 1 ; //любое ненулевое число
writeln ( 'Введите любые целые числа (0 - завершить)' );
while n 0 do //пока число не 0, повторять:
begin
write ( 'Введите число: ' );
readln (n); //ввод n
//если положительное, увеличить k1 на 1
if n 0 then k1:=k1+ 1 ;
//если отрицательное, увеличить k2 на 1
if nthen k2:=k2+ 1 ;
end ; //конец цикла
writeln ( 'Введено:' );
writeln ( 'положительных: ' , k1);
writeln ( 'отрицательных: ' , k2)
End .
начало
k1:=0; k2:=0
n:=1
нет
n ≠ 0
да
ввод n
нет
да
n 0
k1:=k1+1
нет
да
n
k2:=k2+1
вывод k1, k2
конец

Операторы цикла Цикл с постусловием (с заданным условием окончания работы, цикл «ДО»)
Repeat
;
;
. . .
Until ;
тело цикла
нет
условие
да
Используется тогда, когда количество повторов заранее неизвестно . Тело цикла выполняется хотя бы один раз . При ложном условии снова повторяется тело цикла до того момента, когда условие станет истинным . При этом цикл заканчивается, управление передается следующему оператору. В теле цикла не требуется использование составного оператора .

Трассировка программы с циклом «ДО»
Для данного алгоритма составьте таблицу значений переменных при указанных значениях x и y. Что появится на экране?
начало
Program cikl_repeat;
Var x, y, q, r: integer ;
Begin
write ( 'Введите x, y: ' );
readln (x, y);
r:=x;
q:= 0 ;
repeat
r:=r-y;
q:=q+ 1 ;
until r
writeln ( 'q=' , q, ' r=' , r)
End .
ввод x,y
r := x
q := 0
r := r-y
q := q+1
да
r
нет
вывод q,r
конец

Трассировка программы с циклом «ДО»
Для данного алгоритма составьте таблицу значений переменных при указанных значениях x и y. Что появится на экране?
При x=17, y=5
Переменные
x
y
r
Условие
q
-
-
r = y
Program cikl_repeat;
Var x, y, q, r: integer ;
Begin
write ( 'Введите x, y: ' );
readln (x, y);
r:=x;
q:= 0 ;
repeat
r:=r-y;
q:=q+ 1 ;
until r
writeln ( 'q=' , q, ' r=' , r)
End .
17
5
-
-
17
0
12
1
12
Щелчок – шаг программы

Трассировка программы с циклом «ДО»
Для данного алгоритма составьте таблицу значений переменных при указанных значениях x и y. Что появится на экране?
При x=17, y=5
Переменные
x
y
r
Условие
q
-
-
r = y
Program cikl_repeat;
Var x, y, q, r: integer ;
Begin
write ( 'Введите x, y: ' );
readln (x, y);
r:=x;
q:= 0 ;
repeat
r:=r-y;
q:=q+ 1 ;
until r
writeln ( 'q=' , q, ' r=' , r)
End .
5
17
17
0
12
1
12
7
2
7
Щелчок – шаг программы

Трассировка программы с циклом «ДО»
Для данного алгоритма составьте таблицу значений переменных при указанных значениях x и y. Что появится на экране?
При x=17, y=5
Переменные
x
y
r
Условие
q
-
-
r = y
Program cikl_repeat;
Var x, y, q, r: integer ;
Begin
write ( 'Введите x, y: ' );
readln (x, y);
r:=x;
q:= 0 ;
repeat
r:=r-y;
q:=q+ 1 ;
until r
writeln ( 'q=' , q, ' r=' , r)
End .
17
5
17
0
12
1
12
7
2
7
2
3
2
Щелчок – шаг программы

Задача 1
Вычислить значение суммы s = 1+3+5+7+…+n для заданного нечётного n .
начало
Program Summa_nechet_2;
Var x, n, s: integer ;
Begin
writeln ( 's=1+3+5+7+...+n' );
write ( 'Введите n: ' ); readln (n);
s:= 0 ; //начальное знач. суммы
x:= 1 ; //нач. знач. слагаемого
repeat //повторять:
s:=s+x; //добавить к сумме слаг.
x:=x+ 2 ; //следующ. знач. слаг.
until xn; //до xn
writeln ( 's=' , s);
End .
ввод n
s := 0
x := 1
s := s+x
x := x+2
да
x n
нет
вывод s
конец

Задача 2
Вычислить факториал числа k ( k не более 12 ).
k! = 1∙2∙3∙ … ∙k
Проверка корректности данных
начало
Program Faktorial_2;
Var k, i, p: integer ;
Begin
//проверка корректности данных
repeat //повторять:
write( 'Введите k (
readln(k); //ввод k
until k
//вычисление факториала
p:= 1 ; //начальное знач. произведения
i:= 1 ; //начальное знач. числа
repeat //повторять:
p:=p*i; //добавить число к произвед.
i:=i+ 1 //следующее число
until ik; //до ik
writeln(k, '!=' , p); //факториал числа
End .
ввод k
нет
k
да
p := 1
i := 1
p := p*i
i := i+1
да
i k
нет
вывод p
конец

Операторы цикла Цикл с параметром (с заданным числом повторений, цикл «ДЛЯ»)
i := n
i := n, k
нет
i ≤ k
тело цикла
да
тело цикла
For i := n to k do оператор ;
i := i+1
i – параметр цикла (переменная-счётчик);
n – начальное значение счётчика;
k – конечное значение счётчика.
Тело цикла повторяется фиксированное число раз для переменной i .
Переменная i изменяется от n до k , увеличиваясь после каждого выполнения тела цикла на 1 . Цикл завершает работу, когда значение i станет больше k .
Если в теле цикла более одного оператора , то необходимо использовать составной оператор begin . . . end .

Трассировка программы с циклом «ДЛЯ»
Для данного алгоритма составьте таблицу значений переменных при указанных значениях a и n . Что появится на экране?
начало
Program cikl_for;
Var i, n: integer ; a, y: real ;
Begin
write ( 'Введите a, n: ' );
readln (a, n);
y:= 1 ;
for i:= 1 to n do
y:=y*a;
writeln ( 'y=' , y);
End .
ввод a , n
y := 1
i := 1, n
+1
+1
y := y * a
вывод y
конец

Трассировка программы с циклом «ДЛЯ»
Для данного алгоритма составьте таблицу значений переменных при указанных значениях a и n . Что появится на экране?
При a=4, n=3
Переменные
a
n
y
Условие
i
-
-
i
Program cikl_for;
Var i, n: integer ; a, y: real ;
Begin
write ( 'Введите a, n: ' );
readln (a, n);
y:= 1 ;
for i:= 1 to n do
y:=y*a;
writeln ( 'y=' , y);
End .
4
3
-
-
1
1
1 ≤3 (да)
4
Щелчок – шаг программы

Трассировка программы с циклом «ДЛЯ»
Для данного алгоритма составьте таблицу значений переменных при указанных значениях a и n . Что появится на экране?
При a=4, n=3
Переменные
a
n
y
-
i
Условие
-
i
Program cikl_for;
Var i, n: integer ; a, y: real ;
Begin
write ( 'Введите a, n: ' );
readln (a, n);
y:= 1 ;
for i:= 1 to n do
y:=y*a;
writeln ( 'y=' , y);
End .
3
4
1
1
1 ≤3 (да)
4
2
2≤3 (да)
16
Щелчок – шаг программы

Трассировка программы с циклом «ДЛЯ»
Для данного алгоритма составьте таблицу значений переменных при указанных значениях a и n . Что появится на экране?
При a=4, n=3
Переменные
a
n
y
Условие
i
-
-
i
Program cikl_for;
Var i, n: integer ; a, y: real ;
Begin
write ( 'Введите a, n: ' );
readln (a, n);
y:= 1 ;
for i:= 1 to n do
y:=y*a;
writeln ( 'y=' , y);
End .
3
4
1
1
1 ≤3 (да)
4
2
2≤3 (да)
16
3
3≤3 (да)
64
Щелчок – шаг программы

Трассировка программы с циклом «ДЛЯ»
Для данного алгоритма составьте таблицу значений переменных при указанных значениях a и n . Что появится на экране?
При a=4, n=3
Переменные
a
n
y
Условие
i
-
-
i
Program cikl_for;
Var i, n: integer ; a, y: real ;
Begin
write ( 'Введите a, n: ' );
readln (a, n);
y:= 1 ;
for i:= 1 to n do
y:=y*a;
writeln ( 'y=' , y);
End .
4
3
1
1
1 ≤3 (да)
4
2
2≤3 (да)
16
3
3≤3 (да)
64
4
4≤3 (нет)
Щелчок – шаг программы

Задача 1а
Вывести на экран последовательность натуральных чисел до N включительно.
начало
Program Cikl_for_1;
Var i, n: integer ;
Begin
write ( 'Введите n: ' ); readln (n);
//для i от 1 до n повторять:
for i:= 1 to n do
write (i: 3 );
writeln ( ' Всё!' );
End .
ввод n
i := 1, n
вывод i
+1
"Всё!"
конец

Задача 1б
Вывести на экран последовательность чётных натуральных чисел до N включительно.
k
i
1
2
2
4
3
6
4
8
5
10
i=2k
начало
Program Cikl_for_2;
Var i, k, n: integer ;
Begin
write ( 'Введите n: ' ); readln (n);
for k:= 1 to (n div 2 ) do
begin
i:= 2 *k;
write (i: 3 )
end ;
writeln ( ' Всё!' );
End .
ввод n
k := 1, n/2
i:=2k
вывод i
"Всё!"
конец

Задача 1в
Вывести на экран последовательность нечётных натуральных чисел до N включительно.
k
i
1
1
2
3
3
5
4
7
5
9
i=2k-1
начало
Program Cikl_for_3;
Var i, k, n: integer ;
Begin
write ( 'Введите n: ' ); readln (n);
for k:= 1 to (n div 2 ) do
begin
i:= 2 *k- 1 ;
write (i: 3 )
end ;
writeln ( ' Всё!' );
End .
ввод n
k := 1, n/2
i:=2k-1
вывод i
"Всё!"
конец

Задача 2
Получить таблицу значений функции y=x 2 для x=1; 2; 3; …; 10 .
Program Kvadraty;
Var x, y: integer ;
Begin
writeln ( 'Квадраты чисел:' );
//для x от 1 до 10 повторять:
for x:= 1 to 10 do
begin
y:=x*x; //вычисление функции
writeln (x: 5 , y: 5 ); //вывод на экран
end ;
End .
начало
x := 1, 10
y := x 2
вывод x,y
конец

Задача 3
Вычислить значение суммы s = 1+2+3+…+n для заданного n .
Program Summa_natur;
Var n, x, s: integer ;
Begin
writeln ( 's=1+2+3+ ... +n' );
write ( 'Введите n : ' ); readln (n);
s:= 0 ; //начальное значение суммы
for x:= 1 to n do //для x от 1 до n повторять
s:=s+x; //добавл. число к сумме
writeln ( 's=' , s); //сумма чисел
End .
начало
ввод n
s := 0
x := 1, n
s := s+x
вывод s
конец

Задача 4
Вычислить факториал числа k ( k не более 12 ).
k! = 1∙2∙3∙ … ∙k
Program Faktorial;
Var k, i, p: integer ;
Begin
write ( 'Введите k (
p:= 1 ; //нач. знач. произведения
for i:= 1 to k do //для i от 1 до k повторять
p:=p*i; //добавл. число к произвед.
writeln (k, '!=' , p); //факториал числа
End .
начало
ввод k
p := 1
i := 1, k
p := p ∙ i
вывод p
конец

Задача 5
Банк принимает вклады под 10% годовых. На счет положена сумма 10000 рублей. Какая сумма будет на счету через 5 лет?
Program Vklad;
Var g: integer ; s: real ;
Begin
s:= 10000 ; //начальный вклад
writeln ( 'Начальная сумма ' , s);
//цикл для g от 1 до 5
for g:= 1 to 5 do
begin
s:=s+ 0.1 *s; //добавление 10%
writeln (g, ' год сумма ' , s);
end ;
End .
начало
s := 10000
g := 1, 5
s := s+0,1*s
вывод g, s
конец

Задача 6
Вывести на экран квадраты и кубы целых чисел от 1 до 9, используя различные типы циклов.
начало
начало
начало
i := 1
i := 1
i := 1, 9
конец
i ≤ 9
i2 := i*i
нет
i3 := i2*i
i2 := i*i
i3 := i2*i
да
конец
i2 := i*i
i3 := i2*i
вывод i, i2, i3
вывод i, i2, i3
i := i+1
вывод i, i2, i3
i 9
да
i := i+1
нет
конец

Задача 6
Вывести на экран квадраты и кубы целых чисел от 1 до 9, используя различные типы циклов.
Program Cikl_Repeat;
Program Cikl_While;
Var i, i2, i3: integer ;
Var i, i2, i3: integer ;
Begin
Begin
i:= 1 ;
i:= 1 ;
Repeat
While ido
i2:=i*i;
begin
i2:=i*i;
i3:=i2*i;
i3:=i2*i;
writeln (i: 5 , i2: 5 , i3: 5 );
writeln (i: 5 , i2: 5 , i3: 5 );
i:=i+ 1
i:=i+ 1
Until i 9 ;
end ;
End .
End .
Program Cikl_For;
Var i, i2, i3: integer ;
Begin
For i:= 1 to 9 do
begin
i2:=i*i;
i3:=i2*i;
writeln (i: 5 , i2: 5 , i3: 5 );
end ;
End .
