Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Помогите отсортировать двумерный массив (С++) (http://forum.oszone.net/showthread.php?t=234628)

Luda-tin 14-05-2012 17:24 1915803

Помогите отсортировать двумерный массив (С++)
 
Дана целочисленная матрица.
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 1915948

Luda-tin,
Цитата:

Цитата Luda-tin
Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Отсортировать строки матрицы по убыванию характеристик. »

очевидно надо получить еще один двумерный массив (сумма - строка) и отсортировать его любым удобным способом Алгоритмы_сортировки Можно начать с сортировки пузырьком.

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

ferget 14-05-2012 22:15 1915985

Цитата:

Цитата lxa85
надо получить еще один двумерный массив (сумма - строка) »

проще, наверное, одной функцией получать сумму строк, а другой сортировать

сумма строк
Код:

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 1916064

Цитата:

Цитата ferget
проще, наверное, одной функцией получать сумму строк, а другой сортировать »

Наверно слишком поздно (час ночи), но разница для меня ускользает. :(

Serj_Pi 15-05-2012 08:57 1916141

Так, нет?
Код:

#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;
}



Время: 02:11.

Время: 02:11.
© OSzone.net 2001-