КАТЕГОРИИ: Архитектура-(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) |
Примеры алгоритмов, использующих двумерные массивы
а) Простейшие примеры Задача 1. Ввести матрицу и увеличить все ее элементы на единицу.
#include<iostream.h> #include<conio.h> #include<stdio.h> void main() { int a[10][10],n,m,i,j; // Ввод матрицы cout<<"Vvedite n,m <=10:"; cin>>n>>m; cout<<"Vvedite massiv:\n"; for (i=0; i<n; i++) for (j=0; j<m; j++) cin>>a[i][j]; // Увеличение на 1 for (i=0; i<n; i++) for (j=0; j<m; j++) a[i][j]++; // Вывод матрицы puts("Result:"); for (i=0; i<n; i++) for (j=0; j<m; j++) printf("%3d%c", a[i][j], j==m-1? '\n': ' ');
getch(); }
Задача 2. Найти в матрице наибольший элемент и его позицию.
max=a[0][0]; im=jm=0; for (i=0; i<n; i++) for (j=0; j<m; j++) if (a[i][j]>max) { max=a[i][j]; im=i; jm=j; } printf("Max element a[%d][%d]=%d\n", im, jm, max);
Задача 3. Переписать матрицу в одномерный массив.
int b[100]; for (i=k=0; i<n; i++) for (j=0; j<m; j++) b[k++]=a[i][j];
После выполнения этого участка программы k=n*m -количество элементов в полученном массиве.
б) Диагонали квадратной матрицы
Квадратной называется матрица, у которой число строк равно числу столбцов. Ее главной диагональю называется диагональный ряд элементов, идущий из верхнего левого угла в нижний правый, а побочной диагональю - идущий из верхнего правого угла в нижний левый:
Обозначим размер матрицы буквой N, индекс строки буквой I, а индекс столбца буквой J. Тогда у элементов, лежащих на главной диагонали, I = J, а у элементов, лежащих на побочной диагонали, I + J = N - 1.
Задача 4. Найти сумму элементов матрицы, лежащих над главной диагональю.
Из рисунка видно, что у элементов, лежащих над главной диагональю, I < J. Можно учесть это в условии оператора if, либо цикла for:
for (i=s=0; i<n; i++) for (j=i+1; j<n; j++) s+=a[i][j];
в) Работа со строками и столбцами Строка или столбец матрицы аналогичны одномерному массиву. Поэтому к ним применимы все алгоритмы, рассмотренные для одномерных массивов. В применении же ко всей матрице это обычно требует дополнительного внешнего цикла (циклов).
Задача 5. Поменять местами первую и последнюю строки матрицы.
for (j=0; j<m; j++) { p=a[0][j]; a[0][j]=a[n-1][j]; a[n-1][j]=p; }
Задача 6. Найти сумму элементов в каждой строке матрицы.
Поскольку строк в матрице несколько, ответом будет не одно число, а одномерный массив:
int b[10];
for (i=0; i<n; i++) { for (j=s=0; j<m; j++) s+=a[i][j]; b[i]=s; }
for(i=0; i<n; i++) printf("%d ", b[i]); puts("");
Задача 7. Найти сумму элементов в каждом столбце матрицы.
По сравнению с предыдущей задачей, здесь изменится порядок циклов (ведь сначала нужно целиком подсчитать сумму в одном столбце, и только затем - в другом и т.д.):
for (j=0; j<m; j++) { for (i=s=0; i<n; i++) s+=a[i][j]; b[j]=s; }
for(j=0; j<m; j++) printf("%d ", b[j]); puts("");
Задача 8. В каждой строке матрицы определить количество элементов, равных нулю. Отсортировать строки матрицы по убыванию этого количества.
Прежде всего, нужно определить эти количества и занести их в одномерный массив (обозначим его b):
for (i=0; i<n; i++) { for (j=s=0; j<m; j++) if (a[i][j]==0) s++; b[i]=s; }
Затем нужно отсортировать матрицу. В процессе этого обменивать местами нужно как сами строки, так и соответствующие им элементы одномерного массива b (чтобы каждый его элемент продолжал соответствовать своей строке):
for (i=0; i<n; i++) for (k=i+1; k<n; k++) if (b[k]>b[i]) { for(j=0; j<m; j++) { p=a[i][j]; a[i][j]=a[k][j]; a[k][j]=p; } p=b[i]; b[i]=b[k]; b[k]=p; }
Дата добавления: 2014-01-07; Просмотров: 278; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |