THEN writeln (rik:4,’-високосний рік’)
ELSE writeln (rik:4,’-нe високосний рік’)
END.
Булева змінна sign (ознака) набуває значення true лише тоді, коли рік є високосним.
Змінна rik — обмеженого типу; нижня межа — 1001, верхня 9999. Якщо буде введено рік не з цього проміжку, то виконання програми буде перервано і видано повідомлення про помилку.
2. Записати програму, яка виводить на екран дисплея текст правил дорожнього руху, які вказують на сигнали світлофора,
PROGRAM driding_regulations;
TYPE light_signal =(red, yellow,green);
VAR signal: light_signal;
BEGIN
FOR signal:=red TO green DO
CASE signal OF
Red: BEGIN
write (‘Червоний сигнал в тому’);
writeln (‘ числі мигагочий, або’);
wri te (‘два по черзі мигаючих’);
writeln(‘червоний сигнали’);
Writein('забороняють рух.’)
END;
Yellow:BEGIN
write(‘Жовтий круглий сигнал’);
writeln (' забороняє рух і');
write(‘попереджує про наступну’);
writeln (‘зміну сигналів. Жовтий’);
write (‘мигаючий сигнал дозволяє’);
writeln(‘рух і інформує про’);
write(‘наявність нерeгульованого’);
writeln('перехрестя або пішоходного’);
writeln(‘переходу’)
END;
Green:BEGIN
write(‘Зелений крулий сигнал’);
writeln(‘дозволяє рух. Зелений’);
write(‘мигаючий сигнал дозволяє’);
writeln('рух і інформує, що час');
write(‘йoro дії закінчусться і ');
writeln(‘швидко буде ввімкнено');
writeln(‘заборонний сигнал.’)
END
END
END.
2.8. Складені типи даних. Масиви
Прості типи даних, які розглядалися весь час, називають також скалярними або неструктурованими типами. Простий тип задає тільки одне значення. У мові Паскаль можна означати і складені (структуровані) типи, які можуть задавати сукупність значень. Складені типи утворюються з одного або кількох раніше означених типів, які є його складовими. До складених типів належать такі типи: масив, запис, множина, файл.
Масив утворюється з фіксованого числа компонентів одного типу. Тип компонентів називають ще базовим типом масиву. Число компонентів масиву визначається при його описі.
При визначенні масиву задається і тип компонентів, і тип індексів. Означення типу для масиву має вигляд
TYPE ім'я типу = ARRAY [t1] OF t2;
де t1 – тип індексу, t2—тип компонентів. Тип індексу може бути простим перелічувальним або обмеженим. Для позначення компонентів масиву використовується ім'я змінної-масиву і індекси, які однозначно визначають даний елемент.
Індексним виразом може бути будь-який вираз, значення якого належить діапазону, що визначається типом індексу. Якщо ж значення індексного виразу виходить із заданого діапазону, то при виконанні програми видається повідомлення про помилку.Приклад
TYPE vector = ARRAY [1..5] OF real;
VAR vl, v2 : vector;
Тут vector — ім'я нового типу; тип індексу — обмежений тип 1..5, тип компонентів (базовий тип) — тип real. Змінні vl І v2 мають тип vector. Отже, це одновимірні масиви, які містять по 5 компонентів vl[l], vl[2], ..., vl[5] і v2[l], v2[2], ..., v2[5]. Кожен компонент є змінною з індексом 1 має тип real. Означення типу у наведеному прикладі можна задати і так:
TYPE index = 1..5;
vector = ARRAY [index] OF real;
Як і раніше, тип даних можна задати безпосередньо в розділі опису змінних. Так,
VAR vl, v2: ARRAY [1..5] OF real;
Приклад
TYPE coordinaty = (x,y,z);
vector = ARRAY [coordinata] OF real;
VAR v: vector;
t: coordinata;
Тут тип індекса — перелічувальний. Змінна v типу vector має три компоненти v[x], v[y], v[z]. При такому означенні індексу і опису змінних можна записати, наприклад, такі оператори:
modul: = О
FOR t:= х ТО z DO
modul: = modul + sqr (v[t]);
Зазначимо, що єдиними операціями над масивами є операції присвоювання і перевірки на рівність.
Опис табличних величин алгоритмічної мови легко реалізується мовою Паскаль. Зокрема, опису
тип мас ім'я [nп : nк]
(тип — службове слово, яке вказує тип: дійсн, ціл, літ і т.п.; nп, nк — початковий і кінцевий порядкові номери елементів) алгоритмічної мови відповідає такий опис в розділі VAR:
ім'я: ARRAY [nп : nк] OF тип
В останньому опису для задання типу слід використати відповідні імена типу мови Паскаль. Іноді описувати масиви мовою Паскаль навіть простіше, ніж алгоритмічною мовою. Це пов'язано з більш широкими можливостями при виборі типу індексів.
Тип компонентів t2 може бути довільним типом даних. Зокрема, він може бути також масивом. Наприклад, означення
TYPE mas = ARRAY [al..a2] OF ARRAY [bl..b2] OF t; задає двовимірний (якщо t простий тип) масив mas. Тоді опис
VAR m, m1 : mas;
вказує, що m і ml мають тип mas, тобто є двовимірними масивами (матрицями). Запис m[і] [j] означає j-й компонент (типу t) i-го компонента масиву m.
Для означення двовимірних масивів користуються скороченою формулою
TYPE mas = ARRAY [а1..a2, b1..b2] OF t;
Скорочені позначення використовують також для запису змінних з індексами: m[і, j] рівносильно m [і] [j]. Аналогічно вводяться n-вимірні (n > 2) масиви. Компоненти такого масиву визначаються заданням n індексних виразів.
Приклади
1. Записати програму підрахунку кількості всіх букв латинського алфавіту, що входять у задану послідовність символів, кінець якої позначається крапкою.
Виділимо масив quantity [‘A’..’Z’] (quantity — кількість), елементи якого дорівнюватимуть кількості входжень відповідної букви: quantity [‘A’] дорівнює кількості входжень букви A, quantity ['B'] —букви В, ..., quantity ['Z'] — букви Z.
Звичайно, можна було б замість індексів взяти цілі числа, встановивши відповідність між буквами i числами (наприклад, А—1, В—2,..., Z—26). Проте, використаний в програмі спосіб вибору iндексів більш природний.
PROGRAM text;
CONST stopcode=’.’ {символ кінця послідовності };
VAR symbol:char;
quantity:ARRAY[‘A’..’Z’] OF integer;
BEGIN
{ присвоєння елементам масиву quantity нульових значень}
FOR symbol:= ‘A’ TO ‘Z’ DO
quantity[symbol]:=0;
writeln (‘введіть послідовність символів,’);
writeln (‘відмітивши її кінець символом’, stopcode);
REPEAT
read(symbol);
{ враховуємо тільки букви }
IF (symbol >=’A’) AND (symbol<=’Z’)
THEN quantity[symbol]:=quflintity[symbol]+l
UNTIL symbol=stopcode;
writeln;
FOR symbol:=’A’ TO ‘Z’ DO
writeln (‘кількість вxоджeнь букви’, symbol, ‘ – ‘,quantity[symbol])
END.
Тут індекси масиву quantity належать до обмеженого типу (базовим для якого є стандартний тип char), а компоненти — до стандартного типу integer.
2. Скласти програму множення двох прямокутних матриць А та В.
Добуток матриць А i В позначимо через С, де (i=1,2,…m; j=1,2,…l).
Вважатимемо, що елементи матриць А і В вводяться по рядках. Для конкретності покладемо т = 4, п = 3. l == 2.
PROGRAM multtply_matrix;
CONST m=4; n=3; l=2;
VAR i: 1..m; j: 1..l;
k: 1..n;
s: integer;
a: ARRAY [1..m, 1..n] OF integer;
b: ARRAY [1..n, 1..l] OF integer;
c: ARRAY [1..m, 1..l] OF integer;
BEGIN
writeln(‘Введіть елементи матриці а');
FOR і:=1 TO m DO
BEGIN
FOR k:=l TO n DO
read(a[i,k]);
writeln
END;
writeln(‘Введіть, елементи матриці b');
FOR k:=1 TO n DO
BEGIN
FOR J:=1 TO l DO
read (b[k,j];
writeln
END;
{множення матриць}
writeln (‘добуток a*b’);
FOR i:=l TO m DO
BEGIN
FOR j:=l TO l DO
BEGIN
s:=0;
FOR k:=l TO n DO
s:=s+a[i,k]*[k,j];
c[i,j]:=s; write (s,’ ‘)
END;
writeln
END
END.
2.9. Масиви символів. Тип даних string.