.
.
.
Begin
With ім’я_запису do
Оператор приєднання.
. .
.
Туре і м 'я_типу = RECORD
.
.
.
Ім'яN: тип;
End;
В даному випадку службове слово RECORD виконує роль відкриваючих операторних дужок, a END - закриваючих. В середині операторних дужок записуються елементи запису. Допускається замість імені запису вказувати список імен, тобто імена записів, відокремлених комами. Імена записів разом з їх описом називаються полями запису.
Для представленої відомості об'явлення записів буде виглядати наступним чином:
Var В:RECORD
N: integer;
FIO: array[1..20] of char;
OK: array[1..3] of integer;
END;
Більш універсальна форма об'явлення запису - це використання розділу типів Туре:
Ім'я1:тип; Ім'я2:тип;
Ім’яN: тип;
End;
Var ім'я_запису:ім'я_типу;
Елемент запису використовується в програмі в тому самому змісті, що й окрема змінна. Таким чином, елемент запису можна вказувати як у лівій частині оператора присвоєння, так і в виразах. Над елементами запису можна виконувати дії, допустимі для даних його типу. (Якщо тип елементу запису цілий, то виконуються всі операції, допустимі для цілих даних і т.д.).
Для відомості, що розглядається, можна виконати наступні операції:
1.порядковому номеру N запису В присвоїти значення 2:
B.N:=2;
2. знайти суму трьох оцінок:
s: =В.ОК[1]+В.ОК[2]+В.ОК[3];
3. ввести значення порядкового номеру:
read(B.N)
Звернення до запису в цілому, а не тільки до її елементів допускається тільки в операторі присвоєння. Зліва і справа від знаку присвоєння повинні використовуватися імена записів однакового типу.
Звернення до елементів запису відбувається за допомогою уточненого імені. Оператор приєднання дозволяє спростити звернення до елементу запису. Ім’я запису виноситься в заголовок оператора приєднання, а у блоці використовуються тільки імена елементів запису. Загальна форма оператора приєднання наступна:
End;
Між Begin та End знаходяться оператори, які містять імена елементів запису.
Для запису, що розглядається, операцію присвоєння, сумування та введення можна об’єднати в один оператор:
With B do
Begin
N:=2;
S:=OK[1]+OK[2]+OK[3];
Read(N); end;
Відмінність запису від масиву заключається в тому, що доступ до елементів запису здійснюється не по індексу, а по імені поля.
Приклад: Описати комбінований тип для представлення:
а) часу в годинах, хвилинах та секундах:
type clock=record
chas: 1..24;
min, sec: 1..60;
end;
б)задати анкетні дані студента. Вказати прізвище, дату народження, стать та національність.
Type v=record
FЮ: array[1..25] of char;
Data = record
Chislo:1..31;
Month: (янв., дек);
God:1900..2000;
End;
РоІ: (м,ж);
National: char;
End;
Приклад: Дано type str=array[1..10] of char;
Adr=record
Gorod,street:str;
Dom, kv:1..999;
End;
Var adrl, adr2: adr;
Використовуючи оператор приєднання, присвоїти змінній adrl значення,
що відповідає вашій адресі. Змінній adr2 присвоїти таке саме значення, замінивши в ньому номер будинку на 15.
With adrl do
Begin
Gorod: = 'Кіровоград';
Street: = 'Попова';
Dom: =13;
Kv: =156;
End;
Adr2: =adrl;
Adr2.kv: =15;
Приклад: є многочлен 4a+ 7b+8a-3a-2k+p-5r+ 7b-4k. Знайти подібні члени для змінної а та обчислити сумарний коефіцієнт. Кожний елемент многочлена можна вважати записом.
program zap 1;
type p=record
buk: char;
koef: integer;
end;
var ml,m2:p;
sum, i: integer;
begin
sum:=0;
writeln('введіть многочлен');
while not eoln do
begin
readln(m1.koef);
readln(m1.buk);
if m1.buk= 'a' then
sum:=sum+m1.koef;
end;
m2.koef:=sum;
m2.buk:=’a’;
writeln(‘сумарний коефіцієнт=',т2.koef,m2.buk);
end.
m1 - вхідний елемент многочлена;
m2 - вихідний елемент многочлена;
Buk - буква (елем. зап.);
Sum - сума;
Koef - коеф. (елем. зап.)
В даній програмі використовується два записи: ml та m2 з однаковою структурою, тобто з однаковими типами даних.
Задача: Група складається з п студентів. Ввести їх дані в комп’ютер та відсортувати за алфавітом (прізвища).
Program ZAP5;
Const n=15;
Type stud=record
FIO: string [20];
OK: array [1..5] of integer;
end;
Var Grupa: array [1..n] of stud;
st: stud;
i, k, j: integer;
Begin
Writeln(‘Введ. записи’);
For i:=1 to N do
begin
with Grupa [i] do begin
Readln (FIO);
For k:=1 to 5 do read (OK [k]);
readln; end; end;
{сортування за алфавітом};
For i:=1 to N do
For j:=1 to N-i do
If Grupa [j].FIO>Grupa[j+1].FIO then
begin
St:=Grupa[j];
Grupa[j]:=Grupa[j]+1;
Grupa[j+1]:=St;
end;
{Список після сортування}
For i:=1 to N do begin
With Grupa[i] do begin
Write(FIO);
For k:=1 to 5 do write (OK [k]:5);
Writeln; end; end; end.
Дана програма забезпечує формування масиву записів в пам’ять, сортування всіх записів за алфавітом і виведення відсортованого масиву.
Записи з варіантами.
При визначенні комбінованого типу в нього можна включати варіантну частину. Це означає, що різні змінні (хоч і відносяться до одного типу) можуть мати різні структури, тобто містять змінні поля. В цьому випадку список полів запису містить загальну частину і варіантну частину. В описі запису перераховуються всі можливі варіанти даної структури. Вибір варіанту запису виконується в залежності від значення селектора варіанту в записі. Селектором варіанту в записі являється тип запису. Ключове слово ставиться в кінці опису всього запису і означає кінець варіанту. Після варіантної частини запису ніякі поля з'являться не можуть. Імена полів, що використовуються в описі різних варіантів, не повинні повторюватися в одному і тому самому записі. Неможна також застосовувати одне і те саме ім'я для визначення полів в загальній та варіантній частинах запису.
Варіантна частина може містити інші записи, в тому числі і з варіантами. Степінь вкладеності записів в варіантній частині не обмежена. Оператор Case не закривається службовим словом End. Всі варіанти описуються в середині оператора Case. Кожен варіант характеризується заданим в дужках списком опису відповідних йому компонентів. Перед списком стоять мітки. Їх тип вказується в заголовці варіантної частини (на відміну від оператора варіанту, де селектором варіантної частини являється вираз, а не тип). Тип повинен бути скалярним і задаватися ім'ям. В явному виді вказувати тип в заголовці забороняється. Часто для скорочення запису поле признаку включається в заголовок варіантної частини.
Приклад: задати інформацію про співробітника, вказавши прізвище, рік народження, національність, а також, якщо це чоловік, повідомити, військово-забов'язаний він чи ні та яку має спеціальність, а якщо жінка, вказати, заміжня чи ні.
Type pol=(m,j);
A=record
Fio: array[1..20] of char;
God:1900..2000;
Naz:char;
B:pol;
Case pol of
m: (військовозабов 'язаний: boolean;
спеціальність: array[1..20] of char);
j(заміжня: boolean);
end; var x,y: a;
Файли.
Під файлом розуміється любий набір даних. Часто виникає потреба зберігати оброблені дані на зовнішньому носії. В цьому випадку дані оформляються у вигляді зовнішніх файлів. [Створення зовнішніх файлів даних для постійного зберігання на магнітному диску і можливість обробляти ці файли в програмі являється ефективним засобом програмування]. В мові Паскаль файл представляє собою послідовність елементів одного типу. На відміну від масиву довжина файлу не задається, місце елементів не визначається індексом, і кожен елемент стає доступним тільки після перебору всіх попередніх елементів. Такі файли називаються послідовними. Якщо програма взаємодіє з зовнішніми файлами, то файли повинні бути описані у програмі або явно в розділі опису змінних або у розділі опису типів Туре:
Var ім'я_файлу: File оf<базовий тип>;
Приклад: var F:file of char;
F1:file of integer;
Файли символьних даних називаються текстовими файлами. Опис текстового файлу file of char еквівалентно опису text.
Опис файлу в розділі типів:
Туре ім'я_типу=FіІе of <базовий тип>;
Var ім'я_файлу: iм)я_типу;
ЧИТАННЯ ФАЙЛІВ.
Під читанням файлу розуміється введення даних із зовнішнього файлу, який знаходиться на диску. Дані зовнішнього файлу стають доступними машині. У програмі необхідно виконати наступні дії для читання файлу:
1 . відкрити файл для читання;
2. ввести дані файлу в програму;
3. закрити файл для читання.
Зовнішній файл, з якого читаються дані називається вхідним файлом.
Загальна форма читання файлу:
1.RESET(ім’я);
2.READ (ім'я, параметри);
3.CLOSE (ім'я);
В деяких версіях оператор RESET може мати декілька аргументів:
RESET (ім'я1, 'ім'я2','ім'яЗ', ім'я4);
Ім 'я1 - файлова зміна, яка у програмі описана як файл. Вона встановлює зв'язок з фізичним ім'ям файлу.
Ім 'я2 - фізичне ім'я;
Ім 'яЗ - розширене ім'я;
Ім 'я4 - змінна, яка означає розмір зовнішнього файлу, що передається (це ім'я не є обов'язковим, автоматично воно отримує значення, рівне числу прочитаних блоків).
Оператор введення для читання файлу володіє усіма властивостями звичайного оператора Read. В якості параметрів можуть бути змінні. Кожна змінна отримує значення одного елементу, зчитаного з зовнішнього файлу. Змінні повинні бути описані у програмі відповідно до свого типу. Так як за означенням число елементів файлу не задається, то в мові Паскаль введено поняття кінця файлу: ЕОF(ім 'я); . Це стандартна функція. Вона приймає істинне значення, якщо досягнутий кінець файлу, хибне - у протилежному випадку. Функцію EOF можна використовувати в операторі циклу. Елементи у файлі зберігаються по рядкам. Для переходу на новий рядок файлу використовується оператор: Readln(iм 'я);
Задача: дано Var F:File of integer;
x,y: integer;
Нехай файл містить 2 елемента: 3 і 7. Яке значення буде мати змінна у після виконання операторів:
program fa;
var f:file of integer;
x,y: integer;
a) reset(f);
Read(f,y);
If NOT ЕОF(f) then Read(f,y); Close(f);
(7)
б)Reset(f);
y:=0;
while not ЕОF(f) do
begin
Read(f,x);
y:=y+x;
end.
(10)
в)Reset(f);
y:=1;
repeat
Read(f,x)
y:=y*x
until ЕОF(f);
(21)
Приклад: на диску є файл з ім'ям d.dat, в якому задана послідовність дійсних чисел в декілька рядків:
0.5 1.7 6.4 0.2
1.3 5.2 0.9 1.8
5.6 7.3
Треба ці дані зробити доступними програмі і обчислити їх суму.
program fa2;
type k=file of real;
var s:k;
sum, i: real;
11: integer;
begin
sum: =0;
reset(s,’d’,’dat’,11);
while not eof(s) do
begin
while not eoln do
begin
read(s,i);
sum:= sum+i;
end;
readln(s);
end;
witeln ('sum=', sum:4:2);
close(s);
end.
S - це файлова змінна, яка встановлює зв'язок з файлом d.dat. Фізичне ім'я вказується тільки при відкритті файлу в операторі RESET. В інших операторах при необхідності роботи з файлом вказується файлова змінна S. Оператор READ (s, і); зчитує дані по одному з зовнішнього файлу у змінну і. Після оператора CLOSE(S); дані файлу стають недоступними програмі.
Під записом файлу розуміють виведення результатів програми із оперативної пам'яті машини на диск, тобто створення нового файлу на зовнішньому пристрої.
В програмі необхідно:
1. Відкрити файл для запису,
2. Вивести дані;
3. Закрити файл для запису.
Зовнішній файл, в якому записуються дані з програми називається вихідним.
Загальна форма запису має наступний вигляд:
Rewrite(ім’я);