Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programuv_good.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
990.21 Кб
Скачать
  1. Варіантна частина у записі може бути лише одна і лише в кінці. Службове слово end є спільним для конструкції record і варіантної частини.

  2. ключ варіантної частини повинен бути визначеним певним типом. Для кожного значення ключа задається перелік полів запису, кожному полю вказується тип. Якщо кількість полів відповідно значення ключа більша ніж одне, то ці поля обмежуються парою дужок.

Величини типу записів з варіантами розміщується так само, як і звичайні записи, розмір відповідає максимуму сумарних розмірів всіх полів серед всіх варіантів. Таким чином запис студент матиме розмір 51+(2+1+1)+1+1+6+1+1.

Таким чином варіантна частина запису пишеться на одній ділянці, при цьому на цьому місці можуть бути різні дані в залежності від значення ключа, тому коректність даних залежить від самого програміста.

Ключ визначає ніби маску, яка накладається на ділянку пам’яті і інтерпретує певну кількість байтів, як значення певного типу

Окрім структури і збереження в пам’яті записи із варіантами всі решта дії аналогічні звичайним записам.

Наприклад

База даних про студентів

Var

a: array[1..n] of student;

i, j: byte;

begin

for i:=1 to n do

with a[i] do begin

readln(name);

with date born do

readln(yy, mm, dd);

readln(j);

if j=1 then educ:=pay else educ:=state;

readln(usp);

writeln(‘введіть стать: 0-жін; 1-чол’);

readln(j);

if j=1 then pol:=male else pol:=female;

case pol of

male : begin

writeln(‘0-непридатний, 1-придатний’);

readln(j);

if j=1 then army:=yes else army:=no;

writeln(‘зріст’);

readln(hight);

end;

female: begin

writeln(‘волосся: 0-чорне, 1-шатенка, 2-блондинка’);

readln(j);

case j of

0: hair:=black;

1: hair:=shaten;

2: hair:=blond;

end;

writeln(‘очі: 0-чорні, 1-зелені, 2-сині, 3-карі’);

readln(j);

case j of

0: eyes:=black;

1: eyes:=green;

2: eyes:=blue;

3: eyes:=brown;

end;

writeln(‘косметика’);

readln(cosmetics);

end;

end;

end;

end.

Пошук потенційних танкістів.

For i:=1 to n do

With a[i] do

If (pol=male) and (date born.yy<1985) and (date born.mm<11) and (usp<3) and (army=yes) and (hight<=175) then writeln (name, ‘танкіст’);

End.

ТЕМА : Програми обробки структурованих типів.

  1. Приклади задач з масивами

    1. Знайти середнє арифметичне додатніх і від’ємних елементів масиву цілих чисел.

Var

a: array[1..20] of integer;

S1, S2, i, i1, i2: integer;

x1,x2: real;

begin

for i:=1 to 20 do

begin

write (‘?’); {ввід масиву}

readln(a[i])

end;

for i:=1 to 20 do

begin

if a[i]>0 then begin S1:=S1+a[i]; i1:=i1+1 end;

if a[i]<0 then begin S2:=S2+a[i]; i2:=i2+1 end;

end;

if i1>0 then begin x1:=S1/i1; writeln(x1)

else writeln(‘+немає’);

if i2>0 then begin x2:=S2/i2; writeln(x2) else writeln (‘ – немає’);

end

Показаний приклад показують, що вибір індекса масиву залежить від типу оброблюваних даних. Деколи зручніше організувати індекси не цілочисельні, а за допомогою символів чи якогось перелічувального типу. Такі масиви в якості своїх значень можуть зберігати в кількості елементів такого символьного або перелічувального типу.

При обробці багатовимірних масивів використовуються вкладені оператори циклу. При цьому слід пам’ятати: самі зовнішні цикли відповідають самому першому індексу, а внутрішні останні.

Перетинання тіл циклів не призводить до синтаксичної помилки, а лише дасть неправильний результат.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]