Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratorni_roboti_Osnovi_programuvannya_dlya_R...doc
Скачиваний:
16
Добавлен:
10.11.2019
Размер:
878.08 Кб
Скачать

Запитання для контролю та самоконтролю

  1. Що таке множина у математичному розумінні?

  2. У чому полягає специфіка множинного типу даних?

  3. Які операції є можливими над множинами у мові програмування Turbo Pascal?

  4. Які обмеження заважають цьому типу даних бути універсальним та дійовим інструментом при розв’язанні задач?

  5. Як організувати введення та виведення елементів множини?

Лабораторна робота № 9 записи Теоретичні відомості

Поряд із множинами та масивами існує ще один структурований тип даних - записи (record). Вони дозволяють зберігати разом значення змінних, різних за типом. Компоненти, що складають запис називаються його полями. Кількість полів, тип і ім'я кожного поля фіксується в описі того типу, до якого відноситься запис. Запис можна представити в наступному виді:

type Ім’я_типу = record

Ім’я _компоненти_1 : Тип_компоненти_1;

Ім’я _компоненти_2 : Тип_компоненти_2;

end;

Var Ім’я_запису : Ім’я_типу;

або

var Ім’я_Запису = record

Ім’я _компоненти_1 : Тип_компоненти_1;

Ім’я _компоненти_2 : Тип_компоненти_2;

end;

Звертання до значень полів записів організується за допомогою ідентифікатора запису та ідентифікатора поля між якими ставиться крапка. Наприклад balans.debit або balans.credit, де balans - ідентифікатор запису, а debit та credit - ідентифікатори полів цього запису. Поле теж може бути записом і мати у своєму складі поля. Тоді конструкція звертання до значень кінцевих полів буде більш складна, довша, матиме більше крапок. Враховуючи, що у мові Turbo Pascal можна використовувати довгі ідентифікатори, програмування роботи з записами є достатньо трудомістким. У такому разі, а також при кількаразовому звертанні до однієї й тієї ж компоненти запису або до декількох компонент одного й того ж запису, зручно використовувати оператор приєднання with. Він спрощує написання програми.

ОПЕРАТОР ПРИЄДНАННЯ має наступну загальну форму запису: with Ім’я_запису do Оператор;

У Операторі вже не треба вказувати Ім’я_запису, бо про нього вже є інформація, а достатньо вказувати лише ідентифікатори полів.

Зауваження: Turbo Pascal дозволяє використовувати записи з так званими варіантними полями, що задаються конструкцією case-of. Варіантна частина складається з кількох варіантів. Кожний варіант визначається константою вибору, за яким іде двокрапка та список полів, обмежений круглими дужками. У будь-якого запису може бути тільки одна варіантна частина, і, якщо вона є, вона повинна розташовуватися за усіма фіксованими полями.

Приклад

Про кожного з групи n людей відомими є прізвище, ім’я, рік народження, стать (чоловіча/жіноча). Визначити прізвище та ім'я найстаршого чоловіка й найстаршої жінки, обчислити різницю їх віку(за умови, що у групі є хоча б одна жінка та один чоловік).

  1. Відомий масив, елементи якого записи, що об'єднують таку інформацію про кожного з групи людей - прізвище, ім'я, рік народження, стать. Результат - прізвища та ім'я найстарших чоловіка й жінки цієї групи та різниця їх віку.

  2. Спочатку, враховуючи номер поточного року та рік народження, обчислюється вік найстаршого чоловіка та найстаршої жінки групи. Тим самим визначаються прізвище та ім’я найстаршого чоловіка та найстаршої жінки. Обчислюється різниця їх віку.

  3. А лгоритм:

  1. Типи даних вибираємо такі: pr, im - рядок; rik - ціла; st - символ. Перелічені змінні в якості полів складають тип people (запис). T - масив записів. N - кількість людей у групі, p_rik - поточний рік, m_age - вік найстаршого чоловіка, w_age - вік найстаршої жінки, i - параметр циклу - цілі.

  2. Текст програми:

program p9;

type people=

record

pr:string;

im:string;

rik:integer;

st:char

end;

var t:array[1..25] of people;

n,p_rik,m_age,w_age,i:integer;

begin

writeln('Введіть кількість людей у групі (від 1 до 25)');

readln(n);

writeln('Введіть поточний рік (ХХХХ)');

readln(p_rik);

for i:=1 to n do

begin

writeln('Введіть прізвище, ім'я, рік народження (ХХХХ),

стать (ч/ж)');

readln(t[i].pr,t[i].im,t[i].rik,t[i].st);

end;

m_age:=0;

w_age:=0;

for i:=1 to n do

if (t[i].st='ч') and (p_rik-t[i].rik>m_age) then m_age:=p_rik-t[i].rik;

for i:=1 to n do

if (t[i].st='ж') and (p_rik-t[i].rik>w_age) then w_age:=p_rik-t[i].rik;

writeln('найстарші чоловіки:');

for i:=1 to n do

if (t[i].st='ч') and (p_rik-t[i].rik=m_age) then writeln(t[i].pr, ' ',t[i].im);

writeln('найстарші жінки:');

for i:=1 to n do

if (t[i].st='ж') and (p_rik-t[i].rik=w_age) then writeln(t[i].pr,' ',t[i].im);

writeln('різниця у віці = ', abs(m_age-w_age));

readln

end.

  1. Робоче обчислення:

Введіть кількість людей у групі (від 1 до 25)

4

Введіть поточний рік (ХХХХ)

2002

Введіть прізвище, ім'я, рік народження (ХХХХ), стать (ч/ж)

Гайовий

Максим

1985

ч

Введіть прізвище, ім'я, рік народження (ХХХХ), стать (ч/ж)

Коваленко

Ганна

1958

ж

Введіть прізвище, ім'я, рік народження (ХХХХ), стать (ч/ж)

Ткаченко

Микола

1977

ч

Введіть прізвище, ім'я, рік народження (ХХХХ), стать (ч/ж)

Коломоєць

Софія

1994

ж

Введіть прізвище, ім'я, рік народження (ХХХХ), стать (ч/ж)

Іваненко

Сергій

1977

ч

Найстарші чоловіки:

Ткаченко Микола

Іваненко Сергій

Найстарші жінки:

Коваленко Ганна

різниця у віці = 19

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]