Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Помогите пожалуйста написать программу...


Автор: Kupullko 24.6.2015, 09:05
Всем добрый день, если не по теме извините, ребят выручите пожалуйста написал программу, а в ней ошибка, не могу понять как исправить помогите..
Вот условие:
в двумерном массиве , элементы которого целые числа сделать следующие: уплотнить массив удалив из него все нулевые строки и столбцы.
Вот что я сделал:
#include <iostream>
using namespace std;
int **creat(int &n, int &m)
{ cout « "n="; cin » n;
 cout « "m="; cin » m;
 int **t = new int *[n];
 for (int i = 0; i<n; i++) t[i] = new int[m];
 for (int i = 0; i<n; i++)
 for (int j = 0; j<m; j++)
 {cout « "t[" « i « "][" « j « "]="; cin » t[i][j];}
 return t;}

void print(int **t, int n, int m)
{ for (int i = 0; i<n; i++, cout « endl)
 for (int j = 0; j<m; j++)
  cout « t[i][j] « ";\t";}

void deleteA(int **t, int n)
{ for (int i = 0; i<n; i++) delete[]t[i];
 delete[]t;}

int main()
{ int n, m,i1,j1,k;
 int **t = creat(n, m);
 print(t, n, m);
 for (int i = 0; i<n; i++)

 {k=0;  for (int j = 0; j<m; j++) 
 if (t[i][j])==0) k++;
 if (k==m) 
  {for (int i = i1; i<n-1; i++)
    for (int j = j1; j < m - 1; j++)
     t[i][j] = t[i + 1][j + 1];
    m--;
    i--:
    print(t, n, m);}
   deleteA(t, n);
   system("pause");
   return 0;}
Ошибка: цыкл инт мэйн не провильный в нем ошибки
Спасибо вам ребят надеюсь на вашу помощь..!!!

Автор: feodorv 24.6.2015, 10:38
Откуда взялись i1 и j1???
Цитата(Kupullko @  24.6.2015,  09:05 Найти цитируемый пост)
for (int i = i1; i<n-1; i++)
    for (int j = j1; j < m - 1; j++)
     t[i][j] = t[i + 1][j + 1];

Если бы было так:
Код

for (int i1 = i; i1<n-1; i1++)
    for (int j1 = j; j1 < m - 1; j1++)
     t[i1][j1] = t[i1 + 1][j1 + 1];[/quote]
то я бы ещё понял...


И всё же. Вам сначала нужно удалить нулевые строки, потом удалить нулевые столбцы. Вы же пытаетесь сделать это как бы одновременно, что приводит к хаосу в матрице.


И когда Вы копируете нижележащую строку на текущую, не нужно отсчитывать от j, а нужно начинать с 0-го элемента (Вы же всю строку копируете, а не её часть), соответственно не нужно делать j1+1 и m-1:
Код

for (int i1 = i; i1<n-1; i1++)
    for (int j1 = 0; j1 < m; j1++)
       t[i1][j1] = t[i1+1][j1];


Добавлено через 2 минуты и 17 секунд
Цитата(Kupullko @  24.6.2015,  09:05 Найти цитируемый пост)
    m--;

Когда Вы удалили одну нулевую строку, у Вас уменьшается число строк n, а не столбцов m...

Автор: Kupullko 24.6.2015, 11:49
я исправил, и что то все равно не работает..


int main()
{    int n, m,i1,j1,k;
    int **t = creat(n, m);
    print(t, n, m);
    for (int i = 0; i<n; i++)

    {k=0;    for (int j = 0; j<m; j++)    
    if (t[i][j]==0) k++;
    if (k==m-1) 
     for (int i1 = i; i1<n-1; i1++)
                for (int j1 = j; j1 < m - 1; j1++)
                    t[i1][j1] = t[i1 + 1][j1 + 1];
                n--;
                i--;
                print(t, n, m);}
            deleteA(t, n);
            system("pause");
            return 0;}

Автор: feodorv 25.6.2015, 04:11
Цитата(Kupullko @  24.6.2015,  11:49 Найти цитируемый пост)
я исправил, и что то все равно не работает

А это?
Цитата(feodorv @  24.6.2015,  10:38 Найти цитируемый пост)
И когда Вы копируете нижележащую строку на текущую, не нужно отсчитывать от j, а нужно начинать с 0-го элемента (Вы же всю строку копируете, а не её часть), соответственно не нужно делать j1+1 и m-1:
    
for (int i1 = i; i1<n-1; i1++)
    for (int j1 = 0; j1 < m; j1++)
       t[i1][j1] = t[i1+1][j1];

???


Цитата(Kupullko @  24.6.2015,  11:49 Найти цитируемый пост)
    if (k==m-1) 

Откуда вдруг -1 появилось?

Автор: Kupullko 25.6.2015, 09:57
Все ровно не помогает:(

Автор: rudolfninja 25.6.2015, 10:10
Цитата(Kupullko @  25.6.2015,  09:57 Найти цитируемый пост)
Все ровно не помогает:( 

Покажите, что получилось (какой код) на выходе.
И, пожалуйста, используйте теги для вставки кода. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)