Структура программы языка Турбо Паскаль Программа на языке Турбо Паскаль имеет вид

Вид материалаПрограмма
BEGIN и END.
Описание функций
См. пример
См. пример
Подобный материал:
1   2   3   4   5   6
раздел описания переменных (Раздел описания: меток, констант, типов, переменных, процедур и функций).

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

Под основной программой теперь будем понимать программу, которая находится между операторами BEGIN и END.

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

Пример17.1 Программа, в которой используется процедура вывода строки "Это строка написана из процедуры программы!".

PROCEDURE stroka; {начало описания процедуры, stroka - имя процедуры}

BEGIN

writeln('Это строка написана из процедуры программы!');

END; {конец описания процедуры}


BEGIN {начало основной программы}

stroka; {вызов процедуры}

END. {конец основной программы}

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

Пример17.2 Программа, в которой используется процедура, c двумя параметрами, для сложения двух чисел.

VAR {описание переменных для основной программы}

a,x:integer;


PROCEDURE summa (var a,b:integer); {summa - имя; a,b - параметры}

VAR

c:integer;

BEGIN

c:=a+b;

writeln('Сумма чисел = ', c);

END; {конец описания процедуры}


BEGIN {начало основной программы}

a:=15;

x:=20;

summa(a,x); {вызов процедуры}

END. {конец основной программы}

Примечание: как вы видите в основной программе, при вызове процедуры summa я использовал переменные a и x - при вызове процедуры с параметрами, переменные, которые являются параметрами процедуры, могут отличаться от переменных, которые используются при вызове процедуры, т.е вместо a и x можно было написать переменные с другим именем (например d и t). Также стоит отметить, что переменная c могла быть описана в разделе описания переменных основной программы, а в самой процедуре ее описания могло бы и не быть.

ОПИСАНИЕ ФУНКЦИЙ
Функция - аналогична процедуре, главное отличие функции от процедуры является то, что функция возвращает какое-либо значение.

FUNCTION [имя][параметры]:[тип];

[необязательный оператор USES];

[раздел описания];

BEGIN

[команды];

END;

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

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

Пример17.3 Программа, в которой используется функция, которая возвращает значение: TRUE или FALSE, вот такого выражения - (4>12)<(5=x)

FUNCTION proverka: boolean; {начало описания функции}

VAR

x:integer;

BEGIN

write('Введите число x: ');

readln(x);

proverka:=(4>12)<(5=x);

END; {конец описания функции}


BEGIN

writeln(proverka); {вызов функции из основной программы}

END.

Итак, имя функции даем любое (например, proverka). Теперь, параметров нет, значит их не пишем, а пишем тип. Тип boolean - тип который возвращает значения TRUE или FALSE. Затем нужно описать переменную x (ее можно было описать и в основной программе). После этого пишем команды в самой функции и присваиваем значение выражения самой функции.

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

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

Примечание: часто встречаемое слово "возвращает" понимается как "принимает".

Модули в Паскале. Стандартные модули.

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

Вы можете писать свои модули и использовать стандартные такие как System.tpu, Crt.tpu, Graph.tpu.

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

USES [имя модуля 1], [имя модуля 2], [имя модуля 3];

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

Пример18.1 Программа, в которой подключаются два модуля Crt.tpu и Graph.tpu.

USES Crt, Graph; {описание подключаемых модулей}

BRGIN

readkey; {использование функции из модуля Crt.tpu}

END.


Процедуры и функции модуля System.tpu

Как я говорил, некоторые модули загружаются автоматически - их не нужно описывать. Модуль System.tpu является одним из таких.

Функция Abs

Назначение: Возвращает абсолютное значение аргумента (модуль).
Описание: Abs(x);
Тип результата: Соответствует типу параметра.
Примечания: Параметр x - выражение целого или вещественного типа. Результат, имеющий тот же тип, что и x, представляет собой абсолютное значение x.

Пример 19.1

VAR

r: real;

i: integer;

BEGIN

r:=Abx(-2.3); { результат 2.3 }

i:=Abs(-157); { результат 157 }

END.

Функция Addr

Назначение: Возвращает адрес заданного объекта.
Описание: function Addr(x): Pointer;
Тип результата: Указатель.
Примечания: Параметр x - любая переменная, или идентификатор процедуры или функции. Результатом является указатель, ссылающийся на x. Как и указатель типа nil (пустой указатель), результат данной функции совместим по присваиванию со всеми типами указателей.

Пример 19.2

VAR

a:word;

p:pointer;

BEGIN

a:=5;

p:=Addr(a); { присвоить пременной p адресс переменной a }

END.

Примечание: получить адрес также можно операцией @.

Пример 19.3

VAR

a:word;

p:pointer;

BEGIN

a:=5;

p:=@a; { присвоить пременной p адресс переменной a }

END.

Процедура Append

Назначение: Открывает файл для присоединения.
Описание: procedure Append(var f: text);
Примечания: Параметр f - файловая переменная текстового типа (text).
Процедура Appеnd открывает существующий внешний файл с именем, назначенным переменной f. Если внешнего файла с указанным именем не существует, то это является ошибкой. Если файл f уже открыт, то он сначала закрывается, а затем открывается заново. Текущая позиция устанавливается на конец файла.
Если в последнем блоке файла размером 128 байт присутствует символ Ctrl+Z (26 в коде ASСII), то текущая позиция устанавливается в файле таким образом, что при записи первым в блоке будет "затираться" символ Ctrl+Z.
Если переменной f было присвоено пустое имя (например, Assign(f,''), то после обращения к процедуре Appеnd f будет указывать на стандартный выходной файл (стандартный канал номер 1).
После обращения к Appеnd файл f становится доступным только по записи и Eоf(f) всегда принимает значение Truе.

При использовании директивы компилятора {$I+} функция IОRеsult будет возвращать значение 0 при успешном завершении операции и ненулевой код ошибки в противном случае.

Пример 19.4

VAR

f: text;

BEGIN

assign(f,'test.txt'); { связать переменную f с файлом test.txt }

append(f); { открыть файл для дополнения }

writeln(f,'New text.'); { записать в файл новую строчку }

close(f); { закрыть файл }

END.

Функция ArcTan

Назначение: Возвращает арктангенс аргумента.
Описание: function ArcTan(x: real); Real;
Примечания: Параметр x - выражение вещественного типа. Результат представляет собой главное значение арктангенса x (в радианах).

Пример 19.5

VAR

r: real;

BEGIN

r:=ArcTan(5); { результат ~1.37 радиан }

END.

Процедура Assign

Назначение: Присваивает имя внешнего файла файловой переменной.
Описание: procedure Assign(var f; Name: string);
Примечания: Параметр f является файловой переменой любого типа файла, а Name должно представлять собой выражение строкового типа. Дальнейшие операции с f будут выполняться с внешним файлом, с именем, заданным параметром Name.
После обращения к процедуре Assign связь, установленная между переменной f и внешним файлом. Связь будет существовать до тех пор, пока для переменной f не будет выполнена другая процедура Assign.

Имя состоит из маршрута (пути доступа), определяющего доступ к 0 или более каталогов, имена которых отделены друг от друга с помощью обратной косой черты и за которыми следует действительное имя файла:

Диск:\имя_кат\имя_кат\...\имя_кат\имя_файла

Если маршрут начинается с обратной косой черты, то поиск начинается в корневом каталоге, в противном случае он начинается в текущем каталоге. "Диск" представляет собой идентификатор диска (A-Z). Если "Диск" и двоеточие будут пропущены, то используется назначенный по умолчанию дисковод.

Каталог "\имя_кат\имя_кат\...\имя_кат" является корневым каталогом и маршрутом доступа к подкаталогу, в котором содержится имя файла. Параметр "имя_файла" может содержать до восьми символов, за которыми могут следовать точка и расширение имени файла, длиной до трех символов. Максимально допустимая длина всего имени файла составляет 79 символов.
Ограничения: Процедура Assign не должна использоваться для открытого файла.

См. пример 19.4

Функция Assigned

Назначение: Проверяет, имеет ли указатель или процедурная переменная значение nil.
Описание: function Assigned(var P): Boolean;
Примечания: Параметр P должен быть ссылкой на переменную или указатель процедурного типа. Assigned возвращает True, если значение P не равно nil, и False, если оно равно nil. Для переменной-указателя Assigned(P) соответствует проверке P <> nil, а для процедурной переменной - @P <> nil.

Пример 19.6

VAR

p: pointer;

BEGIN

p:=nil;

if Assigned(p) then writeln('p - не имеет значение nil')

else writeln('p - имеет значение nil');

END.

Процедура BlockRead

Назначение: Считывает одну или более записей в переменную.
Описание: procedure BlockRеаd(var f: File; var Buff; Count: Word [; Result: Word ])
Примечания: Параметр f представляет собой файловую переменную, Buff (буфер) - любая переменная, Count (счетчик) - выражение длиной в слово (тип Word) и Result (результат) - это также переменная длиной в слово.

Данная процедура считывает из файла File записи, количество которых не превосходит числа, указанного в переменной Count, начиная с первого байта, занятого переменной Buff. Действительное число полных считанных записей (меньшее или равное значению переменной Count) возвращается в необязательном параметре Result. Если этот параметр не задан, то в том случае, когда число прочитанных записей не будет совпадать со значением переменной Count, произойдет ошибка ввода-вывода.

Весь размер переданного блока не превышает числа байт, определяемых произведением значения переменной Count и длины записи, указываемой при открытии файла (по умолчанию 128). Если это произведение превышает 65535 (64К байта), то возникает ошибка.

Параметр Result является необязательным. Он работает следующим образом. Если был передан весь блок, то при возврате управления в параметре Result будет содержаться то же значение, что и в переменной Count. В противном случае значение параметра Result будет меньше: до того, как успела завершиться передача, был обнаружен символ конца файла. В этом случае, если размер записи файла превышает единицу, то в параметре Result возвращается число полных прочитанных записей. Таким образом, возможная неполная последняя запись в параметре Result не учитывается.

В результате выполнения процедуры BlockRеаd текущая позиция в файле продвигается на число записей, заданных переменной Result.

При использовании директивы компилятора {$I-} функция IОRеsult будет возвращать 0, если операция завершилась успешно и ненулевой код ошибки в противном случае.
Ограничения: Файл должен быть открыт.

Пример 19.7

{ Простая программа быстрого копирования файлов без проверки

на возникновение ошибок }

VAR

FromF,ToF: file;

NumRead,NumWritten: word;

buf: array[1..2048] of char;

BEGIN

Assign(FromF, ParamSrt(1)); { открыть входной файл }

Reset(FromF); { размер записи - 1 }

Assign(ToF, ParamStr(2)); { открыть выходной файл }

Rewrite(ToF, 1); { размер записи = 1 }

Writeln('Копирование ',FileSize(FromF),' байт...');

repeat

BlockRead(FromF, buf, SizeOf(buf), NumberRead);

BlockWrite(ToF, buf, NumberRead, NumWritten);

until (NumRead = 0) or (NumWitten <> NumRead);

Close(FromF);

Close(ToF);

END.

Процедура BlockWrite

Назначение: Записывает одну или более записей из переменной.
Описание: procedure BlockWritе(var f: File; var Buff; Count: Word [; Result: Word ]);
Примечания: Параметр f представляет собой файловую переменную, Buff (буфер) - любая переменная, Count (счетчик) - выражение длиной в слово (тип Word) и Result (результат) - это также переменная длиной в слово.

Данная процедура считывает из файла File записи, количество которых не превосходит числа, указанного в переменной Count, начиная с первого байта, занятого переменной Buff. Действительное число полных считанных записей (меньшее или равное значению переменной Count) возвращается в необязательном параметре Result. Если этот параметр не задан, то в том случае, когда число прочитанных записей не будет совпадать со значением переменной Count, произойдет ошибка ввода-вывода.

Весь размер переданного блока не превышает числа байт, определяемых произведением значения переменной Count и длины записи, указываемой при открытии файла (по умолчанию 128). Если это произведение превышает 65535 (64К байта), то возникает ошибка.

Параметр Result является необязательным. Он работает следующим образом. Если был передан весь блок, то при возврате управления в параметре Result будет содержаться то же значение, что и в переменной Count. В противном случае значение параметра Result будет меньше: до того, как успела завершиться передача, был обнаружен символ конца файла. В этом случае, если размер записи файла превышает единицу, то в параметре Result возвращается число полных прочитанных записей. Таким образом, возможная неполная последняя запись в параметре Result не учитывается.

В результате выполнения процедуры BlockRеаd текущая позиция в файле продвигается на число записей, заданных переменной Result.

При использовании директивы компилятора {$I-} функция IОRеsult будет возвращать 0, если операция завершилась успешно и ненулевой код ошибки в противном случае.
Ограничения: Файл должен быть открыт.

См. пример 19.7

Процедура Break

Назначение: Завершает оператор for, while или repeat.
Описание: procedure Break;
Примечания: Процедура Break выполняет выход из внутреннего оператора for, while или repeat. Break аналогична оператору goto с указанием метки в конце внутреннего оператора цикла. Если Break не содержится внутри цикла for, while или repeat, компилятор сообщает об ошибке.

Пример 19.8

VAR

st: string;

BEGIN

repeat

write('Для выхода из цикла введите 1 ');

readln(st);

if st='1' then break; { выйти если введена цифа 1 }

until 1=2; { бесконечный цикл }

writeln('Выход из цикла!');

END.

Функция Copy

Назначение: Возвращает для строки подстроку.
Описание: procedure Cоpy(s: String; Indx: Integer; Count: Integer);
Примечания: Параметр s - выражение строкового типа. Параметры Indx и Count являются выражениями целого типа. Функция Cоpy возвращает строку, число символов которой соответствует параметру Count и которая начинается с символа строки s, номер которого задан параметром Indx. Если значение параметра Indx превышает длину строки, то возвращается пустая строка. Если параметр Count задает больше символов, чем остается в строке, начиная с символа Indx, то возвращается только остаток строки.

Пример 19.9

VAR

st1,st2: string;

BEGIN

st1:='бестолковый';

st2:=Copy(st1,4,4);

writeln('st2=',st2);

END.

Процедура ChDir

Назначение: Выполняет смену текущего каталога.
Описание: procedure ChDir(s: String);
Примечания: Параметр s представляет собой выражение строкового типа. Текущий каталог изменяется на тот, который задается с помощью маршрута, указанного в параметре s. Если в параметре s задается буквенная метка дисковода, то текущий дисковод также изменяется.

При использовании директивы компилятора {$I-} функция IОRеsult будет возвращать 0, если операция завершилась успешно и ненулевой код ошибки в противном случае.

Пример 19.10

VAR

st1,st2: string;

BEGIN

GetDir(0,st1); { получить текущий каталог }

ChDir('NewKat'); { сделать текущим каталогом NewKat }

{ NewKat - должен существовать }

GetDir(0,st2); { получить текущий каталог }

writeln('Старый текущий каталог =',st1);

writeln('Новый текущий каталог =',st2);

END.

Функция Chr

Назначение: Возвращает символ, соответствующий указанному значению кода ASCII (порядковому номеру).
Описание: function Chr(x: Byte): Char;
Примечания: Параметр x - это выражение целого типа. Результатом является символ с порядковым значением (значением кода ASСII) x.

Пример 19.11

VAR

i: byte;

BEGIN

writeln(Chr(1)); { напечатать символ с кодом 1 }

writeln;

for i:=0 to 255 do write(Chr(i)); { напечатать все символы от 0 до 255 }

END.

Процедура Close

Назначение: Закрывает открытый файл.
Описание: procedure Close(var f);
Примечания: Параметр f представляет собой файловую переменную любого типа файла, который был предварительно открыт с помощью процедур Rеset, Rеwrite или Аppеnd. Для внешнего файла, связанного с переменной f полностью выполняется его обновление, и затем он закрывается, после чего описатель файла DOS освобождается для последующего использования.

При использовании директивы компилятора {$I-} IОRеsult будет возвращать 0, если операция завершилась успешно и ненулевой код ошибки в противном случае.

См. пример 19.4

Это еще далеко не все процедуры и функции модуля System.tpu!

Процедуры и функции модуля System.tpu
(продолжение 1)

Функция Concat

Назначение: Выполняет конкатенацию последовательности строк.
Описание: function Concat(s1, [s2, ..., sn]: String): String;
Примечания: Каждый параметр является выражением строкового типа. Результат представляет собой конкатенацию (объединение) всех строковых параметров. Если длина результирующей строки превышает 255 символов, то она усекается до 255 символов. Использование операции + дает тот же результат, что и вызов функции Concat:

Пример 20.1

VAR

st1,st2: string;

BEGIN

st1:=Concat('ABCD','EFH');

st2:='ABCD'+'EFH'; { результат: st1=st2='ABCDEFH' }

END.

Процедура Continue