Главная/Раздел 3

 

 

Главная

 

 Раздел 1

 

Раздел 2

 

Раздел 3

 

Раздел 4

 

Раздел 5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Массивы массивов. Матрицы

Массивы (array) наиболее часто применяемые структурированные типы в системе программирования Turbo Pascal. Они обладают рядом свойств, которые позволяют использовать их для хранения и обработки значительных объёмов различной информации. Данное занятие посвящено дальнейшему изучению типа данных ARRAY. До сих пор Вы применяли тип ARRAY только для хранения и обработки линейных массивов информации. В этом случае массив можно представить как линейную таблицу содежащую однотипную информацию. Например, объявлен массив a: array [1..9] of integer, который уже заполнен (определён). Его можно представить следующим образом.

Имя массива   a
Индекс             1    2     3     4    5      6    7   8      9
                   +--------------------------------------+
Содержимое  ¦  2 ¦ 12 ¦ -9¦   5 ¦  2 ¦ 143 ¦ 4 ¦ 7 ¦ -6 ¦
                   +--------------------------------------+

В этом случае, для того чтобы обратиться к элементу массива, необходимо указать имя данного массива с индексом элемента в квадратных скобках. Например: a[4].

Для данного массива базовым типом является стандартный, простой тип integer. Поэтому содержимое каждой ячейки массива, это целое число. Но базовым типом для массивов может быть практически любой тип, в том числе и сам тип массив. То есть в Turbo Pascale может быть объявлена переменная следующего вида:

     Var
       a: array [1..3] of array [1..4] of integer;

Для того, чтобы не возникало переменных с таким длинным описанием, удобно сначала описать базовый тип массив в разделе описания типов пользователя, а затем объявлять переменную-массив описанного выше типа. В этом случае сделанное выше объявление переменной-массива a будет выглядеть следующим образом:

     Type
       r=array[1..4] of integer;

     Var
       a: array[1..3] of r;

Описанный способ объявления массивов относят к объявлению так называемых многомерных массивов. В данном случае мы объявили двумерный массив для хранения целых чисел. Для того, чтобы обратиться к элементу такого массива, нам необходимо, после имени массива указать всего два индекса этого элемента. Хотя существует возможность работать с более сложными массивами. Например:

     Type
       c1=array [1..5] of integer;
       c2=array [1..4] of c1;
       c3=array [1..5] of c2;
       c4=array [1..10] of c3;

     Var mas: c4;

Для того, чтобы обратиться к элементу массива mas, необходимо, после имени массива указать четыре индекса элемента: mas[2][3][5][1].

В системе программирования Turbo Pascal существует более простой, или более "прямой", а в результате этого, и чаще применяемый способ объявления многомерных массивов. Начнём сразу с примера:

     Var
      matr: array[1..3,1..5] of integer;

Таким способом можно описывать и более сложные массивы. Например, 5-мерный массив можно объявить следующим образом:

     Var
       ex: array [1..10,1..10,1..5,1..15,1..4] of real;

Обращаясь к элементу данного массива, необходимо указывать пять его индексов: ex[1,1,1,1,1].

Матрицы.

Особый интерес представляют двумерные массивы, которые ещё называют квадратными и прямоугольными таблицами. В научной литературе их часто называют матрицами, при этом элементы матриц изображаются с помощью двух индексов. Как именно это делается, видно на примере следующих матриц.

   ¦ a11  a12  a13 ¦      ¦ b11  b12  b13  b14 ¦
   ¦ a21  a22  a23 ¦      ¦ b21  b22  b23  b24 ¦
   ¦ a31  a32  a33 ¦

Первый индекс - номер строки, второй - номер столбца; a13 читает- ся "а один три", а не "а тринадцать". В программах на Паскале используются соответственно конструкции а[1,3].

Про матрицу имеющую m строк и n столбцов, говорят, что она имеет размер mxn ("m на n"). Если m=n, то матрица называется квадратной.

Для квадратной матрицы элементы с одинаковыми индексами для строк и столбцов составляют главную диагональ матрицы. Для изображённой выше матрицы это элементы а11, а22, а33. Противоположная диагональ называется побочной диагональю. К ней относятся элементы а13, а22, а31.

Как работать с матрицами.

Для обработки матриц наиболее удобно применять вложенные циклы с параметром. Описанный ниже фрагмент программы предназначен для заполнения матрицы целых чисел размером 4x5 с клавиатуры.

     for i:=1 to 4 do
     for j:=1 to 5 do
          begin
            write('Введите элемент ',i,' ',j,' ');
            readln a[i,j];
          end;

Допустимая операция присваивания.

В системе программирования Turbo Pascal, для одинаковых массивов допустима операция присваивания массива массиву. Например, если описано два массива следующим образом:

VAR
 A,B: array[1..50,1..60] of real;
то допустима следующая операция присваивания: A:=B;

Примеры программ.

Дана матрица действительных чисел размером 3x5. Вычислить сумму элементов матрицы.

PROGRAM EX_1;

CONST
   n=3;  {Количество строк}
   m=5;  {Количество столбцов}

TYPE
   mas=array[1..n,1..m] of real;

VAR
   b: mas;      {Массив}
   i: integer;  {Индекс строки}
   j: integer;  {Индекс столбца}
   s: real;     {Сумма}

BEGIN
    {Ввод значений матрицы---------------------}
  Writeln('Введите значения элементов матрицы:');
  for i:=1 to n do
   for j:=1 to m do
    readln(b[i,j]);

    {Вычисление суммы ----------------}
  s:=0;
  for i:=1 to n do
   for j:=1 to m do
    s:=s+b[i,j];
  writeln('Сумма = ',s);

END.

Дана матрица целых чисел размером 4x4. Заменить все элементы главной диагонали на нули. Вывести на экран монитора содержимое матрицы до обработки и после обработки.

PROGRAM EX_2;

VAR
  matr: array[1..4,1..4] of integer;  {Матрица}
  i: integer;                         {Индекс строки}
  j: integer;                         {Индекс столбца}

BEGIN

    {Ввод значений матрицы
     ---------------------}
     for i:=1 to 4 do
     for j:=1 to 4 do
          begin
            write('Введите элемент ',i,' ',j,' ');
            readln matr[i,j];
          end;

     {Вывод содержимого матрицы до обработки
      --------------------------------------}
     Writeln('Содержимое матрицы до обработки');
     for i:=1 to 4 do begin
     for j:=1 to 4 do
         write(matr[i,j]:4);
     writeln;
                      end;

     {Обработка матрицы
     ------------------}
     for i:=1 to 4 do matr[i,i]:=0;

     {Вывод содержимого матрицы после обработки
      -----------------------------------------}
     Writeln('Содержимое обработанной матрицы ');
     for i:=1 t0 4 do begin
     for j:=1 to 4 do
         write(matr[i,j]:4);
     writeln;
                      end;

END.

Контрольные вопросы

  1. Какие способы объявления многомерных массивов вы знаете?
  2. Как обратиться к элементу многомерного массива?
  3. В каких случаях допускается обращение к многомерному массиву целиком?
  4. Какая конструкция применяется для обработки n-мерного массива.

Задания для самостоятельного выполнения.

  1. Дана матрица целых чисел размером 4x3. Определите сумму каждой строки этой матрицы. Результат вывести на экран монитора.
  2. Дана матрица целых чисел размером 3x4. Определите сумму каждого столбца этой матрицы. Результат вывести на экран монитора.
  3. Дана матрица целых чисел размером 4x4. Определите сумму элементов расположенных выше главной диагонали. Результат вывести на экран монитора.
  4. Дана матрица целых чисел размером 4x3. Отсортировать каждую строку матрицы по возрастанию. Вывести содержимое матрицы до обработки и после обработки.
  5. Дана матрица целых чисел размером 3x4. Отсортировать каждый столбец матрицы по убыванию. Вывести содержимое матрицы до обработки и после обработки.
  6. Дана матрица целых чисел размером 5x3. Заменить все отрицательные элементы матрицы на нули. Вывести содержимое матрицы до обработки и после обработки.
  7. Дана матрица целых чисел размером 4x4. поменять местами строки и столбцы этой матрицы. Вывести содержимое матрицы до обработки и после обработки.
  8. Дана матрица целых чисел размером 5x3. Определить максимальный и минимальный элемент матрицы. Результат вывести на экран монитора.
  9. Дана матрица A символов размером 4x3. Организовать и вывести на экран матрицу Б состоящую из целых чисел, полученных преобразованием чисел матрицы А.
  10. Дана матрица целых чисел размером 4x4. Увеличить все чётные элементы на 16, а нечётные элементы увеличить втрое. Вывести на экран содержимое обработанной матрицы.
  11. Дана матрица целых чисел размером 4x4. Повернуть матрицу на 90 градусов и вывести содержимое матрицы на экран.

НАЗАД                    ДАЛЕЕ                 

 

 

 

 

 

 

 

 :::

 

 :::

 

 

 

 

 

 

 

Сайт создан в системе uCoz