Тип масиву
В мові Паскаль крім явного опису масивів у розділі змінних є інша форма опису, що складається з двох етапів. Спочатку у розділі опису Туре вказується тип масиву, а потім в розділі опису змінних перераховуються масиви, що відносяться до вказаного типу. Введення типу масиву збільшує розділ опису, але в той же час спрощує відлагодження програми. Вказування типів у розділі опису допомагає досягти логічної ясності програми. Об'ява масиву в розділі типу має слідуючий вигляд:
Туре ім’я_muny=array[t1..t2]of mun;
Var ім’я_масиву: ім'я_типу;
Якщо в програмі кілька масивів мають один і той же тип, то змінюється лише розділ опису змінних.
Приклад :
Type mas=array[1.. 5]of integer;
Var A,B,C:mas;
Масиви A,B,C використовуються в розділі операторів програми, а тип масиву mas введений формально тільки у розділі опису і ніде у програмі не вказується і не використовується.
З метою економії пам'яті при використовуванні символьних даних в мові Паскаль введено поняття упакованого масиву. Елементи упакованого масиву зберігаються по 2 в 1 слові. Упакований масив символьних даних має слідуючий вигляд:
Туре ім 'я_типу=Packed Array[t1] of char;
У даному випадку перший елемент масиву приймає значення першого символу. Як і не упакований, упакований масив описують у розділі type:
Туре ім’я_muny=Packed Array[t1]of char;
Var ім’я_мас:ім 'я_типу;
Елементи упакованого масиву використовують у програмі так, як елементи неупакованого, тільки пам'ять для упакованого масиву виділяється меньше. Вважають, що символи рядку мають тип упакованого масиву:
Packed Array [1..N] of char; де N—довжина рядку.
Символьні константи можуть присвоюватися або порівнюватися з любими масивами, які мають такий самий опис. Упаковані масиви економлять місце у пам'яті, але збільшують час доступу до компонентів масиву. Для створення упакованного масиву використовують цикл.
Наприклад, формування масиву А символьних даних можливо виконати наступним чином:
І:=1;
While not eoln do
Begin
Read(A[i]);
I:=i+1;
End;
Масив А при цьому повинен бути описаний не більше ніж довжина рядку, що вводиться:
Var Packed Array[1. .N] of char;
В операторі циклу While можливо вказувати конкретну довжину рядку:
І<28 або КК.
До упакованих символьних масивів в мові Паскаль відносяться також рядки символів, які задаються або у розділі операторів або у розділі констант. Тип константи однозначно визначається її записом. Ми будемо об'являти цей тип під ім'ям STRING. Тип STRING не являється стандартним типом, його потрібно визначати шляхом об'явлення типів.
Операції відношення виконуються посимвольно зліва направо.
Наприклад: Ввести елементи масиву і роздрукувати їх. Масив визначений так:
\/ar K:PackedArray[-5.. 5] of char;
Program pr;
Var k:packed array[-5.. 5] of char;
I: integer;
Begin
Writeln(’Bведіть елементи масива') ;
For і: = -5 to 5 do
Read(k[i]);
For i: = -5 to 5 do
Writeln(k[i]);
End.
Приклад: ввести рядок символів не меньше 10 і не більше 50. Вияснити, скільки "? " з 5 символу по 20 і підрахувати кількість усіх символів,
program mas3;
const al=’?’;
b=5; с=20;
type mas=packed array [1..50] of char;
var a: mas;
x,i: integer;
begin
{введення і підрахунок символів рядка}
і: =0;
write ('вв символи рядка');
while not eoln do
begin
i:=i+1;
read(a[i]);
end;
if (i<10)or(I>50)then
WriteІп('введення не відповідає умові');
Writeln ('і=', і: 3);
х:=0;
for і: =b to c do
if a[i]=a1 then x:=x+1;
witeln(’x=’, x: 4);
end.
Оператор циклу while працює так: циклічна частина програми виконується до тих пір, поки в рядку символів не зустрінеться (знак Entera){умова NOT EOLN}. Після цього цикл закінчиться і управління передасться на підрахунок к-ті ?
У високих версіях мови Pascal є можливість Packed не вказувати, т.я. масиви символів автоматично упаковані.
Приклад: В масиві з 30 дійсних чисел визначити найбільший елемент.
Program рг;
Type a=array[1..30] of real;
Var mas :a; max: real; I: integer;
Begin
Writeln('Bведіть елементи масива');
For I: =1 to 30 do
Readln(MAS[I]);
Max:=MAS[1];
For I:=2 to 30 do
If MAS[I]>Max then Max: =Max[I];
Writeln('Max= ',Max:4;2);
End.
Приклад: Є одновимірний масив, який складається із п цілих чисел, роздрукувати їх у зворотньому порядку по 5 чисел у рядку.
Program lena;
var i,n,k: integer:
a: array[1…50] of integer;
begin
k:=0; (*k- кількість елементів в рядку*)
write ('Введіть кількість елементів масиву');
readln(n);
Writeln(’Введіть елементи масива');
For i:=1 to n do
read(a[i]);
for i:=n downto 1 do
begin
write (a [i] :4) ;
k:=k+l;
if k mod 5=0 then writeln;
end;
end.
Приклад: В масиві із 15 дійсних чисел найти найменший елемент, поміняти його місцями з останнім,
Program mas6;
var a: array [1...15] of integer;
іj: integer;
min, last, t: integer;
begin
Writeln('Введіть елементи масива');
for і: =1 to 15 do
read(a[i]);
min: =a[1];
for i: =2 to 15 do
if a[i] <min then
begin
min: =a[i];
t: =i;
end;
last: =a[15];
a[15]: =min;
a[t]: =last;
writeln;
for i: =1 to 15 do
writeln(a[i]:4);
end.