<тело процедуры>;

имя процедуры – имя, которое будет использоваться для вызова и выполнения процедуры;

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

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

Наибольший интерес представляет список форм параметров. Они могут быть следующими:

Формальные параметры переменный, значения, процедуры и функции.

Первыми следуют формальные параметры значения. Они описываются:

П1, П2,…,Пn: тип1;

Var Пn, Пn+1:тип2;

Пk: типM;

Параметры переменных начинаются со слова Var.

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

Функция. Синтаксис для описания функции

Функция function имя (список формальных параметров): тип функции тело функции;

Имя:= значение;

Имя – имя функции, которая потом используется для её вызова; это же имя является основным выходным параметром функции, т. е. в языке pascal внутри функции неявно определена такая переменная и в теле функции обязательно должен присутствовать оператор, присваивающий значение функций.

Список форм. пар такой же, как и в процедуре.

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

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

НЕ нашли? Не то? Что вы ищете?

Пример:

Необходимо найти сумму min и max для этих массивов

Program min_max_array;

Var A[10], B[10], C[10]: integer;

Function minarray ( x: array [1..10] of integer): integer;

Var i, m: integer;

Begin

m:= x[1];

for i:= 2 to 10 do

if x[i] >/< m then m:= x[i];

min array:= m;

end;

begin

. . .

y:= minarray (A) + maxarray (A);

y:= minarray (B) + maxarray (B);

. . .

end.

Рекурсивные процедуры и функции

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

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

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

Пример:

Function fact (N: integer): integer;

Begin

If (N=1) then fact:=1

Else fact:=fact(N-1)*N;

End.

Данные файлового типа

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

Const файлового типа в языке Паскаль отсутствует.

Переменные файлового типа (файловая переменная или просто файл) – это переменные для которых в разделе описания переменных указан файловый тип.

В Паскале есть 3 разновидности файлов (файловых переменных):

-  текстовые

-  типизированные

-  нетипизированные

Текстовые файлы предназначены для работы с текстами и представляются собой последовательность строк символов. Строки различаются друг от друга символом возврат коретки (код 13) и символом перевод строки (код 10).

Конец файла задается символом с кодом 26. Символ формируется в люом такстовом редакторе либо автоматически в конце файла, либо пользователем клавишами ^Z.

В Паскале предусмотрено автоматическое открытие двух стандартных текстовых файлов с именами INPUT и OUTPUT. Они формируют стандартный текстовый файл ввода и вывода на экране.

Readln(INPUT) - клавиатура

Writeln(OUTPUT) – экран

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

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

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

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

Для типизированных файлов вводимые и выводимые значения должны строго соответствовать объявленному типу запись файлов.

В программе текстовый файл объявляется путем задания в разделе переменных некоторой переменной. При этом ключевое слово text говорит что файл – текстовый.

Var f: text;

где f – имя переменной.

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

Assign(Var f; name: string)

name: string – строка, которая содержит путь и имя файла к которой будет осуществляться доступ.

Assign(Var f; ‘A:\My. txt’)

Если не указан диск и путь, то файл будет искать в текущем каталоге. Строка name ограничена 79 символами в Паскале. Если name - пустая строка, то связь осуществляется со стандартными файлами ввода – вывода.

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

- Reset(Var f [; RecSize: Word]);

- Rewrite(Var f [; RecSize : Word]);

Reset - открывает существующий файл. Второй необходимый параметр RecSize исполняется для нетипизированных файлов и задает длину записи нетипизированного файла. Если указанный файл отсутствует на диске – он там возникает. Если файл был открыт ранее, то Reset закрывает его, а потом вновь открывает. Указатель текущей позиции файла устанавливается в начальное состояние(в начало файла).

Процедура Rewrite – используется в случае работы с нетипизированыым файлом. Эта процедура создает и открывает новый файл с именем, присвоенным файловой переменной f. Если на дмске существует такой файл, то он его уничтожает и создает новый. Текущая позиция – в начале пустого файла.

Замечание. При возникновении ошибки ввода – вывода при работе с файлами как правило программа снимается с выполнения. Этого можно избежать, поставив перед операцией вводно – выводную директиву компелятора – отключение ошибок ввода – вывода: {$I-}

По умолчанию в Паскале действует директива {$I+} , что вызывает снятие прораммы с выполнения при возникновении ошибок ввода – вывода. Обязательно в случае исполнения директивы {$I-} должен в программе присутствовать блок по обработке возникших ошибок. Это делается функцией IORESULT: Word, при этом если функция возвращает значение 0, то никаких ошибок не возникает, в противоположном случае функция возвращает код ошибки, который надо проанализировать и принять решение.

If NOT IORESULT<>0 then

Case IORESULT OF

Код1: . . .

Код2: . . .

End;

Особенности работы с текстовыми файлами

Функция Append(Var f:text) – открытие существующего текстового файла и устанавливает состояние в текущую позицию в конце файла. Если файл отсутствует, то возникает ошибка.

Функция Close(Var f) – закрывает файл, при этом файл полностью обновляется.

Процедура Read(Var f: text, V1 ,V1,…,Nn). Где V1 ,V1,…,Nn - это имена переменых, в которые даны из файла могут быть занесены. они могут иметь тип char, real, integer, string. Если переменная Vi – типа char, то считывается 1 символ из файла и присваивается переменной Vi. если при этот обнаружен конец файла (EOF(f)= True), то возвращается символ конца файла CHR(26).

Если обнаружен конец строки: (EOLN(f)= True), то возвращается код символа CHR(13).

Если Vi - переменная типа integer, то считываются последние символы, являющиеся цифрами либо знаками+,-. Считывание происходит до 1 символа, который не удовлетворяет требованиям, потом считывание прекращается предшествующим числу пробелом, символом табуляции, CHR(32) – концом строки, CHR(8) – концом файла. Если послать считывать символы, не удовлетворяющие формату целого числа, то возникает ошибка ввода-вывода.

Аналогично осуществляется ввод данных real.

Если тип считываемой переменной string, то read. При этом символ возврата корретки не считывается.

Если длина считываемой последовательности больше длины переменной Vi, то последние лишние символы отбрасываются. Однако при последующем обращении к read эти символы остаются там, где они было оставлены. Если файл заканчивается раньше, чем переменная, то оставшимся переменным присваивается нулевое значение.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8