Алгоритм; блок-схема; основные элементы языка Pascal
Выбери формат для чтения
Загружаем конспект в формате docx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекция №1
(Алгоритм; Блок-схема; Основные элементы языка Pascal)
ПРИЛОЖЕНИЕ 1
Begin…….end; это операторные скобки, в них заключ операторы, кот надо
выполнить «группой» в обход правилу следования !
Алгоритмом называется точное описание, определяющее последовательность действий исполнителя, направленных на решение поставленной задачи.
Формы записи алгоритмов
На практике наиболее распространены следующие формы представления алгоритмов: словесная, графическая (блок-схемы), псевдокод и программа.
Словесный способ записи алгоритмов представляет собой описание алгоритма на естественном языке.
Пример. Записать алгоритм нахождения наибольшего общего делителя (НОД) двух натуральных чисел.
Алгоритм может быть следующим:
1. задать два числа;
2. если числа равны, то взять любое из них в качестве ответа и остановиться, в противном случае продолжить выполнение алгоритма;
3. определить большее из чисел;
4. заменить большее из чисел разностью большего и меньшего из чисел;
5. повторить алгоритм с шага 2.
Описанный алгоритм применим к любым натуральным числам и должен приводить к решению поставленной задачи.
Словесный способ не имеет широкого распространения по следующим причинам:
- такие описания строго не формализуемы;
- страдают многословностью записей;
- допускают неоднозначность толкования отдельных предписаний.
Графический способ (или блок-схема) - описание структуры алгоритма с помощью последовательности связанных между собой функциональных блоков, каждый из которых соответствует выполнению одного или нескольких действий. В блок-схеме каждому типу действий (вводу исходных данных, вычислению значений выражений, проверке условий, управлению повторением действий, окончанию обработки и т.п.) соответствует геометрическая фигура, представленная в виде блочного символа. Блочные символы соединяются линиями переходов, определяющими очередность выполнения действий. В таблице приведены наиболее часто употребляемые символы.
Название символа
Обозначение и пример заполнения
Пояснение
Процесс
Вычислительное действие или последовательность действий
Решение
Проверка условий
Модификация
Начало цикла
Предопределенный процесс
Вычисления по подпрограмме, стандартной подпрограмме
Ввод-вывод
Ввод-вывод в общем виде
Пуск-останов
Начало, конец алгоритма, вход и выход в подпрограмму
Документ
Вывод результатов на печать
Блок "процесс" применяется для обозначения действия или последовательности действий, изменяющих значение, форму представления или размещения данных. Для улучшения наглядности схемы несколько отдельных блоков обработки можно объединять в один блок. Представление отдельных операций достаточно свободно.
Блок "решение" используется для обозначения переходов управления по условию. В каждом блоке "решение" должны быть указаны вопрос, условие или сравнение, которые он определяет.
Блок "модификация" используется для организации циклических конструкций. (Слово модификация означает видоизменение, преобразование). Внутри блока записывается параметр цикла, для которого указываются его начальное значение, граничное условие и шаг изменения значения параметра для каждого повторения.
Блок "предопределенный процесс" используется для указания обращений к вспомогательным алгоритмам, существующим автономно в виде некоторых самостоятельных модулей, и для обращений к библиотечным подпрограммам.
Псевдокод - описание структуры алгоритма на естественном, частично формализованном языке, позволяющее выявить основные этапы решения задачи, перед точной его записью на языке программирования. В псевдокоде используются некоторые формальные конструкции и общепринятая математическая символика.
Псевдокод занимает промежуточное место между естественным и формальным языками.
• Он близок к обычному естественному языку, поэтому алгоритмы могут на нем записываться и читаться как обычный текст.
• В псевдокоде используются некоторые формальные конструкции и математическая символика, что приближает запись алгоритма к общепринятой математической записи.
В псевдокоде не приняты строгие синтаксические правила для записи команд, присущие формальным языкам, что облегчает запись алгоритма на стадии его проектирования и дает возможность использовать более широкий набор команд, рассчитанный на абстрактного исполнителя.
Однако в псевдокоде обычно имеются некоторые конструкции, присущие формальным языкам, что облегчает переход от записи на псевдокоде к записи алгоритма на формальном языке. В частности, в псевдокоде, так же, как и в формальных языках, есть служебные слова, смысл которых определен раз и навсегда. Они выделяются в печатном тексте жирным шрифтом, а в рукописном тексте подчеркиваются.
Единого или формального определения псевдокода не существует, поэтому возможны различные псевдокоды, отличающиеся набором служебных слов и основных (базовых) конструкций.
Программа - описание структуры алгоритма на языке алгоритмического программирования.
Основные алгоритмические конструкции
Элементарные шаги алгоритма можно объединить в следующие алгоритмические конструкции: линейные (последовательные), разветвляющиеся, циклические.
Линейной называют алгоритмическую конструкцию, реализованную в виде последовательности действий (шагов), в которой каждое действие (шаг) алгоритма выполняется ровно один раз.
Разветвляющейся называется алгоритмическая конструкция, обеспечивающая выбор между двумя альтернативами в зависимости от значения входных данных.
Линейный алгоритм Разветвляющийся алгоритм
Циклической называют алгоритмическую конструкцию, в которой некоторая, идущая подряд группа действий (шагов) алгоритма может выполняться несколько раз, в зависимости от входных данных или условия задачи.
Примеры составления блок-схемы алгоритма
Пример 1. Составить схему алгоритма вычисления значения:
Для построения блок – схемы алгоритма опишем последовательность действий, необходимых для решения данной задачи:
• начало
• ввод чисел a,b
• вычисление х
• вычисление z
• вывод результата
• конец
Исходя из этого, составляем блок-схему алгоритма согласно ГОСТ, используя соответствующие блоки.
Пример 2. Составить схему алгоритма вычисления значения: x=a+b при a>b, x=a*b, при a<=b.
ПРИЛОЖЕНИЕ 2
Основные
Алфавит языка состоит из множества символов, включающих в себя буквы, цифры и специальные символы.
Латинские буквы: от А до Z (прописные) и от а до z (строчные), символ “подчеркивания”, который в языке считается буквой.
Цифры: арабские от 0 до 9 и шестнадцатеричные (первые 10 цифр от 0 до 9 - арабские, остальные шесть - латинские буквы: А, B, C, D, E, F).
Специальные символы: + - * / = , . : ; < > [ ] ( ) { } ', $, пары <> <= >= := (* *) (. .), пробел (символы (. .) соответствуют символам [ ], несколько пробелов считаются одним).
К спецсимволам относятся также служебные слова - abs, and, array, begin, case, const, dir, do, downto, else, end, for, function, goto, if, int, label, mod, not, of, or, procedure, program, repeat, shr, then, to, type, var, while, with и др. Смысл зарезервированных слов фиксирован строго. При этом набор зарезервированных слов может меняться от версии к версии.
Идентификатор - это последовательность букв, цифр и знаков подчеркивания, начинающихся не с цифры. Под идентификатором мы будем понимать ячейку памяти ЭВМ, которая имеет свое имя и в которой хранится информация. В Паскале строчные и прописные буквы в идентификаторах и служебных словах не различаются. Идентификаторы могут иметь произвольную длину, но значащими являются только первые 63 символа. Хорошим стилем является осмысленный выбор имени идентификатора. Зарезервированные слова не могут использоваться в качестве идентификаторов.
Комментарии заключаются либо в фигурные скобки { комментарий 1 }, либо в символы (* комментарий 2 *) и могут занимать любое количество строк. Последовательность из трех символов (*) начинает комментарий до конца строки. Текст комментария игнорируется при компиляции, если это не директивы компилятора, которые имеют вид {$ }.
Константа - это величина, которая в ходе выполнения программы принимает одно значение. Ее значение устанавливается еще до того, как программа начнет выполняться, а в ходе ее запуска сохраняет свое значение неизменной на всем протяжении работы программы.
В качестве констант могут использоваться целые, вещественные, шестнадцатеричные числа, логические константы, символы, строки символов, множества:
а) целые числа записываются без дробной части со знаком или без него;
б) вещественные числа записываются со знаком или без него, с фиксированной или плавающей точкой (например, +3.14 или -19е-5);
в) логическая константа - либо false либо true (ложь или истина);
г) символьная константа - любой символ, заключенный в апострофы (например, '<>', 'Y');
д) строковая константа - любая последовательность символов, заключенная в апострофы (например, 'это моя строка', ' "').
В Паскале существуют типизированные константы, представляющие собой переменные простых или составных типов (кроме файлов) с начальным значением.
Переменными называются параметры программы, которые могут менять свое значение в процессе ее выполнения. Все без исключения переменные должны быть описаны в разделе программы, начинающемся со слова VAR. Затем следуют конструкции вида:
список идентификаторов переменных: тип1;
список идентификаторов переменных: тип2;
В списке имена переменных перечисляются через запятую. Кроме базовых типов Турбо Паскаля здесь можно использовать свои типы (описанные ранее в разделе Type).
Арифметические операции, функции, выражения
В Паскале определены следующие операции:
• Унарные: not (отрицание);
• Мультипликативные: * (умножение), / (деление), div (деление нацело), mod (остаток от целочисленного деления), and (логическое “И”);
• Аддитивные: + (сложение), - (вычитание), or (логическое “ИЛИ”);
• Отношения: = (равно), <> (не равно), < (меньше), > (больше), <= (меньше или равно), >= (больше или равно).
Примечание: в Паскале нет операции возведения в степень. Вместо этого для возведения в целую степень можно использовать операцию умножения, а в дробную – выражение, использующее операцию логарифмирования и потенцирования: xy=ey*lnx, что на языке Паскаль соответствует выражению exp(y*ln(x)) с использованием двух стандартных функций exp(<выражение>) и ln(<выражение>).
Стандартные функции Паскаля
Для вычисления наиболее распространенных математических функций в Турбо-Паскале предусмотрены следующие стандартные функции:
Обращение
Функция
Pi
Число π
Sin(x)
Синус х (х в радианах)
Cos(x)
Косинус х (х в радианах)
Arctan(x)
Арктангенс х (х в радианах)
Exp(x)
еx – экспонента
Ln(x)
Натуральный логарифм x
Sqr(x)
Квадрат числа х
Sqrt(x)
Квадратный корень из числа х
Abs(x)
Абсолютная величина числа х
Trunc(x)
Ближайшее целое, не превышающее х по модулю
Frac(x)
Дробная часть числа х
Int(x)
Целая часть числа х
Round(x)
Округление числа до ближайшего целого
Succ(x)
Определение следующего по порядку элемента из списка
Pred(x)
Определение предыдущего элемента из списка
Random
Псевдослучайное число в интервале [0; 1)
Random(x)
Псевдослучайное число в интервале [0; х)
.
Выражение - это единица языка, которая определяет способ вычисления некоторого значения. Выражения формируются из констант, переменных, функций, знаков операций и круглых скобок по определенным синтаксическим правилам.
В Паскале имеется большое количество встроенных функций для работы с данными каждого типа. Имена (указатели) этих функций с аргументом в круглых скобках могут также встречаться в выражениях.
Круглые скобки используются для изменения порядка вычисления частей выражения. Выражения без скобок вычисляются в порядке, соответствующем приоритету операций. Приоритеты расставлены таким образом:
• вычисления в круглых скобках;
• вычисление значений функций;
• унарные операции ( not,+,- );
• операции типа умножения ( *,/,div,mod,and );
• операции типа сложения ( +,-, or, xor );
• операции отношения ( =, <>, <, >, <=, >= ).
В логическом выражении 2<=4 and 5>3 Паскаль выдаст ошибку, поскольку операция and будет выполнена раньше операций сравнения. Верная запись - (2<=4) and (5>3).
Структура программы
Программа, написанная на Паскале, состоит из заголовка и тела (блока), в конце которого следует точка – признак конца программы. В свою очередь, блок содержит разделы описаний и раздел операторов:
Program <имя программы>; { Заголовок программы }
Uses … ; { Подключение модулей }
Label ... ; { Раздел объявления меток }
Const ... ; { Раздел объявления констант }
Type ... ; { Раздел объявления новых типов }
Var ... ; { Раздел объявления переменных }
Procedure ... ; { Описание своих процедур }
Function ... ; { Описание своих функций }
Begin { начало основной программы }
<раздел операторов>
End.
Операторы языка
Оператор – это описание действий, которые будут выполнены при реализации алгоритма. В Паскале существуют 2 вида операторов: простые и структурные.
Простые операторы: оператор присваивания, оператор перехода, процедуры и функции, пустой оператор. Структурные операторы: составной оператор, оператор условия, оператор варианта, оператор цикла.
Пустой оператор
В программе может применяться пустой оператор, не выполняющий никакого действия, представляющий собой точку с запятой. Он может потребоваться для осуществления на него безусловного перехода или для более наглядного просмотра программы.
Goto M1;
. . . .
M1:
. . . .
Оператор присваивания
Оператор присваивания используется для задания значения переменных и имеет следующий синтаксис:
имя_переменной:= выражение;
Вычисляется выражение, стоящее в правой части оператора, после чего его значение записывается в переменную, имя которой стоит слева. Тип выражения и тип переменной должны быть совместимы, т.е. множество допустимых значений для типа выражения содержится во множестве допустимых значений для типа переменной.
Составной оператор
Составным оператором считается последовательность произвольных операторов, заключенная в операторные скобки - зарезервированные слова begin ... end. Допускается произвольная глубина вложенности составных операторов. Составной оператор применяется там, где по синтаксическим правилам языка может стоять только один оператор, а нам надо выполнить несколько действий. В этом случае набор необходимых команд должен быть оформлен как составной оператор. По сути, все тело программы представляет собой один составной оператор.
Простейший ввод и вывод
Рассмотрим простейшие процедуры ввода и вывода. По умолчанию ввод осуществляется с клавиатуры, а вывод на экран. К операторам ввода относятся:
Read(<список переменных через запятую>);
Readln(<список переменных>);
Readln;
Второй отличается от первого тем, что после ввода переводит курсор на новую строку, точнее, в конце своей работы считывает с клавиатуры код клавиши . Третий оператор используется для организации паузы - выполнение программы продолжится, как правило, только после нажатия на клавиатуре клавиши .
К операторам вывода относятся:
Write(<список вывода>);
Writeln(<список вывода>);
Writeln;
В списке вывода кроме имен переменных можно писать строковые константы (последовательность символов в апострофах) и даже выражения (выводятся их значения). Второй оператор отличается от первого тем, что после вывода переводит курсор на новую строку. Третий оператор просто переводит курсор на новую строку.
Форма записи параметра в процедуре Write имеет следующий вид:
Write(параметр, параметр:B1, параметр:B1:B2)
где В1 - ширина поля, B2 - длина дробной части. По умолчанию integer занимает 7 позиций, real - 13 позиций. В целой части числа записывается первая отличная от нуля цифра. Шесть последующих цифр составляют дробную часть мантиссы. Одну позицию занимает буква е, которая обозначает основание степени, которое соответствует числу 10, одна позиция отводится под знак порядка и две - для величины порядка.
Например, если даны три числа: А = 3.6, В = 7.4, С = -2.5 и напечатан оператор Write('A=',A:4:1,' B=',B,' C=',C:6:1), то в результате будет выведено: А= 3.6 В= 7.400000Е+00 С= -2.5
Рассмотрим в качестве примера программу определения координат материальной точки (х; y) для заданной секунды ее полета (t) по параболической траектории, вычисляемых по формулам:
х = v·t·cos(O), y = v·t·sin(O) - g·t2 / 2,
где v - начальная скорость точки, О - угол ее бросания, g - ускорение свободного падения, равное 9,81 м/с2.
program traekt;
Const g = 9.81;
Var x, y, v, O : real; t : integer;
Begin
read(v, O, t);
x := v * t * cos(O);
y := v * t * sin(O) - g * t * t /2;
writeln('Координата х=',x,' Координата y=',y)
End.
ПРИЛОЖЕНИЕ 3
Разветвляющиеся алгоритмы
В Паскале имеется возможность нелинейного хода программы, т.е. выполнения операторов не в том порядке, в котором они записаны. Такую возможность нам предоставляют разветвляющиеся алгоритмы. Они могут быть реализованы одним из трех способов: с использованием операторов перехода, условного оператора или оператора выбора.
Условный оператор
Условный оператор IF позволяет изменить порядок выполнения команд в зависимости от некоторого логического условия, т.е. он осуществляет ветвление вычислительного процесса. Условный оператор имеет вид:
IF <условие> THEN <оператор1> [ELSE <оператор2>];
В случае истинности логического выражения, стоящего в условии, выполняется <оператор1>, а <оператор2> пропускается. При ложном значении логического выражения пропускается <оператор1> и выполняется <оператор2>.
Оператор IF может быть полным (присутствуют обе ветви) или неполным (Else-ветви нет, при ложном условии ничего не делается). По правилам каждая из ветвей может содержать либо один выполняемый оператор, либо несколько, объединенных в составной. Точка с запятой перед Else считается ошибкой.
Пример. Ввести целое число. Вывести соответствующий ему символ ASCII-таблицы, либо сообщить, что такого символа нет (0-31 - управляющие коды, затем до 256 - печатаемые символы).
program ascii_symbol;
var i:word;
begin
write('Введите целое число: '); readln(i);
if (i>31) and (i<256) then
writeln('Соответствующий символ - ', Chr(i))
else writeln('Такого символа нет');
readln
end.
Оператор выбора
Оператор выбора является обобщением условного оператора: он дает возможность выполнить один из нескольких операторов в зависимости от значения некоторого выражения, называемого селектором.
CASE <селектор> OF
<список меток 1> : <оператор 1>;
<список меток 2> : <оператор 2>;
. . . . . . . . . . . . .;
<список меток N> : <оператор N>;
ELSE <оператор>
END;
селектор - выражение любого перечисляемого типа, кроме вещественного;
оператор - любой оператор языка, в том числе и составной;
список меток - список разделенных запятыми значений выражения 'селектор' или одно его значение; тип метки и селектора должен быть одинаков;
Оператор варианта выбирает для исполнения тот ОПЕРАТОР, одна из меток которого равна текущему значению выражения СЕЛЕКТОР. Если ни одна из меток не равна текущему значению селектора, то никакие операторы не выполняются, либо выполняются операторы, следующие за зарезервированным словом ELSE (если такое имеется).
Ветвь Else не обязательна, и в отличие от оператора if, перед ней ставится точка с запятой. Если для нескольких значений <селектора> действия совпадают, то эти константы можно перечислить через запятую перед двоеточием или задать диапазон значений (нижняя граница .. верхняя граница).
Пример: Вводится целое число, если это цифра, то определить четная она или нет, а если число, то определить попадает ли оно в диапазон от 10 до 100, если нет, то выдать соответствующее сообщение.
program chislo;
var i:integer;
begin
write('Введите целое число: ');
readln(i);
case i of
0,2,4,6,8 : writeln('Четная цифра');
1,3,5,7,9 : writeln('Нечетная цифра');
10...100,200 : writeln('Число от 10 до 100 или 200');
else writeln('Число либо отрицательное, либо > 100, но не 200');
end;
readln
end.
ПРИЛОЖЕНИЕ 4
Циклические алгоритмы
Последовательность команд, выполняющихся несколько раз в зависимости от некоторого условия, называется циклом.
Цикл с параметром
Если заранее известно число повторений цикла, то в программе используются циклы с параметром. Оператор цикла For организует выполнение одного оператора заранее определенное число раз. Его еще называют цикл со счетчиком. В общем виде цикл с параметром задается следующим образом:
FOR <параметр> := TO DO <оператор>
Здесь параметр цикла (счетчик) представляет собой переменную порядкового типа; и - выражения, определяющие начальное и конечное значение счетчика; <оператор> - один (возможно составной) оператор, который называют телом цикла, повторяемый определенное число раз.
На первом шаге цикла параметр принимает значение nz. После каждого выполнения тела цикла, если параметр цикла не равен kz, происходит увеличение параметра на единицу. Если nz > kz, то <тело цикла> не будет выполнено ни разу и выполнение цикла с параметром сразу же закончится.
Возможна другая форма цикла с параметром.
FOR <параметр> := < kz > DOWNTO < nz > DO <оператор>,
которая выполняется аналогичным образом, но значение <параметра> изменяется с шагом, равным -1.
Рекомендации: Использовать цикл for при заранее известном количестве повторений. Не изменять параметр в теле цикла. При использовании кратных (вложенных) циклов применять разные переменные в качестве параметров. Определять до цикла значения всех используемых в нем переменных. Не ставить точку с запятой после do.
Пример 1. Программа DemoFor1 выводит на экран таблицу перевода из градусов по шкале Цельсия(С) в градусы по Фаренгейту(Р) для значений от 15°С до 30°С с шагом 1 градус. Перевод осуществляется по формуле: F = С*1.8+32.
program DemoFor1;
var
I: integer;
F: real;
begin
Writeln (' Температура ') ;
for I:= 15 to 30 do {Заголовок цикла с параметром}
begin {Начало тела цикла}
F:= I*1.8+32;
Writeln('no Цельсию= ',I,' по Фаренгейту= ', F:5:2)
end; {Конец тела цикла}
end.
В блоке описания переменных описаны параметр цикла I типа integer и переменная F — температура по Фаренгейту типа real. Переменная I, помимо функций управляющей переменной, является переменной, хранящей целочисленные значения температуры по шкале Цельсия. В начале выполнения программы на экран выводится надпись ' Температура ', а затем оператором повтора выводится таблица соотношения температуры в шкалах Цельсия и Фаренгейта. Печать таблицы выполняется оператором Writeln('По Цельсию= ',I,' по Фаренгейту= ' , F: 5:2).
Цикл выполняется следующим образом.
При первом обращении к оператору for вычисляются значения начального (15) конечного (30) параметров цикла, и управляющей переменной I присваивается начальное значение 15.
Затем циклически выполняется следующее:
1. Проверяется условие I<=30.
2. Если оно соблюдается, то выполняется составной оператор в теле цикла, т.е. рассчитывается значение выражения I* 1.8+32, затем оно присваивается переменной F, и на экран выводится сообщение: 'По Цельсию= ', I, ' по Фаренгейту= ', F:5:2.
Если условие I<=30 не соблюдается, т. е. как только I станет > 30, оператор тела цикла не выполняется, а управление в программе передается за пределы оператора for, в нашем примере на оператор end. Программа завершает работу.
3. Значение параметра цикла I увеличивается на единицу, и управление передается в заголовок цикла for для проверки условия.
Далее цикл повторяется, начиная с пункта 1.
Пример 2: Вводятся 10 чисел, посчитать среди них количество положительных.
program cycle_for1;
var i,kn:byte; x:real;
begin
kn:=0;
for i:=1 to 10 do
begin
writeln('Введите ',i,' число: ');
readln(x);
if x>0 then kn:=kn+1 {увеличиваем количество на 1}
end;
writeln('Вы ввели ',kn,' положительных чисел.');
readln
end.
Пример 3: Напечатать буквы от 'Z' до 'A'.
program cycle_for2;
var c:char;
begin
for c:='Z' downto 'A' do write(c);
readln
end.
В данной программе применяется цикл for с убыванием значения управляющей переменной (используется указание downto - убывание).
Циклы с условием
Если заранее неизвестно число повторений цикла, то используются циклы с условием. В Паскале имеется два типа таких циклов. Это циклы с предусловием и постусловием.
Цикл с предусловием
WHILE <логическое выражение> DO <оператор>;
Выполнение оператора цикла с предусловием начинается с проверки условия, записанного после слова while. Если оно соблюдается, то выполняется <тело цикла>, а затем вновь проверяется условие и т.д. Как только на очередном шаге окажется, что условие не соблюдается, то выполнение <тела цикла> прекратится.
Если <тело цикла> состоит из нескольких операторов, то они объединяются операторными скобками.
В теле цикла обязательно должен быть оператор, влияющий на соблюдение условия, в противном случае произойдет зацикливание.
Пример 4. Найти сумму 10 произвольно введенных целых чисел.
program DemoWhile;
const
Limit =10; {Ограничение на количество вводимых чисел}
var Count, Item, Sum: integer;
begin
Count:=0; {Счетчик чисел}
Sum:= 0; {Сумма чисел}
while (Count < Limit) do {Условие выполнения цикла}
begin
Count:= Count+1;
Write('Введите ', Count, ' - e целое число: ');
Readln(Item);{Ввод очередного числа с клавиатуры}
Sum:= Sum+Item;
end;
Writeln('Сумма введенных чисел равна ', Sum) ;
end.
В данном примере в разделе описания констант описана константа Limit=10, задающая ограничение на количество вводимых чисел. В разделе описания переменных описаны переменные Count, Item, Sum целочисленного типа. В начале выполнения программы обнуляются значения счетчика введенных чисел Count и их суммы Sum. Затем выполняются цикл ввода 10 чисел и их суммирование. Вначале оператор условия while проверяет условие Count < Limit. Если условие верно, то выполняется составной оператор в теле цикла:
begin
Count:= Count+1;
Write('Введите ', Count, '-e целое число: ');
Readln(Item) ;
Sum:= Sum+Item;
End;
в котором вводится значение очередного числа, и на это значение увеличивается значение суммы. После этого управление в программе вновь передается оператору цикла while, опять проверяется условие Count < Limit. Если условие верно, то выполняется составной оператор и т. д., пока значение переменной Count будет меньше 10. Как только значение Count станет равно 10 и условие Count < Limit не будет соблюдено, выполнение цикла завершится, а управление в программе будет передано на оператор, находящийся за словом end, т. e. первый оператор за границей while. Это вызов процедуры Writeln, которая выведет сообщение 'Сумма введенных чисел равна' и напечатает значение переменной Sum.
Пример 5: Нахождение наибольшего общего делителя двух целых чисел с помощью алгоритма Евклида.
program Evklid;
var a,b,c:integer;
begin
write('введите два целых числа : ');
readln(a,b);
while b<>0 do
begin
c:=a mod b;
a:=b;
b:=c;
end;
writeln('наибольший общий делитель = ',a);
readln
end.
Пример 6: Пары неотрицательных вещественных чисел вводятся с клавиатуры. Посчитать произведение для каждой пары и сумму всех чисел.
program cycle_while;
var x,y,sum:real; otv:char;
begin
sum:=0;
otv='Д';
while (otv='Д') or (otv='д') do
begin
write('Введите числа x,y > 0 ');
readln(x,y);
writeln('Их произведение = ',x*y:8:3);
sum:=sum+x+y;
write('Завершить программу (Д/Н)? ');
readln(otv);
end;
writeln('Общая сумма = ',sum:8:3);
readln
end.
Цикл с постусловием
REPEAT
<оператор 1>
...
<оператор N>
UNTIL <логическое выражение>
Оператор Repeat организует повторяющееся выполнение нескольких операторов до тех пор пока не станет истинным условие, стоящее в Until-части. Тело цикла обязательно выполняется хотя бы один раз. Таким образом, в этом цикле логическое выражение - это условие выхода из цикла.
При создании циклических алгоритмов Турбо Паскаль позволяет использовать процедуры Continue и Break. Процедура Continue досрочно завершает очередной шаг цикла, передает управление на заголовок. Процедура Break реализует немедленный выход из цикла.
Рекомендации: Для того чтобы избежать зацикливания программы необходимо обеспечить изменение на каждом шаге цикла значения хотя бы одной переменной, входящей в условие цикла. После выхода из цикла со сложным условием (с использованием операций and, or, xor) как правило, необходима проверка того, по какому условию цикл завершен.
Пример 7: Пары неотрицательных вещественных чисел вводятся с клавиатуры. Посчитать произведение для каждой пары и сумму всех чисел.
program cycle_repeat;
var x,y,sum:real; otv:char;
begin
sum:=0;
repeat
write('Введите числа x,y > 0 ');
readln(x,y);
writeln('Их произведение = ',x*y:8:3);
sum:=sum+x+y;
write('Завершить программу (Д/Н)? ');
readln(otv);
until (otv='Д') or (otv='д');
writeln('Общая сумма = ',sum:8:3);
readln