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

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.

Дана програма забезпечує формування масиву записів в пам’ять, сортування всіх записів за алфавітом і виведення відсортованого масиву.