Студопедия

КАТЕГОРИИ:


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

}

 

<== предыдущая лекция | следующая лекция ==>
 | Компонента StringGrid
Поделиться с друзьями:


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


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



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




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