Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Марка Январь Февраль Март

Работа добавлена на сайт samzan.net:


PAGE  31

ДВУМЕРНЫЕ МАССИВЫ

Результат деятельности некоторой фирмы, торгующей автомобилями, может быть представлен в виде следующей таблицы.

Марка

Январь

Февраль

Март

...

Ноябрь

Декабрь

ВАЗ 2106

ВАЗ 2107

ВАЗ 2108

ВАЗ 2109

ВАЗ 2110

ВАЗ 2111


Приведенная выше таблица может быть представлена как совокупность одномерных массивов:

var  vaz2106 : array [1..12] of integer;

  vaz2107 : array [1..12] of integer;

  vaz2108 : array [1..12] of integer;

  vaz2109 : array [1..12] of integer;

  vaz2110 : array [1..12] of integer;

  vaz2111 : array [1..12] of integer;

 Возможно и такое представление таблицы:

var   jan :array [6..11] of integer;

    feb :array [6..11] of integer;

    mar :array [6..11] of integer;

  ...

    dec :array [6..11] of integer;

 

Если вся таблица содержит однородную информацию, например, только целые числа, то такая таблица может быть представлена как двумерный массив.

var vaz :array [6..11] of array [1..12] of integer;

Принято более компактное описание:

var   vaz  : array  [6..11, 1..12]  of  integer;

 


ОБЪЯВЛЕНИЕ ДВУМЕРНЫХ МАССИВОВ

Конструкция объявления двумерного массива:

array [ тип_индекса1, тип_индекса2 ] of базовый_тип;

Объявить массив возможно в разделах объявления типов, переменных

type   имя = array [ тип_индекса1, тип_индекса2] of базовый_тип;

var    имя : array [ тип_индекса1, тип_индекса2] of базовый_тип;


 где имя – это  имя типа массива, имя переменной массива и соответственно (идентификатор);

  array, of – зарезервированные слова, которые переводятся как «массив», «из»;

  базовый_тип – тип элементов массива (кроме файлового типа);

 тип_индекса1, тип_индекса2 – любой порядковый тип, размерность которого не превышает 2 Гб для OP Delphi 6 (для Turbo Pascal – 64 Кбайт).

Тип_индекса1 характеризует порядковые номера элементов матрицы в строках, тип_индекса2 – в столбцах.


В случае использования в роли типа индекса ограниченного типа (интервального типа) конструкция описания двумерного массива выглядит:

array [нижний_индекс1..верхний_индекс1,

          нижний_индекс2..верхний_индекс2] of базовый_тип;

Количество элементов массива равняется величине:


Примеры объявления двумерных массивов:

const   k=10; m=2; n=5;

 

{Объявление типа массива из пяти строк, пяти столбцов –

25 целочисленных элементов}

type   matrix = array  [1..n, 1..n]  of  integer;

{Объявление переменных массивов}

{массив из пяти строк, пяти столбцов – 25 целых элементов}

var   a:matrix;

{ Массив из 10 строк, двух столбцов –  20 действительных элементов}

   b  :  array  [1 .. k,  1 .. m]  of  real;

 {Массив из четырех строк, трех столбцов –  12 символьных элементов}

   c : array [1..4, 1..3] of char;

{Массив из 256 строк, двух столбцов –  512 целых элементов}

   d : array [byte, 1..2] of integer;


Напомним:

объем сегмента памяти, где будут храниться данные Pascal-программы, представляет для Turbo Pascal 64 Кбайт, Object Pascal – 2 Гбайт. Поэтому есть ограничения на количество элементов массива. Размер памяти можно рассчитать: произведение количества элементов массива на размер одного элемента в байтах.


Естественной формой изображения двумерного массива является таблица.

Пример: на рисунке изображен массив, который объявлен как

var   а: array [1..2, 1..3] of byte;

Направление увеличения

второго индекса

1

2

3

Направление увеличения

первого индекса

1

a11

a12

a13

2

a21

a22

a23


Естественное изображение двумерного массива отличается от его изображения в оперативной памяти, ведь оперативная память линейная.

1-я строка

2-я строка

В памяти компьютера элементы идут один за одним так, что при переходе от младших адресов к старшим наиболее быстрo изменяется правый индекс массива.

 


Пример:

var а: array [1..2, 1..3] of byte;

begin

//Инициализация двумерного массива

a[1,1]:=1; a[2,1]:=2; a[2,3]:=3; a[1,2]:=4; a[2,2]:=5; a[1,3]:=6;

end.

В этом случае в памяти последовательно будут размещены значения 1, 4, 6, 2, 5, 3, а не 1, 2, 3, 4, 5, 6.

= 1

=4

=6

= 2

= 5

= 3

1-я строка

2-я строка

Размер оперативной памяти определяется при объявлении двумерного массива и не изменяется во время работы с ним.


БАЗОВЫЕ ОПЕРАЦИИ ОБРАБОТКИ ДВУМЕРНЫХ МАССИВОВ

Двумя простейшими операциями над элементами двумерного массива является выбор определенного элемента и изменение его значения.

Для того чтобы в программе использовать элемент двумерного массива, надо выполнить операцию индексирования [ ].

Указываются: имя массива и индексы в квадратных скобках. Первый индекс это номер строки, второй – номер столбца, в которых находится элемент. Между индексами ставится запятая.

имя [индекс1, индекс2]

Как индекс можно использовать константу, переменную или выражение порядкового типа.

Например,

а[2,3] – элемент второй строки, третьего столбца матрицы а.

Изменить значение элемента массива можно с помощью операции присваивания:

Например:

B[5,1]:=3.2;{Элементу пятой строки первого столбца матрицы B присваивается значение 3.2}

C[4,3]:=’c’;{Элементу четвертой строки третьего столбца матрицы C присваивается значение символа ‘c’}

Изменить значение элемента массива можно с помощью операции ввода данных:

readln(a[1,1]);   {В элемент массива a[1,1] считывается новое значение}

К элементам двумерного массива можно применять все операции, определенные для базового типа.


Перечень базовых операций над матрицами:

  •  ввод или инициализация матриц;
  •  вывод матриц;
  •  поиск максимального или минимального элемента матрицы;
  •  поиск элемента по определенному критерию;
  •  определить имеет ли матрица (ее один или несколько элементов, строка, столбик) указанное свойство;
  •  выполнение определенных операций над компонентами матриц (перестановка строк и столбцов и т.д.) или над матрицами в целом (умножение матриц и т.д.);
  •  преобразование матрицы нужным способом.


ВВОД ИЛИ ИНИЦИАЛИЗАЦИЯ ДВУМЕРНОГО МАССИВА

Двумерный массив вводится в память машины поэлементно.

Для этого необходимое наличие двух циклов, так как изменяется и номер строки, и номер столбца.

Ввод массива с клавиатуры:

program Vvod_matr1;

const n=3; m=4;  

var а : array [1..n,1..m] of byte;

   i, j:byte; {текущие индексы}

begin

 writeln('Enter matrix a(',n,'*',m,')');

{Внешний цикл по строкам}

 for i:=1 to n do   

{Внутренний цикл по столбцам}

   for j:=1 to m do  

  read(a[i,j]);

...

end.

 

При вводе массива старайтесь сохранять на экране внешний вид таблицы. Это значит, что после того как вы ввели через пробел три элемента строки, необходимо нажать клавишу Enter и приступить к вводу элементов следующей строки и т.д.

 

Создать массив можно, с использованием какой-нибудь функции.

   for i:=1 to n do

   for j:=1 to m do

     a[i,j]:=sqr(i+j);

ВЫВОД ДВУМЕРНОГО МАССИВА

Рассмотрим следующий фрагмент программы.

for i:=1 to n do

   for j:=1 to m do

      write(a[i,j]:2,'  ');

Данный пример иллюстрирует вывод двумерного массива в строку через пробел. Такой вариант вывода нарушает структуру таблицы. Поэтому обычно используют способ, когда после вывода полной строки таблицы на экран осуществляется перевод на следующую строку, с использованием процедуры writeln без параметров.


 for i:=1 to n do

  begin

   for j:=1 to m do

      write(a[i,j]:3);

    writeln

  end;


Пример.

program Vvod_matr2;

const n=9; m=11;

var A:array [1..n,1..m] of byte;

   i,j:byte;

begin

 

   for i:=1 to n do

   for j:=1 to m do

     a[i,j]:=sqr(i+j);

writeln;

 writeln('Output matrix a(',n,'*',m,')');

 for i:=1 to n do

  begin

   for j:=1 to m do

      write(a[i,j]:3);

    writeln

  end;

readln;readln

end.


Решим задачу
, когда матрицу необходимо получить за заданным алгоритмом.

Дано натуральное число m. Создать целочисленную матрицу А порядка m, которая на главной диагонали имеет 1, под ней – 5, над ней – 4.

Розв'язок

В математике матрица это прямоугольная таблица, образованная из элементов некоторого множества и составляет с m строк и n столбцов. Если таблица называется прямоугольной матрицей размера . Если  матрица называется квадратной, а число m – ее порядком.


Рассмотрим
эту задачу на примере матрицы . Выучим условия какие присутствуют в этом примере: , ,  (i – номер строки, j – номер столбца).

Равные индексы ( ) имеют элементы главной диагонали. Если ( ), то элементы расположены над главной диагональю (i изменяется от 1 до 3, j изменяется от 2 до 4). Если ( ), то элементы расположены под главной диагональю (i изменяется от 2 до 4, j изменяется от 1 до 3).Учитывая эти соображения, запишем формулу для вычисления элемента матрицы

 

program N2;

const m=4;

var A : array [1..m, 1..m] of byte;

   i,j:byte;

begin

 //Создание матрицы по заданному правилу

 for i:=1 to m do

   for j:=1 to m do

     if i=j then A[i,j]:=1

            else

              if i<j then A[i,j]:=4

                      else A[i,j]:=5;

 //Вывод матрицы на экран

writeln(‘Matriza porydka’, m);  

for i:=1 to m do

  begin

   for j:=1 to m do

      write(a[i,j],' ');

    writeln

  end;

end.


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



program DM;

const m=3; n=4;

var  a : array [1..m,1..n] of byte;

i, j, k : byte;

begin

 writeln('Vvedite matrizu razmerom ',m,'*',n);

 //Создание матрицы

 For i:=1 to m do

  For j:=1 to n do

   read(a[i,j]);

 For j:=1 to n do

  begin

   k:=0;

   For i:=1 to m do

    if A[i,j]=0 then k:=k+1;

   writeln('v ',j, ' stolbze ',k, ' elementov');

  end;

  readln ;readln

end.

Результат

Поиск максимального или минимального элемента матрицы

Самостоятельно Ковалюк стр. 231




1. Речевые проявления личности переводчика в тексте перевода.html
2. Назначение, функции и типы систем видеозащиты
3. ТЕМАТИКА КУРСОВЫХ РАБОТ ПО ДИСЦИПЛИНЕ МАРКЕТИНГ для студентов IIIII курса направления подготовки 38.
4. Підсобні промисли та художні ремесла українців
5. тема Бюджетное устройство ~ это организация и принципы построения бюджетной системы ее структура взаим
6. Принуждение что обеспечивается силой государственной власти в рамках закона является эффективным средств
7. Тема- Государственная и муниципальная собственность
8. Иудаизм
9. Задание Для каждого из районов в каждой задаче требуется- найти выборочные средние для X и Y найти
10. На севере Европы
11.  I Описание ситуации
12. На тему- Экологическое состояние Кировского района СанктПетербург 2014г
13. Цели и задачи трудового законодательства.html
14. ГРЭС-1500 МВт котел турбина
15. Камчатский государственный университет имени Витуса Беринга УТВЕРЖДАЮ Зав
16. Ритмы Евразии ~Р Президенті Н
17. Петербурге- Дворянский заемный банк для кредитования дворян под залог имений золота и серебра и Купеческий
18. Баугауз буквально Будівельний будинок перший навчальний заклад покликаний готувати художників для
19. Системная красная волчанка
20. Антропологические и этические воззрения представителей древнегреческой философии