Записи з варіантами – це такі записи, у яких є спільна частина для всіх даних заданого типу та варіантна частина, що складається з поля-ознаки і однієї чи кількох варіантних компонентів.
Варіантні компоненти включаються до конкретного елементу типу даних за альтернативним принципом в залежності від значення поля-ознаки.
Приклад. Оголосити видавничу продукцію. Спільні поля запису: назва видавничої продукції, рік видання. Варіативні поля: якщо це книга, то оголосити поля запису автор і видавництво, якщо це журнал, то оголосити поля запису рубрика і номер видання, якщо це стаття, то оголосити поля запису назва статті і автор.
Type
Variaty = (book, mag, article);
Edition = record {видавнича продукція}
Name: string; {назва видавничої продукції}
Year: integer; {рік видання}
Case V: variaty of
book: (autor: string[25]; vidav: string [20]); {книга}
mag: (rubrica: string[40]; nom: byte); {журнал}
article: (name_vid: string [40]; autor: string) {стаття}
end; {record}
Приклад. Створити масив записів про квартири. Поля запису: загальна площа квартири, площа кухні, кількість поверхів у будинку, поверх, район, адреса, вартість. Використовуючи дані про квартири, організувати пошук квартир за заданими параметрами. На екран вивести інформацію про усі квартири, що задовольняють вказаним значенням відповідних параметрів.
|
|
Довідки:
1. Дані про всі квартири.
2. Дані про квартири вказаного району.
3. Дані про квартири, вартість яких менша 100000$.
4. Дані про квартири 9-типоверхових будинків.
5. Дані про квартири, площа яких більша 40 квадратних метрів.
Текст програми:
Program PR_10;
Uses crt;
Const n=3; {кількість записів}
Type
kvartira=record
zag_ploscha: integer; {загальна площа}
kuhnia_pl: string; {площа кухні}
k_st_pov: byte; {кількість поверхів у будинку}
poverh: byte; {поверх}
rayon: string; {район}
adresa: string; {адреса}
vartist: longint; {вартість}
end; {record}
Var kvart: array[1..n] of kvartira; {масив записів про квартири}
i: byte; {параметр циклу}
user_case: byte; {номер довідки }
rayoni: string; {район для пошуку}
Begin clrscr;
for i:=1 to n do {вводимо інформацію про квартири}
begin with kvart[i] do
Begin
write('Введіть загальну площу квартири (в квадратних метрах):');
readln(zag_ploscha);
write('Введіть площу кухні (в квадратних метрах):');
readln(kuhnia_pl);
write('Введіть кількість поверхів у будинку:');
readln(k_st_pov);
write('Введіть номер поверху:');
readln(poverh);
write('Введіть район:');
readln(rayon);
write('Введіть адресу:');
readln(adresa);
write('Введіть вартість ($):');
readln(vartist);
end;
end;
repeat clrscr;
writeln(‘ВИБЕРІТЬ ОДИН З ПУНКТІВ МЕНЮ (від 1-го до 6-го)’);
writeln(‘Введіть номер потрібного пункту меню та натисніть <Enter>’);
writeln;
writeln('1.Показати дані про всі квартири');
writeln('2.Показати дані про квартири вказаного району');
writeln('3.Показати дані про квартири вартістю менше 10000$');
writeln('4.Показати дані про квартири 9- типоверхових будинків');
|
|
writeln('5.Показати дані про квартири, загальна площа яких більша 40 квадратних метрів');
writeln('6.Вихід');
readln(user_case);
case user_case of {вибір пункту від 1-го до 6-го}
1: begin {Дані про всі квартири}
clrscr;
writeln(‘ДАНІ ПРО ВСІ КВАРТИРИ’);
writeln;
writeln('заг пл|кухня|к-сть пов|поверх| район | адреса |вартість| ');
for i:=1 to n do
begin with kvart[i] do
writeln(zag_ploscha:6,'|',kuhnia_pl:5,'|',k_st_p ov:9,’|', poverh:6, ’|’, rayon:14,’|’, adresa:24,’|’,vartist:8,’|’);
end;
end;
2: begin {дані про квартири вказаного району}
clrscr;
writeln(‘Введіть район:’);
readln(rayoni);
writeln(‘ДАНІ ПРО КВАРТИРИ РАЙОНУ “’,rayoni,’”’);
writeln;
writeln('заг пл|кухня|к-сть пов|поверх| район | адреса |вартість| ');
for i:=1 to n do
if kvart[i].rayon=rayoni then
begin with kvart[i] do
writeln(zag_ploscha:6,'|',kuhnia_pl:5, '|',k_st_pov:9,’|',poverh:6,’|’, rayon:14, ’|’,adresa:24,’|’,vartist:8,’|’);
end;
end;
3: begin {дані про квартири дешевші 10000$}
clrscr;
writeln(‘ДАНІ ПРО КВАРТИРИ ВАРТІСТЮ МЕНШЕ 100000$’);
writeln;
writeln('заг пл|кухня|к-сть пов|поверх| район | адреса |вартість| ');
for i:=1 to n do
if kvart[i].vartist<100000 then
Begin
with kvart[i] do
writeln(zag_ploscha:6,'|',kuhnia_pl:5,' |',k_st_pov:9,’|',poverh:6,’|’, rayon:14,’|’,adresa:24,’|’,vartist:8,’|’);
end;
end;
4:begin {дані про квартири 9-типоверхових будинків}
clrscr;
writeln(‘ДАНІ ПРО КВАРТИРИ 9- ТИПОВЕРХОВИХ БУДИНКІВ’);
writeln;
writeln('заг пл|кухня|к-сть пов|поверх| район | адреса |вартість| ');
for i:=1 to n do
if kvart[i].k_st_pov=9 then
begin with kvart[i] do
writeln(zag_ploscha:6,'|',kuhnia_pl:5,'|',k_st_pov:9, ’|', poverh:6,’|’, rayon:14,’|’,adresa:24,’|’, vartist:8,’|’);
end;
end;
5: begin { дані про квартири з загальною площею більше 40 квадратних метрів}
clrscr;
writeln(‘ДАНІ ПРО КВАРТИРИ З ЗАГАЛЬНОЮ ПЛОЩЕЮ БІЛЬШЕ 40 КВАДРАТНИХ МЕТРІВ’);
writeln;
writeln('заг пл|кухня|к-сть пов|поверх| район | адреса |вартість| ');
for i:=1 to n do
if kvart[i].zag_ploscha>40 then
Begin
with kvart[i] do
writeln(zag_ploscha:6,'|',kuhnia_pl:5,'|',k_st_pov:9,’|', poverh:6,’|’, rayon:14,’|’,adresa:24,’|’,vartist:8,’|’);
end;
end;
6:halt; {вихід з програми}
end; {case}
writeln;
Readln
until user_case=6;
Readln
End.
Результати виконання програми:
Приклад 11. Оголосити тип даних «ПК» (персональний комп’ютер). Поля запису: прізвище, якщо студент має персональний комп’ютер вдома (відповідь так), то оголосити поля запису: скільки часу витрачає на заняття, перегляд фільмів та ігри, якщо студент не має ПК вдома (відповідь ні), то оголосити поле запису: в які дні працює в комп’ ютерному класі самостійно.
Текст програми:
Program PR_11;
Uses crt;
Type
variaty=(tak,ni);
PK=record
Surname: string; {прізвище студента}
case vidp: variaty of {варіантна частина запису}
tak: (lessons,games,films:string); {студент має ПК вдома}
ni: (PK_class:string); {студент не має ПК вдома}
end;{record}
Var m: array[1..20] of PK; {масив записів}
n: byte; {кількість студентів}
vib: byte; {відповідь користувача на питання про наявність ПК вдома}
i:byte; {параметр циклу}
Begin
clrscr;
writeln(‘Введіть кількість студентів:');
readln(n);
for i:=1 to n do
begin
write('Введіть прізвище студента:');
readln(m[i].Surname);
writeln(' Наявний ПК вдома(1) чи ПК вдома немає(2)?');
readln(vib);
case vib of
1: m[i].vidp:=tak;
2: m[i].vidp:=ni;
end;{case}
case m[i].vidp of
tak: { у випадку, коли студент має ПК вдома}
begin
with m[i] do
begin
write('Скільки часу витрачає на заняття?:');
readln(lessons);
write('Скільки часу витрачає на ігри?:');
readln(games);
write('Скільки часу витрачає на перегляд фільмів?:');
readln(films)
end;
end;
ni: { у випадку, коли студент не має ПК вдома}
begin
write('В які дні працює в комп’ ютерному класі самостійно?:');
readln(m[i].PK_class);
end;
end;{case}
end;{кінець циклу}
writeln;
writeln('Студенти, які мають ПК вдома:');
writeln;
for i:=1 to n do
if m[i].vidp=tak then
with m[i] do
begin
writeln(Surname,' витрачає на ');
writeln('заняття: ',lessons);
writeln('ігри: ',games);
writeln('фільми: ',films)
end;
writeln;
writeln('Студенти, які не мають ПК вдома:');
writeln;
for i:=1 to n do
if m[i].vidp=ni then
writeln(m[i].Surname,' самостійно працює в комп’ютерному класі в такі дні: ',m[i].PK_class);
readln
End.
Результати виконання програми:
Введіть кількість студентів:
Введіть прізвище студента: Анцебурова
Наявний ПК вдома(1) чи ПК вдома немає(2)?
Скільки часу витрачає на заняття?: 6 год
Скільки часу витрачає на ігри?: 1 год
|
|
Скільки часу витрачає на перегляд фільмів?: 2 год
Введіть прізвище студента: Коваленко
Наявний ПК вдома(1) чи ПК вдома немає(2)?
В які дні працює в комп’ ютерному класі самостійно?: вівторок, середа, четвер
Введіть прізвище студента: Дубович
Наявний ПК вдома(1) чи ПК вдома немає(2)?
Скільки часу витрачає на заняття?: 2 год
Скільки часу витрачає на ігри?: 1 год
Скільки часу витрачає на перегляд фільмів?: 3 год
Студенти, які мають ПК вдома:
Анцебурова витрачає на
заняття: 6 год
ігри: 1 год
фільми: 2 год
Дубович витрачає на
заняття: 2 год
ігри: 1 год
фільми: 3 год
Студенти, які не мають ПК вдома:
Коваленко самостійно працює в комп’ютерному класі в такі дні: вівторок, середа, четвер
Питання для самоконтролю
1. Що таке запис?
2. В якому випадку зручно використовувати записи?
3. Що таке фіксовані записи?
4. Що таке записи з варіантами?
5. В чому відмінність фіксованих записів від записів з варіантами?
6. Для чого потрібен оператор приєднання with?