Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория кратко.docx
Скачиваний:
8
Добавлен:
27.02.2021
Размер:
44.82 Кб
Скачать
  1. Процедуры и функции

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

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

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

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

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

Program CharConvert;

{Программа вводит текстовую строку, преобразует все входящие в нее

буквы в прописные и выводит результат}

Procedure UpString(s1:string; var s2:string);

{Процедура преобразует буквы входной строки s1 в прописные буквы

латинского алфавита и помещает результат преобразования в выходную

строку s2. Предполагается, что последовательность букв образуют

непрерывный массив. В соответствии с таблицей кодировки символов

коды символов латинских строчных букв от а до z образуют непрерывный массив монотонно нарастающих чисел от 97 до 122, а коды соответствующих им прописных букв – непрерывный массив чисел от 65 до90. Преобразование строчных букв в прописные состоит в уменьшении кода буквы на 32}

Var

i:integer;

c:char; {Рабочая переменная преобразования}

begin

s2:=’’; {вначале выходная строка пустая}

{Цикл посимвольного анализа исходной строки}

for i:=1 to Length(s1) do

begin

{Берем из входной строки очередной символ}

c:=s1[i];

{Проверяем символ на принадлежность к массиву}

if (c>=’a’) and (c<=’z’) then

c:=chr(ord(‘A’)+ord(c)-ord(‘a’));

s2:=s2+c;

end

end;

Var

Sinp, Sout:String; {Исходная и преобразованная строки}

Begin

Write(‘Введите строку’);

ReadLn(Sinp);

UpString(Sinp, Sout); {Преобразуем введенную строку к прописным б}

WriteLn(‘Результат’, Sout)

End.

Описание процедуры начинается словом Procedure за которым следует имя процедуры и список формальных параметров. Список параметров заключается в круглые скобки и содержит перечень параметров с указанием их типа. Перед параметром s2, с помощью которого в вызывающую программу возвращается результат преобразования, стоит зарезервированное слово Var. Именно таким способом компилятору указываются те параметры, в которых процедура возвращает вызвавшей ее программе результат своей работы. Procedure, имя и список параметров образуют заголовок процедуры. За заголовком следует тело процедуры, содержащее раздел описаний и раздел операторов.

Второй способ реализации данной программы – оформим алгоритм преобразования в виде функции.

Program CharConvert1;

Function UpString(s1:string):string;

Var

i:integer;

c:char;

s2:string {Результат преобразования}

begin

s2:=’’;

for i:=1 to Length(s1) do

begin

c:=UpCase(s1[i]);

s2:=s2+c;

end;

UpString:=s2 {Присваиваем значение функции UpString }

end;

Var

Sinp:String;

Begin

Write(‘Введите строку’);

ReadLn(Sinp);

WriteLn(‘Результат’, UpString(Sinp))

End.

Функции UpString используется в качестве параметра обращения к другой процедуре (WriteLn). В теле любой функции необходимо осуществлять присваивание ей вычисленного значения (UpString:=s2). В левой части оператора присваивания в этом случае указывается имя функции. С помощью стандартной функции UpCase преобразуется каждый очередной символ латинского алфавита.

  1. ЗАПИСИ

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

Структура:

<имя типа> = Record <список полей> End

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

Type

BirthDay = Record

day, month : byte;

year: integer

End;

Var

a, b: BirthDay;

Тип BirthDay есть запись с полями day, month, year. Переменные a, b содержат записи типа BirthDay.

Значения переменных типа записи можно присвоить другим переменным того же типа:

a:=b;

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

a.day:=27;

b.year:=1990;

Вложенные поля

Type

BirthDay = Record

day, month : byte;

year: integer

End;

Var

c:Record

name:string;

bd:BirthDay

end;

begin

if c.bd.year=1990 then

end.

Чтобы упростить доступ к полям записи, используется оператор присоединения With

With <переменная> Do <оператор>

With c.bd do month:=9;

Это эквивалентно

With c do with bd do month:=9; или

With c,bd do month:=9; или

c.bd.month:=9;

  1. ФАЙЛЫ

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

Любой файл имеет 3 характерные особенности.

  1. У него есть имя, что дает возможность программе работать одновременно с несколькими файлами.

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

  3. Дли файла не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти.

Файловый тип или переменную файлового типа можно задавать одним из трех способов:

<имя> = File Of <тип>;

<имя> = Text;

<имя> = File;

Type

Text80=File of string [80];

Var

F1: file of char;

F2:text;

F3:file;

F4:text80; {типизированный}

В зависимости от способа объявления можно выделить 3 вида файлов:

  • Типизированные файлы (задаются File of)

  • Текстовые файлы (определяются типом Text)

  • Нетипизированные файлы (определяются типом File)

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

Assing (<файловая переменная>, <имя файла или лог. устройства>);

Имя файла – выражение строкового типа, содержит до 8 разрешенных символов – прописные и строчные латинские буквы, цифры и символы ! @ # $ % ^ & () ~ - _`. За именем может следовать расширение – последовательность до 3 разрешенных символов. Расширение отделяется от имени точкой. Перед именем может указываться путь к файлу: имя диска, имя текущего каталога, имена каталогов вышестоящего уровня.

Var

finp:text;

fout:file of string;

consr

name=’c:\dir\subdir\out.text’;

begin

assign(finp,’123.dat’);

assign(fout,name);

end.

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

Для чтения файл инициируется с помощью стандартной процедуры

Reset(<файловая переменная>);

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

Var

f:file of char;

begin

assign(f, ‘file.dat’);

{$I-} {Отключаем контроль ошибок ввода-вывода}

reset(f)

{$I+} {Включаем контроль ошибок ввода-вывода}

if IOResult<>0 then

… {Файл не существует}

else

… {Файл существует}

end.

С помощью директивы компилятора {$I-} отключается автоматический контроль ошибок ввода-вывода. Если этого не сделать, то отсутствие файла приведет к аварийному завершению работы. Если делается попытка инициировать чтение из несуществующего файла, возникает ошибка, которая может быть сообщена программе ненулевым значением встроенной функции IOResult.

Разрешается обращаться к типизированным файлам, открытым процедурой Reset (для чтения) с помощью процедуры Write (для записи). Для текстовых файлов, открытых процедурой Reset, нельзя использовать процедуру Write или WriteLn.

Стандартная процедура

Rewrite (<файловая переменная>)

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

Процедура

Append (<файловая переменная>)

Инициирует запись в ранее существующий текстовый файл для его расширения. При этом указатель файла устанавливается в его конец. Ее нельзя применять для типизированных и нетипизированных файлов. Если текстовый файл ранее уже был открыт с помощью Reset или Rewrite, использование Append приведет к закрытию этого файла и открытию его вновь, но уже для добавления записей.

Процедуры и функции для работы с любого вида файлами:

Close(<файловая переменная>) – закрывает файл.

Rename(<файловая переменная>, <новое имя>) – переименовывает файл.

Erase(<файловая переменная>) – уничтожает файл.

EOF(<файловая переменная>) – функция тестирующая конец файла. Возвращает истина, если файловый указатель стоит в конце файла. При записи это означает, что очередной компонент будет добавлен в конец файла, при чтении – что файл исчерпан.