- •Введение в object pascal
- •Лекция 1. Интегрированная Среда и Состав языка Object Pascal
- •1.1 Работа с окнами
- •1.2 Редактирование в Object Pascal
- •1.3 Команды меню
- •1.4 «Горячие» клавиши в Object Pascal
- •1.5 Состав языка
- •1.5.1 Алфавит и ключевые слова
- •1.5.2 Идентификаторы
- •1.5.3 Знаки операций, разделители, выражения и операторы
- •Лекция 2. Описательная часть программы
- •2.1 Структура программы
- •2.2 Описание констант
- •2.3 Описание и использование меток
- •2.4 Комментарии
- •Лекция 3. Описание переменных
- •3.1 Структура раздела описания переменных
- •3.2 Классификация типов данных
- •3.2.1 Целочисленные типы
- •3.2.2 Логический тип
- •3.2.3 Символьный тип
- •3.2.4 Вещественные типы
- •3.3 Описание типов пользователя
- •Лекция4. Выражения
- •4.1 Порядок выполнения операций
- •4.2 Выражения целого типа
- •4.3 Вещественные выражения
- •4.4 Логические выражения
- •Лекция 5. Программы Линейной структуры
- •5.1 Операторы ввода (Read, Readln)
- •5.2 Операторы вывода (Write, Writeln)
- •5.2.1 Форматирование численных значений
- •5.2.2 Вывод строковых, символьных и логических значений
- •5.2.3 Вывод вещественных значений в экспоненциальном формате
- •5.2.4 Расположение данного в поле вывода. Примеры
- •5.3 Оператор присваивания
- •5.4 Составной оператор
- •5.5 Стандартные процедуры и функции
- •5.5.1 Понятие процедуры и функции
- •5.5.2 Описание некоторых стандартных процедур и функций
- •5.5.3 Примеры программ линейной структуры
- •Лекция 6. Операторы ветвления (выбора)
- •6.1 Оператор ветвления if
- •6.2 Оператор множественного выбора (варианта) - case
- •Лекция 7. Операторы организации циклов
- •7.1 Цикл типа for
- •7.1.1 Прямая форма оператора for
- •7.1.2 Обратная форма оператора for
- •7.1.3 Советы для начинающих и примеры
- •7.2 Цикл типа While
- •7.3 Цикл типа Repeat... Until
- •7.4 Дополнительные операторы при программировании циклов
- •7.4.1 Досрочный выход из цикла - break
- •7.4.2 Переход к следующей итерации цикла - continue
- •Лекция 8. Массивы
- •8.1 Одномерные массивы
- •8.2 Сортировка одномерного массива
- •8.3 Массивы с большей размерностью
- •8.4 Констант-массивы
- •8.5 Генератор случайных чисел
- •8.5.1 Описание функции Random
- •8.5.2 Применение случайных чисел при работе с массивами
- •Лекция 9. Строки
- •9.1 Строковый тип
- •9.2 Операции над строками
- •Лекция 10. Записи и множества
- •10.1 Запись
- •10.2 Множества
- •11 Пользовательские процедуры и функции
- •11.1 Описание функции и процедуры
- •11.2 Понятие формальных и фактических параметров
- •11.3 Способы передачи параметров в подпрограмму через заголовок
- •11.4 Область видимости идентификаторов
- •12 Файлы
- •12.1 Основные понятия
- •12.2 Типизированные файлы
- •12.3 Текстовые файлы
7.1.2 Обратная форма оператора for
Запись обратной формы этого оператора имеет вид:
for <идентификатор переменной порядкового типа> :=
n1 downto n2 do <оператор>;
nl — начальное (большее) значение соответствующего типа; n2 – конечное (меньшее) значение соответствующего типа. На каждой итерации параметр цикла изменяется на величину -1. Если n1 < n2, то оператор цикла вообще не выполняется.
Примеры. Эти примеры повторяют вышеприведённые примеры, но счётчик цикла изменяется в обратном направлении.
1)
for i:= 100 downto 1 do S:= S + i*i;
2)
for c:= 'Z’ downto 'A' do Writeln(ord(c), ' - ', c) ;
3)
for t:= 400 downto 300 do if (t mod 3) = 0 then Writeln(t);
Как вы заметили, в теле цикла может выполняться только один оператор, который записан непосредственно за структурой for … do. Поэтому, если возникает необходимость, мы можем воспользоваться составным оператором и объединить в теле цикла несколько операторов.
Примеры:
1)
for i: = 1 to 100 do
begin
Writeln(i , ‘)’ );
S:= S + i*i ;
Writeln(S);
end;
2)
for h:= 'F’ to 'X’ do
begin
readln(b, c);
k: = chr(ord(b) - ord(h));
m: = m + chr(ord(c) + ord(h));
writeln (k, m);
end;
Как уже было сказано, счетчиком цикла могут быть переменные любого порядкового типа, даже если это тип пользователя.
Пример:
program р7_1;
type
Month = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov);
var
i: Month;
z: integer;
begin
z : = 0 ;
for i := Jan to Sep do z := z + Ord(i)*32;
Writeln(z);
end.
7.1.3 Советы для начинающих и примеры
Постарайтесь не изменять счетчик цикла в самом цикле. Если хорошо подумаете, то поймете, что в этом нет необходимости, а последствия этого могут оказаться непредсказуемыми.
В Object Pascal нет понятия - шаг цикла (step), вещественный тип не может быть типом счетчика цикла, так как не является перечислимым, но при возникшей необходимости в цикле можно воспользоваться любой вещественной переменной. Для этого на каждой итерации необходимо изменять ее на определенное вещественное значение - шаг.
3. Перед использованием цикла постарайтесь точно понять, «почувствовать» как он работает, что происходит со счетчиком, сколько раз он выполняется, как изменяются переменные в выражениях типа S := S + ..., Р:= Р * . . . и т. п. Их корректность зависит от построения выражения и начальных значений переменных.
Например:
p := 0;
for i: = 1 to n do p: = p* i;
Стандартная ошибка. В этом примере незадачливый, начинающий программист попытался решить задачу нахождения факториала, а получил ноль.
Задача. Табулировать функцию f(x) на отрезке [а,b] с шагом h.
program p7_3;
var
a, b, h, x, y : Real;
i, n : integer;
begin
Writeln('введите начало и конец отрезка’);
Read(a, b);
Writeln('введите шаг');
Read(h);
х:= а; { начальное значение переменной х }
n:=round((b-a)/h); { количество полных интервалов }
for i:= 1 to n do
begin
y:= sin(x); { находим значение функции,
для текущего значения аргумента }
Writeln(i, ' х= ' , х, ' у= ' , у) ; { выводим на экран номер шага,
значение аргумента и значение функции }
x:=x+h; { увеличиваем аргумент на значение шага }
end;
end.
Задача. Вычислить выражение .
program p7_4;
var
S, f: real;
i, n: integer;
begin
Write('Введите n: ’);
Read(n); { Ввод значения переменной n }
f: = 1;
S: = 0; { начальное значение переменных f и S }
for i: = 1 to n do
begin
f: = f*2;
S:= S + sin(i)/f;
end;
Writeln(' S= ', S: 6: 4) ;
end.
Задача. Вычислить выражение
,
где n, а и b вводятся с клавиатуры.
program p7_5;
var
a, b, P, k, 1: real;
i, n: integer;
begin
Write('Введите значения a, b и n: ');
Readln (a, b, n);
k:= 1; { начальное значение переменных k,1 и Р }
1:= 1;
P:= 1;
for i:= 1 to n do
begin
k:= k * a;
1:= 1 * b;
P:= P * (sin(k) + cos(l));
end;
Writeln(‘ Произведение = ', P: 6: 4);
end.
Часто возникает необходимость организации вложенных циклов, действие которых можно понять при анализе работы следующей программы:
program р7_6;
var
i, j : integer;
begin
for i:= 1 to 5 do
for j:= 1 to 5 do writeln ('i= ', i, ' j= ', j);
end.
Программа выводит на экран всевозможные пары значений целых чисел до пяти.
i=1 j=1
i=l j=2
i=l j=3
i=l j= 4
i=l j= 5
………
………
………
i=5 j= 2
i=5 j= 3
i=5 j= 4
i=5 j= 5
Каждая строка, выводимая на экран, соответствует одному выполнению тела цикла.