Войти

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


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

Первую часть я пыталась сделать, но выводит всегда "Номер столбца 0". Не понимаю где ошибка.
Вот что получилось:

#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) { cout<<"Nomer stolbca: "<<j<<endl; break;
}
}
if (num==-1) cout<<"Stolbcov net"<<endl;
return 0;
}

lxa85
13-05-2012, 22:03
int **a=new int *[nrow];
for (i=0; i<nrow; i++) a[i]=new int [ncol]; »
Как я понимаю - работа с указателями. Стоит ли?
Может для начала задать простой массив от 100 на 100 ? Для отладок лаб. вполне подойдет.

Средства отладки есть? Отрассировать алгоритм можете?
Чтобы не вбивать массивы каждый раз - "вшейте" несколько уже готовых наборов в программу. Если что закомментируйте, а перед сдачей - удалите лишние строки.
for (i=0; i<nrow; i++)
for (j=0; j<ncol; j++) a[i][j] = i+j+1 ;
например. Затем при выполнении задайте несколько нулей и смотрите что получится.
Так же полезно периодически распечатывать массив для сравнения "было"->"стало".

Очень похоже на нарушение границ массива, но не уверен. Сейчас упрощу.
> a = new int *[nrow]
> a = int [nrow]

А когда идут поиски, то они идут до
i,j < ncol, norw
т.е. массив получается "обрамлен" нулями.

Сделайте предварительную распечатку массива. Можно в цикле проверки. Т.е. узнать, откуда прочитан нулевой элемент, должен ли он там быть и должен ли он быть прочитан.

ferget
13-05-2012, 22:53
код работает и выводит номер столбца

тут

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


переменная num не меняет значения и поэтому постоянно выводит "Stolbcov net"

и еще, в данной задаче не принципиально, но лучше выделенную память освобождать

for (i = 0; i < nrow; i++)
delete[] a[i];
delete[] a;




© OSzone.net 2001-2012