double arrow

Описание фиксированной записи


Typeимя типа = record

имя поля 1 : тип;

имя поля 2 : тип;

. . .

имя поля N: тип

end;

Varимя записи : имя типа;

где record, end– зарезервированные слова ( запись, конец);

имя поля1,..имя поляnсписок полей;

Например:

Type Car = record

Number: integer; {номер}

Marka: string[20]; {марка автомобиля}

FIO: string[50] {фамилия владельца}

end;

Var a,b: Car;

Пример обращения к полям записи: a. Marka, B.FIO, A.Number

Для упрощения доступа к полям записи используется оператор присоединения With

Withимя записиdoоператор

где With, do –зарезервированные слова ( с, делать);

имя записи – имя переменной типа запись, за которым возможно следует список вложенных полей;

оператор – любой (один) оператор языка Pascal .

Например: WithAdoMarka:=’Жигули’

К записям в целом применим оператор присваивания . Например А :=В

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

Pascal допускает использование вложенных записей (т.е. поле записи может быть в свою очередь тоже записью). Уровень вложения не должен превышать 9.

Например: Type zap1 = record

Day : byte; {день}

Month : 1..12; {месяц}

Year : word {год}

end;

zap2 = record

FIO: string[30]; {фамилия студента}

Gruppa: integer; {номер группы}

Birthday: zap1 {дата рождения}




end;

Var Spisok: array [1..10] of zap2;

Пример обращения к дню рождения студента:

For i:=1 to 10 do

With spisok[i] , birthday do

day := 23;

В языке Pascal имеется возможность задать тип записи, содержащий произвольное число вариантов структуры. Такие записи называются записями с вариантами. Записи с вариантами обеспечивают средства объединения записей, которые похожи , но не идентичны. Они состоят из фиксированной и вариантной частей. Вариантная часть формируется с помощью оператора Case.Он задает поле признака, которое определяет, какой из вариантов в данный момент будет активизирован. Значением признака в каждый текущий момент выполнения программы должна быть одна из расположенных далее констант. Константа, служащая признаком , задает вариант записи и называется константой выбора. Количество полей каждого из вариантов неограниченно. Объем памяти, необходимый для записи с вариантами, складывается из объемов полей фиксированной части и максимального по объему поля переменной (вариантной) части. Запись может иметь только одну вариантную часть и она должна размещаться в конце записи.

Описание вариантной записи

Typeимя типа = record

имя поля 1 : тип;

. . .

имя поля N: тип;

Case поле признака : тип of

константа выбора1 : (поле, … : тип);

. . .

константа выбора n : (поле, … : тип)

end;

Varимя записи : имя типа;

Например:

Type Tmark1=record {экзамены 1 семестра}

Matem1:byte; {математика}

LinAlg:byte; {линейная алгебра}

Program: byte; {программирование}

end;

Tmark2=record {экзамены 2 семестра}

Mаtem2: byte; {математика}

Electron: byte; {электроника}

Fisika: byte; {физика}

DigAutom: byte; {цифровые автоматы}



end;

Tstudent= record {информация о студенте}

FIO:string[40]; {фамилия,имя,отчество}

Gruppa:string[4]; {группа}

Year: integer; {год рождения}

{вариантная часть}

Case semester: byte of{выбор семестра}

1: (mark1: Tmark1);

2: (mark2: Tmark2)

End;

Vargr921: array[1..15] ofTstudent;

Пример1: Из массива записей, содержащего информацию о преподавателях (фамилия_имя_отчество, читаемые дисциплины) вывести алфавитном порядке фамилии преподавателей, читающих заданную дисциплину.

Programzapis;

Type

Mas=array[1..10] ofstring;

TRec = Record

FIO: String[40]; {ФИО преподавателя}

KOL: integer; {количество читаемых дисциплин}

DIS: Mas; {перечень читаемых дисциплин}

end;

zap=array[1..15] ofTrec;

varrec:zap;

k:trec;

op,kol,i,j,n:integer;

st:string;

Begin

writeln('Введите количество преподавателей ');

readln(kol);

Fori:=1 tokol do

Begin

Write('Введите ФИО -');

readln(rec[i].fio);

write('Введите количество дисциплин -');

readln(rec[i].kol);

Forj:=1 torec[i].kol do

Begin

Write('Введите ',j,'-ую дисциплину- ');

readln(rec[i].dis[j]);

end;

end;

op:=1;

{сортировка массива записей в алфавитном порядке фамилий}

whileop=1 do {op=1 – сортировка не закончена}

Begin

op:=0;

fori:=1 tokol-1 do

ifrec[i].FIO>rec[i+1].FIO then

Begin

k:=rec[i];

rec[i]:=rec[i+1];

rec[i+1]:=k;

op:=1;

end;

end;

Writeln('Введите название дисциплины для поиска преподавателя');

readln(st);

op:=0; {op- признак наличия преподавателей, читающих заданную дисциплину}

Fori:=1 tokol do

Forj:=1 torec[i].kol do

ifrec[i].dis[j]=st then begin

op:=1;

writeln(rec[i].Fio);

end;

if op=0 then

writeln (‘нет преподавателей, читающих дисциплину -’, st);

end.

Результаты решения задачи

Введите количество преподавателей

Введите ФИО -Смирнова Ольга Петровна



Введите количество дисциплин -2

Введите 1-ую дисциплину- информатика

Введите 2-ую дисциплину- вычислительная техника

Введите ФИО -Авдеева Людмила Петровна

Введите количество дисциплин -1

Введите 1-ую дисциплину- вычислительная техника

Введите ФИО -Фомин Иван Сергеевич

Введите количество дисциплин -2

Введите 1-ую дисциплину- физика

Введите 2-ую дисциплину- электроника

Введите название дисциплины для поиска преподавателя

вычислительная техника

Авдеева Людмила Петровна

Смирнова Ольга Петровна

Введите количество преподавателей

Введите ФИО -Романова Елена Сергеевна

Введите количество дисциплин -2

Введите 1-ую дисциплину- физика

Введите 2-ую дисциплину- математика

Введите ФИО -Дмитриев Андрей Владимирович

Введите количество дисциплин -2

Введите 1-ую дисциплину- история

Введите 2-ую дисциплину- философия

Введите название дисциплины для поиска преподавателя

информатика

нет преподавателей, читающих дисциплину -информатика

Тема 2.10 Файлы данных

Файл –представляет собой последовательность компонент одного типа, расположенных на внешнем носителе информации.

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

- у него есть имя;

- содержит компоненты одного типа;

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

В языке Pascal различают 3 типа файлов данных:

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

2. Текстовые – это совокупность символов, разделенных на строки переменной длины. В конце каждой строки стоит признак конца строки EOLN( end of line). Доступ к каждой строке возможен только последовательно, начиная с первой. Компонентами текстового файла могут быть данные следующих типов: символьные, стринги, вещественные и целочисленные.

3. Нетипизированные – отсутствие типа компонентов делает эти файлы совместимыми с любыми другими файлами и позволяет организовать высокий скоростной обмен данными между внешним запоминающим устройством (ВЗУ) и оперативной памятью (ОП). Относятся к файлам прямого доступа.

Чтение данных из файла (т.е. ввод данных в ОП машины) и запись данных в файл (т.е. вывод данных из ОП на ВЗУ) осуществляется через файловые переменные.







Сейчас читают про: