Файл: Могилев А.В. Информатика.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 31.03.2021

Просмотров: 6801

Скачиваний: 51

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

216 

вольных, файловых и т.п. Функции  -стандартные и задаваемые программистом  - используются в 
программе в выражениях. 

Выражения строятся из величин - постоянных и переменных, функций, скобок. знаков опе-

раций и т.д. Выражение имеет определенный тип, определяемый типом принимаемых в итоге его 
вычисления значений. Возможны выражения арифметические, принимающие числовые значения, 
логические, символьные, строковые и т.д. Выражение 5+7 является, несомненно, арифметическим, 
выражение А + В может иметь cамый разный смысл - в зависимости от того, что стоит за иденти-
фикаторами А и В. 

Процедура

 - это программный объект, представляющий некоторый самостоятельный этап 

обработки данных. По сути, процедуры явились преемниками подпрограмм, которые были введе-
ны для облегчения разработки программ еще на самых ранних стадиях формирования алгоритми-
ческих языков. Процедура имеет входные и выходные параметры, называемые формальными. При 
использовании процедуры формальные параметры заменяются на фактические. 

Модуль

 (Unit) -

 

это специальная программная единица, предназначенная для создания биб-

лиотек и разделения больших программ на логически связанные блоки. 

По сути, модуль - это набор констант, типов данных, переменных, процедур и функций. В 

состав модуля входят разделы: заголовок, интерфейс, реализация, инициализация. 

Заголовок

 необходим для ссылок на модуль. 

Интерфейс

 содержит объявления, включая процедуры и функции. 

Раздел 

«реализация»

  содержит  тела  процедур  и  функций,  перечисленных  в  интерфейсной 

части. 

Раздел 

«инициализация»

 

содержит операторы, необходимые для инициализации модуля. 

Каждый модуль компилируется отдельно, и каждый элемент модуля можно использовать в 

программе без дополнительного объявления. 

 

Контрольные вопросы и задания 

 
1. Какие преимущества имеют языки программирования высокого уровня

 

по

 

сравнению с 

машинно-ориентированными языками? 

2. Каковы основные составляющие языка программирования высокого уровня? 
3. В чем различия понятий языков программирования от аналогичных понятий математиче-

ского «языка»? 

4. С какой целью используются и что представляют собой металингвистические формулы 

Бэкуса-Наура? 

5. Что представляет собой синтаксическая диаграмма Вирта? 
6. В чем различие между постоянными и переменными величинами? Чем характеризуется 

величина? 

7. В чем принципиальная разница между величинами простыми и структурированными? 
8. Для чего служит описание величин в программах? 
9. В чем состоит назначение функций? процедур? модулей? 
 

§3. ПАСКАЛЬ КАК ЯЗЫК  

СТРУКТУРНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ 

 

3.1. ВВЕДЕНИЕ 

 

Язык Паскаль, начиная с момента своего создания Н.Виртом в 1971 г., играет особую роль 

и в практическом программировании, и в его изучении. С непревзойденной четкостью в нем реа-
лизованы принципы структурного программирования, которые мы рассматривали в п. 1.8. Паскаль 
стал первым языком, с которым знакомится большинство будущих программистов в мире. 

Трансляторы для программ, написанных на Паскале, разработаны для различных компью-

теров и в настоящее время имеют множество разновидностей. Они являются компиляторами, об-
рабатывающими разработанные программистами тексты программ. 

Существует много версий языка Паскаль. Различия между ними порой весьма велики. Так, 

базовая  версия  Вирта  имеет  многократно  меньшие  возможности  чем,  скажем,  версия  Турбо-


background image

 

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; 


background image

 

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  (вычисление  остатка  от  деления),  +  ,  -(сложение  и  вычитание); 
операции перечислены в порядке старшинства. 


background image

 

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,'нет решений'); 


background image

 

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) ;