Записи з варіантами

Записи з варіантами – це такі записи, у яких є спільна частина для всіх даних заданого типу та варіантна частина, що складається з поля-ознаки і однієї чи кількох варіантних компонентів.

Варіантні компоненти включаються до конкретного елементу типу даних за альтернативним принципом в залежності від значення поля-ознаки.

Приклад. Оголосити видавничу продукцію. Спільні поля запису: назва видавничої продукції, рік видання. Варіативні поля: якщо це книга, то оголосити поля запису автор і видавництво, якщо це журнал, то оголосити поля запису рубрика і номер видання, якщо це стаття, то оголосити поля запису назва статті і автор.

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?


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



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