
- •Var ім'я_запису: record
- •Var ім'я_запису:ім'я_типу;
- •Оператор приєднання.
- •With ім’я_запису do
- •Записи з варіантами.
- •Var ім'я_файлу: iм)я_типу; читання файлів.
- •Запис файлу.
- •Write(ім’я, параметри);
- •Читання та запис файлів.
- •Файлова система.
- •Фізичні файли.
- •Файлові типи.
- •Текстові файли.
- •Текст - орієнтовані процедури та функції.
- •Створення текстових файлів.
- •Операції введення-виведення текстових файлів.
x:=0;
writeln(‘введіть рядок');
repeat
read(c[i]);
i:=i+1;
until eoln;
for i: =1 to 20 do
if c[і] in m then x:=x+1;
writelп('кількість знаків в рядку: ‘,x:2);
end.
Приклад: Дано 30 цілих чисел. Визначити, скільки серед цих чисел, числа які починаються на 1 або 2 у десятковому записі числа.
program mn5;
var chisla:set of 0..30;
kol, k, і:integer;
begin
kol:=0;
chisla:=[1,2,10..29];
writeln('введіть числа'); for і: =1 to 30 do
begin
read(k);
if k in chisla then kol: =kol+l;
end;
writeln('кількість чисел=',kol:2);
end.
Записи.
До складних типів даних відносяться і записи. В багатьох економічних та інформаційних задачах обробляються відомості, документи, каталоги та списки. При цьому виникає потреба об'єднувати дані різного типу в одну групу. Для роботи з групою даних в Паскалі введено поняття запису.
Запис являє собою сукупність обмеженого числа даних різного типу. Розглянемо відомість списку студентів з їх оцінками:
№ ПІБ
Оцінки
1 Іванов
4 4 4
2 Петров
5 4 4
3 Сідоров
3 2 3
Кожний рядок в цій відомості складається з окремих елементів - даних різного типу, де порядковий номер - це ціле десяткове число, ПІБ - масив символів, Оцінки - масив цілих чисел. Всі ці дані можна об'єднати в одну групу і вважати записом. Запис в цілому і окремі його елементи позначаються іменами. Позначимо:
В - ім'я всього запису;
N - порядковий номер;
FIO - ПІБ;
Ok - оцінки.
Звернення до елементів запису у програмі виконується за допомогою уточненого складеного імені. Уточнене ім'я містить ім'я запису та ім'я елементу і записується:
B.N або B.FIO. Записи як і інші дані об'являються в розділі опису. Об'яву запису можна робити у розділі опису var або у розділі опису типів:
Var ім'я_запису: record
Ім'я1:тип;
Ім'я2: тип;
.
.
.
Ім'яN: тип;
End;
В даному випадку службове слово RECORD виконує роль відкриваючих операторних дужок, a END - закриваючих. В середині операторних дужок записуються елементи запису. Допускається замість імені запису вказувати список імен, тобто імена записів, відокремлених комами. Імена записів разом з їх описом називаються полями запису.
Для представленої відомості об'явлення записів буде виглядати наступним чином:
Var В:RECORD
N: integer;
FIO: array[1..20] of char;
OK: array[1..3] of integer;
END;
Більш універсальна форма об'явлення запису - це використання розділу типів Туре:
Туре і м 'я_типу = RECORD
Ім'я1:тип; Ім'я2:тип;
.
. .
Ім’яN: тип;
End;
Var ім'я_запису:ім'я_типу;
Елемент запису використовується в програмі в тому самому змісті, що й окрема змінна. Таким чином, елемент запису можна вказувати як у лівій частині оператора присвоєння, так і в виразах. Над елементами запису можна виконувати дії, допустимі для даних його типу. (Якщо тип елементу запису цілий, то виконуються всі операції, допустимі для цілих даних і т.д.).
Для відомості, що розглядається, можна виконати наступні операції:
1.порядковому номеру N запису В присвоїти значення 2:
B.N:=2;
2. знайти суму трьох оцінок:
s: =В.ОК[1]+В.ОК[2]+В.ОК[3];
3. ввести значення порядкового номеру:
read(B.N)
Звернення до запису в цілому, а не тільки до її елементів допускається тільки в операторі присвоєння. Зліва і справа від знаку присвоєння повинні використовуватися імена записів однакового типу.
Оператор приєднання.
Звернення до елементів запису відбувається за допомогою уточненого імені. Оператор приєднання дозволяє спростити звернення до елементу запису. Ім’я запису виноситься в заголовок оператора приєднання, а у блоці використовуються тільки імена елементів запису. Загальна форма оператора приєднання наступна:
With ім’я_запису do
Begin
.
.
.
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.
Дана програма забезпечує формування масиву записів в пам’ять, сортування всіх записів за алфавітом і виведення відсортованого масиву.