Войти

Показать полную графическую версию : Помогите отсортировать двумерный массив (С++)


Luda-tin
14-05-2012, 17:24
Дана целочисленная матрица.
1. Определить номер первого столбца, содержащий хотя бы один нулевой элемент.
2. Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Отсортировать строки матрицы по убыванию характеристик.

Первая часть сделана! Помогите, пожалуйста, отсортировать.
#include <iostream.h>
#include <iomanip.h>
int main() {
int nrow, k, ncol;
cout<<"Vedite koli4estvo strok i stolbcov: ";
cin>>nrow>>ncol;
int i, j;
int **a=new int *[nrow];
for (i=0; i<nrow; i++) a[i]=new int [ncol];
cout<<"Vvedite elementi massiva: "<<endl;
for (i=0; i<nrow; i++)
for (j=0; j<ncol; j++) cin>>a[i][j];
for (i=0; i<nrow; i++) {
for (j=0; j<ncol;j++) cout<<setw(4)<<a[i][j]<<" ";
cout<<endl;}

int num=-1;
for (j=0; j<ncol; j++)
for (i=0; i<nrow; i++)
{
if (a[i][j]==0)
{ k=j+1;
cout<<"Nomer stolbca: "<<k<<endl; break;
}
}
if (num==-1) cout<<"Stolbcov net"<<endl;
return 0;
}

lxa85
14-05-2012, 21:16
Luda-tin, Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Отсортировать строки матрицы по убыванию характеристик. »
очевидно надо получить еще один двумерный массив (сумма - строка) и отсортировать его любым удобным способом Алгоритмы_сортировки (http://ru.wikipedia.org/wiki/Категория:Алгоритмы_сортировки) Можно начать с сортировки пузырьком.

P.S. Оформляйте пожалуйста код тегом <noparse> <code> </code> </noparse>. Для упрощения, выделите код и нажмите кнопку # (строка форматирования сообщения)

ferget
14-05-2012, 22:15
надо получить еще один двумерный массив (сумма - строка) »
проще, наверное, одной функцией получать сумму строк, а другой сортировать

сумма строк

int* GetStrCharacters(int** arr, int row, int col)
{
int* sums = new int[row];
for (int i = 0; i < row; i++)
{
int curSum = 0;
for (int j = 0; j < col; j++)
{
if((arr[i][j]<=0) && (arr[i][j]%2 ==0))
curSum += arr[i][j];
}
sums[i] = curSum;
}
return sums;
}

lxa85
15-05-2012, 01:10
проще, наверное, одной функцией получать сумму строк, а другой сортировать »
Наверно слишком поздно (час ночи), но разница для меня ускользает. :(

Serj_Pi
15-05-2012, 08:57
Так, нет?#include <iostream>
#include <iomanip>
#include <windows.h>

using namespace std;

int GetCharacters(int* arr, int num)
{
int sum = 0;
for (int i = 0; i < num; i++)
{
if((arr[i]<=0) && (arr[i]%2 ==0))
sum += arr[i];
}
return sum;
}
int main() {
SetConsoleOutputCP(1251);
int nrow, k = 0, ncol;
cout<<"Vedite koli4estvo strok i stolbcov: ";
cin>>nrow>>ncol;
int **a = new int *[nrow];
for (int i = 0; i < nrow; i++) a[i] = new int [ncol];
cout<<"Vvedite elementi massiva: "<<endl;
for (int i = 0; i < nrow; i++)
for (int j = 0; j < ncol; j++) cin>>a[i][j];
for (int i = 0; i < nrow; i++) {
for (int j = 0; j < ncol;j++){
if (a[i][j] == 0 && k == 0) {
k = j + 1;
}
cout<<setw(4)<<a[i][j]<<" ";
}
cout<<endl;
}
if (k) cout<<"Номер первого столбца содержащего 0: "<<k<<endl;
else cout<<"Нет столбцов содержащих 0 :-("<<endl;
int *t;
for(int j = 0;j< nrow ; j++){
for(int i = 0;i < nrow - j - 1;i++)
if(GetCharacters(a[i],ncol) < GetCharacters(a[i + 1],ncol)){
t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
cout<<"Отсортированный массив: "<<endl;
for (int i = 0; i < nrow; i++) {
for (int j = 0; j < ncol;j++)
cout<<setw(4)<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}




© OSzone.net 2001-2012