ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.03.2021
Просмотров: 6801
Скачиваний: 51
216
вольных, файловых и т.п. Функции -стандартные и задаваемые программистом - используются в
программе в выражениях.
Выражения строятся из величин - постоянных и переменных, функций, скобок. знаков опе-
раций и т.д. Выражение имеет определенный тип, определяемый типом принимаемых в итоге его
вычисления значений. Возможны выражения арифметические, принимающие числовые значения,
логические, символьные, строковые и т.д. Выражение 5+7 является, несомненно, арифметическим,
выражение А + В может иметь cамый разный смысл - в зависимости от того, что стоит за иденти-
фикаторами А и В.
Процедура
- это программный объект, представляющий некоторый самостоятельный этап
обработки данных. По сути, процедуры явились преемниками подпрограмм, которые были введе-
ны для облегчения разработки программ еще на самых ранних стадиях формирования алгоритми-
ческих языков. Процедура имеет входные и выходные параметры, называемые формальными. При
использовании процедуры формальные параметры заменяются на фактические.
Модуль
(Unit) -
это специальная программная единица, предназначенная для создания биб-
лиотек и разделения больших программ на логически связанные блоки.
По сути, модуль - это набор констант, типов данных, переменных, процедур и функций. В
состав модуля входят разделы: заголовок, интерфейс, реализация, инициализация.
Заголовок
необходим для ссылок на модуль.
Интерфейс
содержит объявления, включая процедуры и функции.
Раздел
«реализация»
содержит тела процедур и функций, перечисленных в интерфейсной
части.
Раздел
«инициализация»
содержит операторы, необходимые для инициализации модуля.
Каждый модуль компилируется отдельно, и каждый элемент модуля можно использовать в
программе без дополнительного объявления.
Контрольные вопросы и задания
1. Какие преимущества имеют языки программирования высокого уровня
по
сравнению с
машинно-ориентированными языками?
2. Каковы основные составляющие языка программирования высокого уровня?
3. В чем различия понятий языков программирования от аналогичных понятий математиче-
ского «языка»?
4. С какой целью используются и что представляют собой металингвистические формулы
Бэкуса-Наура?
5. Что представляет собой синтаксическая диаграмма Вирта?
6. В чем различие между постоянными и переменными величинами? Чем характеризуется
величина?
7. В чем принципиальная разница между величинами простыми и структурированными?
8. Для чего служит описание величин в программах?
9. В чем состоит назначение функций? процедур? модулей?
§3. ПАСКАЛЬ КАК ЯЗЫК
СТРУКТУРНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
3.1. ВВЕДЕНИЕ
Язык Паскаль, начиная с момента своего создания Н.Виртом в 1971 г., играет особую роль
и в практическом программировании, и в его изучении. С непревзойденной четкостью в нем реа-
лизованы принципы структурного программирования, которые мы рассматривали в п. 1.8. Паскаль
стал первым языком, с которым знакомится большинство будущих программистов в мире.
Трансляторы для программ, написанных на Паскале, разработаны для различных компью-
теров и в настоящее время имеют множество разновидностей. Они являются компиляторами, об-
рабатывающими разработанные программистами тексты программ.
Существует много версий языка Паскаль. Различия между ними порой весьма велики. Так,
базовая версия Вирта имеет многократно меньшие возможности чем, скажем, версия Турбо-
217
Паскаль 7.0 (первая, фактически - язык для обучения будущих программистов, а вторая - орудие
профессиональных разработчиков прикладного программного обеспечения). Тем не менее, это
версии одного языка, что, в частности, подтверждается их совместимостью «сверху вниз», т.е. лю-
бая программа, соответствующая «младшей» версии, соответствует и «старшей» (за исключением
малозначащих синтаксических оговорок). Приведенные ниже тексты программ и примеры соот-
ветствуют (если нет специальных оговорок) версиям не ниже Турбо-Паскаль 3.0.
Любая Паскаль-программа является текстовым файлом с собственным именем и с расши-
рением .pas. Рассмотрим в качестве примера текст программы 1 решения квадратного уравнения.
Паскаль-программа имеет вид последовательности символов латинских и русских букв, арабских
цифр, знаков операции, скобок, знаков препинания и некоторых дополнительных символов. В ней
можно выделить описания данных и операторы, описывающие действия, которые надо выполнить
машине над этими данными.
Программа I
program KvadUravn;
(заголовок программы)
var
(список переменных)
а,b,с: real;
(коэффициенты уравнения)
d,xlx2: real;
(вспомогательные переменные)
begin
(начало программы)
writein;
(пропуск строки на экране)
writein('введи a,b,c'); read(а,Ь,с);
(ввод данных)
d:=b*b-4*a*c;
(дискриминант)
if d<0 then
(если d<0, то)
write('корней нет')
(печатать)
else
(иначе)
begin
(начало серии команд)
xl:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*а);
(вычисляем корни)
write('х1=',х1,' х2=',х2)
(печать корней)
end
(конец серии)
end.
(конец программы)
Схематически программа представляется в виде последовательности восьми разделов:
1) заголовок программы;
2) описание внешних модулей, процедур и функций;
3)описание меток;
4) описание констант;
5) описание типов переменных;
6) описание переменных;
7) описание функций и процедур;
8) раздел операторов.
Не в каждой программе обязательно присутствуют все восемь разделов, в простейшей про-
грамме, например, могут быть только 5-й и 8-й разделы.
Каждый раздел начинается со служебного слова, назначение которого зафиксировано в
Паскале так, что его нельзя употреблять для других целей (список и перевод служебных слов дан в
Приложении).
Рассмотрим пример программы 2, вычисляющей длину окружности и площадь круга по
данному радиусу.
Программа 2
program circle;
const
pi=3.14159;
var
r,s,1 : real;
218
begin
writeln (введите радиус'); readln(r);
s:=pi*r*r; l:=2*pi*r;
writeln('площадь круга=',S:8:4); writeln('длина окружности=',
l:8:4)
end.
В этой программе можно выделить четыре раздела. Описание заголовка начинается со слу-
жебного слова program, описание констант - const, описание переменных -var, раздел операторов
начинается с begin. Программа заканчивается служебным словом end, после которого ставится
точка. Описания величин и операторы друг от друга отделяются знаком «точка с запятой».
Для обозначения величин используются имена. Они составляются из латинских букв и
цифр, причем первым символом должна быть буква. В примере использованы имена величин - pi,
r,s и 1.
Имя программы (в примере - circle) выбирается автором и составляется по такому же пра-
вилу.
Постоянные величины (константы) чаще всего бывают числовыми или символьными (но
могут быть и других типов, о которых речь пойдет ниже). Значения символьных констант заклю-
чаются в апострофы.
Постоянные величины описываются в разделе констант по схеме:
const <имя> = <константа>
В разделе констант может быть описано несколько постоянных величин.
Например:
const
pi=3.14159; k=-15; s='площадь';
Данные, обрабатываемые программой, могут быть разных типов (числа, символы, строки,
массивы и т.д.). Тип определяет область допустимых значений, а также операции и функции, при-
меняемые к величинам этого типа. В Паскале имеется несколько встроенных простых типов со
стандартными именами.
Группа типов, значения каждого из которых можно перечислить в некотором списке
- ска-
лярные типы.
Для них определена порядковая функция ord(x) - номер значения х в списке (для
целочисленного х ord(x)=x); функции pred(x) - значение в списке, предшествующее х, и suce(x) -
значение в списке, следующее за х.
Упорядоченный тип
- это тип, значения которого упорядочены в обычном смысле. К дан-
ным такого типа применимы операции отношения <,
>, <=
(меньше или равно), >=(больше или
равно),
=,
<> ( не равно). Для логического типа выполняется неравенство:
false < true.
Переменные описываются в разделе описания переменных по
схеме:
var <список имен переменных>: <тип>
Имена в списке разделяются запятой. В этом разделе
может быть описано несколько пере-
менных разного типа, например:
var a,b,c:real; k,l:integer; p:boolean;
Над
целыми величинами
(тип integer) определены арифметические операции : * (умноже-
ние), div (деление нацело), mod (вычисление остатка от деления), + , -(сложение и вычитание);
операции перечислены в порядке старшинства.
219
Например: 25 div 4
= 6 ;
25 mod 4=1. Целый результат дают некоторые стандартные функ-
ции (аргумент функции заключается в круглые скобки):
abs(x)
- абсолютная величина целого х;
sqr(x)
-квадрат значения х;
trunc(x)
- целая часть вещественной величины х;
round(x)
- целое число, полученное из вещественного х по правилу округления;
random(x)
- случайное целое число
из интервала от 0 до х.
Например: trunc(4.7)=4 ; round(4.7)=5 ; sqr(3)=9 . Для данных типа byte определены те же
операции и функции, что и для данных типа integer.
Над
вещественными величинами
определены операции: *, +, -, /, а также стандартные
функции при вещественном или целом аргументе: abs(x), sqr(x), sin(x), cos(x), arctan(x), ln(x),
exp(x), sqrt(x) - квадратный корень из х, int(x) - целая часть
из
х, random - случайное число из ин-
тервала от 0 до 1. Указанные операции и функции дают вещественный результат.
Над
логическими величинами
определены операции: not - отрицание, and -конъюнкция,
or-дизъюнкция. Логическая функция odd(x) принимает значение true, если целочисленное х явля-
ется нечетным и false , если четным.
Множество всех символов образуют
символьные величины
(тип char), которые являются
упорядоченными, причем 'А' < 'В'< 'С'
<...<
'Z', 'а' < 'b'
<...<
'z', '0' < 'I'
<...<
'9'.
Выражения
- это конструкции, задающие правила вычисления значений переменных. В
общем случае выражения строятся из переменных, констант, функций с помощью операций и ско-
бок.
Эта роль выражений отражена в основном операторе языка -
операторе присваивания.
Он
имеет следующий вид:
<имя переменной> := <выраженне>
Тип переменной и тип выражения должны быть согласованы (величины принадлежат од-
ному и тому же типу). Есть исключение: имя переменной может относиться к типу real, а значение
выражения - к типу integer.
Примеры.
l:=2*pi*r; p:=(a+b+c)/2; z:=sqrt(sqr(x)+sqr(y))
В Паскале можно вводить с клавиатуры числовые и символьные данные. Имеются две
встроенные процедуры (подпрограммы) ввода:
1)
read(<cписок переменных>); 2) readln(<cписок переменных>).
При выполнении процедуры read(xl,x2,...,xN) программа прерывается и компьютер ждет
ввода с клавиатуры N значений переменных из списка х1, х2,..., xN. Эти значения - константы со-
ответствующих типов - должны при вводе разделяться пробелами. Набор данных завершается
клавишей ввода.
Процедура readin отличается от read только тем, что при завершении ввода курсор переме-
щается в начало следующей строки.
Пример.
var a,b:real; c:char; d:integer;
...
read(a,c,d,b);
...
Допустимый ввод: 83.14 k 200-7.15
Программа на Паскале может выводить на экран или на принтер значения числовых или
символьных выражений. Имеются две процедуры вывода на экран:
1) write(<cписок выражений>); 2) writeln(<cписок выражений>).
Процедура write(xl,x2,...,xN) печатает на экране значения выражений из списка х1, х2, ...,
xN. Процедура writeln отличается от write тем, что переводит курсор в начало следующей строки.
Для вывода на принтер используются те же процедуры с добавлением служебного слова 1st перед
списком выражений.
Пример: write(lst,'нет решений');
220
На бумаге будет напечатан текст «нет решений».
Для управления печатью используются
форматы данных.
Пусть х - переменная типа real.
Если не использовать форматы, то значение х будет выводиться в «плавающей» форме (типа
1.654887892Е-04). Форматы позволяют напечатать вещественное число в естественной форме.
Пусть m, n - целые числа. Процедура write(x:m:n) выводит на экран значение переменной х в виде
десятичной дроби, причем m определяет общее число выводимых символов, включая цифры, точ-
ку и знак числа, n - количество цифр после точки. Если количество выводимых символов меньше
m, то перед числом добавляются пробелы.
Пусть, например, х = 387.26. Следующая таблица демонстрирует влияние форматов на вы-
вод значения х:
оператор
строка вывода
writeln('*',x)
* 3.8726000000E+02
writeln('*',x:8:3)
* 387.260
writeln('*',x:8:l)
* 387.3
Один формат - ширину поля вывода - можно использовать и для вывода значений выраже-
ний типов integer, boolean, char.
Контрольные вопросы
1. Какова последовательность разделов в программе на Паскале?
2. Какие типы данных называются скалярными? упорядоченными?
3. Какие действия допустимы над величинами целого типа? вещественного типа?
4. Как в Паскале осуществляется ввод и вывод данных?
3.2. ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА
Паскаль - язык структурного программирования. Это означает, что программист должен
выражать свои мысли очень дисциплинированно, с использованием малого числа четко оговорен-
ных конструкций, используя как чередование их, так и вложения друг в друга. Не рекомендуется
(хотя и возможно) использовать оператор перехода goto.
Реализация последовательности действий (т.е. структуры следования) выполняется с по-
мощью составного оператора:
begin <последовательность операторов> end
Раздел операторов в программе всегда является составным оператором. Служебные слова
begin и end часто называют операторными скобками.
Для реализации
развилки
в Паскале предусмотрены два оператора: условный оператор и
оператор варианта (выбора). Они предназначены для выделения
из
составляющих их операторов
одного, который и выполняется.
Структура и действие
условного
оператора
таковы:
If <логическое выраженне>
then <оператор 1>
else <оператор 2>
Условный оператор может быть неполным,
т.е. не содержать часть «else <оператор 2>». В
этом случае, если значение логического выражения равно false, условный оператор не вызывает
никаких действий.
Пример:
составим программу, которая определяет длину общей части двух отрезков число-
вой оси, заданных координатами своих концов соответственно а, b и с, d (а < b, с < d). Если отрез-
ки имеют общую часть, то левая координата общей части отрезков m равна
максимальному из чи-
сел а и с, а правая n - минимальному из чисел b и d.
Программа 3
program cross;
var a,b,c,d,m,n,l:real;
begin
writeln('введите координаты концов отрезков') ;
read(a,b,с,d) ;