logo
Лекции по информатике

1.3. Составные части программы

Программа на языке ПАСКАЛЬ состоит из заголовка, раздела описаний и раздела операторов:

PROGRAM имя;

| раздел описаний]

BEGIN

[раздел операторов]

END.

Заголовок содержит служебное слово PROGRAM, имя программы, задаваемое пользователем-программистом. Заканчивается заголовок символом «;» (точка с запятой).

Раздел описаний предназначен для объявления всех встречающихся в программе данных и их характеристик (имена данных, их тип, возможные значения и др.). Этот раздел, в свою очередь, содержит: объявление меток, констант, типов, переменных, объявление процедур и функций. Они должны располагаться в строго названном порядке. Объявление процедур и функции является одним разделом. Следует заметить, что не все перечисленные разделы обязательны в каждой программе. В простых программах могут потребоваться, например, только разделы: объявления констант и переменных. После каждого описания ставится символ «;» (точка с запятой).

Раздел операторов заключается в операторные скобки вида: BEGIN (начать) и END (окончить), при этом после END ставится точка. В разделе операторов записывается последовательность исполняемых операторов. Каждый оператор выражает действие, которое необходимо выполнить. Исполняемые операторы отделяются друг от друга символом «;».

Ниже представлена структура программы на языке ПАСКАЛЬ в общем виде:

PROGRAM имя;

LABEL

CONST

TYPE

VAR

PROCEDURE, FUNCTION BEGIN

оператор 1;

оператор 2;

оператор 3;

……

оператор n—1;

оператор п

END.

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

В одной строке можно указывать несколько описаний или операторов. Допускается перенос с одной строки на другую частей описаний или операторов (но не разрешается разделять слова, константы и составные символы). В то же время рекомендуется программу записывать в такой внешней форме, чтобы ее можно было легко читать и понимать. Для этого широко используются пробелы, пустые строки и комментарии. Рекомендуется смысловые части выделять одинаковыми отступами от начала строки. Так, для выделения заголовка программы, раздела описаний и раздела операторов удобно записывать слова PROGRAM, BEGIN, END с одной позиции строки. По отношению к ним соответствующие описания или операторы, сдвигаются вправо. Желательно сдвиг делать на одинаковое число позиций от края или по отношению к предыдущему сдвигу.

В качестве примера рассмотрим простейшую программу 1.2 вычисления объема шара по формуле

V=(4/3) R3,

где R=0,2 - радиус шара; =3,14.

PROGRAM SHAR;

CONST PI=3.14;

VAR

R: REAL; (*РАДИУС ШАРА*)

V: REAL; (*ОБЪЕМ ШАРА*)

BEGIN

R:=0.2;

V:=4*PI*R*R*R/3;

WRITELN(‘ОБЪЕМ ШАРА’,V:8:3);

END.

Программа состоит из трех частей: заголовка; раздела описаний; раздела операторов, заключенного в оператор­ные скобки BEGIN — END.

За комментарием следует заголовок PROGRAM, который содержит имя программы SHAR.

В разделе описания констант задано значение 3,14. Так как в языке ПАСКАЛЬ символа нет, его заменили именем PI. Кроме того, в изображении числа ставится точка вместо запятой:

CONST РI=З.14;

В разделе описания переменных объявлено, что имеются две переменные R и V, относящиеся к действительному типу (REAL), т.е. они могут содержать дробную часть. Здесь же используются комментарии для пояснения физического смысла переменных R и V.

В разделе операторов прежде всего задается значение радиуса с помощью оператора R:=0.2;

В языке ПАСКАЛЬ знак присваивания «:=» соответствует знаку равенства «=» в математической записи (R=0,2).

Далее непосредственно вычисляется значение объема шара с помощью оператора

V:=4*PI*R*R*R/3;

Формула записывается в одну строку, звездочкой обозначен знак умножения, наклонной чертой — знак деления. Вычисленное значение V хранится в памяти ЭВМ. Для вывода этого значения на экран дисплея используется оператор

WRITE (‘ОБ"ЕМ ШАРА=’,V:8:3)

который выводит на экран поясняющий текст

ОБ"ЕМ ШАРА=

и вычисленное значение V по формату 8:3 (8 — число позиций на изображение всего числа; 3 — число позиций на изображение дробной части). Таким образом, после выполнения программы на экране появится результат

ОБ"ЕМ ШАРА=,.. О.ОЗЗ

Стандартные типы данных

Данные целого типа

Достоинством языка ПАСКАЛЬ является возможность использования широкого набора разных типов данных. Тип данных определяет возможные значения констант, пере­менных, функций, выражений, принадлежащих к этому типу, форму представления в ЭВМ и операции, которые могут выполняться над ними. Все типы данных можно разделить на простые и сложные.

Простые типы — это стандартные и переменные типы данных. Стандартными являются целый INTEGER, действительный REAL, логический BOOLEAN и символьный CHAR типы данных. Переменные типы определяются пользователем ЭВМ. К ним относятся перечисляемый и ограниченный типы.

Сложные типы данных представляют собой различные комбинации простых типов (массивы, множества, записи и файлы).

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

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

Константа целого типа (целая константа) — любое десятичное число, записанное без точки. Если константа отрицательна, то перед ней должен стоять знак « — », если константа положительна, то знак <+» можно опустить.

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

Примеры констант целого типа:

14, —357, 0, 5390.

Диапазон целых чисел зависит от конкретного типа ЭВМ. Для микроЭВМ с двухбайтовым словом числа чаще всего находятся в диапазоне от —32768 до +32767.

Переменные, принимающие в качестве своих значений константы целого типа, относятся также к целому типу (тип INTEGER). Над данными целого типа можно выполнить следующие арифметические операции, которые дают целый результат: + (сложение), - (вычитание),

* (умножение), DIV—деление с отбрасыванием дробной части (получение целого частного при делении целого данного на целое), MOD — получение целого остатка при делении целого данного на целое.

Например, пусть. А, В, N — переменные целого типа, принимающие значения: А=25, В=2, N=—17. Тогда допустимы следующие операции:

А+51 (результат 76)

В—А (результат —23)

B*N (результат —34)

А DIV В (результат 12)

A MOD B (результат 1).

Операция MOD часто используется для определения, делится ли целое число Х без остатка на 2, т.е. является ли Х целым числом. С помощью операции Х MOD 2 вычисляется остаток. Если он равен нулю, то число Х — четное, а если имеется остаток, то нечетное. Точно так же можно определить, кратно ли какое-то число трем, четырем и т.д.

Данные действительного типа

Константы действительного типа. В языке ПАСКАЛЬ они могут быть представлены в двух видах: с фиксированной точкой и плавающей точкой.

Константы с фиксированной точкой изображаются десятичным числом с дробной частью, которая может быть и нулевой. Дробная часть отделяется от целой с помощью точки, например 27.3, 5.0, —16.003, 200.59.

В математике для изображения очень больших и малых чисел используется запись числа с десятичным порядком. Например, число 680000000 можно записать 68*107 (7 —порядок числа), число 0,00000005 можно записать так 5*10-8 (—8—порядок числа).

В языке ПАСКАЛЬ также можно изображать числа с десятичным порядком. Они имеют вид тЕр. Здесь т — мантисса; Е — признак записи числа с десятичным порядком; р — порядок числа.

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

Константами с плавающей точкой являются числа, представленные с десятичным порядком.

Примеры чисел с плавающей точкой:

Математическая запись Запись на языке ПАСКАЛЬ

4*10-5 4Е-5

0,62*104 0.62Е+4

-10,88*1012 -10.88Е12

Следует отметить, что в языке ПАСКАЛЬ знак умножения не ставится. Рассмотрим, например, числа с плавающей точкой:

0.547Е+3, 5.47Е+2, 54.7Е+1, 547.0ЕО, 5470Е—1, 54700Е-2

Эти записи представляют одно и то же число 547. Перемещая положение десятичной точки в мантиссе (точка «плывет») и одновременно изменяя величину порядка, можно выбрать наиболее подходящее представление числа.

Для микроЭВМ с двухбайтовыми словами, как правило, самое малое по модулю число (не считая нуля) 10-38, а самое большое число 10+38.

Перевод действительных чисел в двоичную систему может быть неточным, поэтому действительные числа могут быть представлены в памяти ЭВМ с некоторым приближением. Например, вместо ожидаемого числа 0.517 мы можем получить число 0.516999.

В зависимости от числа верным могут быть шесть или семь цифр в числе.

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

Над данными действительного типа можно выполнить следующие операции, дающие действительный результат:

+ (сложение); — (вычитание); * (умножение); / (деление).

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

Данные логического типа

Логический тип данных часто называют булевским по имени английского математика Д. Буля, создателя особой области математики — математической логики.

В языке ПАСКАЛЬ имеются две логические константы:

TRUE (истина) и FALSE (ложь). Логическая переменная принимает одно из этих значений и имеет тип BOOLEAN.

Логические данные широко используются при проверке правильности некоторых условий и при сравнении величин. Результат может оказаться «истинным» или «ложным».

Для сравнения данных предусмотрены следующие операции отношений: < (меньше); <= (меньше или равно); = (равно); <> (не равно); >= (больше или равно); > (больше).

Если операцию отношения приложить к арифметическим данным, то получим логическое значение: отношение истинно или ложно. Например, отношение 5> 3 (читается «пять больше трех?») дает истинный результат (TRUE); отношение 5=3 (читается «пять равно трем?») ложный результат (FALSE).

Над логическими данными допускаются следующие операции: OR—логическое сложение (ИЛИ); AND— логическое умножение (И); NOT—логическое отрицание (НЕ). Логические операции OR и AND выполняются над двумя величинами, а операция NOT—над одной.

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

Логическое умножение дает истинный результат только в том случае, если обе величины истинны. Если хотя бы одна величина ложна, то результат также будет ложным.

Логическое отрицание дает ложный резуль­тат, если величина имеет истинное значение, и наоборот.

Логический тип определяется таким образом, что FALSE < TRUE.

Результаты операций над логическими данными сведены в табл. 2.1.

Таблица 2.1

А

В

NOT A

A OR В

A AND B

TRUE

TRUE

FALSE

TRUE

TRUE

TRUE

FALSE

FALSE

TRUE

FALSE

FALSE

TRUE

TRUE

TRUE

FALSE

FALSE

FALSE

TRUE

FALSE

FALSE

Например, результат операции (с > 10) or (d < 3) будет истинным:

а) при С=12 и D=2;

б) при С=12 и D=5;

в) при 0=8 и D=2;

будет ложным при 0=8 и D=5.

Результат операции

(С > 10) and (D < 3)

будет истинным при 0=12 и D=2; будет ложным:

а) при 0=12 и D=5;

б) при 0=8 и D=5;

в) при 0=8 и D=2.

Логические данные и операции над ними имеют важное значение в информатике, так как позволяют внести в расчеты элементы человеческой логики. При этом в теоретических расчетах в отличие от языка ПАСКАЛЬ часто вводят следующие обозначения логических констант:

1 - истина, 0 - ложь.

Данные символьного типа

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

Символьная, или литерная, константа есть любой символ языка, заключенный в апострофы. Например,

A', '+', '9’,’:’

Чтобы представить апостроф как символьную константу, его повторяют дважды: "": Внешние апострофы (по одному слева и справа) не входят в константу, они являются признаком символьной константы. Символьная константа, как правило, занимает один байт памяти.

Символьная переменная (тип CHAR) - это переменная, принимающая значение символьной константы. Так как символы языка ПАСКАЛЬ упорядочены, то к символьным данным применимы операции сравнения « < », « <=», «=», «<>»,«> •=», « > », например ‘А’ > 'W’.

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

В некоторых версиях языка ПАСКАЛЬ в качестве символьной константы допускается использование последовательности символов, заключенной в апострофы, длиной не более 256 знаков. Например,

•А1, 'SUMMA-28', 'СТРОКА'.

Для представления внутреннего апострофа ставится двойной внутренний апостроф, например.

•ТЕПЛОХОД "МАЯК"' или 'Д"АРТАНЬЯН'

В некоторых случаях символьную константу называют строкой символов или просто строкой.

Описание констант и переменных стандартного типа

Константы в программе могут быть заданы явно своим значением или обозначены именем. Если константа обозначена именем, то она должна быть описана в разделе констант (см. § 1.3). Описание начинается со служебного слова CONST и имеет следующую форму записи:

CONST имя константы = значение;

Например,

CONST Nn=18;

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

CONST

NUM=23;(*Константа целого типа*)

B=1.8E-3;(*действительного типа*)

PI=3.14;(*Действительного типа*)

SIM=’R’;(*Символьного типа*)

L=TRUE;(*Логического типа*)

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

Любая переменная, встречающаяся в программе, дол-хна быть описана в разделе переменных (см. § 1.3). Описание начинается со слова VAR и имеет следующую форму записи:

VAR имя переменной: тип;

Например,

А : REAL;

В одном разделе допускается описание нескольких переменных, например:

VAR

B: INTEGER; (* переменная целого типа *)

SUM: REAL; (* действительного типа *)

K: CHAR; (* символьного типа *)

LOG: BOOLEAN; (* логического типа *)

Если несколько переменных имеют одинаковый тип, то их можно объединять в список. Под списком понимается последовательность элементов (в нашем случае - переменных), разделенных запятыми. Например:

Выражения

Стандартные функции

Элементарные функции, такие, как синус, косинус, квадратный корень, логарифм и другие, часто использу­ются в различных задачах и вычислениях. Поэтому язык ПАСКАЛЬ имеет простые средства записи элементарных или, как их называют, стандартных функций. При этом пользователю-программисту не обязательно знать, как вычисляется стандартная функция, ему достаточно правильно записать ее вид.

Правила записи стандартных функций:

1. Имя функции записывается прописными буквами латинского алфавита. Имя состоит не более чем из шести букв.

2. Аргумент функции записывается в круглых скобках после имени функции,

3. Аргументом функции может быть константа, переменная или арифметическое выражение.

Рассмотрим некоторые стандартные функции:

SQRT(X) - вычисляет корень квадратный из аргумента X, что соответствует математической записи ;

SQR(X) - вычисляет квадрат аргумента X, что соответствует математической записи х2;

SIN(X) - вычисляет синус аргумента X, что соответствует математической записи sin x;

ABS(X) -вычисляет абсолютное значение (модуль) аргумента X, что соответствует математической записи ;

ORD(X) - определяет порядковый номер символа X, например ORD('R')=82;

CHR(X) — определяет символ, стоящий по порядковому номеру X, например CHR(68)='D';

PRED(X) — определяет предыдущий символ по отношению к X, например PRED('N')='M';

SUCC(X) — определяет последующий символ по отношению к X, например SUCC('S')='T'. При использовании функций PRED(X) и SUCC(X) необходимо помнить, что если в конкретной реализации языка нет для Х предыдущего или последующего символа, то значение функций не определено. Аргументами этих функций не могут быть действительные данные, так как для них не существует понятий предыдущего и последующего элементов.

Арифметические выражения

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

А+В*Т1/T2—2.3*SQRT(X).

Частным случаем выражения является константа, переменная или функция.

Все данные, входящие в арифметические выражения, должны быть одного типа. Однако во многих версиях языка допускается использование в одной операции данных целого и действительного типов. Результат операции при этом будет действительного типа. Например, разрешены операции A+N или А*2, тде А - переменная действительного типа, а N - целого типа.

При составлении выражений следует выполнять следующие правила:

1. Записывать все составные части выражений в одну строку. В выражениях двухэтажных и более верхние и нижние индексы не допускаются. Например, формула

должна быть записана в виде следующего выражения:

(a1 *x1 +b2*x2+5*aЗ*xЗ) / (25*d—14*f).

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

Поэтому алгебраической записи a{b+c[d+e(f+g)]}в языке ПАСКАЛЬ соответствует выражение

a*(b+c*(d+e*(f+g)))

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

3. Нельзя записывать подряд два знака арифметических операций. Например, выражение 3*А*В/-Z неверно. Его следует записать так:

3*A*B/(—Z).

4. Необходимо помнить, что вычисления выполняются слева направо в соответствии со старшинством операций.

Самой старшей является операция вычисление значения функции, например SIN(X). Затем идут операции умножения и деления, а также целочисленные операции DIV и MOD. Операции сложения и вычитание обладают самым низким приоритетом и выполняются в последнюю очередь.

Если аргумент функции представляет собой выражение, то сначала определяется значение этого выражения. Например, в выражении

SIN(0.l4+Z)

сначала вычисляется аргумент (0.14+Z), а затем значение функции SIN. Выражение

ART*2*T+R/T*N-S

будет выполняться в следующем порядке:

1) ART*2

2) ART*2*T

3) R/T

4) R/T*N

5) АРТ*2*Т+R/Т*N

б) ART*2*T+R/T*N-S

Если по каким-нибудь причинам требуется изменить этот порядок, то для этого можно использовать круглые скобки. Выражения в скобках вычисляются первыми. Например, в выражении S/(Q+T) сначала выполняется суммирование в скобках (Q+T), а затем только производится более приоритетная (старшая) операция деления.