Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Двумерный массив целых чисел («Матрица»)Одномерные массивы соответствуют векторам, двумерным массивам можно поставить в соответствие – матрицы. Двумерные массивы – это вид удобной записи, так как память имеет одно измерение. Наименьший адрес в памяти соответствует значению элемента первого столбца в первой строке matrix[0][0], наибольший адрес – значению элемента в последнем столбце последней строки матрицы matrix [N-1][M-1]. Доступ к элементам осуществляется по индексам строк и индексам столбцов. Можем представить двумерный массив как одномерный, каждый элемент которого есть одномерный массив. Двумерный массив может быть инициализирован присваиванием элементам по одной строке каждый раз: int matr [][4] = {{3,5,7}, {- 2,- 4,- 6}, {1,7,13}}; При таком описании в памяти будет выделен блок для таблицы размером (3х4) х 2 байта, общим объемом – 24 байта. Последний элемент в каждой строке будет содержать нулевое значение. Для доступа к элементу матрицы в памяти, компилятор расширяет таблицу – дескриптор массива для включения информации о количестве столбцов и длине каждой строки: Начальный адрес массива Matrix Количество строк Row Count Количество столбцов Column Count Размер типа ST = sizeof (int) Длина строки ST * Column Count Набор функций для работы с матрицей: 1. Ввод/вывод матрицы. void Enter_ Matrix (int Array[][N], int &m, int &n) { int i, j; printf ("\n Введи размерности матрицы:"); scanf ("%d %d", &m, &n); printf (" Введи матрицу :\n"); for ( i =0; i < m; i++) for ( j = 0; j < n; j++) scanf ("%d", & Array [i][j]); } void Print_ Matrix (int Array [][N], int m, int n) { int i, j; printf ("\n Матрица – результат :\n"); for( i = 0; i < m; i++) { for( j=0; j < n; j++) printf ("%3d ", Array [i][j]); printf("\n"); } } 2. Поиск минимального и максимального элементов матрицы. Поменять их местами. void Min_Max (int A [][N], int m, int n, int& Min, int& Max) { int i, j, s_min = 0, c_min = 0, s_max = 0, c_max = 0 ; Min = Max = A [0][0]; for(i = 0; i < m; i++) for(j = 0; j < n; j++) { if (A [i][j] < Min) {Min = A [i][j]; s_min = i; c_min = j;} if (A [i][j] > Max) {Max = A [i][j]; s_max= i; c_max = j;} } A [s_min][c_min] = Max; A [s_max][c_max] = Min; } 3. Транспонирование матрицы. void Reverse (int A [][N], int n) { int i, j, temp; for (i = 0; i < n; i++) for (j = 0; j < i; j++) { temp = A [i][j]; A [i][j] = A [j][i]; A [j][i] = temp; } } 4. Сортировка строк матрицы по возрастанию их средних значений. void Medium_Value (int A [][N], int m, int n) { int i, j, k, sum, tmp; float Medium[N], temp; for(i = 0; i < m; i ++) { sum = 0; for(j = 0; j < n; j ++) sum += A [i][j]; Medium [i] = (float) sum / n; } for (i = 0; i < m - 1; i ++) { k = i; for (j = i + 1; j < m; j++) if ((Medium[k] - Medium[j]) > 0) k = j; temp = Medium[i]; Medium[i] = Medium[k]; Medium[k] = temp; for (j = 0; j < n; j++) { tmp = A [i][j]; A [i][j] = A [k][j]; A [k][j] = tmp; } } } 5. Удалить из матрицы строку и столбец со значением максимального элемента. void Delete_Max ( int A [][N], int &m, int &n, int Smax, int Cmax) { int i, j; if (Smax < m - 1) for (i = Smax; i < m - 1; i++) for (j = 0; j < n; j++) A [i][j] = A [i + 1][j]; m--; if (Cmax < n - 1) for (j = Cmax; j < n - 1; j++) for (i = 0; i < m; i++) A [i][j] = A [i][j + 1]; n--; }
Дата добавления: 2014-11-14; просмотров: 318; Нарушение авторских прав Мы поможем в написании ваших работ! |