
- •Содержание
- •Предисловие научного редактора
- •Введение
- •1. Понятие алгоритма. Способы представления алгоритмов
- •В виде компьютерной программы:
- •2. Свойства алгоритмов
- •Язык графического представления алгоритмов
- •4. Общие принципы построения программ
- •5. Структура программы на языке паскаль
- •6. Классификация типов данных, используемых в языке паскаль
- •6.1. Символьный тип
- •6.2. Числовые типы
- •6.2.1. Целые типы
- •6.2.2. Вещественные типы
- •6.3. Логический тип
- •6.4. Типы данных, определяемые программистом
- •7. Основные операторы языка паскаль.
- •7.1. Операторы (процедуры) ввода – вывода
- •7.2. Оператор присваивания
- •7.3. Условный оператор
- •Первый вариант условного оператора:
- •If условие then оператор1 else оператор2;
- •Второй вариант условного оператора (сокращенная форма):
- •If условие then оператор1;
- •If условие1 then
- •If условие2 then оператор21 else
- •If условие3 then оператор31 else
- •7.4. Оператор выбора case
- •7.5. Операторы цикла
- •7.5.1. Оператор цикла с параметром
- •Параметр цикла I меняет свои значения только автоматически, при переходе к следующему шагу цикла. Изменения параметра цикла I в теле цикла запрещены.
- •7.5.2 Оператор цикла с предусловием оператор цикла с предусловием имеет структуру:
- •7.5.3. Оператор цикла с постусловием
- •8. Структурированные типы данных
- •8.1. Массивы
- •8.2. Записи
- •8.3. Файлы
- •2.Связать файловую переменную с именем файла на диске с помощью процедуры Assign(фп, ‘имя_файла_на диске’).
- •3. Открыть файл:
- •4. Выполнить работу с файлом.
- •Закрыть файл при окончании работы: Сlose(фп);
- •9. Процедуры и функции
- •9.1. Процедуры
- •Var I:integer; {I – локальная переменная}
- •9.2. Функции
- •2)Имя функции входит составной частью (как переменная) в некоторое выражение.
- •Задание к лабораторной работе №2.
- •Часть 1. Тема: вычисление по формулам и представление результатов с учетом форматного вывода.
- •Часть 2. Тема: Циклические вычисления с учетом диапазона типа данных и выдача результатов вычислений по шагам.
- •Задание к лабораторной работе №3.
- •Часть 1 .
- •Часть 2.
- •Задание к лабораторной работе №4.
- •Лабораторная работа №5.
7.5.3. Оператор цикла с постусловием
ОПЕРАТОР ЦИКЛА С ПОСТУСЛОВИЕМ имеет структуру:
REPEAT оп-р1;
оп-р2;
…
оп-рk
UNTIL условие;
В отличие от оператора While оператор цикла REPEAT
во-первых, выполняется по крайней мере один раз, то есть сначала выполняются все операторы оп-р1, оп-р2,…, оп-рk, а затем проверяется условие,
во-вторых, повторное выполнение операторов оп-р1,
оп-р2,…, оп-рk, происходит до тех пор, пока условие = false.
Поэтому можно сказать, что оператор While выполнается пока условие истинно, а оператор Repeat выполнается до тех пор, пока условие не станет истинно.
Замечание. Для корректной работы операторов цикла проверяемые условия должны зависеть от действий внутри цикла.
В противном случае возможно неограниченное повторение цикла («зацикливание» программы) в операторе While при условие=True и в операторе Repeat при условие =False.
Рекомендации по применению. В отличие от оператора For операторы While и Repeat следует применять в тех случаях, когда количество выполнений цикла неизвестно и не может быть вычислено до начала выполнения оператора цикла. В частности, оператор цикла Repeat удобно применять для организации повторного выполнения программы при изменяемых значениях исходных данных, задаваемых пользователем. В этом случае в программе следует предусмотреть формирование запроса на повторное выполнение программы, например, следующим образом:
Repeat
……….
Операторы программы
……….
Write(‘Повторить работу программы? – Y/N’);read(povtor);
Until povtor = (’N’ or ‘n’);
Рассмотрим пример применения оператора Repeat для второго варианта организации работы предыдущей программы (пример 3), в котором повторное решение задачи при другом значении Е происходит без выхода из программы.
Пример 3.1.
Program sum_r2;{Вариант 2: Repeat – для повторного ввода данных}
Label 1;{метка}
Var k:integer;
Sum,a,E:real;{a – очередной элемент ряда}
Povtor:char;
Begin
REPEAT
1: write(‘Задайте значение Е>0: ’);readln(E);
{Очевидно, что при Е>=1 задача теряет смысл, поэтому
проверяется условие корректности задания значения Е:}
if E>=1 then
begin writeln(‘Значение Е задано не корректно. Надо Е<1’);
goto 1
end;
a:=1;{первый элемент ряда равен 1}
Sum:=0;k;=0;
While a > E do
Begin k:=k+1;a:=1/sqr(k);sum:=sum+a;
writeln(‘На шаге’, k:3, ‘ сумма ряда S=’,sum);
End;
Write(‘Повторить работу программы? – Y/N’);
read(povtor);
UNTIL povtor = (’N’ or ‘n’);
Writeln(‘Решение закончено. Нажмите Enter’);readln
End.
Как уже отмечалось выше, одним из требований структурного программирования является последовательное прочтение текста программы, без возврата на предыдущие операторы. В частности, это требование проявляется в отказе от применения оператора безусловного перехода GOTO. Хотя отказ этот высказывается не в категаричном запрете, а в форме рекомендаций и, следовательно, его использование не является ошибкой (см. предыдущий пример). Покажем на том же примере предыдущей задачи, как можно избежать применения оператора GOTO. Здесь приводится только фрагмент программы, необходимый для иллюстрации сказанного:
Program sum_r3;{Вариант 3: Repeat для корректного ввода Е}
Var k:integer;
Sum,a,E:real;{a – очередной элемент ряда}
Povtor:char;
Begin
REPEAT
Repeat write(‘Задайте значение Е>0: ’);readln(E);
{Очевидно, что при Е>=1 задача теряет смысл, поэтому
проверяется условие корректности задания значения Е:}
if E>=1 then
writeln(‘Значение Е задано не корректно. Надо Е<1’);
Until E<1;{При корректном задании Е условие Е<1 принимает значение True и программа выходит из внутреннего цикла Repeat, продолжая выполнение следующих операторов: }
a:=1;{первый элемент ряда равен 1}
sum:=0;………………………