Pascal. Масиви

Масиви


Зміст





1. Що таке масив?

Масиви являють собою обмежену впорядковану сукупність однотипних величин. Кожна окрема величина називається елементом (компонентною) масиву.


2. Які типи даних можуть бути елементами масиву?

Тип елементів масиву може бути будь-яким, прийнятим у мові Паскаль, крім файлового типу. Цей тип називається базовим типом.


3. Яким чином у мові Паскаль описується одновимірний масив?

Згідно синтаксису мови Паскаль, масив можна описувати двома способами. Перший спосіб – у розділі опису змінних var. Другий спосіб – з використанням опису власного типу у розділі type.

Спосіб 1. Опис одновимірного масиву у розділі опису змінних var.

var
  m1:array [1..100] of integer; // масив зі 100 цілих чисел
  m2:array [1..50] of real; // масив з 50 дійсних чисел
  m3:array [-20..30] of char; // масив з 51 символу
  m4:array [5..5] of boolean; // масив, що містить 1 елемент типу boolean

Спосіб 2. Опис одновимірного масиву з використанням розділу опису type.

type
  TM1 = array [1..100] of integer; // масив зі 100 цілих чисел
  TM2 = array [1..50] of real; // масив з 50 дійсних чисел
  TM3 = array [-20..30] of char; // масив з 51 символу
  TM4 = array [5..5] of boolean; // масив, що містить 1 елемент типу boolean

var
  m1:TM1;
  m2:TM2;
  m3:TM3;
  m4:TM4;


4. Як здійснюється доступ до елементів одновимірного масиву?

Нехай маємо опис:

var
  m1:array [1..100] of integer; // масив зі 100 цілих чисел
  m2:array [1..50] of real; // масив з 50 дійсних чисел
  m3:array [-20..30] of char; // масив з 51 символу
  m4:array [5..5] of boolean; // масив, що містить 1 елемент типу boolean

Тоді щоб доступитись до конкретного елементу масиву можна написати:

m1[15] := 289; // у 15-й елемент масиву заноситься число 289
m2[50] := -3.85;  // у 50-й елемент масиву заноситься число -3.85
m3[-8] := 'k';
m4[5] := true;


5. Приклад фрагменту коду занулення масиву з іменем M, що містить 100 цілих (integer) чисел.
var
  M:array [1..100] of integer;
  i:integer;
begin

  ...

  for i := 1 to 100 do
    M[i]:=0;

  ...

end;


6. Приклад підрахунку суми елементів масиву Mas, що містить 50 дійсних (real) чисел.
var
  Mas:array [1..50] of real;  // опис масиву
  i:integer;
  sum:real;

begin

  ...

  sum := 0; // онулення суми

  for i := 1 to 50 do  // пошук суми
    sum := sum + Mas[i];

  ...

end;


7. Приклад пошуку максимального елементу в масиві зі 100 цілих чисел.
var
  Mas:array [1..100] of integer;
  i:integer;
  max:integer; // max - максимальне значення

begin

  ...

  max:=Mas[1];
  for i:=2 to 100 do
    if max<Mas[i] then
      max:=Mas[i];

  ...

end;


8. Приклад визначення наявності заданого елементу в масиві зі 100 цілих чисел.
var
  Mas:array [1..100] of integer;
  i:integer;
  num:integer; // шуканий елемент
  f_is:boolean;

begin

  ...

  f_is:=false;

  for i:=1 to 100 do
    if num=Mas[i] then
      f_is:=true;

  ...

end;


9. Приклад сортування одновимірного масиву Mas дійсних чисел методом вставки.

Фрагмент коду, що сортує масив цілих чисел, в якому максимальна кількість елементів рівна MaxItems. Елементи сортуються у спадному порядку.

const
  MaxItems = 100;

var
  M:array [1..MaxItems] of integer;
  i,j:integer;
  t:integer;

begin

  ...

  for i:=1 to MaxItems-1 do
    for j:=i downto 1 do
      if M[j]<M[j+1] then
      begin
        t:=M[j];  // обмін місцями елементів M[j] та M[j+1]
        M[j]:=M[j+1];
        M[j+1]:=t;
      end;

  ...

end;


10. Яким чином в мові Паскаль здійснюється присвоєння значення одного масиву іншому?

Фрагмент коду, в якому масиву M2 присвоюється значення масиву M1. Масиви мають бути одного типу.

var
  M1, M2:array [1..MaxItems] of integer;

begin

  ...

  M2:=M1;

  ...

end;


11. Як здійснюється ініціалізація одновимірного масиву?

Ініціалізація одновимірного масиву здійснюється у розділі опису констант const.

У наступному фрагменті коду ініціалізуються два масиви:

  • масив з 3 елементів, які є дійсними числами;
  • масив з 5 елементів, які є цілими числами.
const

  mr:array [1..3] of real = (0.45, 9.56, 3.7); // масив дійсних чисел
  mi:array [1..5] of integer = (2, -30, 0, -100, 23); // масив цілих чисел


12. Приклад опису та використання двовимірного масиву у програмі?

Як і у випадку з одновимірними масивами існує два способи опису двовимірних масивів.

Приклад 1. Опис двовимірного масиву безпосередньо у розділі var.

var
  Matr1:array [1..5, 1..6] of real; // матриця дійсних чисел розміром 5*6
  Matr2:array [1..20, -5..10] of real; // матриця дійсних чисел
  Matrix:array[1..10,1..10] of integer; // матриця цілих чисел розміром 10*10

Приклад 2. Опис з використанням розділу type.

type
  TMatrReal_5_6 = array [1..5, 1..6] of real;
  TMatrReal = array [1..20, -5..10] of real;
  TMatrInt = array [1..10, 1..10] of integer;

var
  Matr1:TMatrReal_5_6; // матриця дійсних чисел розміром 5*6
  Matr2:TMatrReal; // матриця дійсних чисел
  Matrix:TMatrInt; // матриця цілих чисел розміром 10*10

Щоб доступитись до елементів двовимірного масиву потрібно звернутись наступним чином

Matr1[2,3]:=2.93; // у 2-й рядок та 3-й стовпець
Matr2[20,-3]:=3.23; // рядок з індексом 20 та стовпець з індексом -3
Matrix[2,8]:=209;

При звертанні у квадратних дужках першим вказується номер рядка, другим – номер стовпця.


13. Приклади опису багатовимірних масивів.

У даному прикладі описується трьохвимірний та чотиривимірний масиви чисел.

type
  TM3 = array[1..5, 1..10, 1..20] of integer; // трьохвимірний масив цілих чисел
  TM4 = array[1..2, 1..3, 1..5, 1..10] of real; // чотиривимірний масив дійсних чисел

var
  M3:TM3; // змінна типу TM3
  M4:TM4; // змінна типу TM4

begin

  ...

  M3[2,3,6]:=23;

  M4[2,1,3,9]:=398.93;

  ...

end;


14. Приклад ініціалізації двовимірного масиву.

У наступному прикладі ініціалізуються двовимірні масиви цілих чисел які описуються різними способами. Згідно синтаксису мови Паскаль ініціалізація масивів повинна здійснюватись у розділі опису констант (const).

type
  TMatr_2_2 = array [1..2, 1..2] of integer;

const
  Matr23:array[1..2,1..3] of integer = ( (33, -6, 55),
                                         (20, 18, -9) );
  Matr22:TMatr_2_2 = ((4, -6),
                      (-3, 7));


15. Приклад ініціалізації багатовимірного масиву.

Ініціалізація трьохвимірного масиву цілих чисел:

type
  TM3 = array [1..2,1..3,1..4] of integer;

const
  Mas3 : TM3 = (
                (( 1, 2, 3, 4),
                 ( 2, 1, 6, 5),
                 ( 1, 4, 2, 3)),

                (( 1, 2, 0, 3),
                 (-1,-2, 5, 2),
                 ( 3, 1, 2, 4))
               );


16. Приклад занулення двовимірної матриці цілих чисел розміром 10*10.

У даному прикладі занулюється матриця з іменем Matr.

var
  Matr:array [1..10, 1..10] of integer; // опис матриці
  i, j:integer;

begin

  ...

  // занулення матриці
  for i := 1 to 10 do
    for j := 1 to 10 do
      Matr[i,j]:=0;

  ...

end;


17. Приклад пошуку заданого елементу в матриці розміром 20*20 цілих чисел.

У даному прикладі num – шуканий елемент, f_is – прапорець, що визначає наявність елементу в матриці. Вважається, що матриця Matr вже заповнена значеннями.

var
  Matr:array [1..20, 1..20] of integer;
  f_is:boolean;
  num:integer; // шукане число
  i, j:integer;

begin

...

f_is:=false; // спочатку, вважаємо що елементу немає в матриці

for i := 1 to 20 do

 for j := 1 to 20 do
 if Matr[i,j]=num then
   f_is:=true; // елемент знайдено

...

end;


18. Приклад визначення мінімального значення в матриці дійсних чисел.

У даному прикладі шукане мінімальне значення зберігається у змінній min. Вважається, що матриця Matr вже заповнена значеннями.

var
  Matr:array [1..10, 1..10] of real;
  min:real; // шукане мінімальне значення
  i, j:integer;

begin

  ...

  min:=Matr[1,1]; // прийняти, що min - це один з елементів матриці

  for i := 1 to 10 do
    for j := 1 to 10 do
      if Matr[i,j]<min then
        min:=Matr[i,j];

  ...

end;


19. Приклад обчислення суми елементів матриці дійсних чисел.

У даному прикладі сума елементів матриці зберігається у змінній sum. Вважається, що матриця Matr вже заповнена значеннями.

var
  Matr:array [1..10, 1..10] of real;
  suma:real; // шукана сума елементів матриці
  i, j:integer;

begin

  ...

  suma := 0;

  for i := 1 to 10 do
    for j := 1 to 10 do
      suma := suma + Matr[i,j];

  ...

end;


20. Приклад опису та використання одновимірного масиву структур типу BOOK (КНИГА).

Нехай маємо наступний опис:

type
  // опис структури типу TBOOK (КНИГА)
  TBOOK = record
    Title:string;  // Назва книги
    Author:string; // Прізвище автора книги
    year:integer;  // рік видання
    price:real;    // вартість книги
  end;

var
  BOOKS:array [1..100] of TBOOK; // масив зі 100 структур типу TBOOK

Приклад доступу до елементів масиву структур BOOKS. У даному прикладі в елемент з індексом 3 масиву BOOKS заносяться дані.

...

begin

  ...

  BOOKS[3].Title := 'Title of book 3';
  BOOKS[3].Author := 'Author of book 3';
  BOOKS[3].year := 1993;
  BOOKS[3].price := 23.45;

  ...

end;


21. Приклад опису та використання масиву рядків (тип string).
var
  MasStr:array [1..10] of string; // опис масиву рядків

begin

  ...

  // у 3-й елемент масиву записати текст
  MasStr[3] := 'Array of text';

  ...

end;


22. Приклад опису та використання масиву класів.

У даному прикладі описується клас з іменем TMyClass. В класі оголошено дві змінні з іменами x та y. Доступ до цих змінних є загальнодоступним (public).

type

  // опис класу
  TMyClass = class
    public
      x:integer; // внутрішні змінні класу
      y:integer;
  end;

  // опис масиву класів
  TArrayClass = array [1..10] of TMyClass;

  ...

var
  MasClass:TArrayClass;

  ...

begin

  ...

  // заповнити значення класу з індексом 2
  MasClass[2].x:=25;
  MasClass[2].y:=30;

  ...

end;