- •Методичні вказівки й завдання до лабораторних робіт
- •Загальні рекомендації
- •Практикум з програмування. Turbo pascal
- •Робота з інтегрованим середовищем розробника
- •Запитання для контролю та самоконтролю
- •Лабораторна робота №1 структура програми. Лінійна програма. Організація введення/виведення. Стандартні функції. Базові типи даних Теоретичні відомості
- •Var перелік імен змінних та їх типів;
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота №2 програми розгалуженої структури Теоретичні відомості
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота №3 цикли з параметром Теоретичні відомості
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота №4 цикли з невідомим числом повторень Теоретичні відомості
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота №5 розв’язування задач з використанням масивів Теоретичні відомості
- •Var Ім'я : array[поч_індекс . . Кін_індекс] of Тип_даних;
- •Var Ім'я:array[поч_індекс1..Кін_індекс1,
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота №6 символьний тип даних, рядки, масиви рядків Теоретичні відомості
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота № 7 організація програм, що використовують допоміжні програми Теоретичні відомості
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота № 8 використання множин Теоретичні відомості
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота № 9 записи Теоретичні відомості
- •Var Ім’я_запису : Ім’я_типу;
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота № 10 обробка файлів Теоретичні відомості
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Рекомендована література
Запитання для контролю та самоконтролю
Що таке множина у математичному розумінні?
У чому полягає специфіка множинного типу даних?
Які операції є можливими над множинами у мові програмування Turbo Pascal?
Які обмеження заважають цьому типу даних бути універсальним та дійовим інструментом при розв’язанні задач?
Як організувати введення та виведення елементів множини?
Лабораторна робота № 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 людей відомими є прізвище, ім’я, рік народження, стать (чоловіча/жіноча). Визначити прізвище та ім'я найстаршого чоловіка й найстаршої жінки, обчислити різницю їх віку(за умови, що у групі є хоча б одна жінка та один чоловік).
Відомий масив, елементи якого записи, що об'єднують таку інформацію про кожного з групи людей - прізвище, ім'я, рік народження, стать. Результат - прізвища та ім'я найстарших чоловіка й жінки цієї групи та різниця їх віку.
Спочатку, враховуючи номер поточного року та рік народження, обчислюється вік найстаршого чоловіка та найстаршої жінки групи. Тим самим визначаються прізвище та ім’я найстаршого чоловіка та найстаршої жінки. Обчислюється різниця їх віку.
А лгоритм:
Типи даних вибираємо такі: pr, im - рядок; rik - ціла; st - символ. Перелічені змінні в якості полів складають тип people (запис). T - масив записів. N - кількість людей у групі, p_rik - поточний рік, m_age - вік найстаршого чоловіка, w_age - вік найстаршої жінки, i - параметр циклу - цілі.
Текст програми:
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 до 25)
4
Введіть поточний рік (ХХХХ)
2002
Введіть прізвище, ім'я, рік народження (ХХХХ), стать (ч/ж)
Гайовий
Максим
1985
ч
Введіть прізвище, ім'я, рік народження (ХХХХ), стать (ч/ж)
Коваленко
Ганна
1958
ж
Введіть прізвище, ім'я, рік народження (ХХХХ), стать (ч/ж)
Ткаченко
Микола
1977
ч
Введіть прізвище, ім'я, рік народження (ХХХХ), стать (ч/ж)
Коломоєць
Софія
1994
ж
Введіть прізвище, ім'я, рік народження (ХХХХ), стать (ч/ж)
Іваненко
Сергій
1977
ч
Найстарші чоловіки:
Ткаченко Микола
Іваненко Сергій
Найстарші жінки:
Коваленко Ганна
різниця у віці = 19