Подпрограмма функция

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Const

Var

Const

Var

Type

. . . . . . . . . . . . . . . . . . . . . . .

TYPE

End.

Begin

TYPE

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

END.

. . . . . . . . .

СТРУКТУРА ПРОГРАММЫ

4 3 2 1

(x > y) or (y > z) and not ((x > 0) or (z > x))

При x = -1, z = -2, y = 1 результатом будет значение true.

(x > 0) – false, (x > x) – false;

(x > 0) or (z > x) – false;

not ((x > 0) or (z > x))) – true;

(x > y) –false, (y > z) – true;

(y > z) and not ((x > 0) or (x > x)) – true.

В конечном итоге false or true дает true.

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

Структура программы на языке Turbo Pascal имеет вид:

Program <имя программы>;

Uses <список используемых модулей>;

Label <Раздел описания меток>;

Const <Раздел описания констант>;

Type < Раздел описания типов>;

Var < Раздел описания переменных>;

Function <Раздел описания функций>;

Procedure < Раздел описания процедур>;

BEGIN Оператор 1; { Раздел операторов};

Оператор 2; {Текст основной программы}

Оператор 3;

Оператор n;

Любой раздел, кроме раздела операторов основной программы, может отсутствовать.

В заголовке программы после служебного слова Program приводится имя программы ( идентификатор). Имя может иметь любую длину, из них для компилятора имеют значение первые 63 символа. Имя обязательно должно начинаться с буквы. Заголовок программы выполняет чисто декоративные функции и служит для совместимости с другими компиляторами языка Паскаль или удовлетворения эстетических запросов программиста.

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

- раздел объявления и описания;

- раздел основного блока.

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

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

Основной блок программы состоит из последовательности операторов, причем работа программы начинается именно с первого оператора основного блока программы. Тело основного блока программы ограничено словами BEGIN и END.

Раздел объявления модулей

За ключевым словом USES записывается список имен используемых стандартных (Crt, Dos, Printer, Graph, Turbo3, Graph3, Overlay) и пользовательских библиотечных модулей.

USES < список используемых стандартных и пользовательских модулей >;

Пример:

Uses Crt, Dos, MyMod;

РАЗДЕЛ ОПИСАНИЯ МЕТОК

Метка - это последовательность цифр и букв, стоящих перед любым исполняемым оператором и отделяемых символом : “двоеточие”. Все используемые в программе метки должны быть описаны, они могут быть целочисленными ( от 0 до 9999) или идентификаторами. Метка допустима везде, где допустим разделитель. Переход по метке выполняется оператором GOTO. Метки отделяются от помечаемого оператора двоеточием “ : ”.

Формат описания меток:

Label < список идентификаторов меток >;

Пример описания меток:

Label 1, 5, 25, 100, metka, beta7;

РАЗДЕЛ ОПИСАНИЯ КОНСТАНТ

В Turbo Pascal описываются все именованные константы, значения которых в ходе выполнения программы постоянны.

Для описания констант используется ключевое слово CONST, имя константы, знак = равенства и значение константы:

Const < имя 1> = < значение 1>;

< имя 2> = < значение 2>;

< имя N> = < значение N>;

Допускается использовать константные выражения, состоящие из констант описанных ранее, в правой части описания констант. В константных выражениях разрешается использовать стандартные функции. Пример описания констант:

const A=‘студент’; Sbol=true; revu=9.82; T_k=273;

РАЗДЕЛ ОПИСАНИЯ ТИПОВ

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

В разделе описания типов программист с целью упрощения программы может задавать свои нестандартные типы, явно описываемые в программе, сформированные на основе определенных правил и с использованием стандартных типов. Раздел описания типов начинается с зарезервированного слова Type, за которым следуют одно или несколько определений типов, разделенных точкой с запятой “ ; “.

Общая форма описания новых типов:

TYPE <имя типа1>:<определение типа1>;

<имя типа2>:<определение типа2>;

<имя типа N>:<определение типа N>;

ТИП “ПЕРЕЧИСЛЕНИЕ”

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

Формат описания типа “ПЕРЕЧИСЛЕНИЕ”:

TYPE <имя типа> = (< знач1>,<знач2>, ... ,<значN>);

В основе типа перечисления лежит идея дать программисту возможность обращаться с элементами данных, используя их названия. Описание типа “перечисление” вводит упорядочение его значений, считается, что нумерация значений в типе начинается с нуля. В двух разных перечислениях не должно быть одного общего элемента. Значения перечисляемого типа нельзя вводить и выводить непосредственно операторами Read и Write.

Пример: type animals = (cat, dog, horse, cow);

month = (January, February, march, April, may, June, July, august, September, October, November, December);

ТИП “ДИАПАЗОН”

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

Формат описания типа “диапазон” имеет вид:

TYPE <имя типа> = Min . .Max;

Здесь Min , Max - константы, определяющие левую и правую границы значений, которые могут принимать переменные типа “диапазон”. Тип констант Min , Max называется базовым относительно типа “диапазон”. Базовый тип должен принадлежать одному из стандартных типов, кроме вещественного (real - недопустим). Значение первой константы базисного типа должно быть меньше второй.

Пример: type days = 1..31; temperature = 1..100;

ТИП “МАССИВ”

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

Одномерный массив – совокупность однотипных индексированных элементов называется вектором. Двухмерный массив, упорядоченный по двум измерениям(индексам) называется матрицей из n строк и m столбцов. Тип “массив” описывается при помощи ключевого слова ARRAY:

<имя типа> = array[1..n,1..m, . . . ,1..k] of <тип элементов>;

здесь n, m, k - размерность ( число индексов) массива. В Turbo Pascal размерность массивов не ограничена. За словом ARRAY в квадратных скобках указывается тип – диапазон, с помощью которого компилятор определяет общее число элементов массива. Тип – диапазон задается левой и правой границами изменения индекса массива, так что массив а состоит из 10 элементов, массив b – из 51, а массив с – из 8.

Пример: type vector = array[1..50] of real;

massiv = array[1..20,1..25] of string;

nomer = array[1..100] of integer;

data = array[1..10,1..20,1..30] of char;

Доступ к каждому элементу массива в программе осуществляется с помощью индекса – целого числа (точнее, выражения порядкового типа), служащего своеобразным именем элемента в массиве (если левая граница типа – диапазона равна 1, индекс элемента совпадает с его порядковым номером). При упоминании в программе любого элемента массива сразу за именем массива должен следовать индекс элемента в квадратных скобках, например:

B[17] := ‘f’;

C[-2] := a[1] > a[2];

For k := 1 to 10 do a[k] := 0;

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

program Fibonachi;

Var i:integer; f:array[1..50] of integer;

f[1]:=1; f[2]:=1;

for i:=3 to 50 do begin

f[i]:=f[i-1]+f[i-2];

write(' ',f[i])

end;

readln;

ТИП “СТРОКА”

Существует стандартный тип “строка” STRING во многом похожий на тип массивов символов.

Строка - это последовательность символов кодовой таблицы ПЭВМ. При использовании в выражениях строка заключается в апострофы. Количество символов в строке ( длина строки) может динамически меняться от 0 до 255 символов. Для определения данных строкового типа используется служебное слово string, за которым следует заключенное в квадратные скобки значение максимально допустимой длины строки данного типа. Если это значение не указывается, то по умолчанию длина строки равна 255 байт.

<имя типа>=string[< максимальная длина строка];

 

Пример: type name = string[30];

phone = string[ 7];

Тип “Запись”

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

- комплексные числа, состоящие из двух вещественных констант;

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

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

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

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

Под записью понимается структура данных, объединяющая под одним именем данные различных типов. Записи состоят из фиксированного числа элементов, называемыми полями. Поле - это переменная определенного типа. Различные поля могут иметь, в отличие от элементов массива, различный тип. Обращение к элементу записи выполняется с помощью составного( уточненного) имени. Первая часть составного имени - это имя записи, вторая часть - имя поля разделенных точкой. Например, [student].[gruppa] , [student].[Famile] , [Nasos],[marka]

Структурированный тип данных запись объявляется с помощью служебного слова RECORD.

Формат:

Type <имя типа> = record

<имя поля1>:<тип поля1>;

<имя поля2>:<тип поля2>;

<имя поля n>:<тип поля n>;

<вариантная часть>;

end;

Здесь вариантная часть - это конструкция следующего типа:

 

CASE <селектор> of

<знач.1>:(<имя поля1>:<тип поля1>, . . . , <имя поля n>:<тип поляn>,);

<знач.2>:(<имя поля1>:<тип поля1>, . . . , <имя поля n>:<тип поляn>,);

<знач.m>:(<имя поля1>:<тип поля1>, . . . , <имя поля n>:<тип поляn>,);

END;

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

Тип “Множество”

Структурированным типом переменных является множество. Множество - это произвольный набор объектов произвольной природы. Множества не упорядочены. Количество элементов множества может меняться в отличие от записей и массивов. Тип множество используется в тех случаях, когда индекс представляет не значение какого либо элемента, а лишь его наличие или отсутствие. Если описать переменную с некоторым именем N как некоторое множество натуральных чисел, то операция принадлежности этому множеству даст логическое значение истина, если число является элементом множества, и значение ложь в противном случае. Множества можно эффективно реализовывать и обрабатывать. К множествам применяются следующие основные операции: пересечение множеств, объединение множеств, разность множеств, принадлежность множеству.

Описание типа “множество” осуществляется с использованием служебное словосочетание SET OF ( множество из . . .)

Формат:

TYPE <имя> = SET OF <базисный тип >;

TYPE <имя> = SET OF <min> . . . <max>; { диапазон}

TYPE <имя> = SET OF (< знач1>,<знач2>, ... ,<значN>); {перечисление}

При определении множества существуют следующие ограничения:

- базисный тип может быть любой простой тип, за исключением вещественного real;

- максимальное число символов 256;

- значения элементов из базисного типа integer должны принадлежать множеству 0 ... 255;

Множества вычисляются через выражения над множествами, состоящих из констант, переменных и операций. Константы из множеств - это подмножества некоторых множеств. В выражениях на языке Turbo Pascal значения элементов множества указываются в квадратных скобках: [ x, y ], [ x . . y ], [ ]. Если множество не имеет элементов, то оно называется пустым и обозначается [ ].

Таблица 9. Операции над множествами:

+ объединение множеств;
- разность множеств;
* пересечение множеств;
= проверка эквивалентности двух множеств;
<> проверка неэквивалентности двух множеств;
Ü проверка, является ли левое множество подмножеством правого множества;
>= проверка, является ли правое множество подмножеством левого множества;
in проверка, входит ли элемент, указанный слева во множество, указанное справа.

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

Число элементов исходного множества в Turbo Pascal не может быть больше 256, а порядковые номера элементов (т.е. значение функции Ord) должны находиться в пределах от 0 до 225.

Для задания типа-множества следует использовать зарезервированные слова set и of, а затем указать элементы этого множества, как правило, в виде перечисления или диапазона, например:

Alfa = set of ‘A’ . . ‘Z’ ;

Count = set of (Plus, Minus, Mult, Divid) ;

Ten = set of Æ . . 9 ;

Number = set of ‘Æ’ . . 9 ;

Введя тип-множество, можно задать переменные или типизированные константы этого типа-множества.

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

CharVal : Alfa ;

Operation : Count ;

Index : Ten = [ 0, 2, 4, 6, 8 ] ;

Digit : Number = [ ‘0’ . . ‘9’ ] ;

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

CharVal : set of ‘A’ . . ‘Z’ ;

Operation : set of ( Plus, Minus, Mult, Divid ) ;

Index : set of 0 . . 9 = [0, 2, 4, 6, 8 ] ;

Digit : set of ‘0’ . . ‘9’ = [ ‘0’ . . ‘9’ ];

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

Пример. Следующие структуры являются конструкторами множества:

[ Plus, Minus]

[1. . K mod 12 . . 15]

[Chr (0) . . Chr (31), ‘A’ , ‘B’ ]

В каждое множество включается и т.н. пустое множество [ ], не содержащее никаких элементов.

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

РАЗДЕЛ ОПИСАНИЯ ПЕРЕМЕННЫХ

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

Формат описания переменных:

Var <список имен переменных 1>:<имя типа 1>;

<список имен переменных 2>:<имя типа 2>;

<список имен переменных N>:<имя типа N>;

Пример:

var i, j, k, n, m:integer;

x, y, z, max, min :real;

uslov:boolean;

simvol:char;

a,b: array[1..15] of real;

d, cd:array[1..5,1..7} of integer;

S, dad:month;

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

РАЗДЕЛ ОПИСАНИЯ ПРОЦЕДУР И ФУНКЦИЙ

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

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

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

Формат описания пользовательской функции:

Function <имя функции> (<имя переменной>:<тип переменной>, . . . ):<тип результата>;

<Раздел описания локальных меток, констант, переменных >;

{Список формальных параметров с указанием типа}