Пример программы на обработку двумерного массива (матрицы)
//Программа находит строку введенного с клавиатуры двумерного массива целых
//чисел, содержащую максимальную сумму элементов
#include <stdio.h>
#include <conio.h>
#include<stdlib.h>
#include<string.h>
const RAZ = 10; //размер одного измерения массива
void inputmatr(int matr[][RAZ],int &m, int &n);
void okno(int x1,int y1,int x2,int y2,int bkcol,int colb,char zag[15]);
int exist(int matr[][RAZ],int n,int x,int p,int k);
void poisk_st(int m,int n,int matr[][RAZ],int &max,int &jmax);
void outmatr(int m,int n,int matr[][RAZ],int imax);
void main()
{int a[RAZ][RAZ]; //массив
int imax; //номер строки с максимальной суммой элементов
int max; //максимальная сумма элементов
int m; //число строк
int n; //число столбцов
okno(1,1,80,25,BLACK,WHITE,"");
okno(15,1,60,4,WHITE,BLUE,"Описание");
cprintf("\r\n В матрице целых чисел найти номер строки,");
cprintf("\n\r содержащей максимальную сумму элементов");
okno(10,10,65,25,RED,WHITE,"Результат");
okno(15,6,60,8,WHITE,BLUE,"Окно ввода");
//ввод исходных данных
inputmatr(a,m,n);
//поиск строки с максимальной суммой элементов
poisk_st(m,n,a,max,imax);
//вывод матрицы
okno(10,10,65,25,RED,WHITE,"Результат");
cprintf("\n\r Максимальная сумма элементов строки (%i) содержится",max);
cprintf("\n\r в %i-ой строке исходного массива\n\r", imax + 1);
outmatr(m,n,a,imax);
cprintf("\n\r Для завершения нажмите <Enter>");
getchar();
getchar();
}
//ввод исходных данных
void inputmatr(int matr[][RAZ], int &str, int &sto)
{int i, j;
cprintf("\n\r Введите число строк в массиве <%i: ",RAZ);
scanf("%i", &str);
cprintf("\r Введите число столбцов в массиве <%i: ",RAZ);
scanf("%i", &sto);
randomize();
for(i = 0; i < str; i++) //перебор строк
for(j = 0; j < sto; j++) //перебор столбцов
do{matr[i][j] = random(100);
}
while (exist(matr,sto,matr[i][j],i,j));
}
void okno(int x1,int y1,int x2,int y2,int bkcol,int colb,char zag[15])
{window(x1,y1,x2,y2);
textbackground(bkcol);
textcolor(colb);
clrscr();
gotoxy((x2 - x1 - strlen(zag)) / 2,1);
cprintf("%s",zag);
}
int exist(int matr[][RAZ],int n,int x,int p,int k)
{int i,j;
for(i = 0 ; i <= p ; i++)
for(j = 0 ; j < n ; j++)
{if((i == p) && (j == k))
return 0;
if(matr[i][j] == x)
return 1;
}
return 0;
}
void poisk_st(int str,int sto,int matr[][RAZ],int &max,int &imax)
{int i, j, pr;
imax = 0; //за максимум принимаем сумму элементов первой строки
max = 0;
for(j = 0; j < sto; j++)
max += matr[0][j];
for(i = 1; i < str; i++)
{pr = 0;
for(j = 0; j < sto; j++)
pr += matr[i][j];
if(max < pr)
{imax = i;
max = pr;
}
}
}
void outmatr(int m,int n,int matr[][RAZ],int imax)
{int i, j;
for(i = 0; i < m; i++)
{for(j = 0; j < n; j++)
if(i == imax)
{textbackground(WHITE);
textcolor(BLUE);
cprintf("%4i",matr [i][j]);
textcolor(WHITE);
textbackground(RED);
}
else cprintf("%4i",matr[i][j]);
cprintf("\n\r");
}
}
Лабораторная работа №7