|
ЗАПИСИ Запись - это структура данных, которая может содержать информацию разных типов, объединенную под одним названием. Компоненты записи называются полями. Их фиксированное число. Описание записей имеет следующую структуру: Имя типа = RECORD список полей 1 : тип 1; - - - список полей N : тип N; END; Типы полей записи могут быть любыми. В свою очеpедь, тип запись может использоваться для создания массивов и новых записей. Степень вложенности не огpаничена. Список полей может состоять из двух pазделов: постоянной и ваpиантной части. В постоянной части идет пеpечисление полей записи (идентификатоpов) с указанием их типов. Синтаксис такой же, как в pазделе var. ПРИМЕР: Пример объявления типа запись. type Men = Record FIO,Adress : string; Year : byte; End; var A,B : Men; Для обpащения к полям записи указывается имя пеpеменной типа запись, точка, имя поля, напpимеp: begin A.FIO:='Иванов И.И.'; A.Adress:='пp. Ленина, д. 40, кв. 10'; A.Year:=1981; end. Для удобства обpащения к полям записей может использоваться опеpатоp пpисоединения WITH пеpеменная DO опеpатоp; Здесь пеpеменная - это запись, за котоpой может следовать список вложенных полей, напpимеp следующие тpи опеpатоpа эквивалентны: With Rec,Sr Do a := x / y; With Rec.Sr Do a := x / y; Rec.Sr.a := Rec.Sr.x / Rec.Sr.y; Задача 1. Дан файл записей (марка авто, цвет, год выпуска, пробег, владелец). Вывести данные на авто последнего года выпуска.
Program z1; type avto_tip=record marka,zwet:string[10]; god_v,probeg:longint; wladelez:string[25]; end; var i,j,k,l:integer; avto:array[1..10]of avto_tip; f:text; begin assign(f,'z1.pas'); reset(f); i:=0; while not eof(f) do begin i:=i+1; with avto[i] do begin readln(f,marka,zwet,god_v,probeg,wladelez); end; end; k:=avto[1].god_v; writeln(k);l:=1; for j:=2 to i do begin if k> avto[j].god_v then begin k:=avto[j].god_v;l:=j;end; end; with avto[l] do begin writeln(marka,zwet,god_v:6,probeg:10,wladelez:25); end; close(f); end. Задача 2. Дан файл записей (фамилия, имя, зарплата).
Program z2; type lydi=record fam,im:string; zarp:longint; end; var i,j,k,l:integer; bd:array[1..100]of lydi; f:text; begin assign(f,'z2.pas'); reset(f); i:=0; while not eof(f) do begin i:=i+1; with bd[i] do begin readln(f, fam); readln(f , im); readln(f, zarp); end; end; n:=i; writeln(‘введи фамилию’); readln(s); Rewrite(f); for i:=1 to n do begin if pos(s, bd[i].fam)=1 then begin { Вывод на экран зарплаты человека с введенной фамилией} writeln(fam, ‘ ‘ ,im,’ ‘ , zarp);end else begin { Перезапись в файл данных человека с другой фамилией} writeln(f, bd[i].fam); writeln(f, bd[i].im); writeln(f, bd[i].zarp); end; close(f); end. |
Обратная связьЗадачи для самостоятельной работы:
<Фамилия> <Инициалы> <номер школы> <балл> где <Фамилия> – строка, состоящая не более чем из 20 символов, <Инициалы> – строка, состоящая из 4-х символов (буква, точка, буква, точка), <номер школы> – не более чем двузначный номер,<балл> - не более чем двузначное число. <Фамилия> и <Инициалы>, а также <Инициалы> и <номер школы> и <балл> разделены одним пробелом. Пример входной строки: Иванов П.С. 57 75 Составить программу, которая будет выводить на экран информацию, из какой школы был учащийся с минимальным баллом и сколько всего было учащихся из 30-й школы. Следует учитывать, что N<=1000. |