[C++] Сравнить элементы массива в непрямоугольной матрице
Добавлено: 11 апр 2008, 02:00
Задание такое:
Из входного потока вводится непрямоугольная матрица целых чисел [aij], i=1, ...m, j=1, ...n, ni. Значения m и n заранее не известны и вводятся из входного потока.
Сформировать новую матрицу, поместив в её i-ую строку только те элементы из i-ой строки исходной матрицы, которые встречаются в ней два и более раз.
Исходную и полученную матрицы вывести в выходной поток с необходимыми комментариями.
Вот что я написал. Прога недоделана. Не получается элементы сравнивать в каждой строке между собой, криво вобщем, почему-то не все строки марицы обрабатываются. Помогите доделать плиз, я там в коде в функции result() комменты подписал что переделать нужно. Пока без формирования новой матрицы, хотя бы результат сравнения правильно вывести.
Из входного потока вводится непрямоугольная матрица целых чисел [aij], i=1, ...m, j=1, ...n, ni. Значения m и n заранее не известны и вводятся из входного потока.
Сформировать новую матрицу, поместив в её i-ую строку только те элементы из i-ой строки исходной матрицы, которые встречаются в ней два и более раз.
Исходную и полученную матрицы вывести в выходной поток с необходимыми комментариями.
Вот что я написал. Прога недоделана. Не получается элементы сравнивать в каждой строке между собой, криво вобщем, почему-то не все строки марицы обрабатываются. Помогите доделать плиз, я там в коде в функции result() комменты подписал что переделать нужно. Пока без формирования новой матрицы, хотя бы результат сравнения правильно вывести.
Код: Выделить всё
#include <iostream>
using namespace std;
const int M = 100, N = 100;
void input(int (*p)[M], int mn, int nn);
void source(int &m, int (*p)[M]);
void result(int &m, int (*p)[M]);
int isIn(int &tmp, int &next);
int main(){
int arr[M][N], m;
input(arr, M, N);
return 0;
}
void input(int (*p)[M], int mn, int nn){
int m, n;
const char* msg = "";
do{
cout << msg << endl;
cout << "Enter quantity of a rows (not more then " << mn << "): ";
cin >> m;
//checking input...
if(cin.fail())
{
cin.clear();
cin.ignore();
}
msg = "Input error";
} while(m < 1 || m > mn);
for(int i=0;i<m;i++){
msg = "";
do{
cout << msg << endl;
cout << "Enter quantity of elements for a rows " << i + 1 << "(from 1 to " << (nn - 1) << "): ";
cin >> n;
//checking input...
if(cin.fail()){
cin.clear();
cin.ignore();
}
msg = "Input error";
} while(n < 1 || n > (nn - 1));
p[i][0] = n; //saving quantity of elements in the first element of a row
cout << "Enter values of a row: " << endl;
for(int j=1;j<(n + 1);j++){
cin >> p[i][j];
}
}
//output
source(m, p);
result(m, p);
}
//source matrix
void source(int &m, int (*p)[M]){
cout << endl << "Source matrix:" << endl;
for(int i=0;i<m;i++){
for(int j=1;j<p[i][0]+1;j++){
cout << ((j != 1) ? ", " : "") << p[i][j];
}
cout << endl;
}
}
//reslut matrix
void result(int &m, int (*p)[M]){
int tmp, r[M][N], count;
cout << endl << "Result matrix:" << endl;
for(int i=0;i<m;i++){
cout << "Row " << i+1 << ": ";
for(int j=1;j<p[i][0]+1;j++){
//вот тут отправляю значения в функцию и пытаюсь вываести повторяющиеся значения в каждой строке
if(isIn(p[i][j], p[i][j+1])){
cout << "Element : " << p[i][j];
}
}
cout << endl;
}
}
int isIn(int &tmp, int &next){
if(tmp == next){
return true;
} else {
return false;
}
}