4753

Массивы. Многомерные массивы в программировании. Преобразование двухмерных массивов

Лекция

Информатика, кибернетика и программирование

Массивы. Многомерные массивы Часто бывает необходимо представить таблицы данных в формате строк и столбцов. Для этого используют многомерные массивы. Доступ к элементам, например, двухмерного массива (матрицы) осуществляется с помощью двух индексов....

Русский

2012-11-25

1.68 MB

73 чел.

Массивы. Многомерные массивы

Часто бывает необходимо представить таблицы данных в формате строк и столбцов. Для этого используют многомерные массивы.

Доступ к элементам, например, двухмерного массива (матрицы) осуществляется с помощью двух индексов. Первый индекс отвечает за строку, второй – за столбец: а[1,3],а[0,4] и т.д., например:

Формат описания двумерного массива в разделе объявления переменных:

Var
<имя_массива>:array<[тип_индекса,тип_индекса]>of <тип_данных>

 

Например 

Var
A : array [1..10, 1..10] of real;

Описывается двухмерный массив вещественных чисел A, который максимально может состоять из 10 строк и 10 столбцов. Нижняя граница индексов по обоим измерениям равна 1, верхняя – 10.

В среде Delphi для ввода и вывода массивов используется компонент StringGrid, поэтому работа с массивами в Delphi сильно отличается от работы в Pascal.

Краткая характеристика компонента StringGrid

Компонент StringGrid группы Additional представляет собой таблицу, содержащую строки. Таблица может иметь полосы прокрутки, причем заданное число первых строк и столбцов может быть фиксированным и не подвергаться прокрутке. Таким образом, можно задать заголовки столбцов и строк, постоянно присутствующих в окне компонента. Каждой ячейке таблицы может быть поставлен в соответствии некоторый объект.

Свойства компонента StringGrid

Cells 

В этом свойстве хранятся все элементы таблицы. Имеет тип String.

FixedCols

Задает фиксированное количество столбцов в таблице

FixedRows

Задает фиксированное количество строк в таблице

OptionsGoEditing 

По умолчанию данные в таблицу вводить нельзя. Чтобы снять это запрет в этом свойстве надо задать True.

ColCount 

Задает общее количество столбцов таблицы

RowCount 

Задает общее количество строк таблицы

 

Пример использования в программе компонента StringGrid для вывода двумерного массива

Окно формы приложения

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

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

Схема вложенного цикла с параметром 

 For i := a1 to b1 do
      begin  . . . . . .  
         For j := a2 to b2 do
             begin  
                  . . . . . .  
             end
;  
      
end;

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

Всякий раз, когда внутренний цикл завершается, внешний цикл увеличивает значение своего счетчика цикла на 1, и внутренний цикл выполняется вновь.

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

Пример. Заполнить двухмерный массив M * N случайными целыми числами из диапазона [-40,40]. Определить:

1.      сумму элементов каждой строки;

2.      максимальные значения для каждого столбца;

3.      произведение элементов k-ой строки, значения которых лежат в диапазоне от 20 до 40.

 Окно формы приложения

Преобразование двухмерных массивов

Преобразование матриц заключается, как правило, в изменении порядка следования его элементов без изменения значений самих элементов.

Поворот матрицы на 90 и 180 градусов

Пример.  Сформировать массив из M x N элементов. Получить новый массив, повернув исходный на:

1.      1800;

2.      900 по часовой стрелке;

3.      900 против часовой стрелки. 

Зеркальное отображение (поворот) массивов относительно горизонтальной и вертикальной осей

 

Пример.  Сформировать массив из M * N элементов. Зеркально отразить (повернуть) его относительно:

1.                  горизонтальной оси;

2.                  вертикальной оси.

Дополнительных массивов не создавать.

 Важно! В первой задаче поворота массива относительно горизонтальной оси внешний цикл по строкам организуется только до (n-1) div 2 (горизонтальной оси массива). Во второй задаче поворота массива относительно вертикальной оси внутренний цикл по столбцам организуется только до (m-1) div 2 (вертикальной оси массива).

Преобразование двухмерного массива в одномерный

Пример.  Сформировать массив A, содержащий N строк и M столбцов. Преобразовать его в одномерный массив B. 

Существуют два способа решения этой задачи:

1.      задать независимый счетчик k для результирующего одномерного массива;

2.      вычислять значение очередного элемента массива по формуле B(M * i+j) = A(i,j).

 Фрагменты кодов программы

Типовые задачи с квадратными матрицами

К таким задачам, наряду с предыдущими, относятся: вычисление суммы, произведения, количества элементов, среднеарифметического, максимума, минимума элементов на главной и побочной диагонали, а также выше и ниже диагоналей в задачах с квадратными матрицами.

Способ отбора нужных элементов для решения такого рода задач заключается в следующем:

  1.  для элементов, расположенных на главной диагонали, справедливо i = j (i – индекс строки, j – индекс столбца), ниже i > j, выше i < j.
  2.  для элементов, расположенных на побочной диагонали, справедливо i = N - j - 1 (I – индекс строки, j – индекс столбца), ниже i > N - j -1, выше i < N - j 1 (индексы элементов начинаются с 0!).

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

Пример  Заполнить двухмерный массив N * N случайными целыми числами из диапазона [-40,40]. Определить:

1.    минимальное значение для элементов, расположенных на главной диагонали, и максимальное значение для элементов, расположенных на побочной диагонали;

2.      произведение элементов, расположенных выше побочной диагонали;

3.      среднее арифметическое элементов, расположенных ниже главной диагонали.

Окно формы приложения

Пример. Сформировать массив из N * N элементов. Зеркально отразить (повернуть) его относительно:

  1.  главной диагонали;
  2.  побочной диагонали.

Важно! При решении задачи внешний и внутренний циклы организуются так, чтобы проход элементов осуществлялся только до нужной диагонали (до i-1 при повороте относительно главной диагонали и n-i-1 при повороте относительно побочной), иначе, смена произойдет дважды и все останется на своих местах.

Фрагменты кодов программы 


 

А также другие работы, которые могут Вас заинтересовать

14899. Заманауи тұлғалардың ислам дінін қабылдау себептері 50.5 KB
  Мұртаза БҰЛҰТАЙФилософия ғылымдарының кандидатыДінтанушы мәдениеттанушыЗАМАНАУИ ТҰЛҒАЛАРДЫҢ ИСЛАМДIНIН ҚАБЫЛДАУ СЕБЕПТЕРI [1]Ғылым және информация ғасыры деп аталған өткен жүз жылда дамыған мемлекеттердiң азаматтарынан бек көп адам ислам дiнiн өз еркiмен қабылдаған. Ол...
14900. Ислам - әлемдегі бейбітшіліктің кепілі 103.5 KB
  Мұртаза БҰЛҰТАЙФилософия ғылымдарының кандидатыДінтанушы мәдениеттанушыИСЛАМ ӘЛЕМДЕГІ БЕЙБIТШIЛIКТIҢ КЕПIЛI[1]Өткен жолғы Ислам және өркениет газеті №4 Сәуір 2001 ж. Дiни экстремизм мен терроризм деп аталатын мақаламда хақ дін исламның Батыс елдерінде пайда болған әл...
14901. Ислам дініндегі хош көрушілік 79.5 KB
  Мұртаза БҰЛҰТАЙ ҚР Білім қайраткерлері одағының мүшесі ИСЛАМ ДIНIНДЕГI ХОШКӨРУШIЛIК Дін деген ұғымның негізінде зорлықзомбылық болмауы керек бұл хақ діннің ғайрихақ хақ емес діндерден ажырасатын айқын парқы. Дін дегеніміз негізінде иман яғни сенім жататын рух...
14902. Ислам 68 KB
  Мұртаза БҰЛҰТАЙФилософия ғылымдарының кандидатыДінтанушы мәдениеттанушыИСЛАМ [1]Жаратушы ұлық тәңiр Аллаһ Тағалаға иманды және мойынсұнуды бiлдiретiн нағыз бiртәңiрлi монотеист тәухид нанымы негiзiнде пайғамбарымыз Мұхаммед Абдұллаһұлы с.а.у. 569632 тарапынан 609632 жылда
14903. Исламтану және ислам философиясы 95 KB
  Мұртаза БҰЛҰТАЙ Философия ғылымдарының кандидатыДінтанушы мәдениеттанушы ИСЛАМТАНУ Тәухид нанымы негiзiндегi ислам дiнi уә мәдениетiн әдебиетi уә өркениетiн зерттейтiн ғылымдардың жыйынтық аты. Аллаһ Тағалаға тәсiлiм болу берiлу мойынсұну; сәлеметтiлiкте һәм бейбiтшiлiк
14904. ҚАЗАҚСТАНДАҒЫ ДІН ЖӘНЕ МЕМЛЕКЕТ ҚАТЫНАСТАРЫ 68.5 KB
  ҚАЗАҚСТАНДАҒЫ ДІН ЖӘНЕ МЕМЛЕКЕТ ҚАТЫНАСТАРЫ[1]Тәуелсіздік жылдарында елімізде орын алған күрделі саясиэкономикалық жаңарулар мен өзгерулер ағымында мемлекет билігінің қайнар көзі болып табылатын халқымыздың рухани өмірі мен діни көзқарастары да бір жағынан толығып
14905. ҚҰРАНДЫ ТҮСІНУ 69.5 KB
  ҚҰРАНДЫ ТҮСІНУ Құран Кәрім Жаратушы тарапынан күллі адамзатқа және өзінен кейінгі замана атаулыға жіберілген ұқсасы жоқ қасиетті кітап. Құран ислам дінінің бастауы бірегей бұлағы. Исламды түсіну үшін Құранды түсіну шарт. Құранды түсінбеген адам исламды да толықтай түс...
14906. ТАРАЗ ─ МҰСЫЛМАН ӨРКЕНИЕТІНІҢ ОРТА АЗИЯДАҒЫ ОРТАЛЫҒЫ 54 KB
  ТАРАЗ ─ МҰСЫЛМАН ӨРКЕНИЕТІНІҢ ОРТА АЗИЯДАҒЫ ОРТАЛЫҒЫ М.А. Утеуов М.С. Бегілдаева Тараз мемлекеттік педагогикалық институты жанындағы Кіші Ғылым Академиясы Жамбыл облыстық Дарын мектепинтернаты Тараз қ. Тараз қазіргі жыл санауымыздан бұрынғы 4241 жылдары Т...
14907. ТҮРКIЛЕРДIҢ ИСЛАМ ТАРИХЫ ЖӘНЕ МӘДЕНИЕТIНДЕГI ЕРЕКШЕ ОРНЫ 72 KB
  ТҮРКIЛЕРДIҢ ИСЛАМ ТАРИХЫ ЖӘНЕ МӘДЕНИЕТIНДЕГI ЕРЕКШЕ ОРНЫ Исламият алып елдердің мәселен Әмәуи 66-1750 Аббаси 751-1258 Селжүк 1040-1157 Осман 1299-1922 патшалықтары сықылды әлемдiк мемлекеттердің ресми дiнi болған дәуiрде азат етiлген немесе олжаланған өңiрлердiң тұрғындарын жа...