Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Вопросы для проверки знаний. Работа с двухмерными массивами (матрицами)

End.

Begin

End.

Begin

End.

Begin

Работа с двухмерными массивами (матрицами)

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

Пример 1. Описания типов двумерных массивов:

type quad_matr = array[1..n,1..n] of real;

mas_2d = array[1..n+m,1..10] of integer;

Пример 2. Непосредственные описания переменных как двумерных массивов:

var A,B,C:array[1..5,1..10] of integer;

matr:array[1..m,1..m] of longint;

Графически матрицы изображают в виде таблиц. Например, на рис.8.1 дана матрица с 4 строками и 4 столбцамикоторую обозначим А. При размещении в памяти и обработке многомерных массивов действует следующее правило адресации элементов в массиве: первым возрастает самый правый индекс, затем второй справа и т.д. Для матриц это означает, что их элементы располагаются по строкам. В математике матрицу А, имеющую n строк и m столбцов обозначают как А(n´m).

  -11 -23       -11 -23     -11   -23  
-4     -10     -68 -27   -4   -10
  -14   -84   -14   -84 -14     -84
    -68 -27 -4     -10     -68 -27

Рис.8.1 Рис. 8.2 Рис. 8.3

Пример 3. Элементы матрицы А[1..4,1..4] (рис.8.1) располагаются в памяти в следующем порядке: А[1,1]; А[1,2]; А[1,3]; А[1,4]; А[2,1]; А[2,2]; А[2,3]; А[2,4]; А[3,1]; А[3,2]; А[3,3]; А[3,4]; А[4,1]; А[4,2]; А[4,3]; А[4,4].

Если рассматривать матрицу А(n´m) в виде линейного массива L длины n × m, то каждой паре индексов [ i,j ] в матрице А взаимно однозначно соответствует индекс, равный ((i-1) × m + j) в линейном массиве L.

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

Пример 4. Инициализация матрицы M[1..2,1..3] с использованием типизированной константы:

type Matr= Array[1..3,1..2] of Integer;
const M: Matr= ((2, -8)
(-5, 41)
(53, -26));

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

Пример 5. Ввод в матрицу a размерами 5´4 случайных чисел, лежащих на отрезке [0;1]:

var a:array[1..5,1..4] of real;

i,j:integer;

for i:=1 to 5 do

for j:=1 to 4 do a[i,j]:=random;

Пример 6. Построчный вывод элементов матрицы a из примера 5 размерами 5´4: случайных чисел, лежащих на отрезке [0;1]

for i:=1 to 5 do begin

for j:=1 to 4 do write(' a[',i,',',j,']=',a[i,j]:8:6); {вывод строки элементов}

writeln; {переход на очередную строку}

end;

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

Пример 7. Ввести с клавиатуры элементы матрицы M[1..2,1..3] с элементами типа integer и вывести матрицу на экран. Определить в ней максимальный отрицательный элемент. Найденный элемент и его номер выдать на экран. Если в матрице нет отрицательных элементов, вывести сообщение “No”.

Решение. Обозначим искомый номер строки элемента через M_str, столбца - через M_stl его значение – через Max. Начальное значение Max примем равным (-32768) – минимально возможному значению типа integer. В качестве начального значения номера M_str примем 0 - номер не существующей строки: M_str=0. Если значение M_str=0 не изменилось до конца расчета, то это означает, что ни одного отрицательного элемента в матрице нет.

var a:array[1..2,1..3] of integer;

i,j,M_str, M_stl,Max:integer;

for i:=1 to 2 do {ввод элементов матрицы с клавиатуры}

for j:=1 to 3 do begin

writeln('vvedite element a[',i,',',j,']='); {запрос на ввод элемента a[i,j] }

read(a[i,j]); {ввод элемента a[i,j] }

end;

for i:=1 to 2 do begin {вывод матрицы на экран}

for j:=1 to 3 do write(' a[',i,',',j,']=',a[i,j]:6); {вывод строки элементов}

writeln; {переход на очередную строку}

end;

Max:=-32768; M_str:=0; {начальные присвоение значения Max и M_str }

for i:=1 to 2 do

for j:=1 to 3 do

if(a[i,j]<0)and(a[i,j]> Max)then {сравнение отрицательных элементов матрицы с Max }

begin Max:=a[i,j]; M_str:=i; M_stl:=j end; {коррекция Max, M_str и M_stl }

if M_str=0 then writeln(' NO!') else {проверка, была ли хоть одна коррекция Max }

writeln(' Max:=',Max,' M_str=',M_str,' M_stl=', M_stl); {вывод результатов}

Для определенности будем рассматривать целочисленную матрицу с названием a, число строк которой обозначено как n, число столбцов – как m. Целочисленные индексы, пробегающие по строкам и столбцам, обозначим i и j. Матрицы, у которых числа строк и столбцов равны (n=m), называют квадратными. Пример квадратной матрицы а(4´4) дан на рис.8.1. Для квадратных матриц вводят понятия главной диагонали – упорядоченный набор элементов вида {m[1,1], m[2,2],..., m[n,n]}, у которых совпадают номера строки и столбца. У матрицы на рис.8.1. на главной диагонали стоят элементы: а[1,1]=5, а[2,2]=6, а[3,3]=72, а[4,4]=-27.

Рассмотрим типовые операции, предусматривающие изменение значений элементов матрицы. Для круговой пересылки целых величин используем вспомогательную целую величину t. Фрагменты кода, выполняющие операции, даны для матрицы а(n´m) (a[1..n,1..m]).

1. Перестановка строк и столбцов:

а) перестановку строк с номерами r и s:

for j:=1 to m do {перебор всех столбцов матрицы от 1 до m }

begin t:=a[r,j];a[r,j]:=a[s,j];a[s,j]:=t end; {круговая пересылка элементов строк r,s }

б) перестановку столбцов с номерами p и q:

for i:=1 to n do {перебор всех строк матрицы от 1 до n }

begin t:=a[i,p];a[i,p]:=a[i,q];a[i,q]:=t end; {круг. пересылка элементов столбцов p,q }

Для матрицы с рис.8.1 результаты перестановки строк 2 и 4 даны на рис. 8.2, перестановка столбцов 1 и 2 - на рис. 8.3.

2. Умножение строк и столбцов на постоянные множители:

а) умножение строки с номерам r на постоянный множитель c:

for j:=1 to m do a[r,j]:=a[r,j]*c; {проход по всем столбцам от 1- m, умножение элементов }

б) умножение столбца с номером p на постоянный множитель c:

for i:=1 to n do a[i,p]:=a[i,p]*c:= {проход по всем строкам от 1- n, умножение элементов }

Для матрицы с рис.8.1 результат умножения ее строки 2 на множитель 1,5 дан на рис. 8.4.

3. Прибавление (вычитание) из одной строки другой, умноженной на постоянный множитель:

а) прибавление к строке с номерам r строки с номером s, умноженной на постоянный множитель c:

for j:=1 to m do a[r,j]:=a[r,j]-a[s,j]*c; {проход по всем столбцам от 1- m, сложение}

б) вычитание выполняется аналогично с заменой “+” на “-”.

Для матрицы на рис.8.1 результат вычитания из строки 1 строки 2, умноженной на 3, дан на рис. 8.5.

4. Транспонирование матриц – операция, при которой ее строки и столбцы меняются местами:

транспонирование матрицы a[1..n,1..m], результат - в матрице b[1.. m,1..n]:

for i:=1 to n do

for j:=1 to m do b[i,j]:= a[j,i];

Для матрицы с рис.8.1 транспонированная матрица дана на рис. 8.6.

5. Сложение (вычитание) матриц – операция, при которой элементы новой матрицы являются суммой (разностью) соответствующих элементов исходных матриц:

определение матрицы с[1.. m,1..n] – суммы матриц a[1..n,1..m] и b[1..m,1..n]:

for i:=1 to n do

for j:=1 to m do с[i,j]:= b[i,j]+a[j,i];

  -11 -23       -29 -59       -4    
-6     -15     -68 -27 -11   -14  
  -14   -84   -14   -84 -23     -68
    -68 -27 -4     -10   -10 -84 -27

Рис.8.4 Рис. 8.5 Рис. 8.6

Пример 8. Ввести с клавиатуры элементы квадратной матрицы A[1..3,1..3] с элементами типа integer. Из A получить матрицу В, в которой вместо столбца, содержащего минимальный элемент матрицы A, вставлена строка, содержащая максимальный элемент A. Номера строки с максимальным элементом, столбца с минимальным элементом и матрицу В выдать на экран.

Решение. Обозначим номер строки с максимальным элементом A через Str_max, номер столбца с минимальным элемента - через Stl_min, текущие значения максимума и минимума – через max, min. Коды операторов для ввода элементов матрицы с клавиатуры и вывода ее на экран совпадают с примером 7 с учетом изменения числа строк, поэтому в решении они не приводятся. После ввода матрицы A и ее исходного вывода на экран вначале определяются номера Str_max и Stl_min. Затем производится пересылка A в В и требуемая коррекция матрицы В.

var a,b:array[1..3,1..3] of integer;

i,j,max, min,Stl_min,Str_max,c:integer;

…/// ввод элементов матрицы с клавиатуры и вывода ее на экран - по примеру 7

Str_max:=1; Stl_min:=1; max:=a[1,1]; min:=a[1,1]; {начальные присвоения значений}

for i:=1 to 3 do {поиск номеров: Str_max- строки с макс.эл. и Stl_min столбца с мин. эл.}

for j:=1 to 3 do begin

if a[i,j]<min then

begin min:=a[i,j];Stl_min:=j end; {поиск столбца с минимальным элементом}

if a[i,j]>max then

begin max:=a[i,j];Str_max:=i end {поиск строки с максимальным элементом}

end;

writeln(' Stl_min=',Stl_min,' Str_max=',Str_max); {вывод номеров столбца и строки}

В:=A; {начальное формирование матрицы В }

for i:=1 to 3 do

b[i,Stl_min]:=a[Str_max,i]; {коррекция матрицы В }

for i:=1 to 3 do begin {вывод результирующей матрицы В }

for j:=1 to 3 do write(' b[',i,',',j,']=',b[i,j]:8); {вывод строки элементов}

writeln; {переход на очередную строку}

end;

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

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

2. На какое место в памяти, начиная с начала записи массива а(10´10), попадет его элемент a[8,5]?

3. Какие матрицы называют квадратными?

4. Что называют главной диагональю квадратной матрицы?

5. Как можно перечислить все элементы главной диагонали при помощи одного цикла?

6. Какое преобразование матрицы называют транспонированием?

Практические задания.

1. Разработать и отладить код программы, в которой:

а) вводятся с клавиатуры значения элементов целочисленной матрицы A[1..3,1..3],

б) матрица выводится на экран,

в) определяется максимальный элемент матрицы, который затем прибавляется ко всем элементам в нечетных столбцах матрицы,

г) новая матрица выводится на экран.

<== предыдущая лекция | следующая лекция ==>
Вопросы для проверки знаний | Динамические массивы
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 227; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.041 сек.