- •Конспект лекций
- •1.4 Общая структура программы
- •1.5 Стандартные процедуры и функции
- •1.6 Процедуры ввода/вывода
- •2. Простые типы данных
- •2.1 Целые типы
- •2.2 Вещественные типы
- •2.3 Cимвольный тип данных
- •2.4 Логический тип данных.
- •2.5 Ограниченные типы
- •2.6 Перечислимые типы
- •2.7 Описание типов
- •2.8 Преобразование типов
- •2.9 Порядок вычисления выражений
- •3. Операторы языка Паскаль
- •3.1 Оператор присваивания
- •3.2 Составной оператор
- •3.3 Условный оператор
- •3.4 Оператор выбора case
- •3.5 Оператор цикла с параметром (цикл for)
- •3.6 Оператор цикла с предусловием (цикл while)
- •1 Вариант:
- •2 Вариант:
- •3 Вариант:
- •3.7 Оператор цикла с постусловием (цикл repeat)
- •3.8 Вложенные циклы
- •3.9 Оператор перехода goto
- •4. Массивы
- •4.2 Сортировка элементов массива
- •4.3 Многомерные массивы
- •5. Подпрограммы (процедуры и функции)
- •5.1 Процедуры
- •5.2 Функции
- •5.3 Области действия имен
- •5.4 Параметры процедур и функций
- •5.5 Побочные эффекты при использовании подпрограмм
- •5.6 Передача массивов в подпрограммы
- •5.7 Параметры-костанты
- •5.8 Массивы открытого типа
- •5.9 Рекурсия в подпрограммах
- •6. Строковый тип данных
- •6.1 Описание строк
- •6.2 Операции со строками
- •6.3 Процедуры и функции для работы со строками
- •7. Стандартные модули Турбо-Паскаля
- •7.1 Модули турбо3 и graph3
- •7.2 Модуль overlay
- •7.3 Модуль dos
- •7.4 Модуль system
- •7.5 Модуль printer
- •7.6 Модуль crt
- •7.7 Модуль graph
- •8. Записи
- •8.1 Определение записи
- •8.2 Оператор над записями
- •8.3 Вложенные записи
- •8.4 Массив записей
- •8.5 Записи с вариантами
- •9. Файлы
- •9.1 Определение файла
- •9.2 Процедуры и функции для работы с файлами
- •9.3 Нетипизированные файлы
- •10. Интегрированная среда Турбо Паскаля
- •10.1 Как начать работу с Турбо Паскалем
- •10.2 Ваша первая программа
3.6 Оператор цикла с предусловием (цикл while)
Обычно используется, когда число повторений заранее неизвестно.
Структура оператора:
заголовок цикла - while <условие> do
тело цикла - <оператор>;
(при условии истинном выполняется оператор)
Условие – логическое выражение, определяющее момент окончания циклических вычислений (цикл выполняется, пока условие истинно). Проверка условия производится перед каждым выполнением тела цикла. Если условие ложно сразу, тело цикла не выполняется ни разу.
Обычно в теле цикла требуется выполнить несколько операторов, поэтому используется составной оператор begin…end.
Схема оператора:
Пример:
var x:integer;
Begin
x:=4;
while x>0 do
begin
x:=x-2; На экране:
writeln(x); 2
end; 0
End.
В теле цикла должны изменяться переменные, входящие в условие, с тем, чтобы условие, в конце концов, стало ложным, и цикл завершился. В противном случае возникает так называемый бесконечный цикл. Прервать выполнение бесконечного цикла можно с помощью клавиш ctrl-break.
Пример 1: while y<0 do writeln (y);
бесконечные циклы (в примере1 – если y:=-1;)
Пример 2: while true do begin…end;
Пример 3: Вычисление суммы чисел S=0,2+ 0,4+ 0,6+…+2.
const n=2;
var s, x: integer;
begin
s:=0; x:=0.2;
while x<=n do begin
s:=s+ x;
x:=x+ 0.2;
end;
writeln(‘S = ’, s);
end.
Пример 4: Программа вычисления суммы S=1+1/2+1/3+…+1/1000
var i: integer;
s: real;
begin
i:=1; s:=0;
while i<=1000 do
begin
s:=s+1/i; или for i:= 1 to 1000 do s:=s+1/i;
i:=i+1;
end;
writeln(‘S’, s:7:3);
end.
Пример 5: Программа вычисления суммы S=1-1/4+1/9-1/16… с точностью ε = 0,001
(считается, что требуемая точность достигнута, если очередное слагаемое по модулю меньше ε, т.е. все последующие слагаемые можно не учитывать).
1 Вариант:
var i, zn: integer;
s: real;
begin
i:=1; s:=0; zn:=1
while 1/sqr(i) > = 0.001 do
begin
s:=s+1/sqr(i)*zn;
i:=i+1;
zn:=-zn;
end;
writeln(‘S = ’, s);
end.
2 Вариант:
var i: integer;
s: real;
begin
i:=1; s:=0;
while 1/sqr(i) > = 0.001 do
begin
if Odd(i) then s:=s+1/sqr(i)
else s:=s -1/sqr(i);
i:=i+1;
end;
writeln(‘S = ’, s);
end.
3 Вариант:
var i: integer;
s: real;
begin
i:=1; s:=0;
while 1/sqr(i) > = 0.001 do
begin
if (i mod 2=0) then s:=s-1/sqr(i)
else s:=s+-1/sqr(i);
i:=i+1;
end;
writeln(‘S = ’, s);
end.
3.7 Оператор цикла с постусловием (цикл repeat)
Обычно используется, когда число повторений заранее неизвестно.
Структура оператора:
repeat < операторы > until < условие >;
(операторы повторяются до тех пор, пока не выполнится условие)
Условие – логическое выражение, определяющее момент окончания циклических вычислений (цикл выполняется, пока условие ложно). Когда условие становится истинным, осуществляется выход из цикла. Проверка условия производится в конце тела цикла, поэтому он всегда выполняется хотя бы один раз.
Под телом цикла понимается последовательность операторов между словами repeat и until. Операторов может быть один и более. В любом случае операторные скобки begin…end не требуются.
Пример:
var i:integer;
Begin
i:=4;
repeat
i:=i-1;
writeln(i);
until i<0; (выполнится 4 раза: i=3,2,1,0)
End.
Схема оператора:
В теле цикла должны изменяться переменные, входящие в условие, чтобы не получился бесконечный цикл.
Пример 1: repeat … until false; бесконечный цикл
Пример 2: repeat until keypressed; цикл до нажатия любой клавиши
keypressed – стандартная логическая функция, принимает значение true, если была нажата клавиша.
Пример 3: Вычисление суммы чисел S=0,2+ 0,4+ 0,6+…+2.
const n=2;
var s, x: integer;
begin
s:=0; x:=0.2;
repeat
s:=s+ x;
x:=x+ 0.2;
until x>2;
writeln(‘S = ’, s);
end.
Пример 4: Вычисление квадратного корня числа, введенного с клавиатуры.
var a,b: real;
begin
repeat
writeln(‘Введите а>0’);
readln(a);
until a>0;
b:=sqrt(a);
writeln(‘b=’,b);
end.
Пример 5: Программа, считывающая с клавиатуры символ и печатающая его код
var k: integer;
ch: char;
begin
repeat
writeln(‘Введите символ’);
readln(ch);
k:=ord(ch);
writeln(‘Код символа’, ch, ‘ = ’,k);
until k=13; {13 – код пробела}
end.
Основные отличия операторов цикла:
Цикл FOR используется, когда число повторений заранее известно, циклы WHILE и REPEAT – когда неизвестно.
В цикле FOR параметр цикла изменяется с шагом 1, в циклах WHILE и REPEAT необходимо изменять переменные, входящие в условие.
В циклах FOR и WHILE несколько операторов объединяются операторными скобками begin…end, в цикле REPEAT это не требуется.
В циклах FOR и WHILE проверка условия выполняется перед очередным выполнением тела цикла, в цикле REPEAT – после выполнения тела цикла.