Структура программы языка Турбо Паскаль Программа на языке Турбо Паскаль имеет вид
Вид материала | Программа |
BEGIN и END. Описание функций См. пример См. пример |
- Структура программы на языке Турбо Паскаль Программа, написанная на языке Турбо Паскаль,, 229.09kb.
- Циклические программы. Структурированный тип данных. Структура сложной программы, 860.21kb.
- Программа на языке программирования Паскаль (Турбо Паскаль) имеет следующий вид: Заголовок, 60.23kb.
- Структура программы в Турбо Паскаль. Простые операторы в Турбо Паскаль, 7.57kb.
- Уроки №1-2 тема: "введение в паскаль. Среда турбо-паскаль", 120.81kb.
- Лекция №3. Состав и работа системы программирования Турбо Паскаль Язык программирования, 84.43kb.
- Тематическое планирование кружка на 2009/2010 уч г. «Основы алгоритмизации и программирования, 63.72kb.
- Тема 1 Базовые понятия в языке Турбо Паскаль Лекция 1 Общие сведения об алгоритмическом, 205.26kb.
- Прогон и отладка программы Справочная служба Турбо Паскаля, 959.97kb.
- С. В. Элективный курс «Программируем на Паскале» общие вопросы самылкина Н. Н. Программа, 503.53kb.
Примечание: имена констант, переменных, а также переменных описанных в параметрах процедуры могут совпадать с именами констант и переменных основной программы. Даже если имена переменных основной программы и имена переменных процедуры совпадают, то переменные которые находятся в основной программе и переменные которые находятся в процедуре не зависимы друг от друга.
Под основной программой теперь будем понимать программу, которая находится между операторами 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