Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція #Записи.doc
Скачиваний:
1
Добавлен:
16.09.2019
Размер:
156.67 Кб
Скачать

Тема_7: Записи. Тип даних RECORD.

План.

  1. Поняття та призначення записів.

  2. Фіксовані записи.

  3. Оператор приєднання WITH.

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

  5. Приклади використання записів.

1. Поняття та призначення записів.

Запис – це структура даних, що складається з фіксованої кількості елементів, які називаються полями. Поля можуть мати різний тип даних.

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

Записи бувають двох видів: фіксовані та з варіантами.

2. Фіксовані записи.

Фіксовані записи мають фіксовану кількість полів. Вони оголошуються в розділі оголошення типів даних таким чином:

Type назва запису = record

поле 1: тип даних;

поле 2: тип даних;

……………………

поле n: тип даних

end; { record }

Var імя змінної: назва запису;

Звернення до полів запису здійснюється за іменем змінної, після якого через крапку вказують назву поля.

Приклади.

1). Оголосити тип даних «дата». Поля запису : день, місяць, рік.

Type

mon = ( jan, feb, mar, apr, may, jun, jul, aus,sep, oct, nov, dec) ;

data = record

day: 1..31; {день}

month: jan..dec; {місяць}

year: integer {рік}

end; {data}

2). Оголосити змінні «d1», «d2» типу даних дата.

Var d1, d2: data;

3). Присвоїти полям змінних типу даних «data» певні значення:

d1.day: = 1;

d1.month: = sep;

d1.Year: = 2010;

d2.day: = d1.Day:

d2.month: = pred(d1.Month); {aug}

d2.year: = Succ(d1.Year); {2011}

4). Оголосити тип даних “ студент ”. Поля запису: ім я, прізвище, рік народження, курс, група.

Type stud = record

name: string[15]; {ім’я}

fam: string [25]; {прізвище}

year: integer; {рік народження}

kurs, group: byte {курс, група}

end; { stud }

5). Оголосити змінні «st1» та «st2» типу даних «студент».

Var st1, st2: stud;

6). Оголосити масив «Gr_7» типу даних «студент», який складається з 25-ти елементів:

Var Gr_7: array [1..25] of stud;

7). Організувати введення інформації для заповнення полів запису «студент» масиву «Gr_7».

for i: = 1 to 25 do

begin

write ( ‘ Прізвище: ’ ); readln (Gr_7[i].fam);

write ( ‘ Ім’я: ); readln (Gr_7[i].name );

write (‘ Рік народження:’ );readln Gr_7[i].year );

write(‘Курс:’); readln (Gr_7[i].kurs);

write (‘Група:’); readln(Gr_7[i].group)

end;

3. Оператор приєднання with

Оператор приєднання with застосовується лише до записів. Він використовується для того, щоб баготоразово не писати ім’я змінної, яка відноситься до поля запису. Формат оператора with:

WITH ім’я змінної DO оператор;

Приклад. Присвоїти полям запису змінної d1 із попереднього прикладу певні значення, використовуючи оператор приєднання with.

with d1 do

begin day: = 1;

month: = sep;

year: = 2010

end;

Без оператора with ці присвоєння здійснюють таким чином:

d1.day:=1;

d1.month:=sep;

d1.year:=2010 ;

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

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

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

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

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.

Результати виконання програми:

Введіть кількість студентів:

3

Введіть прізвище студента: Анцебурова

Наявний ПК вдома(1) чи ПК вдома немає(2)?

1

Скільки часу витрачає на заняття?: 6 год

Скільки часу витрачає на ігри?: 1 год

Скільки часу витрачає на перегляд фільмів?: 2 год

Введіть прізвище студента: Коваленко

Наявний ПК вдома(1) чи ПК вдома немає(2)?

2

В які дні працює в комп’ ютерному класі самостійно?: вівторок, середа, четвер

Введіть прізвище студента: Дубович

Наявний ПК вдома(1) чи ПК вдома немає(2)?

1

Скільки часу витрачає на заняття?: 2 год

Скільки часу витрачає на ігри?: 1 год

Скільки часу витрачає на перегляд фільмів?: 3 год

Студенти, які мають ПК вдома:

Анцебурова витрачає на

заняття: 6 год

ігри: 1 год

фільми: 2 год

Дубович витрачає на

заняття: 2 год

ігри: 1 год

фільми: 3 год

Студенти, які не мають ПК вдома:

Коваленко самостійно працює в комп’ютерному класі в такі дні: вівторок, середа, четвер