Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АЯП лекции.doc
Скачиваний:
16
Добавлен:
03.12.2018
Размер:
634.37 Кб
Скачать

Записи.

Запись – упорядоченное ограниченное количество элементов разного типа.

Упорядоченность структуры «запись» позволяет обращаться к каждому элементу записи – ее полю. При описании записи каждое поле имеет свой идентификатор.

VAR <имя записи>:RECORD

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

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

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

end;

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

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

WITH <имя записи> DO

<имя поля>;

оператор;

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

Пример. Задана ведомость, в которой 15 студентов. В ней отображены результаты сессии по трем предметам. Определить средний балл группы.

type st=record

fio:string;

o1,o2,o3:2..5;

end;

var ved: array[1..15] of st;

p:integer;

sr:real

begin writeln(‘Введите ведомость’);

for p:=1 to 15 do

readln(ved[p].fio);

readln ved[p].o1, ved[p].o2, ved[p].o3;

end;

sr:=0;

for p:=1 to 15 do

sr:=sr+ved[p].o1+ved[p].o2+ved[p].o3;

sr:=sr/45;

writeln(sr:0:1);

end.

Второй вариант с присоединением:

type st=record

fio:string;

o1,o2,o3:2..5;

end;

var ved: array[1..15] of st;

p:integer;

sr:real

begin writeln(‘Введите ведомость’);

for p:=1 to 15 do

with ved[p] do

begin

readln(fio);

readln (o1,o2,o3);

end;

sr:=0;

for p:=1 to 15 do

sr:=sr+o1+o2+o3;

sr:=sr/45;

writeln(sr:0:1);

end.

Примечание.

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

Пример. Задана ведомость на 15 студентов. Упорядочить содержимое этой ведомости по алфавиту фамилий.

type st=record

fio:string;

o1,o2,o3:2..5;

end;

var ved:array[1..15] of st;

c,p:integer;

v:st;

begin writeln(‘’);

for p:=1 to 15 do

with ved[p] do

begin readln(fio);

readln(o1,o2,o3);

end;

repeat c:=0;

for p:=1 to 14 do

if ved[p].fio>ved[p+1].fio then begin

v:=ved[p];

ved[p]:=ved[p+1];

ved[p+1]:=v;

c:=c+1;

end;

until c=0;

for p:=1 to 15 do

with ved[p] do begin

writeln(fio,’ ‘,o1,’ ‘,o2,’ ‘,o3);

end.

Файлы

В Паскале реализована работа со всеми видами файлов, а именно:

1) прямого доступа (типизированные);

2) последовательного доступа (текстовые);

3) нетипизированные (побитовая информация).

Алгоритм переназначения информационных потоков ввода-вывода с экранного представления в файловое.

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

VAR

<имя файловой переменной 1>: TEXT;

<имя файловой переменной 2>:FILE OF тип элемента файла;

<имя файловой переменной 3>:FILE.

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

  1. В тексте программы для связывания файловой переменной с физическим файлом используется ASSIGN

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

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

3)

а) REWRITE(<имя файловой переменной>); - открывает путь для файла.

Данная процедура осуществляет следующее действие: если файла на диске нет, то все необходимые манипуляции для его регистрации в операционной системе осуществляются процедурой «rewrite». Файл открывается для записи, маркер файла устанавливается в первую позицию файла.

Если файл есть, то программист, используя rewrite, учитывает, что при его использовании маркер файла устанавливается в первую позицию, а информация, расположенная в этом файле, уничтожается. Rewrite не контролирует наличие файла на диске.

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

4) в соответствии с предыдущим пунктом чтение или запись информации осуществляется процедурами «read/write», но в списке чтения или записи в первой позиции указывается имя файловой переменной, посредством которой осуществляется перенаправление информационного потока. Переменные, в которые осуществляется чтение или запись, носят позиционный характер, т.е. их перечисление определяет запись или чтение.

Примечание.

Программист помнит, что при каждом обращении к файлу маркер файла автоматически смещается в следующую позицию, т.е. если из файла считывается первый элемент, то при следующем обращении «read/write» будет считываться или записываться (n+1) позиция.

5) Если файла формируется, при окончании его формирования указывается маркер конца файла, используется CLOSE <имя файловой переменной>. Если файл считается, то его тоже следует закрывать. Если close не используется, то после завершения работы программы файл автоматически закрывается. В случае записи маркер конца файла не записывается.

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