КАТЕГОРИИ: Архитектура-(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; Просмотров: 639; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |