Компьютерный форум 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=234575)

Luda-tin 13-05-2012 21:32 1915328

Помогите исправить (двумерный массив) на С++
 
Помогите подделать программу.
Задание: 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 1915359

Цитата:

Цитата Luda-tin
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 1915396

код работает и выводит номер столбца

тут
Код:

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;



Время: 18:50.

Время: 18:50.
© OSzone.net 2001-