Программирование на языке Паскаль
Программирование на языке Паскаль
Программирование на языке Паскаль
Программирование на языке Паскаль
Программирование на языке Паскаль
Программирование на языке Паскаль
1.92M
Category: programmingprogramming

Программирование на языке Паскаль. Введение

1. Программирование на языке Паскаль

1
Программирование
на языке Паскаль
1.
2.
3.
4.
5.
Введение
Ветвления
Сложные условия
Циклы
Циклы с условием
© К.Ю. Поляков, 2006-2009

2. Программирование на языке Паскаль

2
Программирование
на языке Паскаль
Тема 1. Введение
© К.Ю. Поляков, 2006-2009

3.

Алгоритм
Алгоритм – это четко определенный план
действий для исполнителя.
Свойства алгоритма
• дискретность: состоит из отдельных шагов (команд)
• понятность: должен включать только команды,
известные исполнителю (входящие в СКИ)
• определенность: при одинаковых исходных данных
всегда выдает один и тот же результат
• конечность: заканчивается за конечное число шагов
• массовость: может применяться многократно при
различных исходных данных
• корректность: дает верное решение при любых
допустимых исходных данных
3

4.

Программа
Программа – это
• алгоритм, записанный на каком-либо языке
программирования
• набор команд для компьютера
Команда – это описание действий, которые
должен выполнить компьютер.
• откуда взять исходные данные?
• что нужно с ними сделать?
Оператор – это команда языка
программирования высокого уровня.
1970 – язык Паскаль (Н. Вирт)
4

5.

Простейшая программа
название программы
program qq;
begin { начало программы }
end. { конец программы }
комментарии в фигурных скобках
не обрабатываются
?
Что делает эта программа?
5

6.

Вывод текста на экран
program qq;
begin
write('2+');
{ без перехода }
writeln('2=?'); { на новую строку}
writeln('Ответ: 4');
end.
Протокол:
2+2=?
Ответ: 4
6

7.

Задания
«4»: Вывести на экран текст "лесенкой"
Вася
пошел
гулять
«5»: Вывести на экран рисунок из букв
Ж
ЖЖЖ
ЖЖЖЖЖ
ЖЖЖЖЖЖЖ
HH HH
ZZZZZ
7

8.

8
Переменные
Задача. Ввести с клавиатуры два числа и найти их сумму.
Протокол:
Введите два целых числа
25 30
пользователь
25+30=55
компьютер
компьютер считает сам!
?
1.
2.
3.
4.
Как ввести числа в память?
Где хранить введенные числа?
Как вычислить?
Как вывести результат?

9.

Программа
program qq;
begin
{ ввести два числа }
{ вычислить их сумму }
{ вывести сумму на экран }
end.
Псевдокод: алгоритм на
русском языке с элементами
Паскаля.
!
Компьютер не может исполнить псевдокод!
9

10.

10
Переменные
Переменная – это величина, имеющая имя, тип
и значение. Значение переменной можно
изменять во время работы программы.
Значение
Другой тип
данных
Имя
!
?
Поместится?
В переменной хранятся данные
определенного типа!

11.

Имена переменных
В именах МОЖНО использовать
• латинские буквы (A-Z)
заглавные и строчные буквы не различаются
• цифры
имя не может начинаться с цифры
• знак подчеркивания _
В именах НЕЛЬЗЯ использовать
• русские буквы
• пробелы
• скобки, знаки +, =, !, ? и др.
Какие имена правильные??
AXby R&B 4Wheel Вася “PesBarbos”
TU154 [QuQu] _ABBA A+B
11

12.

12
Переменные
Типы переменных:
• integer
{ целая }
• real
{ вещественная }
• и другие…
Выделение
Объявление переменных:
variable – переменная
места в памяти
тип – целые
var a, b, c: integer;
список имен
переменных

13.

Как записать значение в переменную?
Оператор
присваивания
a := 5;
5
!
При записи нового
значения старое
стирается!
Оператор – это команда языка программирования (инструкция).
Оператор присваивания – это команда для
записи нового значения в переменную.
13

14.

Блок-схема линейного алгоритма
начало
блок «начало»
ввод a, b
блок «ввод»
c := a + b;
блок «процесс»
вывод c
блок «вывод»
конец
блок «конец»
14

15.

Как ввести значение с клавиатуры
Оператор
ввода
5
read ( a );
!
1. Программа ждет, пока пользователь
введет значение и нажмет Enter.
2. Введенное значение записывается в
переменную a.
15

16.

Ввод значений двух переменных
read ( a, b );
Ввод значений двух
переменных (через
пробел или Enter).
через пробел:
25 a
30 b
25 30
через Enter:
25
30
25 a
30 b
16

17.

Оператор вывода
write( a );
{ вывод значения
переменной a}
writeln( a ); { вывод значения
переменной a и переход
на новую строчку}
writeln( 'Привет!' ); { вывод текста }
writeln( 'Ответ: ', c );
{вывод текста и значения переменной c}
writeln ( a, '+', b, '=', c );
17

18.

Сложение двух чисел
Задача. Ввести два целых числа и вывести на
экран их сумму.
Простейшее решение:
program qq;
var a, b, c: integer;
begin
read ( a, b );
c := a + b;
Что плохо?
?
writeln ( c );
end.
18

19.

19
Полное решение
program qq;
var a, b, c: integer;
begin
writeln('Введите два целых числа');
read ( a, b );
c := a + b;
writeln ( a, '+', b, '=', c );
end.
Протокол:
компьютер
Введите два целых числа
25 30
пользователь
25+30=55

20.

Как изменить значение переменной?
Пример:
program qq;
a
5
?
5
var a, b: integer;
begin
b
a := 5;
5+2
?
7
b := a + 2;
a
a := (a + 2)*(b – 3);
7*4
28
5
b := b + 1;
end.
b
7
8
7+1
20

21.

Арифметические операции
+ сложение
– вычитание
* умножение
/ деление
div деление нацело (остаток отбрасывается)
mod остаток от деления
var a,
begin
a :=
a :=
b :=
a :=
end.
b: integer;
7*3 - 4;
a * 5;
a div 10;
a mod 10;
{
{
{
{
17 }
85 }
8 }
5 }
21

22.

Какие операторы неправильные?
program qq;
var a, b: integer;
x, y: real;
begin
имя переменной должно
быть слева от знака :=
a := 5;
целая и дробная часть
10 := x;
отделяются точкой
y := 7,8;
нельзя записывать
b := 2.5;
вещественное значение в
целую переменную
x := 2*(a + y);
a := b + x;
end.
22

23.

23
Порядок выполнения операций
1) вычисление выражений в скобках
2) умножение, деление, div, mod слева направо
3) сложение и вычитание слева направо
1 2 4 5 3 6
z := (5*a+c)/a*(b-c)/ b;
5c 2 d (a b)
x
(c d )( d 2a)
5a c
z
(b c)
ab
2 3 5 4 1 10
6 9 8 7
x:=(5*c*c-d*(a+b))/((c+d)*(d-2*a));

24.

24
Ручная прокрутка программы
program qq;
var a, b: integer;
begin
a := 5;
b := a + 2;
a := (a + 2)*(b – 3);
b := a div 5;
a := a mod b;
a := a + 1;
b := (a + 14) mod 7;
end.
a
b
?
?
5
7
28
5
3
4
4

25.

25
Вывод целых чисел
program qq;
var a, b: integer;
begin
a := 15;
b := 45;
1545
writeln ( a, b );
writeln ( a:4, b:4 );
15
end.
символов
на число
45

26.

Вывод вещественных чисел
26
program qq;
var x: real;
всего
1
begin
1,234568∙10
символов
x := 12.345678;
writeln ( x );
1.234568E+001
writeln ( x:10 );
1.23E+001
writeln ( x:7:2 );
12.35
end.
всего
символов
в дробной
части

27. Программирование на языке Паскаль

27
Программирование
на языке Паскаль
Тема 2. Ветвления
© К.Ю. Поляков, 2006-2009

28.

Разветвляющиеся алгоритмы
Задача. Ввести два целых числа и вывести на экран
наибольшее из них.
Идея решения: надо вывести на экран первое число,
если оно больше второго, или второе, если оно больше
первого.
Особенность: действия исполнителя зависят от
некоторых условий (если … иначе …).
Алгоритмы, в которых последовательность шагов
зависит от выполнения некоторых условий, называются
разветвляющимися.
28

29.

29
Вариант 1. Блок-схема
начало
блок
«решение»
ввод a,b
да
a > b?
max:= a;
полная
форма
ветвления
нет
max:= b;
вывод max
конец
?
Если a = b?

30.

Вариант 1. Программа
program qq;
var a, b, max: integer;
begin
writeln('Введите два целых числа');
read ( a, b );
полная форма
if a > b then begin
условного
max := a;
оператора
end
else begin
max := b;
end;
writeln ('Наибольшее число ', max);
end.
30

31.

Условный оператор
if <условие> then begin
{что делать, если условие верно}
end
else begin
{что делать, если условие неверно}
end;
Особенности:
• перед else НЕ ставится точка с запятой
• вторая часть (else …) может отсутствовать
(неполная форма)
• если в блоке один оператор, можно убрать слова
begin и end
31

32.

32
Что неправильно?
if a > b then begin
a := b;
end
else begin
b := a;
end;
if a > b then begin
a := b;
end
begin
else b
> a begin
b := a;
end;
if a > b then begin
a := b; end
else begin
b := a;
end;
if a > b then begin
a := b;
end;
end
else begin
b := a;
end;

33.

33
Вариант 2. Блок-схема
начало
ввод a,b
max:= a;
да
b > a?
max:= b;
вывод max
конец
нет
неполная
форма
ветвления

34.

Вариант 2. Программа
program qq;
var a, b, max: integer;
begin
writeln('Введите два целых числа');
read ( a, b );
неполная
форма
max := a;
условного
if b > a then
оператора
max := b;
writeln ('Наибольшее число ', max);
end.
34

35.

Вариант 2Б. Программа
program qq;
var a, b, max: integer;
begin
writeln('Введите два целых числа');
read ( a, b );
max := b;
if a???
> b then
???:= a;
max
writeln ('Наибольшее число ', max);
end.
35

36.

36
Что неправильно?
if a > b then begin
b;
a := b
else b := a;
if a > b then
b
a := b;
else b := a; end;
if a > b then begin
a := b;
end;
end
else b := a;
if a > b then
else
if b begin
>= a then
bb:=
:=a;
a;
end;

37. Программирование на языке Паскаль

37
Программирование
на языке Паскаль
Тема 3. Сложные условия
© К.Ю. Поляков, 2006-2009

38.

Сложные условия
Задача. Фирма набирает сотрудников от 25 до 40 лет
включительно. Ввести возраст человека и определить,
подходит ли он фирме (вывести ответ «подходит» или
«не подходит»).
Особенность: надо проверить, выполняются ли два
условия одновременно.
?
Можно ли решить известными методами?
38

39.

39
Вариант 1. Алгоритм
начало
ввод x
да
да
'подходит'
x <= 40?
x >= 25?
нет
нет
'не подходит'
конец
'не подходит'

40.

Вариант 1. Программа
program qq;
var x: integer;
begin
writeln('Введите возраст');
read ( x );
if x >= 25 then
if x <= 40 then
writeln ('Подходит')
else writeln ('Не подходит')
else
writeln ('Не подходит');
end.
40

41.

41
Вариант 2. Алгоритм
начало
ввод x
да
x >= 25
и
x <= 40?
нет
'не подходит'
'подходит'
конец

42.

Вариант 2. Программа
program qq;
var x: integer;
begin
сложное
writeln('Введите возраст');
условие
read ( x );
if (x >= 25) and (x <= 40) then
writeln ('Подходит')
else writeln ('Не подходит')
end.
42

43.

43
Сложные условия
Простые условия (отношения) равно
<
<=
>
>=
=
<>
не равно
Сложное условие – это условие, состоящее из
нескольких простых условий (отношений), связанных с
помощью логических операций:
• not – НЕ (отрицание, инверсия)
• and – И (логическое умножение, конъюнкция,
одновременное выполнение условий)
• or – ИЛИ (логическое сложение, дизъюнкция,
выполнение хотя бы одного из условий)
• xor – исключающее ИЛИ (выполнение только
одного из двух условий, но не обоих)

44.

Сложные условия
Порядок выполнения (приоритет = старшинство)
• выражения в скобках
• not
• and
• or, xor
• <, <=, >, >=, =, <>
Особенность – каждое из простых условий обязательно
заключать в скобки.
Пример
4
1
6
2
5
3
if not (a > b) or (c <> d) and (b <> a)
then begin
...
end
44

45.

45
Сложные условия
Истинно или ложно при a := 2; b := 3; c := 4;
True
not (a > b)
True
(a < b) and (b < c)
True
not (a >= b) or (c = d)
True
(a < c) or (b < c) and (b < a)
(a < b) xor not (b > c)
FALSE
Для каких значений
(x
(x
(x
(x
(x
(x
(x
(x
<
<
>
>
<
<
>
>
6)
6)
6)
6)
6)
6)
6)
6)
x истинны условия:
and (x < 10)
and (x > 10)
and (x < 10)
and (x > 10)
or (x < 10)
or (x > 10)
or (x < 10)
or (x > 10)
(- ; 6)
(6; 10)
(10; )
(- ; 10)
(- ; 6) (10; )
(- ; )
(6; )
x<6
x > 10
x < 10
x>6

46. Программирование на языке Паскаль

46
Программирование
на языке Паскаль
Тема 4. Циклы
© К.Ю. Поляков, 2006-2009

47.

Циклы
Цикл – это многократное выполнение одинаковой
последовательности действий.
• цикл с известным числом шагов
• цикл с неизвестным числом шагов (цикл с
условием)
Задача. Вывести на экран 5 раз слово «Привет».
Особенность: одинаковые действия выполняются 5 раз.
?
Можно ли решить известными методами?
47

48.

48
Циклы
program qq;
begin
writeln('Привет');
writeln('Привет');
writeln('Привет');
writeln('Привет');
writeln('Привет');
end.
?
Что плохо?

49.

49
Циклы
program qq;
Как отсчитать ровно 5 раз?
?
begin
{ сделай 5 раз }
writeln('Привет');
end.
?
Как запоминать, сколько раз
уже сделали?
i := i + 1;

50.

50
Алгоритм
начало
еще не сделали ни одного
раза
i := 0;
проверить, все ли сделали
i = 5?
нет
Привет!
i := i + 1;
да
конец
вывод на экран
считаем
очередной шаг

51.

Циклы
program qq;
«Для всех i от 1 до 5
var i: integer;
делай …»
begin
for i:=1 to 5 do
writeln('Привет');
end.
Если в цикле более одного оператора:
for i:=1 to 5 do begin
write('Привет');
writeln(', Вася!');
Что получится?
?
end;
51

52.

52
Циклы
Задача. Вывести на экран квадраты и кубы целых чисел
от 1 до 8 (от a до b).
Особенность: одинаковые действия выполняются 8 раз.
?
Можно ли решить известными методами?
i := 1;
{ очередное число }
i2 := i*i;
{ его квадрат }
i3 := i2*i;
{ куб }
writeln(i:4, i2:4, i3:4);
i := 2;
...
? А если начальное и конечное
значения вводятся с клавиатуры?

53.

53
Алгоритм
начало
задать начальное значение
переменной цикла
i := 1;
проверить, все ли сделали
i <= 8?
да
i2 := i * i;
i3 := i2 * i;
нет
конец
вычисляем квадрат и куб
вывод результата
i, i2, i3
перейти к
следующему i
i := i + 1;

54.

Алгоритм (с блоком «цикл»)
начало
i := 1,8
i2 := i * i;
i3 := i2 * i;
i, i2, i3
блок «цикл»
конец
тело цикла
54

55.

55
Программа
program qq;
var i, i2, i3: integer;
begin
начальное значение
переменная
цикла
конечное значение
for i:=1 to 8 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
end.

56.

Цикл с уменьшением переменной
Задача. Вывести на экран квадраты и кубы целых чисел
от 8 до 1 (в обратном порядке).
Особенность: переменная цикла должна уменьшаться.
Решение:
for i:=8 downto 1 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
56

57.

Цикл с переменной
Увеличение переменной на 1:
for <переменная> := <начальное значение> to
<конечное значение> do begin
{тело цикла}
end;
Уменьшение переменной на 1:
for <переменная> := <начальное значение>
downto
<конечное значение> do begin
{тело цикла}
end;
57

58.

Цикл с переменной
Особенности:
• переменная цикла может быть только целой
(integer)
• шаг изменения переменной цикла всегда равен 1
(to) или -1 (downto)
• если в теле цикла только один оператор, слова
begin и end можно не писать:
for i:=1 to 8 do
writeln('Привет');
• если конечное значение меньше начального, цикл
(to) не выполняется ни разу (проверка условия в
начале цикла, цикл с предусловием)
58

59.

Цикл с переменной
Особенности:
• в теле цикла не разрешается изменять переменную
цикла (почему?)
• при изменении начального и конечного значения
внутри цикла количество шагов не изменится:
n := 8;
for i:=1 to n do begin
writeln('Привет');
нет
n := n + 1;
зацикливания
end;
59

60.

60
Цикл с переменной
Особенности:
• после выполнения цикла во многих системах
устанавливается первое значение переменной
цикла, при котором нарушено условие:
for i:=1 to 8 do
writeln('Привет');
writeln('i=', i);
for i:=8 downto 1 do
writeln('Привет');
writeln('i=', i);
i=9
i=0

61.

61
Сколько раз выполняется цикл?
a := 1;
for i:=1 to 3 do a := a+1;
a= 4
a := 1;
for i:=3 to 1 do a := a+1;
a= 1
a := 1;
for i:=1 downto 3 do a := a+1;
a= 1
a := 1;
for i:=3 downto 1 do a := a+1;
a= 4

62.

62
Как изменить шаг?
Задача. Вывести на экран квадраты и кубы нечётных целых
чисел от 1 до 9.
Особенность: переменная цикла должна увеличиваться на 2.
Проблема: в Паскале шаг может быть 1 или -1.
Решение:
for i:=1 to 9 do begin
if i mod
???2 = 1 then begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
end;
?
выполняется
только для
нечетных i
Что плохо?

63.

Как изменить шаг? – II
Идея: Надо вывести всего 5 чисел, переменная k изменяется
от 1 до 5. Начальное значение i равно 1, с каждым шагом
цикла i увеличивается на 2.
Решение:
i := 1;
???
for k:=1 to 5 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
???
i := i + 2;
end;
63

64.

64
Как изменить шаг? – III
Идея: Надо вывести всего 5 чисел, переменная k изменяется
от 1 до 5. Зная k, надо рассчитать i.
k
1
2
3
4
5
i
1
3
5
7
9
Решение:
for k:=1 to 5 do begin
i ???
:= 2*k – 1;
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
i = 2k-1

65. Программирование на языке Паскаль

65
Программирование
на языке Паскаль
Тема 5. Циклы с условием
© К.Ю. Поляков, 2006-2009

66.

Цикл с неизвестным числом шагов
Пример: Отпилить полено от бревна. Сколько раз надо
сделать движения пилой?
Задача: Ввести целое число (<2000000) и определить число
цифр в нем.
Идея решения: Отсекаем последовательно последнюю
цифру, увеличиваем счетчик.
n
count
123
0
12
1
1
2
0
3
Проблема: Неизвестно, сколько шагов надо сделать.
Решение: Надо остановиться, когда n = 0, т.е. надо делать
«пока n <> 0».
66

67.

67
Алгоритм
начало
обнулить
счетчик цифр
ввод n
count := 0;
выполнять
«пока n <> 0»
n <> 0?
нет
да
count := count + 1;
n := n div 10;
count
конец

68.

68
Программа
program qq;
n1: integer;
var n, count:, integer;
begin
writeln('Введите целое число');
read(n); n1 := n;
выполнять
count := 0;
«пока n <> 0»
while n <> 0 do begin
count := count + 1;
n := n div 10;
end;
writeln('В числе ', n1,
n, ' нашли ',
count, ' цифр');
end.
Что плохо?
?

69.

Цикл с условием
while <условие> do begin
{тело цикла}
end;
Особенности:
• можно использовать сложные условия:
while (a < b) and (b < c) do begin
{тело цикла}
end;
• если в теле цикла только один оператор, слова
begin и end можно не писать:
while a < b do
a := a + 1;
69

70.

Цикл с условием
Особенности:
• условие пересчитывается каждый раз при входе в
цикл
• если условие на входе в цикл ложно, цикл не
выполняется ни разу
a := 4; b := 6;
while a > b do
a := a – b;
• если условие никогда не станет ложным, программа
зацикливается
a := 4; b := 6;
while a < b do
d := a + b;
70

71.

71
Сколько раз выполняется цикл?
a := 4; b := 6;
while a < b do a := a + 1;
2 раза
a=6
a := 4; b := 6;
while a < b do a := a + b;
1 раз
a = 10
a := 4; b := 6;
while a > b do a := a + 1;
0 раз
a=4
a := 4; b := 6;
while a < b do b := a - b;
1 раз
b = -2
a := 4; b := 6;
while a < b do a := a - 1;
зацикливание

72.

Замена for на while и наоборот
for i:=1 to 10 do begin
{тело цикла}
end;
for i:=a downto b do
begin
{тело цикла}
end;
i := 1;
while i <= 10 do begin
{тело цикла}
i := i + 1;
end;
i := a;
while i >= b do begin
{тело цикла}
i := i - 1;
end;
Замена цикла for на while возможна всегда.
Замена while на for возможна только тогда, когда
можно заранее рассчитать число шагов цикла.
72

73.

Задания
73
«4»: Ввести целое число и найти сумму его цифр.
Пример:
Введите целое число:
1234
Сумма цифр числа 1234 равна 10.
«5»: Ввести целое число и определить, верно ли,
что в его записи есть две одинаковые цифры.
Пример:
Введите целое число:
Введите целое число:
1234
1224
Нет.
Да.

74.

74
Последовательности
Примеры:
• 1, 2, 3, 4, 5, …
an = n
a1 = 1, an+1 = an + n
• 1, 2, 4, 7, 11, 16, …
• 1, 2, 4, 8, 16, 32, …
1 1 3 1 5
, , , ,
, ...
2 2 8 4 32
bn
an
cn
a1 = 1, an+1 = an+1
an = 2n-1
a1 = 1, an+1 = 2an
1 2 3 4 5
, , , ,
, ...
2 4 8 16 32
b1 = 1, bn+1 = bn+1
c1 = 2, cn+1 = 2cn

75.

75
Последовательности
Задача: найти сумму всех элементов
последовательности,
1 2
3
4
5
1, ,
, ,
, , ...
2 4
8 16
32
которые по модулю больше 0,001:
1 2 3 4 5
S 1
...
2 4 8 16 32
Элемент последовательности (начиная с №2):
b
a z
c
n
1
2
3
4
5
...
b
1
2
3
4
5
...
c
2
4
8
16
32
...
z
-1
1
-1
1
-1
...
b := b+1;
c := 2*c;
z := -z;

76.

76
Алгоритм
начальные
значения
начало
SS :=
:= 0;
0; b := 1;
c := 2; z := -1;
a := 1;
|a| > 0.001?
новый
элемент
изменение
первый
элемент
нет
да
S
S := S + a;
конец
a := z*b/c;
b := b + 1;
c := 2*c; z := -z;
?
Перестановка?

77.

77
Программа
program qq;
начальные
var b, c, z: integer;
значения
S, a: real;
begin
S := 0; z := -1;
2; aa := 1;
b := 1; c := 2;
while abs(a) > 0.001 do begin
увеличение
S := S + a;
суммы
a := z * b / c;
:= -- z;
z;
zz :=
расчет элемента
:= bb ++ 1;
1;
bb :=
последовательности
:= cc ** 2;
2;
cc :=
end;
переход к
writeln('S =', S:10:3);
end.
следующему
слагаемому

78.

Задания
«4»: Найти сумму элементов последовательности с
точностью 0,001:
2
4
6
8
S 1
...
3 3 5 9 7 27 9 81
Ответ:
S = 1.157
«5»: Найти сумму элементов последовательности с
точностью 0,001:
2
4
6
8
10
S 1
...
2 3 3 9 5 27 8 81 13 243
Ответ:
S = 1.220
78

79.

Цикл с постусловием
Задача: Ввести целое положительное число (<2000000)
и определить число цифр в нем.
Проблема: Как не дать ввести отрицательное число или
ноль?
Решение: Если вводится неверное число, вернуться
назад к вводу данных (цикл!).
Особенность: Один раз тело цикла надо сделать в
любом случае => проверку условия цикла надо делать
в конце цикла (цикл с постусловием).
Цикл с постусловием – это цикл, в котором проверка
условия выполняется в конце цикла.
79

80.

Цикл с постусловием: алгоритм
начало
ввод n
нет
n > 0?
да
основной
алгоритм
конец
тело цикла
условие
ВЫХОДА
блок «типовой
процесс»
80

81.

Программа
program qq;
var n: integer;
begin
repeat
repeat
writeln('Введите положительное
положительное число');
число');
writeln('Введите
read(n);
read(n);
условие ВЫХОДА
until
n
>
0;
until nn >> 0;
0;
until
... { основной алгоритм }
end.
Особенности:
• тело цикла всегда выполняется хотя бы один раз
• после слова until ("до тех пор, пока не…")
ставится условие ВЫХОДА из цикла
81

82.

82
Сколько раз выполняется цикл?
a := 4; b := 6;
repeat a := a + 1; until a > b;
3 раза
a=7
a := 4; b := 6;
repeat a := a + b; until a > b;
1 раз
a = 10
a := 4; b := 6;
repeat a := a + b; until a < b;
a := 4; b := 6;
repeat b := a - b; until a < b;
a := 4; b := 6;
repeat a := a + 2; until a < b;
зацикливание
2 раза
b=6
зацикливание
English     Русский Rules