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 целых чисел.

В примере массив элементов содержится в переменной Mas, искомый элемент содержится в переменной num.

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;