Язык программирования Паскаль – Структура Паскаль — программы


6. Язык программирования Паскаль

 6.1 Основные определение

Язык программирования — это система обозначений, используется для точного описания программ или алгоритмов. Программы, записанные на языке программирования, не могут быть непосредственно выполнены компьютером и нуждаются в компиляции (перевода) в машинные коды, но язык программирования более приемлемой для человека, так как позволяет выражать мысли, идеи в привычной, легко понятной форме. В отличие от естественного языка, язык программирования используется исключительно в письменной форме, то есть в виде текстов.

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

Каждое отдельное утверждение в тексте программы выражает определенное мнение.Различают два типа утверждений: утверждение, описывающих действия, которые нужно выполнить — их называют операторами — и утверждение, описывающих данные, с которыми выполняются действия, или вспомогательные алгоритмы — их называют описаниями (определениями), либо деклара- циями.

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

В 1968 году профессор Никлаус Вирт из Цюриха начал работу над языком программирования, которую он назвал Паскаль в честь выдающегося философа и создателя одной из первых механических вычислительных машин Блеза Паскаля.Этот язык был создан специально для обучения студентов как первый язык программирования.В 1971 году заработал компилятор с Паскаля, а через некоторое время язык получил распространение в мире, потеснив часто используемые к тому времени Бейсик и Фортран.Распространению Паскаля способствовало появление персональных компьютеров и быстрого компилятора Турбо Паскаль.Изучение языков программирования мы также начнем с этого языка, точнее из стандартного ее вариан- та.

6.2 Структура Паскаль — программы

 Текст Паскаль — программы имеет следующую структуру:

заголовок; раздел описания отметок;

Раздел определения констант; Раздел определения типов; Раздел описания переменных Раздел описания процедур и функций; раздел операторов. 

program label const type var

procedure, function begin

end

Разделы отделяются друг от друга запятой с точкой в ​​конце программы ставится точка.

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

 Раздел описания меток содержит перечень цифровых обозначений, которые можно ставить в программе (каждый только один раз) перед любым оператором для обеспечения безусловного перехода на него.Во время компиляции с каждой отметкой связывается конкретное физическое адрес.Отметить можно все операторы.Отметки это своего рода атавизм, доставшийся Паскалю от языков низкого уровня.Квалифицированные программисты совсем не употребляют отметок, или употребляют их очень редко.Раздел начинается со слова label.

Раздел определения констант содержит описание всех именованных констант, используемых в программе.Это позволяет компилятору отвести ячейки для констант и выполнить их инициализацию. Раздел начинается со слова const.В программе могут быть и не именованные константы, но они никак описываются.

Раздел определения типов содержит описание нестандартных данных, используемых в программе.Язык Паскаль пе редбачае ряд обусловленных стандартных типов данных, например, integer (целое число), real (действительное число) и другие.Компилятор заранее известно сколько байтов нужно для размещения переменных или констант обусловленных типов, то есть необходимый размер ячеек. Другое дело, когда программисту нужны свои собственные, сложные структуры данных, или

Читать  Алгоритмизации и программирования Текст Лекций на языках Pascal, VBA, C ++

он хочет дать типам данных новые имена. В таких случаях нужно делать именно в разделе определения типов. Определение типов данных дает информацию компилятору о структуре объекта и о нужный объем памяти для размещения данных в ОЗУ. Раздел начинается со слова type.

 Раздел описания переменных содержит перечень имен всех переменных с указанием их типа.Эта информация, как и информация из раздела определения констант, используется компилятором для распределения памяти.Обратим внимание, что тип данных констант компилятор определяет по их внешнему виду.Переменные и константы размещаются в область памяти, которая называется сегмент данных.Определены на этапе трансляции переменные и константы называют статични- мы.Ячейки памяти, связанные с именами статических переменных, уже никак невозможно использовать по другому назначению.Раздел описания переменных начинается со слова var.

Раздел описания процедур и функций содержит тексты процедур, или функций, которых может быть сколько угодно.За- головки каждой из них начинаются со слов procedure или function.И процедура и функция — это вспомогательные программы. Разница между ними заключается в том, что с именем функции связана определенная ячейка памяти, в которую засила- ется один из результатов работы этой программы, а с именем процедуры нет. В случае процедуры результаты, если они предусматриваются, передаются исключительно через параметры. Обычно функцию используют, если ре- зультатом одно значение, процедуру — когда несколько. В дальнейшем, если это не суть важно, процедуры и функции мы будем называть процедурами.

Внутреннее устройство процедур полностью повторяет устройство программы.Разница заключается только в заголовке.Процедурами ры имеют те же разделы, что и программа, в том числе вновь раздел описания процедур и функций.Эта многоступенчатая вложенность процедур напоминает известную (ввезенную кстати из Японии) игрушку «Матрешку».

Компилятор создает отдельный код для процедур, но в отличие от основной программы не распределяет память для переменных.Это происходит только тогда, когда процедура начинает выполняться.Для этого используется специальная область памяти, которая называется стеком.В стек помещается также адрес точки программы, куда надо вернуться после окончания выполнения процедуры.После того, как процедура заканчивает свою работу распределенными память освобождается.

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

Рекурсия в программировании — это такая ситуация, когда процедура содержит обращение к самому себе, то есть самовиклик.В случаях рекурсивного вызова предыдущие значения переменных и адрес возврата запоминаются, а в стеке вновь выделяется память для новых значений переменных процедуры.Таких вызовов может быть столько, сколько хватит объема стека для размещения данных каждого вызова.

стек

Данные вызова 3 Данные вызова 2 Данные вызова 1

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

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

Читать  Файлы Паскаль, файловый тип, Процедуры и Функции в Pascal

Раздел операторов начинается со слова begin и заканчивается словом end.Эти слова называют еще оператор- ними скобками. Группа операторов, ограниченная этими словами, всегда рассматривается компилятором как один опера- тор, который называют составным оператором.На месте, где используется простой оператор, всегда можно принять составной оператор. Операторы отделяются друг от друга запятой с точкой. Порядок, в котором записаны опе- ратор, определяет естественный порядок выполнения программы.

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

Ниже приведен пример программы на Паскале.В этом примере определены две отметки, но в программе они не используются: управление на обозначенные операторы не передается.Введен не стандартный тип Rezult есть в данном случае синонимом типа real.

В разделе описания процедур и функций введена функция MyFun действительного типа.Имя функции используется в программе в составе арифметического выражения, как обычная переменная, невозможно для процедур.

Пояснительный текст в фигурных скобках тоже часть программы и называется он комментарием.Комментарии в программе играют очень важную роль — они облегчают ее чтение, делают программы более понятными. Говорят, что программы чаще читаются людьми, чем машинами. Компилятор игнорирует текст комментария.

6.3 нотация языка Паскаль

Нотация языка программирования определяет «анатомию» текста. Атомы из которых строится программа и которые перетворю- ются компилятором в машинные коды, называются лексемами.Текст программ на Паскале состоит из лексем между которыми находятся символы-разделители.

Лексемами являются: специальные символы, символы-слова (зарезервированные слова), имена, числа, строки символов, метки, директивы. Разделителями являются: промежутки (пробелы), переход на новую строку текста, комментарии. Разделитель никогда не может находиться в середине лексемы, он разделяет лексемы.

Специальные символы это символы:

+ — * /. ,:; = <> <<=>> = () [] (* *) @ ^

Зарезервированные слова это тоже символы.Их можно употреблять только в определенном зафиксированном смысле. Их запрещено употреблять в качестве имен. Вот эти слова:

 

and end nil set
array file not then
begin for of to
case function or type
const goto packed until
div if procedure var
do in program while
downto lable record with
else mod repeat  

Именами, или идентификаторами, сказываются переменные, константы, процедуры и функции.Для записи имен вжи- щихся только латинские буквы. Имя должно начинаться с буквы, а дальше могут идти или буква, или цифра, или знак подчеркивания. При этом заглавные и строчные буквы не различаются. Длина слова ограничена. Фактическое значением длины слова зависит от конкретной реализации компилятора. Это может быть 64 символов, а может быть и больше.

Правильные имена:

Неправильные имена:

A, c1111111, beta, X_new, COUNT, A_Very_Long_Name.

АН -140, 1X, _AAA, Old + Value, ЦЕХ, Альфа.

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

В Паскале существует перечень стандартных имен констант, типов, переменных, функций и процедур. Стандартные имена отличаются от других тем, что их не надо предварительно описывать, они известны компилятору.Но в отличие от зарезервированных слов, программист может переопределить эти имена и предоставить им совсем другой смысл. Это не совсем правильная практика, но речь это позволяет. В приведенном выше примере слова real, ReadLn, WriteLn — стандартные имена.Мы постепенно познакомимся со всеми стандартными именами.

Читать  Тема 4 Паскаль: Указание повторения (циклы), понятие цикла

Числа в Паскале записываются в форме целого, или действительного числа.Признаком действительного числа есть разделитель — деся-

N -N

тково точка (не запятая!), или масштабный множитель Е + N, или Е-N, значит соответственно 10, 10. Знак + может

отсутствовать. Целые числа не имеют этих признаков. Вот правильно записаны действительные числа: 2.234 1.0 -0.005 5E-2, 1E10, 2.500E-03.

Такая форма записи действительных чисел называется экспоненциальной.

Строка символов на Паскале — это любая последовательность символов, ограниченная апострофами.Если сам апостроф нужен в тексте, то его надо писать дважды. Константа Rez в примере является строкой символов.Она, по всей видимости, содержит символы кириллицы, запрещены к употреблению в других местах.

6.4 Области действия имен.Глобальные и локальные имена 

Рассмотрим программу, которая имеет две процедуры А и В, каждая из которых имеет вложенные процедуры.

Все имена, объявленные внутри процедуры, действуют только в пределах этой процедуры и называются локальными.Границы процедур и функций является «непрозрачными» снаружи, то есть наблюдатель, находясь за пределами процедуры А1_1 не может «видеть» значения переменных E, F. Зато с середины границы прозрачны и все имена, указанные уров- нем выше, «видимые».Они будут доступны для использования, если только они не имеют новых локальных определений.Так в процедуре А1_1 можно использовать переменные А и В, указанные в процедуре А1 и переменные C i D, указанные в процедуре А. В середине А1 тоже можно использовать переменные C i D, указанные в процедуре А. В середине процедур А, в, В1, В2 имеют действие переменные а и в, объявленные в основной программе, а вот в процедуре А1 и дальше А1_1 они уже не действуют, потому что здесь объявлены локальные переменные с такими же именами.

Имена, используемые в процедурах, но объявлены снаружи, называются глобальными.Это касается не только имен переменных, но и отметок, констант, типов данных и процедур. Так по процедуре В2 можно обращаться к процедурам А, В, В1, они являются глобальными по отношению к ней. Процедурам А1, А1_1 с ней непосредственного доступа нет, поскольку они объявлены внутри процедуры А.

В Паскале действует общий принцип: глобальное определение доступно, если оно находится выше по тексту.Вы- ходя из этого в Паскале невозможно использовать объект прежде чем он будет обозначен.По этому же принци- пом по процедуре А не «видно» процедуру В, по процедуре В1 не «видно» процедуры В2.Это надо учитывать при конструировании программ.

6.5 типы данных

 Понятие типа данных является одним из фундаментальных понятий.Введение этого понятия позволяет абстрагироваться от конкретного представления данных на уровне машинных кодов.Каждый тип данных определяет множество значений,

могут приобретать объекты данного типа, и множество операций, которые можно к ним применять.Какими бы сложными ни были типы данных, определяемые программистом, в конце концов все они строятся на основе элементарных стандартных типов данных.Ниже на диаграмме представлена схема типов данных Паскаля.Имена обусловленных типов стан- дартного.

Изучение языка программирования заключается в изучении свойств типов данных, структур управления данными, и примерах применения к решению практических задач.Теоретик программирования Дейкстра (EWDijkstra) дал такое определению программ: «Программы = алгоритмы + структуры данных».Важность данных еще более категорич- нише выразил Брукс (RPBrooks) — автор знаменитой статьи The Mythical Man-Month: «Сущностью программу- ния является представление данных ».

Читать  Управление динамической памятью в Турбо Паскаль

простые типы

типы данных

составленные типы

определителю типа

типы массивов Комбинированные типы

файловые типы Множественные типы

real ординальное типы

перечисленные типы обусловленные типы Диапазонные типы

 

boolean

integer

char 

Рассмотрим для начала простые обусловленные типы данных. Тип real позволяет представлять действительные числа.Число типа real занимает 6 байт и может принимать значения из диапазона 2.9Е-39..1.7Е38.Строго говоря, числа, предста- вляються этим типом не является на самом деле действительными, а только рациональными приближениями действительных чисел. В об- ном случае действительное число представляет собой бесконечный непериодический десятичную дробь, а тип real позволяет хра- пруди не более 12 значащих цифр.Все операции с числами этого типа являются приближенными. К числам действительного типа применяются четыре арифметических действия, они могут быть аргументами математических функций Sin (X), Cos (X), Arctan (X), Ln (X), Exp (X), Sqrt (X), Abs (X), имена которых являются стандартными.

Ординальное типам (от слова order — порядок) называют такие типы, множество данных которых конечным и упорядоченной.Все элементы множества перенумерованы, то есть для каждого элемента существует конкретное (ор динальний) номер.Зная элемент Х всегда можно найти его номер, найти элемент который является следующим, что идет перед ним.Для этого используют соответственно функции Ord (X), Succ (X), Pred (X).На основании ордина- ных номеров выполняются операции отношения =, <>, <=,> =,> результатом которых будут значения типа boolean.

Обусловлен ординальное тип boolean имеет всего два значения, которые обозначаются стандартными именами False i True ( «ошибочность» и «истина»), с ординальное номерами 0 и 1.Название типа происходит от фамилии математика Джорджа Буля, (J.Bool) основоположника алгебры логики.Очевидно, что Succ (False) — это True, Pred (True) — это False.К данным типа boolean можно применять логические операции and, or, not:

 

X Y X and Y X or Y not X
False False False False True
False True False True True
True False False True False
True True True True False

 

Этот тип используется для записи логических выражений в разного рода тестам разветвлений и циклов. Например выражение 1> 2 имеет значение False (2 = 2) or (5 <1) имеет значение True.

Обусловлен целый тип иnteger, имеет длину в два байта и представляет целые числа из диапазона -32768..32767.Ор динальний номер элемента целого типа совпадает со значением числа. К данным целого типа можно приме- ты обычные арифметические операции +, -, *, операцию целочисленного деления div, и операцию остатка от деления mod 5 div 2 = 2, 8 mod 3 = 2.

Значениями обусловленного ординальное типа char есть элементы конечного упорядоченного множества символов.На один символ отводится один байт.То есть всего можно закодировать 255 различных символов.Чаще всего в Исчис- тельных системах используют множества, соответствующие American Standard Code Information Inter- change (ASCII коды) и Кода Обмена Информацией (КОИ-8).Тип char является символьной типу и используется для работы с текстами.Существование различных кодовых таблиц вызывает трудности при взаимодействии вычислительных систем, поскольку в разных таблицах одному коду могут соответствовать разные символы.Сейчас делаются попытки ввести еди- на кодовую таблицу.

Значение типа char обозначаются одним символом в апострофах: «Ч», «s», «*», «@», «y».Значение букв латинского алфавита в любой системе есть упорядоченными по возрастанию, то есть Ord ( ‘R’) <Ord ( ‘S’), Pred ( ‘L’) = ‘K’, Succ ( ‘T’) = ‘U’ .По символов кириллицы, то в таблицах КОИ-8 они упорядочены, а в ASCII нет.

Читать  Лекция Паскаль 3 – Атрибуты, переменные, присваивание и стандартные методы

Перечислен тип используется программистами для создания более выразительных текстов программ.Чтобы задать свой ординальное тип данных следует непосредственно указать в скобках (перечислить) все его значение, например:

type

Color = (White, Blue, Green, Red, Black) Sesons = (Winter, Spring, Summer, Autumn) States = (Solid, Liquid, Gas, Plasma)

Здесь Ord (White) = 0, Ord (Black) = 4, Succ (Winter) = Spring, Pred (Plasma) = Gas.

Имена элементов должны быть уникальными. Перечислен тип можно применять везде, где допустимые данные ординальное типа.

Диапазонные типы определяются на базе другого, раньше обозначенного, ординальное типа путем указания самый меньшего и крупнейшего элементов диапазона, например

Index = 1..10; Letters = ‘A’ .. ‘Z ‘; Color1 = Blue ..Red;

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

По составленных и вказивникових типов, они быть рассмотрены позже.

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

1. что Да есть речь программирования?

2. что называют оператором языка программирования?

3. Чем отличаются декларации от операторов?

4. Какую структуру имеет программа на Паскале?

5. Назовите назначения каждого с разделов программы на Паскале.

6. Назовите слова, с которых начинается каждый раздел программы на Паскале.

7. которые переменные называют статическими, которые их свойства?

8. чем отличается функция от процедуры?

9. Какую структуру имеют тексты процедур и функций на Паскале?

10. что Да есть стек и для чего он используется?

11. что Да есть рекурсивный вызов процедур и как он реализуется?

12. Зачем нужны комментарии в программе?

13. что Да есть лексема и которые бывают лексемы?

14. что есть разделителем на Паскале?

15. Какие слова в Паскале называют зарезервированными?

16. сформулируйте правила образование имен в Паскале.

17. чем отличаются стандартные слова от зарезервированных?

18. Запишите несколько действительных цифр по правилам Паскаля.

19. Какое из чисел: 1Е8, 23456890Е-3, 0.00002Е10 является крупнейшим и наименьшим?

20. как записывается строка символов на Паскале?

21. сформулируйте правила определение областей действия имен.

22. В почему заключается разница между локальными и глобальными именами?

23. что определяет тип данных и зачем он нужен?

24. наведите классификацию типов данных на Паскале.

25. Перечислите простые обусловленные типы данных языка Паскаль.

26. дайте характеристику ординальное типам данных.

27. дайте характеристику типам данных real, boolean, integer, char, перечисленном и диапазонный типа.

28. как выполняются логические операции and, or, not? .

29. Задайте перечислен тип, что Соответствует дням недели и на его базе определите диапазонный тип рабочих дней.

словарь

 1. заголовок Header

2. утверждение Statement

3. определение Definition

4. метка Label

5. стек Stack

6. рекурсия Recursion

7. Составной оператор Compound statement

8. комментарий Comment

9. разделитель Delimiter

10. операторные скобки Statement parentheses

11. описание переменной Variable declaration

12. зарезервировано слово Reserved word

13. предопределения тип Predefined type

14. локальное имя Local name

15. определение константы Constant declaration

16. вызов процедуры Procedure call

17. вложена процедура Nested procedure

18. Самовиклик процедуры Self-invocation

19. перечислен тип Enumerated type

20. диапазонный тип Subrange type

21. ординальное тип Ordinal type

22. логический выражение Logical expression

23. Глобальный объект Global reference

[Всего голосов: 4    Средний: 5/5]