Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Обработка матриц




Лекция №8. Двумерные массивы

Двумерные массивы - матрицы - представляют собой массивы векторов и задаются двумя числами в квадратных скобках:

тип_элементов имя_массива [размер1] [размер2];

где размер1 - количество строк; размер2 - количество столбцов.

Например: double matr[100][10]; int i_matrix[10][20]; char cube[10][20][3];

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

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

Пример. Формирование матрицы с помощью генератора случайных чисел,

const int MAX_ROW = 5;

const int MAX_COL = 4;

randomize();

for (i=0; i<MAX_ROW; i++)

{ for (j=0; j<MAX_COL; j++)

{x[i][j]=random(10)-5;}}

Вывод матриц также происходит с помощью вложенных циклов.

Инициализация многомерных массивов осуществляется аналогично инициализации одномерных массивов. При этом инициализирующие значения должны совпадать с последовательностью хранения элементов массива в памяти. Типичной ошибкой, не вызывающей сообщения компилятора, является объявление вида int arr[i, j]; или использование arr[i, j] в выражениях. Компилятор воспринимает запятую между индексами как операцию "запятая" и игнорирует индекс i.

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

const int MAX_ROW = 5; // количество строк - 5

const int MAX_COL = 3; // количество столбцов - 3

void main ()

{int x[MAX_ROW][MAX_COL]= {{l,2,3}, //строка1

{ 4,5,6}, //строка2

{ 7,8,9}, //строкаЗ

{10,11,12}, //строка4

{13,14,15}}; //строка5

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

Работа с матрицей в целом

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

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

int arr[n][k], max=arr[0][0];

for (i=0; i<n; i++)

for(j=0;j<k; j++)

{ if(max<arr[i][j]) max=arr[i][j];}

Работа со строками/столбцами матрицы

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

Пример. Поиск максимальных элементов каждой строки матрицы.

int arr[n][k]; int max[n];

for (i=0; i<n; i++)

{ max[i]=arr[i][0];

for(j=0;j<k; j++)

{ if(max[i]<arr[i][j]) max[i] = arr[i][j];}}

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

Работа со столбцами матрицы отличается от работы со строками только тем, что цикл обработки столбцов становится внешним и результирующий вектор (вектор-строка) имеет размерность, равную количеству столбцов.

Диагональные элементы матриц

При работе с диагональными элементами матрицы предполагают, что матрица - квадратная. Диагональ, соединяющая левый верхний угол матрицы с ее правым нижним углом, называется главной, а соединяющая правый верхний угол с левым нижним - побочной. Для элементов, стоящих на главной диагонали выполняется равенство i=j. Если выполняется условие i>j, то элемент находится под главной диагональю. Если i < j - над главной диагональю.

Элемент находится на побочной диагонали, если выполняется условие i=n - j - 1, где n - порядок матрицы, i > (n - j - 1) - условие нахождения элемента под побочной диагональю, i<(n - j - 1) - над побочной диагональю.

Пример. Дан 30-элементный целочисленный массив. Создать другой массив, расположив в нем сначала четные элементы исходного массива, затем - нечетные.

#define M 30

#include <stdio.h>

#include <stdlib.h>

void main()

{ int i,j; int mas1[M]; int mas2[M];

randomize();

for(i=0; i<M; i++)

{ mas1[i]=random(10); printf("%d", mas1[i]);}

j=0;

for(i=0; i<M; i++)

{ if(mas1[i]%2==0) {mas2[j]=mas1[i];j++;}}

for(i=0; i<M; i++)

{ if(mas1[i]%2!=0 { mas2[j]=mas1[i];j++;}}

for(i=0; i<M; i++)

printf("%03d", mas2[i]);}




Поделиться с друзьями:


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


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



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




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