- •Розділ і. Вступ. Основи алгоритмізації Тема: Поняття архітектури комп’ютера фон Неймана.
- •Принцип використання двійкової системи числення
- •Принцип програмного керування роботою комп'ютера
- •Принцип збереження програм у пам'яті комп'ютера
- •Принцип адресності пам'яті
- •Тема: Алгоритм і його властивості.
- •Тема: Базові структури алгоритмів.
- •Метод вставок
- •Метод вибору
- •Розділ іі. Мова програмування паскаль. Тема: Методології розробки програм.
- •Тема: Загальні відомості про мову Паскаль.
- •Тема: Опис стандартних типів.
- •Тема: Циклічні конструкції.
- •Тема: Табличні величини. Масиви даних.
- •Тема: Рядкові типи.
- •Тема: Підпрограми.
- •Тема: Модуль Graph. Графічний режим.
- •Побудова рухомих зображень
- •Тема: Файловий тип.
- •Тема: Вказівники.
- •Тема: Тип запис.
- •Тема: Множинні типи.
- •Тема: Потоки. Введення-виведення даних.
- •Тема: Адреси даних. Вказівники. Динамічна пам'ять.
- •Тема: Розгалуження.
- •Тема: Основні відомості по структурному програмуванню.
- •Тема: Функції.
- •Тема: Масиви даних.
- •Робота з даними в динамічній пам'яті
- •Проблеми, що пов'язані з вказівниками
- •Тема: Форматування потоків.
- •Функції для управління графічною системою:
- •Функції для установки параметрів зображення:
- •Функції для отримання зображення на екрані:
- •Функції для отримання параметрів зображення:
- •Список літератури
Тема: Тип запис.
Запис – це структурований тип даних, що складається з визначеної кількості компонент різних типів. Ці компоненти називаються полями. Поля можуть бути довільного типу.
Опис типу запис.
Опис типу запис складається з ключового слова record, після якого йде список описів полів запису і ключове слово end. Описи полів відокремлені символом крапка з комою, останнім елементом списку може бути варіантна частина запису.
Синтаксис опису типу запис:
record <список описів полів запису> end
Список описів полів запису складається з фіксованої і, можливо, варіантної частини запису. Фіксована частина типу запис містить список фіксованих полів разом з ідентифікатором і типом для кожного поля. Кожне поле містить інформацію, що завжди відшукується одним і тим же способом. Після кожного з описі в полів стоїть символ ';' – крапка з комою.
Синтаксис опису поля:
<список імен полів >: <опис типу>,
де <Список імен полів> – це ідентифікатори полів, розділені комами, <опис типу> – тип поля.
Наведемо приклад опису типу запис:
type
TypDada = record
Podija : string[255];
year: integer; { рік}
month: 1..12; { місяць}
day: ] ..3] ; { число}
end;
Змінна, описана Var z: TypDada; містить чотири компоненти (поля) даних: рядкову компоненту із символьною інформацією, ціле число (рік), число з діапазону 1..12 (місяць) і число з діапазону 1..31 (день).
Звертання до полів запису має вигляд;
<Ідентифікатор змінної>.<Назва поля>
Змінній, що має тип запис, можна присвоювати значення змінних чи елементів масиву цього ж типу. Щодо окремих полів, то над ними можна виконувати ті операції, які є визначені для того типу, який вказаний в описі поля. у поля запису можна також вводити значення, використовуючи процедури введення Write та Writeln. Самі дані типу запис не можна вводити чи виводити процедурами Read, Readln, Write та Writeln як окремий елемент.
У розділі оголошення констант можна оголосити константу типу запис. Для цього потрібно попередньо описати тип цієї константи. Оголошення константи має такий вигляд:
<Ідентифікатор константи> : <Тип запису> (<Список значень полів>),
де <Список значень полів> – це послідовність пар <Назва поля> : <Значення>, відокремлених одне від одного символом крапка з комою. Значення полів повинні перераховуватись в тому порядку, в якому вони розташовані в описі відповідного типу. Якщо запис містить поле файлового типу, то для такого запису не можна оголосити константу. Якщо запис містить варіант, то потрібно вказувати тільки значення полів вибраного варіанта.
Приклад.
type
Point = record
x,у: real;
end;
Vector = array[0..1] оf Point;
{Запис Point містить два поля, елементи яких належать до дійсного типу.
Створений новий тип Vector є масивом записів Point.}
Month = (Jan, Feb, Mar, Apr, Мау, Jun, Лу, Aug, Sep, Oct, Nov, Dec);
{ Тип Month має перелічуваний тип}
Date = record d: 1..31;
т: Month;
у: 1900..1999;
end;
const Origin ; Point = (х: 0.0; у: 0.0);
Line : Vector = (х: -3.1; у: 1.5),(х: 5.8; у: 3.0);
Day : Date = (d: 2; m: Dec; у: 1960);
Приклад.
Запис містить прізвище студента, його рік народження, рік закінчення школи, оцінки з математики, програмування, економіки, історії. Масив містить 7 таких записів. Вивести анкетні дані студентів, що мають лише оцінки 5.
program ocinky _studentiv;
соnst k_elem = 7; {кількість елементів масиву}
tуре
Тzaр = record {описується тип запису, що містить інформацію про студента}
Prizv : string[25]; {поле для прізвища}
R_nar: word; {поле для року народження}
R_Zak: word; {лоле для року закінчення школи}
Oc: array [1..4] of byte; {оцінки з математики, програмування, економіки, історії}
еnd;
var а: array[1..k_elem] of Tzap; {оголошення масиву записів}
i, j: integer;
Pryzhak: boolеаn;
begin {Формування масиву}
for і:=l to k_elem do
begin
writе('Прізвище студента:');
readln(A[i].Prizv};
write('Piк народження студента:'};
readln(A[ i].R _nar);
write('Piк закінчення школи:'};
readln(A[i].R_Zak);
wrіtе('Оцінки з математики, програмування, економіки та історії:');
for j:=1 to 4 do readln(A[i].Oc[j]);
end;
{виведення введених даних у вигляді таблиці}
writеln('Виведення введених даних у вигляді таблиці');
for і:=l to k_elem dо
begin
write(A[i].Prizv,' ':(25-length(А[і].Ргіzv)), A[i].R _ nar:5, A[i].R _Zak:5);
for j:=1 to 4 dо writе(А[і].Ос[j]:3);
writeln
еnd;
{виведення анкетних даних студентів, що мають тільки оцінки 5}
writеln('Виведення анкетних даних студентів, що мають тільки оцінки 5');
writеln(":5,'Прізвище',' ':6,'Рік народження',' ':2,'Рік закінчення школи');
for і:=1 to k_elem do begin
Pryzhak :=true;
For j:=1 to 4 do Pryzhak:=Pryzhak and (А[і].Ос[j]=5);
if Pryzhak then writeln(A[i].Prizv,' ':(25-lеngth(А[і].Ргіzv)), A[i].R_nar,' ':12, A[i].R_Zak:5);
end;
end.
Записи з варіантною частиною.
Варіантна частина складається з ключового слова case, після якого йде опис селектора варіанта поля або опис типу селектора варіанта, ключове слово of, а після них список варіантів. Кожний елемент списку варіантів складається зі списку позначок вибору, що закінчується двокрапкою, і розташованого в круглих дужках списку полів варіанта. Окремі елементи варіантів відокремлені один від одного символом крапка з комою.
До варіантної частини запису доступ може бути здійснений більш ніж одним способом. Варіанти накладаються один на одного в пам'яті, тому в будь-який час можливий доступ до всіх полів у всіх варіантах.
Варіантна частина запису має вигляд:
case < опис селектора варіанта> of < список варіантів>
або
case <опис типу селектора варианта> of <список варіантів>
Опис селектора варіанта має вигляд:
<ідентифікатор селектора варіанта >: <тип селектора варіанта>,
де ідентифікатор селектора варіанта - це ідентифікатор, опис типу селектора варіанта - це ідентифікатор порядкового типу, список варіантів - це список вигляду
<список позначок вибору>: <список полів варіанта>.
Позначки вибору – це константи або імена констант.
Кожний варіант ідентифікується принаймні однією константою. Усі константи повинні бути відмінними одна від одної і мати порядковий тип, сумісний з типом поля селектора варіанта. Доступ до варіантних і фіксованих полів відбувається однаково. У варіантній частині можна вказати необов'язковий ідентифікатор – ідентифікатор ознаки поля. Якщо він наявний, то він стає ідентифікатором додаткового фіксованого поля запису полем, у якому зберігається інформація про варіант варіантної частини запису. Програма може використати значення цього поля, щоб визначити, який варіант виявляється активним у даний момент. Без поля ознаки програма повинна вибирати варіант за іншим критерієм.
Приклад записів з варіантною частиною.
type Саr = (nоvа, b_v); { перелічуваний тип. Два значення: "нова" і "бувша у вжитку"} TypCar=record Marka: string[l5]; {марка автомобіля}
Rik_vyp: word; {рік випуску}
Kolir: string[10]; {колір}
case kind : Саr of
novа : (vyrobnyk: string[20]); { виробник}
b_v : (st_vlasnyk: string[25]; st_kolir: string[10]); {старий власник, старий колір}
end;
Запис містить фіксовану частину, що складається з трьох полів: Marka, Rik_vyp, Коlіr, поля kind перелічуваного типу і варіантної частини, яка може містити один символьний рядок, у випадку, коли kind = nova, два символьні рядки, у випадку, коли kind = b_v.
Оператор приєднання with. Використання вказівки with у записах.
При звертанні до елементів запису потрібно вказувати не тільки ім'я поля, але й ім'я самого запису. Оскільки в деяких випадках через це значно збільшує текст програми, зручно користуватися оператором приєднання with, що дозволяє не вказувати ім'я запису. У загальному випадку оператор with складається з ключового слова with, за яким стоїть список імен записів, ключове слово do і довільний оператор, у межах якого селекція поля запису може бути замінена самим ім'ям поля.
Синтаксис оператор with:
with < список імен записів> do < оператор >;
З визначення випливає, що оператор with а, b, ..., z do <оператор> тотожний операторам
with а do
with b do…
with z do <оператор>
Приклад.
var
Alfa : record
Веta : record
Gamma : char, Delta : real end;
kapa : integer end;
У області дії вказаного опису допустимі оператори
with Alfa, Веtа do begin
Gamma:='V';
Кара :=44;
end;
які еквівалентні операторам
A1fa.Beta.Gamma:='V';
Alfa.Kapa := 44;
Приклад програми.
Програма про оцінки студентів, наведена вище, із застосуванням оператора приєднання матиме вигляд:
program ocinky _studentiv;
const
k_elem = 7; {кількість елементів масиву}
tуре
Tzap = record {описується тип запису, що містить інформацію про студента}
Prizv : string[25]; {поле для прізвища}
R_nar: word; {поле для року народження}
R_Zak : word; {поле для року закінчення школи}
Ос: аrrау [1..4] of byte; {оцінки з математики, програмування, економіки, історії}
end;
var а: array[l..k_elem] of Tzap; {оголошення масиву записів}
i,j: integer;
Pryzhak : bооlеаn;
begin
{Формування масиву}
for і:=l to k_еlеm do
with А[і] do begin
wrіtе('Прізвище студента:');
readln(Prizv);
write('Piк народження студента:');
readln(R_nar);
write('Piк закінчення школи:');
readln(R_Zak);
wгіtе('Оцінки з математики, програмування, економіки та історії:');
for j:=l to 4 do readln(Oc[j]);
end;
{виведення даних у вигляді таблиці}
wгіtеln('Виведення даних у вигляді таблиці');
for і:=l to k_еlеm do
with А[і] dо begin
write(Prizv,' ':(25-lеngth(Ргіzv)), R_nar:5, R_Zak:5);
for j:=l to 4 do wrіtе(Ос[j]:З);
writeln
end;
{Виведення анкетних даних студентів, що мають тільки оцінки 5}
wrіtеln('Виведення анкетних даних студентів, що мають тільки оцінки 5');
writeln(' ':5,'Прізвище',' ':6,'Рік народження',' ':2,'Рік закінчення школи');
for і:=l to k_еlеm do
with А[і] do begin
Pryzhak :=true;
for j:=l to 4 do Pryzhak:=Pryzhak and (Ос[j]=5);
if Pryzhak then writeln(Prizv,' ':(25-lеngth(Ргіzv)), R_nar, , ': 12, R_Zak:5);
end;
end.
Питання для самоконтролю:
Що таке запис?
Який вигляд опису типу запис?
Яким чином звертаються до полів запису?
Що таке записи з варіантною частиною?
Який вигляд має варіантна частина запису?
Для чого призначений оператор приєднання with?
Який синтаксис оператору with?
