Алфавит языка
В алфавит языка ТУРБО ПАСКАЛЬ входят следующие символы:
² прописные и строчные буквы латинского алфавита, а также символ подчеркивания, который используется наравне с буквами;
² арабские десятичные цифры;
² специальные знаки:
+ - * / > < = ; # ‘ , . : [ ] { } ( ) $ ^ @
К специальным знакам относятся также следующие пары символов:
<> <= >= := (* *) (. .) ..
В программе эти пары символов нельзя разделять пробелами.
Русские буквы можно употреблять только:
² в символьных и строковых константах;
² внутри комментариев.
Особое место в алфавите языка занимают пробелы, которые рассматриваются как ограничители идентификаторов, констант, чисел, служебных слов. Несколько рядом расположенных пробелов считаются одним пробелом.
Идентификаторы
Идентификаторы в ТУРБО ПАСКАЛЕ – это имена констант, переменных, типов, процедур, функций, модулей и программ. Идентификаторы могут иметь переменную длину, но значащими являются только первые 63 символа.
Идентификатор начинается с буквы или знака подчеркивания, за которым могут следовать буквы, цифры и знак подчеркивания. Пробелы и специальные символы не могут входить в идентификатор.
Константы и переменные
Константами называются данные, значения которых заданы в описательной части программы, и в процессе выполнения программы не изменяются.
В качестве констант в ТУРБО ПАСКАЛЕ чаще всего используются целые или вещественные числа, логические константы, символы, строки символов.
Целые числа записываются со знаком или без него по обычным правилам и могут иметь значения от –2147483648 до +2147483647.
Вещественные числа записываются со знаком или без него с использованием десятичной точки и/или экспоненциальной части. Экспоненциальная часть начинается символом е или Е, за которым могут следовать знаки << + >> или << - >> и десятичный порядок. Символ е (Е) означает начало десятичного порядка и имеет смысл << умножить на 10 в степени …>>.
Например, число 5.25·104 запишется в Е-форме как 5.25Е4, а число 8·10-5 – как 8Е-5.
Если в записи вещественного числа присутствует десятичная точка, то перед точкой и за ней должно быть хотя бы по одной цифре.
Логическая константа – это либо слово FALSE (ложь), либо TRUE (истина).
Символьная константа – любой символ, заключенный в апострофы.
Строковая константа – любая последовательность символов, заключенная в апострофы. Строка символов может быть пустой, т.е. не иметь никаких символов внутри апострофов.
Все константы должны быть описаны в специальном разделе описательной части программы, который начинается служебным словом const.
Формат описания констант:
<идентификатор>=<значение константы>;
Пример раздела описаний констант:
const
N=20;
Alpha=3.2e-5;
Ch=’z’;
Name=’Вова Сидоров’;
Тип констант определяется формой их записи в разделе описаний.
Переменными называются величины, которые могут менять свои значения в процессе выполнения программы.
Все переменные программы должны быть описаны в специальном разделе описательной части программы, который начинается словом var.
Формат описания переменных:
<идентификатор>:<тип>;
Пример описаний переменных:
var
I,J :integer;
Beta :real;
c,d :char;
slovo:string;
Кроме констант и переменных в ТУРБО ПАСКАЛЕ используются так называемые типизированные константы, которые по сути являются не константами, а переменными. Единственное отличие типизированных констант от переменных заключается в том, что при инициализации в неё помещается указанное значение. Правильнее было бы назвать их «инициализируемая переменная» (именно так называются эти величины в Help ТУРБО ПАСКАЛЯ). Типизированные константы описываются в разделе констант.
Формат описания типизированных констант:
<идентификатор>:<тип>=<значение>;
Пример описания типизированных констант (обратите внимание на расста-новку скобок):
const
n: Integer=20;
e: Real =2.71;
t: array[1..5] of integer = (1, 3, -5, 0, 12);
mas: array[1..3, 1..2] of integer = ((3, 18),
(7, -4),
( 5, 0));
Выражения
Основными элементами, из которых конструируется программа, являются константы, переменные и обращения к функциям. Каждый из этих элементов характеризуется своим значением и принадлежит к какому-либо типу данных.
Частным случаем выражения может быть просто одиночный элемент, т.е. константа, переменная или обращение к функции. В общем случае выражение состоит из нескольких элементов (операндов) и знаков операций. Тип значения выражения определяется типом операндов и видом примененных к ним операций.
Примеры наиболее распространенных типов выражений:
Арифметические выражения (имеющие значением число):
33
8-3
sqrt(b+7)+t[i]
(A+B)/C/D
((x+y)/19)*(2/(x+1)+5)
Строковые выражения (имеющие значением строку символов):
’Вован’
Copy(’интеграл’,3,3)
Delete(’барабан’,5,2)
Логические выражения (имеющие значением true или false):
x < 0
c > ’z’
Copy(S1,n,e) <> S2
Операции
Из многих видов операций, определенных в Паскале, чаще всего используются арифметические операции и операции отношения. Выражения соответственно называются арифметическими выражениями и отношениями в зависимости от того, какого типа операнды и операции в них используются.
Тип значения, вычисляемого с помощью выражения, определяется типом его операндов и знаками выполняемых над ними операций.
Основные арифметические операции языка представлены в таблице 2.1
Таблица 2.1 – Арифметические операции
Операции | Действие | Типы операндов | Тип результата |
* | умножение | целый вещественный | целый вещественный |
/ | деление | целый вещественный | вещественный вещественный |
div | целочисленное деление | целый | целый |
mod | остаток от деления | целый | целый |
+ | сложение | целый вещественный | целый вещественный |
- | вычитание | целый вещественный | целый вещественный |
Приоритет операций убывает в указанном порядке, для изменения порядка выполняемых действий используются круглые скобки.
Целочисленное деление вычисляет целую часть частного, дробная часть отбрасывается, например, значение выражения 13 div 5 равно 2.
Деление по модулю (mod) вычисляет остаток, полученный при выполнении целочисленного деления, например, значение выражения 13 mod 5 равно 3.
При работе с Паскалем очень важно представлять, какой тип будет иметь значение вычисленного арифметического выражения. Для этого можно использовать таблицу 1.3 или запомнить простое правило:
Результат операций *, div, mod, +, - над целыми типами есть целое число, во всех остальных случаях результат – вещественное число.
Условием называется конструкция языка, в которой два выражения связаны знаком операции отношения.
Операции отношения сравнивают два операнда и определяют, истинно значение или ложно.
В таблице 2.2 приведены основные операции отношения, допустимые в ТУРБО ПАСКАЛЕ.
Результат операции отношения всегда имеет булевский тип и принимает значения True или False.
Таблица 2.2 – Операции отношения
Операция | Название | Условие | Результат |
= | равно | A=B | true, если А равно В |
<> | не равно | A<>B | true, если А не равно В |
> | больше | A>B | true, если А больше В |
< | меньше | A<B | true, если А меньше В |
>= | больше или равно | A>=B | true, если А больше или равно В |
<= | меньше или равно | A<=B | true, если А меньше или равно В |
Результатом выполнения логического (булевского) выражения является значение True или False. Операндами служат данные только булевского типа. Компонентами логических выражений являются:
²логическая константа;
²логическая переменная;
²логическая функция;
²условие.
Список основных логических операций приведен в таблице 2.3.
Таблица 2.3 – логические операции
Операция | Действие | Выражение | Операнды | Результат | |
A | B | ||||
not | логическое НЕ | not A | true false | false true | |
and | логическое И | A and B | true true false false | true false true false | true false false false |
or | логическое ИЛИ | A or B | true true false false | true false true false | true true true false |
Примеры логических выражений:
² (x > 5) and (x < 10) значение выражения равно true, если 5 < x < 10 и false в противном случае;
² (L mod 2 = 0) or (L mod 3 = 0) значение выражения равно true, если число L делится без остатка на 2 или на 3 и false в противном случае.
При вычислении выражений любого типа приоритет вычислений определяется расставленными круглыми скобками, а при их отсутствии – по таблице 2.4 (в порядке убывания приоритета).
Таблица 2.4 – Приоритет операций
Приоритет | Операция |
1 | not |
2 | *, / , div , mod , and |
3 | +, - , or , xor |
4 | =, <> , < , > , <= , >= , in |
Выражения любого типа, заключенные в круглые скобки, трактуются как один операнд. Это значит, что операции, стоящие в скобках, будут выполняться в обычном порядке, но раньше, чем операции, находящиеся за скобками. При записи выражений, содержащих скобки, должна соблюдаться парность скобок, т.е. число открывающихся скобок должно быть равно числу закрывающихся. Нарушение парности скобок - наиболее распространенная ошибка при записи выражений.
Еще одна достаточно часто встречающаяся ошибка при записи арифметических выражений – нарушение порядка вычисления соответствующего выражения. Так, например, математическое выражение можно записать как A*B/(C*D) или A*B/C/D, но не A*B/C*D.
Следует учесть, что в отличие от многих других языков программирования, в Паскале логические операции имеют более высокий приоритет, чем операции отношения, поэтому чтобы не запутаться в очередности выполнения логических операций, их элементарные компоненты рекомендуется заключать в круглые скобки, как это показано выше.
Математические функции
Математические функции могут быть компонентами арифметических и логических выражений, для правильного их применения важно знать тип результата выполнения данной функции. Тип результата применения функции зависит как от вида функции, так и от типа аргументов этих функций. Основные математические функции Паскаля приведены в таблице 2.5.
Таблица 2.5 – Математические функции
Функция | Назначение | Тип результата |
Abs(x) | абсолютное значение аргумента | совпадает с типом х |
ArcTan(x) | арктангенс аргумента | вещественный |
Chr(x) | cимвол с заданным порядковым номером x | Char |
Cos(x) | косинус аргумента | вещественный |
Dec(x) | уменьшение значения x на 1 | целый |
Exp(x) | е х | вещественный |
Frac(x) | дробная часть числа | вещественный |
Inc(x) | увеличение значения x на 1 | целый |
Продолжение Таблицы 2.5
Функция | Назначение | Тип результата |
Int(x) | целая часть числа | вещественный |
Ln(x) | натуральный логарифм | вещественный |
Odd(x) | проверка аргумента на нечетность | логический |
Ord(x) | Порядковый номер, соответствующий значению x | целый |
Pi | Pi = 3.14159265… | |
Randomize | Инициализирует случайным значением встроенный генератор псевдослучайных чисел | |
Random Random(M) | Псевдослучайное число в диапазоне от 0 до 1 Псевдослучайное число в диапазоне от 0 до M-1 | Вещественный целый |
Round(x) | округление аргумента | целый |
Sin(x) | синус аргумента | вещественный |
Sqr(x) | квадрат аргумента | совпадает с типом х |
Sqrt(x) | квадратный корень из аргумента | вещественный |
Trunc(x) | получение целой части аргумента | целый |
Аргумент математических функций должен быть записан в круглых скобках после имени функции.
У тригонометрических функций аргумент задается в радианах.
СТРУКТУРА ПРОГРАММЫ
![]() |
Заголовок программы не обязателен и используется только в декоративных целях.
Заголовок состоит, в наиболее часто используемом случае, из служебного слова P rogram и имени программы, представляющем собой обычный идентификатор Паскаля. Не следует использовать в качестве заголовка идентификаторы переменных, используемых в программе.
Пример заголовка: Program Simple;
Раздел указания используемых модулей начинается со служебного слова U ses, после которого через запятую указываются имена подключаемых модулей.
Данный раздел также является необязательным и используется только в случаях, если в программе используются константы, типы, переменные, процедуры и функции, определенные в стандартных модулях ТУРБО ПАСКАЛЯ (кроме модуля System), или в модулях, созданных пользователем.
Предложение Uses в каждой программе может быть описано только однократно и непосредственно после заголовка программы.
Стандартный модуль System всегда подключается по умолчанию, указывать его в предложении Uses не нужно.
Пример: Uses CRT, GRAPH, MyLib;
Раздел описания констант начинается служебным словом C onst и служит для описания в нем постоянных и типизированных констант, используемых в программе. Формат описаний и пример раздела приведены в пункте 2.3.
Раздел описания типов служит для определения пользовательских типов, определенных программистом, и имеет следующий формат описания:
<имя типа> = <определение типа>;
Подробнее этот раздел будет рассмотрен в разделе 6.1.
Описание переменных начинается со служебного слова V ar, после которого должны быть указаны имена и типы всех переменных, используемых в программе.
Формат описаний и пример раздела приведен в пункте 2.3.
Разделы описаний процедур и функций будут рассмотрены в главе 7.
Раздел операторов (тело программы) является единственным обязательным в структуре программы, он начинается служебным словом Begin и заканчивается словом End. (Точка после End, завершающего программу, - обязательна).
Данный раздел состоит из последовательности операторов, разделенных между собой точкой с запятой. Перед словом End точка с запятой обычно не ставится (хотя ее наличие синтаксической ошибкой не является).
Для лучшего понимания программы в ней часто записывают пояснительный текст – комментарий. Комментарий можно записать в любом месте программы, где разрешен пробел. Текст комментария ограничивается фигурными скобками { } и может содержать любые символы ASCII.
Комментарий не оказывает никакого влияния на работу программы и часто используется при отладке программы, если нужно временно исключить выполнение какой-то её части.
На рисунке 3.1 приведен пример программы, вычисляющей сумму двух чисел, а на рисунке 3.2 – результат работы этой программы.
Program Example_1; { заголовок программы }
Uses CRT; { подключение модуля CRT }
Var x,y,sum : Integer; { описание переменных }
Begin { начало тела программы }
Clrscr; { очистка экрана }
Writeln('=======Программа нахождения суммы двух чисел=======');
Writeln;
Write('Будьте добры, введите, пожалуйста, первое слагаемое -> '); Read(x);
Write('А теперь, если это Вас не очень затруднит, второе -> '); Read(y);
sum:=x+y;
Writeln('Сумма чисел ',x,' и ',y,' равна ',sum);
Writeln(' ******* Программа выполнена ******* ')
end.
Рисунок 3.1 – Программа Example_1 сложения двух чисел
=======Программа нахождения суммы двух чисел=======
Будьте добры, введите, пожалуйста, первое слагаемое -> 44
А теперь, если это Вас не очень затруднит, второе -> 33
Сумма чисел 44 и 33 равна 77
******* Программа выполнена *******
Рисунок 3.2 – Результаты работы программы Example_1
ВВОД-ВЫВОД ДАННЫХ
Решение любой задачи на компьютере не обходится без операций ввода-вывода данных. Ввод данных – это передача информации от внешнего носителя в оперативную память для обработки. Вывод – обратный процесс, когда данные передаются после обработки из ОЗУ на внешний носитель. Внешним носителем может служить клавиатура, монитор, принтер, магнитный диск и другие устройства.
В данном разделе будет рассмотрен только ввод данных с клавиатуры и вывод их на монитор. Ввод данных из файла и вывод в файл будут рассмотрены в главе 9.
Ввод данных с клавиатуры
Процедура чтения Read (иногда, её не совсем точно называют оператором) предназначена для ввода в программу числовых данных, символов, строк.
Формат процедуры:
Read(X1,X2,…XN);
где X1, X2, …, XN – переменные допустимых типов данных.
При выполнении процедуры Read программа приостанавливает своё выполнение и ждет ввода данных с клавиатуры.
Значения X1, X2, …, XN набираются как минимум через один пробел (или Enter) и при вводе высвечиваются на экране. После набора данных нажимается клавиша Enter.
Переменные должны вводиться в строгом соответствии с синтаксисом языка Паскаль. Если соответствие нарушено (например, переменная Х1 объявлена как целая, а на клавиатуре набран символ или число с десятичной точкой), то возникают ошибки ввода-вывода с сообщением I/O Error XX, где ХХ – код ошибки.
Если в программе имеются несколько процедур Read, то отдельные значения переменных можно разделять либо пробелом, либо нажатием клавиши Enter.
Процедура Readln аналогична процедуре Read, единственное отличие заключается в том, что после считывания значения последней в списке переменной, данные для следующей процедуры Readln будут считываться с начала новой строки.
Вывод данных на монитор
Процедура записи Write производит вывод числовых данных, символов, строк и булевских значений.
Формат процедуры:
Write(Y1,Y2,…,YN);
или
Writeln(Y1,Y2,…,YN);
где Y1,Y2,…,YN – выражения целого, действительного, строкового или булевского типа.
Процедура Writeln отличается от процедуры Write тем, что после того, как весь список вывода будет исчерпан, курсор на экране перейдет в начало следующей строки.
Число элементов списка вывода может быть любым ( в том числе и нулевым; при этом процедура Write не выполняет никаких действий, а Writeln осуществляет переход на новую строку вывода).
Так как элементы списка вывода в общем случае являются выражениями, то они, в частности, могут быть и строковыми константами. Это позволяет осуществлять комментированный вывод информации, например:
Writeln(’Площадь круга равна ’,Skr);
Writeln(’По лесу бродило ’,NZ,’ зверей’);
Форматы вывода
В ТУРБО ПАСКАЛЕ при выводе информации на экран или в текстовый файл по умолчанию отводится количество позиций, равное размеру этой информации. Так при выводе символа отводится одна позиция; при выводе строки – число позиций, равное длине строки; при выводе целого числа – число позиций, равное числу значащих цифр плюс одна позиция под знак, если число отрицательное. Это необходимо учитывать при выводе последовательности элементов информации (например, нескольких целых чисел) и предусмотреть меры, чтобы отдельные элементы информации не сливались друг с другом: вывод разделяющих пробелов, разнесение информации по разным строкам и т.д. Исключение составляют вещественные числа – под них выделяется 23 позиции.
Изменить стандартную форму вывода можно с помощью форматов вывода языка Паскаль.
Существуют два основных формата вывода, которые записываются через двоеточие после соответствующего элемента вывода.
Первый из них записывается в виде:
Write(Y:M);
где Y – выражение, значение которого выводится на экран;
М – целое число.
Данный формат можно использовать при выводе значений любого типа и он определяет размер поля, в которое выводится вычисленное значение. Выводимая информация выравнивается по правому краю поля. Если при выводе вещественного числа этот формат задан меньше 10, то он автоматически увеличивается до 10.
Второй формат вида:
Write(Y:M:N);
где M и N – целые числа, используется только с вещественными числами. Величина М имеет тот же смысл, что и в предыдущем случае, но число представляется в форме с фиксированной точкой (естественная математическая форма) и выводится с N знаками после десятичной точки. Если величина М задана такой, что её величина не позволяет вывести число N знаков после десятичной точки, то значение М игнорируется.
На рисунке 4.1 приведен пример программы форматного вывода целых чисел, на рисунке 4.2 – результаты работы, на рисунке 4.3 – пример программы вывода вещественных чисел, на рисунке 4.4 – результаты работы.
Program Example_2;
Var k : integer;
Begin
k:=12345;
Writeln;
Writeln('====================================');
Writeln('Формат вывода Вид вывода');
Writeln(' (k) k=',k);
Writeln(' (k:2) k=',k:2);
Writeln(' (k:5) k=',k:5);
Writeln(' (k:7) k=',k:7);
Writeln(' (k:10) k=',k:10);
Writeln(' (k:13) k=',k:13);
Writeln('====================================')
end.
Рисунок 4.1 – Пример программы форматного вывода целых чисел
====================================
Формат вывода Вид вывода
(k) k=12345
(k:2) k=12345
(k:5) k=12345
(k:7) k= 12345
(k:10) k= 12345
(k:13) k= 12345
====================================
Рисунок 4.2 – Результаты работы программы EXAMPLE_2
Program Example_3;
Var R : real;
Begin
R:=12.34567;
Writeln;
Writeln('==========================================');
Writeln('Формат вывода Вид вывода');
Writeln(' (R) R=',R);
Writeln(' (R:2) R=',R:2);
Writeln(' (R:10) R=',R:10);
Writeln(' (R:11) R=',R:11);
Writeln(' (R:15) R=',R:15);
Writeln;
Writeln(' (R:9:5) R=',R:9:5);
Writeln(' (R:10:5) R=',R:10:5);
Writeln(' (R:5:5) R=',R:5:5);
Writeln;
Writeln(' (R:5:1) R=',R:5:1);
Writeln(' (R:5:2) R=',R:5:2);
Writeln(' (R:5:6) R=',R:5:6);
Writeln;
Writeln(' (R:15:6) R=',R:15:6);
Writeln(' (R:15:7) R=',R:15:7);
Writeln(' (k:15:2) R=',R:15:2);
Writeln('=========================================')
end.
Рисунок 4.3 – Пример программы форматного вывода вещественных чисел
=========================================
Формат вывода Вид вывода
(R) R= 1.23456699999952E+0001
(R:2) R= 1.2E+0001
(R:10) R= 1.2E+0001
(R:11) R= 1.23E+0001
(R:15) R= 1.234567E+0001
(R:9:5) R= 12.34567
(R:10:5) R= 12.34567
(R:5:5) R=12.34567
(R:5:1) R= 12.3
(R:5:2) R=12.35
(R:5:6) R=12.345670
(R:15:6) R= 12.345670
(R:15:7) R= 12.3456700
(k:15:2) R= 12.35
=========================================
Рисунок 4.4 – Результаты работы программы EXAMPLE_3
ОПЕРАТОРЫ
Оператором называется предложение языка программирования, задающее действие, которое необходимо выполнить. Тело программы на языке ТУРБО ПАСКАЛЯ представляет из себя последовательность операторов. Разделителем операторов служит точка с запятой, после последнего оператора программы обычно никаких знаков не ставится.
Оператор присваивания
Оператор присваивания предписывает вычислить выражение, заданное в его правой части, и присвоить результат переменной, идентификатор которой записан слева от знака присваивания.
Общий вид оператора присваивания:
<идентификатор>:=<выражение>;
Примеры операторов присваивания:
A:=10;
B:=A+18.3;
C:=sin(al)*cos(bet);
d:=d+1;
F:=(-b+sqrt(b*b-4*a*c))/(2*a);
Flag:=true;
G:=’N’
Как правило, тип выражения должен совпадать с типом переменной, в противном случае на мониторе появляется сообщение об ошибке ERROR 26 Type mismatch (несовместимость типов). Единственным исключением является случай, когда слева находится переменная действительного типа, а справа – выражение целого типа, такой оператор присваивания допустим.
Значения всех переменных, входящих в выражение, должны быть известны к моменту выполнения оператора присваивания и ответственность за это полностью лежит на программисте. Если значение какой-то переменной будет не определено, то разные языки программирования и даже разные версии одного языка поступают по разному. Некоторые при этом дают сообщение об ошибке, некоторые (например, Турбо Паскаль 6.0) – используют вместо неинициализированной переменной случайное значение, Турбо Паскаль 7.0 считает значения таких переменных равными нулю. Считается дурным тоном программирования надеяться на нулевые значения, присваиваемые переменным по умолчанию; следует придерживаться правила: прежде чем использовать значение переменной, его необходимо определить.
Условный оператор
Существуют две формы условного оператора: сокращенная и полная.
Общий вид условного оператора:
if <логическое выражение> then <оператор>; {сокращенная форма}
if <логическое выражение> then <оператор_1> else <оператор_2>;
{полная форма}
Блок-схемы условного оператора представлены на рисунке 5.1.
![]() |
Сокращенная форма Полная форма
Рисунок 5.1 – Блок-схемы условного оператора
Так как условный оператор является единым оператором ни перед then, ни перед else точку с запятой ставить нельзя.
Пример. Дракон в первые 100 лет своей жизни отращивает по 3 головы в год, вторые 100 лет – по 2 головы, всю остальную жизнь – по одной голове в год. Сколько голов и глаз у дракона, которому N лет ?
Математическая формулировка задачи:
Обозначим: K – число голов у дракона, L – число глаз.
| если N £ 100 |
если 100 < N £ 200 | |
если 200 < N |
L = 2 × K (если предположить, что у дракона по 2 глаза на каждой голове).
На рисунках 5.2, 5.3 представлены два различных алгоритма A1 и A2 решения этой задачи, на рисунках 5.4, 5.5 – соответствующие им программы.
![]() |
![]() |
Program Example_4; { Программа по алгоритму А1 }
Var n,k,l : integer;
begin
Writeln;
Write('Сколько лет дракону? '); Read(n);
If n<=100 then k:=n*3
else if n<=200 then k:=300+(n-100)*2
else k:=500+n-200;
l:=2*k;
Writeln('У вашего дракона ',k,' голов и ',l,' глаз')
end.
Рисунок 5.4 – Программа решения задачи по алгоритму А1
Program Example_5; { Программа по алгоритму А2 }
Var n,k,l : integer;
begin
Writeln;
Write('Сколько лет дракону? '); Read(n);
If n<=100 then k:=n*3;
If (100 < n) and (n<=200) then k:=300+(n-100)*2;
If 200 < n then k:=500+n-200;
l:=2*k;
Writeln('Число голов дракона =',k);
Writeln('Число глаз дракона =',l)
end.
Рисунок 5.5 – Программа решения задачи по алгоритму А2
Составной оператор
Составной оператор представляет собой группу из произвольного числа операторов, разделенных друг от друга точкой с запятой, и ограниченную операторными скобками begin и end.
Общий вид составного оператора:
begin <оператор_1>; <оператор_2>; … ;<оператор_n> end;
После слова begin и перед словом end никакие знаки не ставятся. Составной оператор воспринимается как единое целое и может находиться в любом месте программы, где синтаксис языка допускает наличие оператора.
Операторы цикла
Если в программе необходимо многократно выполнить некоторые операторы, то для этого используются операторы цикла. В языке Паскаль используются три вида операторов цикла: с предусловием (while …), с постусловием (repeat …) и с параметром (for …).
5.4.1. Оператор цикла с предусловием (while …)
Общий вид оператора:
while <логическое выражение> do <оператор>;
Блок-схема оператора цикла while показана на рисунке 5.6.
![]() |
Рисунок 5.6 – Алгоритм работы оператора while
Оператор, стоящий после служебного слова do, часто называют телом оператора цикла, в реальных программах это чаще всего составной оператор.
В качестве иллюстрации применения оператора while рассмотрим решение следующей задачи.
Для заданного Х найти сумму N членов ряда:
Обозначим i – номер слагаемого;
t – числитель i – го слагаемого;
z - знаменатель i – го слагаемого;
S – искомая сумма.
Алгоритм решения задачи представлен на рисунке 5.7, программа – на рисунке 5.8.
Рисунок 5.7 – Алгоритм решения задачи
![]() |
Program Example_6;
Var i,n : integer;
x,t,z,s : Real;
begin
Writeln;
Write('X='); Read(x);
Write('N='); Read(n);
s:=0;
i:=1;
t:=x;
z:=1+x;
While i<=n do begin
s:=s+t/z;
t:=t*x;
z:=z+1;
i:=i+1
end;
Write('S=',s)
end.
Рисунок 5.8 – Программа Example_6
5.4.2 Оператор цикла с постусловием (repeat …)
Общий вид оператора:
Repeat
тело цикла
Until <логическое выражение>;
![]() |
Рисунок 5.9 – Алгоритм работы оператора Repeat
Задача: Для заданного Х найти сумму членов ряда
Вычисления прекратить, когда очередной член суммы по модулю будет меньше заданного Е (этот член должен быть последним в вычисленной сумме).
![]() |
|
Рисунок 5.10 – Алгоритм решения задачи
Program Example_7;
Var i : integer;
x,e,z,s,r : Real;
begin
Writeln;
Write('X='); Read(x);
Write('E='); Read(e);
s:=0;
i:=1;
z:=x*x;
Repeat
r:=i*i/z;
s:=s+r;
z:=z*x*x;
i:=i+1
until abs(r) < e;
Write('S=',s)
end.
Рисунок 5.11 – Программа Example_7
5.4.3 Оператор цикла с параметром (for …)
Общий вид оператора цикла с параметром:
For <S>:=<SN> to <SK> do <оператор>;
где S - целая переменная, называемая параметром цикла;
- целые выражения, определяющие, соответственно, начальное и конечное значения параметра цикла.
Оператор, стоящий после слова do, называют телом цикла, чаще всего это составной оператор.
Оператор For обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны с шагом 1 все значения параметра цикла от начального до конечного включительно.
На рисунке 5.12 показаны две блок-схемы оператора цикла; первая из них в точности отражает порядок выполнения оператора, а вторая – условная, более наглядна и проста.
![]() |
а) Схема выполнения. б) Условное обозначение
Рисунок 5.12 – Блок-схемы оператора цикла
В теле цикла запрещается явное изменение значения параметра цикла S и конечного значения SK (например, оператором присваивания).
После завершения работы оператора значение параметра цикла становится неопределенным.
Существует другая, реже используемая, форма оператора for:
For <S>: = <SN> downto <SK> do <оператор>;
Замена служебного слова TO на DOWNTO означает, что шаг наращивания параметра цикла равен (-1), а управляющее условие приобретает вид S ³ SK.
Задача: Вычислить сумму и количество тех двузначных чисел, которые нацело делятся на 3 и не делятся на 4.
![]() |
Рисунок 5.13 – Алгоритм решения задачи
Program Example_8;
Var i,n,s : integer;
begin
Writeln;
s:=0;
n:=0;
for i:=10 to 99 do
if (i mod 3 = 0) and (i mod 4 <> 0) then begin
s:=s+i;
n:=n+1
end;
Writeln('S=',s,' n=',n)
end.
Рисунок 5.14 – Программа Example_8
Дата: 2019-03-05, просмотров: 245.