- •2 Введение в язык Паскаль Лекция 2
- •2.1 Историческая справка
- •2.2 Алфавит языка Паскаль
- •2.3 Переменные
- •2.4 Основные понятия языка Паскаль
- •2.5 Правила записи текста программы
- •Разделители
- •Правила записи
- •2.6 Система типов языка
- •2.7 Основные вычислительные структуры в Паскале
- •2.8 Выражения
- •2.9 Оператор присваивания
- •2.10 Ввод-вывод
- •2.11 Последовательное выполнение и составной оператор
- •2.12 Условный оператор
- •2.13 Оператор цикла с предусловием
- •2.14 Оператор цикла с постусловием
- •2.15 Оператор цикла с параметром
- •2.16 Примеры бесконечных циклов
- •2.17 Пустой оператор
- •2.18 Ограниченные типы
- •2.19 Функции
- •2.20 Примеры программ для задач без массивов
- •2.21 Более подробно о символьном типе
2.13 Оператор цикла с предусловием
while <логическое выражение> do | заголовок цикла
<оператор> | тело цикла
Тело цикла повторяется, пока истинно предусловие.
Примеры:
{s=сумма целых чисел от 1 до n}
s:=0;i:=1;
while i<=n do
begin
s:=s+i;
i:=i+1
end
{x1=наибольший общий делитель x и y}
x1:=x;y1:=y;
while x1<>y1 do
if x1>y1 then x1:=x1-y1
else y1:=y1-x1;
{Для данного M>0 требуется найти наименьшее целое число k>=0, такое что 3^k > M}
y:=1;k:=0;
while y<=M do
begin
k:=k+1;
y:=y*3;
end;
2.14 Оператор цикла с постусловием
Число повторений заранее неизвестно, но известно условие, при выполнении которого цикл должен завершиться.
repeat {<оператор>} until <логическое выражение>
Цикл с постусловием всегда выполняется, по крайней мере, один раз!
Пример. Вычислить наименьшее n, для которого y=1+1/2+1/3+...+1/n ≥ 5.
y:=0;n:=0;
repeat
n:=n+1;
y:=y+1/n;
until y>=5;
2.15 Оператор цикла с параметром
Такие операторы обычно используются, когда число повторений цикла может быть определено перед его началом. Кроме того,циклы с параметром позволяют задать автоматическое изменение значения некоторой переменной и использование этого значения в последовательных итерациях.
Более конкретно данный вариант оператора цикла определяет:
диапазон изменения значений управляющей переменной и, одновременно, число повторений оператора, содержащегося в теле цикла;
направление изменения значения переменной (возрастание или убывание);
собственно действия, выполняемые на каждой итерации (оператор тела цикла).
<оператор цикла с параметром>::=
for <переменная> := <диапазон> do <оператор>
<диапазон>::=
<выражение> <направление> <выражение>
<направление>::= to | downto
На использование управляющей переменной (параметра) налагаются следующие ограничения:
Управляющая переменная должна иметь дискретный тип (целый, символьный, булевский, перечислимый).
Начальные и конечные значения диапазона должны иметь тот же тип, что и параметр.
В теле цикла запрещается явное изменение значения управляющей переменной (например, оператором присваивания).
После завершения оператора значение параметра становится неопределенным.
Семантику данного оператора цикла можно представить следующим образом. Оператор
for V := Expr1 to Expr2 do Body;
эквивалентен оператору:
begin
Temp1:=Expr1;
Temp2:=Expr2;
if Temp1 <= Temp2 then
begin
V:=Temp1;
Body;
while V <> Temp2 do
begin
V:=succ(V);
Body
end
end
end
Примеры:
{y=x^n}
y:=1;
for i:=1 to n do y:=y*x;
{печать латинского алфавита с конца}
for c:='z' downto 'a' do write(c);
2.16 Примеры бесконечных циклов
y:=0;i:=1;
while i<=n do y:=y+1/i;i:=i+1;
while true do <оператор>
{Вычислить площадь под параболой f(x)=x2 от a=0 до b=10 по формуле трапеции S=h*[f(a)/2+f(a+h)+f(a+2*h)+...+f(b-h)+f(b)/2],где h=(b-a)/n }
h:=(b-a)/n;
S:=h*(a*a+b*b)/2;
x:=a;
repeat
x:=x+h;
S:=S+x*x*h
until x=b-h; {Нужно x>=b-h, иначе равенство может и не выполниться}