Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Програмування.doc
Скачиваний:
7
Добавлен:
19.11.2019
Размер:
742.91 Кб
Скачать

2.2. Записи з фіксованою частиною

2.2.1. Теоретичні відомості

Запис - структурований тип даних, що складається з фіксованого числа компонентів одного або кількох типів. Формат типу запису:

TYPE <ім'я типу>=RECORD

< ідентифікатор поля>:<тип компонента>;

ідентифікатор поля>:<тип компонента>;

VAR <ідентифікатор >:<ім'я типу>;

Обсяг пам'яті, що необхідний для запису, складається з довжини компонентів. Звертання до поля (компоненту) запису здійснюється за допомогою ідентифікатора змінної та ідентифікатора поля, розділеним крапкою. Така комбінація зветься складовим ім'ям. Наприклад:

N.NUMBER:=1993: N.MARKA:= ‘ТАЗ-24’:

Оператор приєднання WITH використовується для спрощення роботи з компонентами запису. Щоб не використовувати складове ім'я компонентів запису, застосовують оператор WITH, в якому вказується змінна типу запис. Після цього можна працювати з іменами компонентів. як із звичайними змінними. Формат оператора:

WITH <змінна типу запис> DO <оператор>:

WITH n DO begin (запис n має поля number, marka) number:=1996; marka:='volvo':

end;

with c.b do month:= 9;

with c do with b do month:=9;

Pascal дозволяє вкладання записів один в одний, відповідно оператор WITH може бути вкладеним. WITH R1 DO WITH R2 DO

WITH R3 DO Це еквівалентно запису WITH R1.R2.R3 DO ....

2.2.2. Приклад програми

Умова задачі: Ввести масив записів, кожен з яких містить відомості про прізвище, адресу та номер телефону. Скласти програму, що сортує ці дані за алфавітом прізвищ, знаходить в масиві записів запис, що введений з клавіатури)

uses crt;

type anketa=record

FIO:string;

adress:string;

phone:string;

end;

var

mas:array [1..10] of anketa;

i,j,k:integer;

s:char;

rec:anketa;

procedure vvod;

begin

i:=0;

repeat

i:=i+1;

with mas[i] do

begin

write('FIO ');readln(FIO);

write('adress ');readln(adress);

write('tel ');readln(phone);

end;

writeln('continue? Y/N');

s:=readkey;

until s='N'

end;

procedure vyvod;

begin

writeln('-FlO--adress----telephone--');

for j:=1 to i do

begin

with mas[j] do

begin

write(' ',FIo );

write(' ',adress);

write(' ',phone);

end;

writeln;

end;

end;

procedure sort;

var tmp:anketa;

begin

for j:=1 to i-1 do

for k:=j+1 to i do

begin

if mas[j].fio>mas[k].fio then

begin

tmp:=mas[j];

mas[j]:=mas[k];

mas[k]:=tmp;

end;

end;

end;

procedure search;

var flag:boolean;

begin

writeln('input record for search):fio,adress.tel');

readln(rec.fio);

readln(rec.adress);

readln(rec.phone);

for j:=1 to i do

with mas[j] do begin

If (fio=rec.fio)and(adress=rec.adress)and(phone=rec.phone)

then

begin

flag:=true;

writeln(' record found:',rec.fio,' ',rec.adress,' ',rec.phone);

{break;}

end

else flag:=false;

end;

if flag=false then writeln('record not found');

end;

begin

writeln('results of program var 30');

writeln('auther studentЕ ');

vvod;

writeln('array of inputs records');

vyvod;

sort;

writeln('array of records after sort');

vyvod;

search;

end.