- •Часть I
- •1. Основы языка высокого уровня турбо pascal
- •1.1. Алфавит языка Pascal
- •1.2. Идентификаторы
- •1.3. Константы
- •1.4. Правила записи Pascal программ
- •1.5. Основные части Pascal программ
- •1.6. Стандартные типы данных Pascal
- •1.7. Составной оператор. Пустой оператор
- •1.7. Физический смысл имени переменной
- •1.8. Арифметическое выражение
- •1.9. Таблица арифметических функций языка Pascal
- •1.10. Правила составления и вычисления арифметических выражений
- •1.11. Оператор присваивания
- •1.12. Согласование типов данных.
- •1.13. Способы ввода данных
- •1.14. Операторы ввода - вывода
- •1.15. Форматирование вывода данных
- •2. Алгоритмизация
- •2.5. Символы блок-схем
- •2.6. Разветвляющийся вычислительный процесс
- •2.7. Логическое выражение
- •2.8. Оператор условного перехода
- •2.9. Блок-схема операторов условного перехода
- •2.10. Оператор-переключатель
- •2.11. Блок-схема переключателя
- •2.12. Циклический вычислительный процесс. Определения
- •2.13. Циклы с известным числом повторений
- •2.14. Блок-схема цикла с известным числом повторений.
- •2.15. Операторы итерационных циклов
- •2.15. Характерные приёмы программирования циклических вычислительных процессов
- •3. Массивы
- •3.1. Определения
- •3.2. Способы обработки одномерных массивов
- •3.3. Ввод - вывод одномерных массивов
- •3.4. Ввод-вывод матриц
- •4. Типы данных turbo-pascal
- •5. Подрограммы
- •5.1. Подпрограмма типа function
- •5.2. Подпрограмма типа procedure
2.14. Блок-схема цикла с известным числом повторений.
Тело цикла
2.15. Операторы итерационных циклов
Формат оператора итерационного цикла с предусловием:
WHILE <усл> DO ( S1; S2; ... ; Sn );
где
WHILE - первое ключевое слово, в переводе означает "пока";
<усл> - условие естественного окончания цикла, записанное в
виде логического выражения или операции отношения;
DO - второе ключевое слово, в переводе означает "выполняем";
(S1;S2;...;Sn) - составной оператор, тело цикла.
Оператор работает следующим образом: до начала исполнения операторов тела цикла происходит проверка условия выполнения цикла (отсюда взято название цикла- " с предварительной проверкой условия "). Если оно не нарушено, тело цикла исполняется. Но может быть, что при неправильном составлении программы, <усл> не выполняется сразу, следовательно, тело цикла тоже ни разу не будет выполнено. Работа продолжается, пока выполняется <усл>.
Формат оператора итерационного цикла с постусловием:
REPEAT S1; S2; ... ; Sn UNTIL <усл>;
где
REPEAT - первое ключевое слово, в переводе означает "повторять";
S1; S2; ... ; Sn - составной оператор, тело цикла. В этом составном операторе слова BEGIN ... END не нужны, поскольку считается, что слова REPEAT ...UNTIL сами являются операторными скобками;
UNTIL - второе ключевое слово, в переводе означает "до тех пор, пока";
<усл> - условие естественного окончания цикла, записанное в виде логического выражения или операции отношения.
Оператор работает следующим образом: после первого выполнения операторов тела цикла происходит проверка условия окончания цикла (отсюда взято название цикла-" с последующей проверкой условия"). Если оно не выполняется, управление передаётся на начало цикла и работа продолжается до выполнения <усл>.
При всей несхожести этих операторов они выдвигают одни и те же требования к организации вычислительного процесса:
перед началом работы цикла управляющая переменная должна получить нужное начальное значение;
условие естественного окончания цикла - " <усл> " - необходимо составить таким образом, чтобы оно обеспечивало многократное его повторение;
внутри цикла должен находиться оператор, изменяющий значения переменной цикла так, что рано или поздно <усл> выхода из цикла будет достигнуто.
Тело цикла
нет
да
Тело цикла
да
а) б)
Рис.2.4. а) цикл WHILE-DO ; б) цикл REPEAT-UNTIL
2.15. Характерные приёмы программирования циклических вычислительных процессов
В процессе обработки многократно вычисляемых величин часто возникает необходимость подсчёта числа определённых по условию значений, их суммирования или получение значения их произведения.
В таких ситуациях принято применять специальные операторы, называемые счётчик, сумматор, накопитель произведения. Рассмотрим работу счётчика. Условимся о таком допущении: введём индексацию переменных, которая будет обозначать текущее её значение на соответствующем шаге цикла. Формула счётчика выглядит так:
N:=N+1;
C точки зрения алгебры это сплошной абсурд - переменная не может равняться себе самой плюс ещё какая-то константа. Чтобы понять, в чём тут дело, необходимо вспомнить, как выполняется оператор присваивания. Символ ":=" не означает равенства левой и правой частей уравнения. При обработке этого оператора транслятором сначала в процессор будет отослана информация, уже записанная в ячейку, отведённую под переменную N, т.е. "старое", (предыдущее) значение N. Затем туда будет послана константа "1" и т.д. После вычисления суммы "старое" значение + 1 - этот результат будет записан туда же, т.е. в ячейку переменной N.
Счётчик располагается на циклическом участке
................... программы. До начала цикла он инициализирует-
................... ся нулевым значением (N0=0).Подсчитаем, какое
N:=0; значение он получит на первом шаге:
................... I N1 = N0 + 1 = 0 + 1 = 1
{Начало цикла} Второе значение будет вычислено также, но с
................... учётом значения N, полученного после первого
N:=N+1; шага:
................... II N2 = N1 + 1 = 1 + 1 = 2
{Конец цикла} Третье значение вычисляется по уже известной
................... схеме:
III N3 = N2 + 1 = 2 + 1 = 3 и т.д.
Сумматор выполняется следующим оператором:
S := S + Y;
Переменная S до начала цикла, как и N у счётчика, обнуляется. Затем к начальному значению последовательно, на каждом шаге цикла, вместо единицы, как у счётчика, добавляются значения суммируемой переменной. В нашем примере - рассчитываемой функции Y. Для нормальной работы накопителя произведения его начальное значение должно быть равным 1. В противном случае конечное значение произведения будет искажено начальной величиной. Совершенно недопустимым является присваивание накопителю произведения в качестве начального значения нуля. Вычисления производятся оператором:
P := P*Y ;