Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АЯП лекции.doc
Скачиваний:
12
Добавлен:
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 становится истинной при чтении этого маркера.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]