Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Типовые задачи на обработку двумерных массивов



В задачах на обработку двумерных массивов наиболее часто встречаются следующие алгоритмы:

· обработка всего массива;

· обработка отдельно по строкам и столбцам;

· обработка относительно диагоналей.

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

Пример. Программа поиска максимального элемента двумерного массива и его индексов.

#include <stdio.h>

void main()

{

const int m=3,n=4;

int i,j,A[m][n],max,imax,jmax;

printf("Введите элементы массива\n");

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

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

{

printf("A[%d][%d]= ", i,j);

scanf("%d", &A[i][j]);

}

max=A[0][0]; imax=0; jmax=0;

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

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

if (A[i][j]>max)

{ max=A[i][j]; imax=i; jmax=j; }

printf("Максимальный элемент: A[%d][%d]=%d\n",imax,jmax,max);

}

или

#include <stdio.h>

void main()

{

const int m=3,n=4;

int i,j,A[m][n],imax,jmax;

// ввод массива А

imax=0; jmax=0;

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

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

if (A[i][j]> A[imax][jmax]) {imax=i; jmax=j;}

printf("Максимальный элемент: A[%d][%d]=%d\n",

imax,jmax,A[imax][jmax]);

}

Пример. Программа подсчета количества отрицательных элементов двумерного массива.

#include <stdio.h>

void main()

{

const int m=5,n=6;

int i,j,A[m][n],k=0;

printf("Введите элементы массива\n");

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

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

{

printf("A[%d][%d]= ", i,j);

scanf("%d", &A[i][j]);

if (A[i][j]<0) k++;

}

printf("Количество отрицательных элементов массива: %d\n",k);

}

Пример. Программа обработки двумерного массива, в которой:

1. массив заполняется с клавиатуры и выводится на экран в виде таблицы;

2. подсчитываются суммы элементов каждой строки;

3. определяются минимальные значения каждого столбца.

#include <stdio.h>

void main()

{

const int m=4,n=6;

int i,j,A[m][n],S,min;

printf("Введите элементы массива\n");

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

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

{

printf("A[%d][%d]=", i,j);

scanf("%d", &A[i][j]);

}

printf("Введенный массив:\n");

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

{

for(j=0; j<n; j++) printf(" %d", A[i][j]);

printf("\n");

}

//вложенные циклы для нахождения сумм по строкам

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

{

S=0;

for(j=0; j<n; j++) S=S+A[i][j];

printf("Сумма элементов %d-й строки: %d\n", i+1,S);

}

//вложенные циклы для нахождения минимумов по столбцам

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

{

min=A[0][j];

for(i=1; i<m; i++)

if (A[i][j]<min) min=A[i][j];

printf("Минимальный элемент %d-го столбца: %d\n",j+1,min);

}

}

Пример. Найти сумму элементов квадратной матрицы, лежащих выше главной диагонали (рис. 1).

Рис. 1. Рисунок к условию задачи из примера

Алгоритм решения данной задачи построен следующим образом: с помощью двух циклов (первый по строкам, второй по столбцам) просматривается каждый элемент матрицы, но суммирование происходит только в том случае, если этот элемент находится выше главной диагонали, то есть выполняется свойство i < j.

#include <stdio.h>

void main()

{

const int n=8;

int i,j,A[n][n],S=0;

// ввод массива А

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

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

if (i<j) S+=A[i][j];

printf("Сумма элементов выше главной диагонали: %d\n", S);

}

Возможен еще один вариант решения данной задачи. В нем проверка условия i < j не выполняется, но, тем не менее, в нем также суммируются элементы матрицы, находящиеся выше главной диагонали. В первой строке заданной матрицы необходимо сложить все элементы, начиная со второго. Во второй – все, начиная с третьего, в i -й строке процесс начнется с (i +1)-го элемента и так далее.

#include <stdio.h>

void main()

{

const int n=8;

int i,j,A[n][n],S=0;

// ввод массива А

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

for(j=i+1; j<n; j++)

S+=A[i][j];

printf("Сумма элементов выше главной диагонали: %d\n", S);

}

Пример. Программа преобразования двумерного массива в одномерный.

Иногда надо скопировать двумерный массив А размером m на n в одномерный массив В размером m * n. Очевидно, что при копировании по строкам (сначала первая строка, затем вторая и т.д.) элемент первой строки А[0][j] надо скопировать в B[j], элементы второй строки А[1][j] – в B[n+j] и т.д. Отсюда следует, что для любой строки i элемент А[i][j] копируется в B[i*n+j].

#include <stdio.h>

void main()

{

const int m=4,n=6;

int i,j,A[m][n],B[m*n];

// ввод массива А

printf("Введенный массив:\n");

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

{

for(j=0; j<n; j++) printf(" %d", A[i][j]);

printf("\n");

}

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

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

B[i*n+j]=A[i][j];

printf("Преобразованный массив:\n");

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

printf(" %d", B[i]);

}





Дата публикования: 2015-01-23; Прочитано: 275 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.02 с)...