Задача: Обработка двумерного массива, нахождение макс. элемента и его

  • Автор темы Miller85
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

Miller85

Гость
#1
Не могу запрограмировать... Помогите плиз...

Исходная матрица (4*5)
2 0 3 -4 5
1 -2 7 -3 0
0 4 -5 -6 -2
6 9 5 2 -1

Вот мой код
C++:
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
#include<stdlib.h>

void main(void)
{
int x[4][5],n,m,i,j,k,q,s,mi,mj;
char ch;
unsigned int b;
clrscr();
cout<<"VVedite rasmeri ishodnoi matrici"<<endl
<<"kolichestvo strok(<=4):";
cin>>n;
cout<<"kolichestvo stolbcov(<=5):";
cin>>m;
cout<<"Vvedite 1, esli matrica vvoditsya vruchnuy,"<<endl
<<"ili luboy drugoi simvol, esli ona formiruetsya"<<endl
<<"datchikom cluchaynih chisel:";
cin>>ch;
if(ch=='1'){
cout<<"Vvedite ishodnuy matricu iz celih chisel"<<endl;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{cout<<"x["<<i<<"]["<<j<<"]=";
cin>>x[i][j];}
}
else{
cout<<"Vvedite celoe pologitelnoe chislo"<<endl
<<"dlya inicializacii datchika"<<endl
<<"sluchaynix chisel:";
cin>>b;
srand(b);
for(i=0;i<n;i++)
for(j=0;j<m;j++)x[i][j]=(rand()-16383)%10;
}
cout<<endl<<endl<<endl<<setw(30)<<"Ishodnaya matrica:"<<endl;
for(i=0;i<n;i++)
{for(j=0;j<m;j++)cout<<setw(6)<<x[i][j];
cout<<endl;
}
k=0;q=0;mi=0;mj=0;
for(j=0;j<m;j++){
mj=0;
for(i=0;i<n;i++)
if(x[i][j]>x[mi][mj]){mi=i;mj=j;}

}
if(mi==0)cout<<"maximalnih elementov v matrice net"<<endl;
else{
cout<<endl<<"kolichestvo maximalnih pologitelinih elementov v matrice - "<<mi
<< " v "
<<q<< "-m stolbce"<<endl;
cout<<endl<<setw(30)<<"poluchen massiv:"<<endl;
for(i=0;i<n;i++)cout<<setw(6)<<x[i][q];
cout<<endl;
}
cout<<endl<<"konec programmi.";
getch();
}
 

DarkKnight

Well-Known Member
01.08.2010
653
0
#2
Напишите задание пожалуйста ;-)
И что именно у вас не получается....
 
M

Miller85

Гость
#3
Сформировать массив из столбца, содержащего максимальный элемент матрицы... Не могу понять как сделать
 

DarkKnight

Well-Known Member
01.08.2010
653
0
#5
Ну вот... Там заколовочные файлы расскомментируешь, мои добавленные удалишь (кроме time.h), using namespace std - удалишь
C++:
//#include<iostream.h>
#include <iostream>
//#include<iomanip.h>
#include <iomanip>
#include<conio.h>
#include<stdlib.h>
#include <time.h>

using namespace std;

void main(void)
{
//И так, посмотрим
int x[4][5],n,m,i,j,k,q,s,mi,mj;
char ch;
unsigned int b;
//clrscr();
cout<<"VVedite rasmeri ishodnoi matrici"<< endl
<<"kolichestvo strok(<=4):";
cin>>n; //Вводим n
cout<<"kolichestvo stolbcov(<=5):";
cin>>m; //Вводим m
cout<<"Vvedite 1, esli matrica vvoditsya vruchnuy,"<<endl
<<"ili luboy drugoi simvol, esli ona formiruetsya"<<endl
<<"datchikom cluchaynih chisel:";
cin>>ch; //Интересное меню [+], только давай чуть-чуть его переделаем
bool RandTrue = false;
srand(time(NULL)); 
if(ch !='1')
{
RandTrue = true;
}
cout<<"Vvedite ishodnuy matricu iz celih chisel"<<endl;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
cout<<"x["<<i<<"]["<<j<<"] = "; 
if (!RandTrue)
cin>>x[i][j];
else
{
x[i][j]=rand()%100;
cout << x[i][j]<< endl;
}
}
/*
}
else
{
cout<<"Vvedite celoe pologitelnoe chislo"<<endl
<<"dlya inicializacii datchika"<<endl
<<"sluchaynix chisel:";
cin>>b;
srand(b);
for(i=0;i<n;i++)
for(j=0;j<m;j++)x[i][j]=(rand()-16383)%10;
}
*/

//Ну тут вывел на экран исходную
//Кстати максимальный элемент как раз в этих циклах и поищим
int MaxValue = -9999999; //Максимальное значение, сделаем его ничтожно маленьким для начала
int MaxStolb = -1; //Индекс столбца с макс. элементом
cout<<endl<<endl<<endl<<setw(30)<<"Ishodnaya matrica:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
cout<<setw(6)<<x[i][j];
//Будем искать
if (x[i][j]> MaxValue) //Если текущий элемент > МахValue
{
MaxValue = x[i][j]; //То заменим значение на значение этого элемента
MaxStolb = j; //И запишим текущий столбец
}
}
cout<<endl;
}

/*k=0;
q=0;
mi=0;
mj=0;
for(j=0;j<m;j++)
{
mj=0;
for(i=0;i<n;i++)
if(x[i][j]>x[mi][mj])
{
mi=i;
mj=j;
}
}
*/

//if(mi==0)cout<<"maximalnih elementov v matrice net"<<endl; //Так не бывает;-))) Если тебе конечно макс. положительный не надо найти
//else
//{
//Кол-во нас тоже не интерисует;-))) Он же у нас один единственный максимальный;-)) Ну или первый такой
//cout<<endl<<"kolichestvo maximalnih pologitelinih elementov v matrice - "<<mi
//		<< " v "
//		<<q<< "-m stolbce"<<endl;
cout<<endl<<setw(30)<<"poluchen massiv:"<<endl;
//Ну а для верности запишим его в массив нам же нужно сформировать его (по-заданию)
int y[4]; //Это наш выходной массив
for(i=0;i<n;i++)
{
cout<<setw(6)<<x[i][MaxStolb];
y[i] = x[i][MaxStolb];
}
cout<< endl;
//}
cout<< endl<< "konec programmi.";
getch();
}
 
M

Miller85

Гость
#6
Спасибо! Вроде бы всё понятно... Только не до конца понял про датчик случайных чисел... Если не сложно распиши пожалуйста

C++:
cin>>ch; //Интересное меню [+], только давай чуть-чуть его переделаем
bool RandTrue = false;
srand(time(NULL)); 
if(ch !='1')
{
RandTrue = true;
}
cout<<"Vvedite ishodnuy matricu iz celih chisel"<<endl;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
cout<<"x["<<i<<"]["<<j<<"] = "; 
if (!RandTrue)
cin>>x[i][j];
else
{
x[i][j]=rand()%100;
cout << x[i][j]<< endl;
}
}
 

DarkKnight

Well-Known Member
01.08.2010
653
0
#7
C++:
cin>>ch; //Интересное меню [+], только давай чуть-чуть его переделаем
bool RandTrue = false; //Заведем флаг, по-умолчанию его сразу в FALSE выставим
srand(time(NULL)); //Инициализация генерат. случ. величины (исходя от текущего времени компа)- наилучший вариант для генератора
if(ch !='1') //Если ввели не '1'
{
RandTrue = true; //То выставим флаг - в TRUE (типо нужно будет сгенерить значения)
}
cout<<"Vvedite ishodnuy matricu iz celih chisel"<<endl; 
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
cout<<"x["<<i<<"]["<<j<<"] = "; //Выводишь на экран текст по индексу текущему
if (!RandTrue) //А тут флаг проверяешь если FALSE
cin>>x[i][j]; // То вводить с клавы
else //А вот если true
{
x[i][j]=rand()%100; //То сразу генерируем случ. число от 0 до 99 оно получится у нас так как берем остаток от 100
cout << x[i][j]<< endl; //И выводим на экран его (как будто бы и вводили с клавы);-) Интерфейс тоесть не изменяем никак
}
}
 
Статус
Закрыто для дальнейших ответов.