Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Двумерные массивы. Матрицы






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

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

Двумерный массив можно представить в виде матрицы:

.

Описание двумерного массива:

var

a: array[1..n, 1..m] of < тип>;

где a - имя массива;

n, m - количество строк и столбцов в массиве;

< тип> - тип элементов массива.

Количество элементов в массиве - n m.

Например:

var

mas: array [1…10, 1..10] of real;

Описан массив с именем mas - содержащий 100 элементов вещественного типа (10 строк и 10 столбцов).

Размер массива должен быть задан в явном виде (как в предыдущем фрагменте), или через const.

Например:

const

n = 5, m=5;

var mas: array[1…n, 1..m] of real;

Описан массив mas - содержащий 25 элементов целого типа (5 строк и 5 столбцов).

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

a[i, j] - элемент стоящий на пересечении i-ой строки и j-го столбца.

a[i, i] - элементы главной диагонали.

a[i, 2] - элементы второго столбца.

Индекс может быть - переменной, константой, арифметическим выражением целого типа.

Если количество строк равно количеству столбцов, матрица называется квадратной.

Обработка двумерных массивов производится при изменении индексов элементов.

Все элементы главной диагонали квадратной матрицы удовлетворяют условию:

i=j (номер строки равен номеру столбца).

Все элементы побочной диагонали квадратной матрицы удовлетворяют условию:

i+j=n+1(n - количество строк и столбцов).

Элементы, расположенные над главной диагональю удовлетворяют условию:

i< j (номер строки строго меньше номера столбца).

Элементы, расположенные под главной диагональю удовлетворяют условию:

i> j (номер строки строго больше номера столбца).

Ввод элементов двумерного массива

for i: =1 to n do

for j: =1 to m do Вложенные циклы

readln(a[i]);

Данный фрагмент позволит ввести элементы массива по строкам.

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

Вывод элементов двумерного массива

for i: =1 to n do

begin

for j: =1 to n do

write(a[I, j], ‘ ‘);

writeln; end;

Данный фрагмент позволит вывести элементы массива в виде матрицы.

2.5.3. Примеры типовых задач по теме «Массивы одномерные»

1. Составить программу подсчета суммы и произведения элементов одномерного массива вещественных чисел. Обозначим через s – сумму элементов массива, p - произведени.

Программа Пояснения
program mas_1; uses crt; var a: array [1…100] of real; n, I: integer; p, s: real; begin clrscr; s: = 0; p: =1; writeln ('Введите размер массива n< =100'); readln (n); writeln ('введите элементы массива'); for i: =1 to nk do readln (a[i]); for i: =1 to nk do begin s: = s + a[ i ]; p: = p * a[ i ]; end; writeln ('Сумма = ', s: 8: 3, ' Произведение =', p: 8: 3); readln; end. Имя программы – mas_1 {Описательная часть}     {Исполнительная часть} Функция очистки экрана Определение начальных значений Вывод сообщения на экран   Ввод размера массива Начало цикла   Ввод элементов массива   Вычисление суммы и произведения элементов массива   Вывод результатов на экран  

При накапливании суммы переменную s необходимо обнулить, а при накапливании произведения переменной p присвоить 1.

2. Дан массив a(n). Найти максимальный элемент массива и определить его номер. Введем обозначения:

a- имя массива;

n- количество элементов в массиве;

i- индекс элементов массива;

max- максимальный элемент массива;

nmax- номер максимального элемента.

Программа Пояснения
program mas_2; var a: array [1…100] of real; i, n, nmax: integer; max: real; begin writeln ('Введите размер массива n< =100'); readln (n); writeln ('Введите элементы массива'); for i: =1 to n do readln (a[ i ]); max: =a[1]; nmax: =1; for i: =1 to n do If a[i]> max then begin max: =a[i]; nmax: =i; end; writeln ('max =', max, ' N=', nmax); readln; end. Имя программы – mas_2 {Описательная часть}     {Исполнительная часть} Вывод сообщения на экран   Ввод размера массива Начало цикла   Ввод элементов массива   За максимальный принимается первый элемент массива   Поиск максимального элемента     Вывод результатов на экран  

 

3. Задан массив целых чисел. Отсортировать элементы одномерного массива по возрастанию.

Существует много способов сортировки элементов массива.

Введем обозначения:

a- имя массива;

n- количество элементов в массиве;

i- индекс элементов массива;

f – флажок, f =0 массив отсортирован, f =1 массив пока не отсортирован;

р- дополнительная переменная для обмена местами соседних элементов.

Программа Пояснения
program mas_3; var a: array [1…100] of integer; f, n, i, p: integer; begin writeln ('Введите размер массива n< =100'); readln (n); writeln ('Введите элементы массива'); for i: =1 to n do readln (a[i]); repeat f: =0; for i: =1 to n-1 do if a[ i ]> a[i+1] then begin p: =a[ i ]; a[ i ]: =a[i+1]; a[i+1]: =p; f: =1; end; until f=0; for i: =1 to n do writeln (a[ i ]); readln; end. Имя программы – mas_3 {Описательная часть}     {Исполнительная часть} Вывод сообщения на экран   Ввод размера массива Вывод сообщения на экран   Ввод элементов массива Внешний цикл   Внутренний цикл Сортировка элементов     Вывод на экран отсортированного массива

 

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

Внутренний цикл (for…to…do) – позволяет один раз пройтись по массиву, сравнивая соседние элементы. В случае, если предыдущий элемент (a[ i ]) окажется больше последующего (a[i+1]), элементы меняются местами через дополнительную переменную p.

Внешний цикл(repeat…until) – повторяется до тех пор, пока массив не будет отсортирован.

В программе применяется переменная – флажок.

f =1 – признак того, что два соседних элемента менялись местами, массив еще не упорядочен.

f =0 – признак того, что массив упорядочен.

 

4. Задан одномерный массив целых чисел. Найти количество нечетных чисел среди элементов массива.

Введем обозначения:

a- имя массива;

n- количество элементов в массиве;

i- индекс элементов массива;

kol- количество нечетных чисел.

 

 

Программа Пояснения
program mas_4; var a: array [1…100] of integer; n, i, kol: integer; begin writeln ('Введите размер массива n< =100'); readln (n); writeln ('Введите элементы массива'); for i: =1 to n do readln (a[ i ]); kol: =0; for i: =1 to n do if odd(a[ i ]) then kol: =kol+1; writeln(‘Количество нечетных = ’, kol); readln; end. Имя программы – mas_4 {Описательная часть}     {Исполнительная часть} Вывод сообщения на экран   Ввод размера массива Вывод сообщения на экран   Ввод элементов массива     Подсчет количества нечетных чисел   Вывод результата на экран    

 

Выражение odd(a[ i ]) – будет «истинным», если элемент массива нечетное число.

 

2.5.4. Примеры типовых задач по теме «Двумерные массивы»

1. Составить программу подсчета суммы и произведения элементов двумерного массива вещественных чисел.

Введем обозначения:

a- имя массива;

n- количество строк в массиве;

m- количество столбцов в массиве;

i, j- индексы элементов массива;

s- сумма элементов массива;

p – произведение элементов массива.

Программа Пояснения
program matr_1; var a: array [1...10, 1...10] of real; i, j, n, m: integer; s, p: real; begin writeln(‘ Введите n< =10, m< =10 ’); readln (n, m); writeln(‘ Введите элементы массива по строкам ’); for i: =1 to n do for j: =1 to m do readln(a[i, j]); s: =0; p: =1; for i: =1 to n do for j: =1 to m do begin s: =s + a[i, j]; p: =p * a[i, j]; end; writeln(‘s=’, s: 8: 3, ‘p=’, p: 8: 3); readln; end. Имя программы – matr_1 {Описательная часть}     {Исполнительная часть} Вывод сообщения на экран Ввод размера массива Вывод сообщения на экран   Ввод элементов массива по строкам   Вложенные циклы     Подсчет суммы и произведения   Вывод результатов на экран  

 

2. Задана целочисленная квадратная матрица. Определить является ли она симметричной относительно главной диагонали.

Введем обозначения:

a- имя массива;

n- количество строк и столбцов в массиве;

i, j- индексы элементов массива;

f- признак симметричности матрицы, допустим f=0 матрица симметрична, f =1 матрица не симметрична.

Программа Пояснения
program matr_2; var a: array [1...10, 1...10] of integer; i, j, n, f: integer; begin writeln(‘ Введите n< =10 ’); readln (n); writeln(‘ Введите элементы массива по строкам ’); for i: =1 to n do for j: =1 to n do readln(a[i, j]); f: =0 for i: =1 to n do for j: =i to n do if a[i, j]< > a[j, i] then f: =1; if f=0 then writeln(‘ матрица симметрична’) else writeln (‘матрица не симметрична’); readln; end. Имя программы – matr_2 {Описательная часть}     {Исполнительная часть} Вывод сообщения на экран Ввод размера массива Вывод сообщения на экран   Ввод элементов массива   Определение симметричности матрицы   Вывод результатов на экран  

При решении этой задачи сравниваются элементы расположенные над главной диагональю (a[ i, j ]) с элементами, расположенными под главной диагональю (a[ j, i ]) и в случае их равенства матрица считается симметричной.

 

3. Задана матрица вещественных чисел. Образовать одномерный массив, где каждый j – й элемент равен произведению элементов j-ого столбца двумерного массива.

Введем обозначения:

a- имя двумерного массива;

b- имя одномерного массива;

n- количество строк в массиве;

m- количество столбцов в массиве;

i, j- индексы элементов массива;

Программа Пояснения
program matr_3; var a: array [1...10, 1...10] of integer; b: array [ 1..10 ] of integer; i, j, n, f: integer; begin writeln(‘ Введите n< =10, m< =10 ’); readln (n, m); writeln(‘ Введите элементы массива по строкам ’); for i: =1 to n do for j: =1 to m do readln (a[i, j]); writeln(‘ Исходная матрица ’); for i: =1 to n do begin for j: = 1 to n do write(a[I, j], ‘ ‘); writeln; end; writeln(‘ Образованный одномерный массив ’); for j: =1 to m do begin b[ j ]: =1; for i: =1 to n do b[ j ]: = b[ j ] * a[ i, j ]; write(b[ j], ‘ ‘); end; readln; end. Имя программы – matr_3 {Описательная часть} Описание двумерного массива Описание одномерного массива   {Исполнительная часть} Вывод сообщения на экран Ввод размера массива а Вывод сообщения на экран   Ввод элементов двумерного массива   Вывод на экран исходного массива в виде матрицы   Формирование и вывод на экран одномерного массива b  

 

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

Введем обозначения:

a- имя двумерного массива;

n- количество строк в массиве;

m- количество столбцов в массиве;

i, j- индексы элементов массива;

kmax, lmax - номер строки и номер столбца, на пересечении которых находится максимальный элемент.

 

Программа Пояснения
program matr_4; var a: array [1...10, 1...10] of real; i, j, n, m, kmax, lmax: integer; max: real; begin writeln(‘ Введите n< =10, m< =10 ’); readln(n, m); writeln(‘ Введите элементы массива по строкам ’); for i: =1 to n do for j: =1 to m do readln(a[i, j]); max: =a[1, 1]; kmax: =1; lmax: =1; for i: =1 to n do for j: =1 to m do if a[i, j]> max then begin max: =a[i, j]; kmax: =i; lmax: =j; end; writeln(‘max=’, max: 8: 3); writeln(‘строка - ‘, kmax, ’ столбец - ’, lmax); readln; end. Имя программы – matr_4 {Описательная часть}   {Исполнительная часть} Вывод сообщения на экран Ввод размера массива Вывод сообщения на экран   Ввод элементов массива по строкам   Поиск максимального элемента   Вывод результатов на экран  

 

Вопросы для самоконтроля

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

2. Будут ли сохранены данные массива в памяти компьютера после окончания работы программы?

3. Что такое индекс массива?

4. Какого типа должны быть переменные, являющиеся индексами массива?

5. Как можно задавать размер массива?

6. Может ли реальное количество элементов в массиве быть меньше, чем указано при описании?

7. Может ли реальное количество элементов в массиве быть больше, чем указано при описании?

8. В чем состоит разница между одномерными и двумерными массивами?

9. В каких случаях целесообразно создавать двумерные массивы?

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

11. Как определить количество элементов в двумерном массиве?

12. Как определить размер памяти в байтах, выделенной под хранение двумерного массива?

13. Какая матрица называется квадратной?

14. Что характеризует элементы, расположенные на главной диагонали, над и под главной диагональю?

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.