[C++]Сложение 2-х разреженных матриц

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by DeM56, 26 Mar 2014.

  1. DeM56

    DeM56 New Member

    Joined:
    16 May 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    В ответе везде одинаковые числа,в чем может быть проблема?
    Code:
    #include <iostream>
    using namespace std;
    int main()
    {
      int a[2][4]={0};
      int b[2][4]={0};
      int c[2][4]={0};
      int d=0,f=0,g,h,i,j;
      while (d<8)//заполнение 1 матрицы
    {
          cin>>g;
          if (g!=0)
     {
        for(i=0;i<2;i++)
       {
          for(j=0;j<4;j++)
          {
            a[i][j]=g;
          }
       }d=d+1;
     }
    }
      while (f<8)//заполнение 2 матрицы
    {
          cin>>h;
          if (h!=0)
     {
        for(i=0;i<2;i++)
      {
          for(j=0;j<4;j++)
          {
            b[i][j]=h;
          }
      }f=f+1;
     }
    }
     for(i=0;i<2;i++) //Сложение 2-х матриц в 3
      {
          for(j=0;j<4;j++)
          {
            c[i][j]=a[i][j]+b[i][j];cout<<c[i][j]<<endl;
          }
      }
    return 0;
    }
    
     
  2. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    потому что ты херню написал



    когда ты вводишь число, оно записывается во все елементы массива, естественно ввёл второе, то второе будет перезаписано поверх остальных, в итоге и получается всё одинаковое

     
  3. DeM56

    DeM56 New Member

    Joined:
    16 May 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    а как же избавляться от нулей в матрице?
     
  4. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    от каких нулей?

    rand()%10+1; - рандомное число от 1 - 10
     
  5. DeM56

    DeM56 New Member

    Joined:
    16 May 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    а если вводить из файла или c клавиатуры?
     
  6. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    PHP:
    for(i=0;i<2;i++)
     {
     for(
    j=0;j<4;j++)
     {
     
    cin>>g;
    if(
    != 0) {
     
    a[i][j]=g
    }
     }
     }
     
  7. DeM56

    DeM56 New Member

    Joined:
    16 May 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    так как массив забивался в начале программы нулями поэтому нули проходят даже если их не было в ведено
    PHP:
      int a[2][4]={0};
      
    int b[2][4]={0};
      
    int c[2][4]={0};
     
  8. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    ну и что что нулями, ты же серовно новые данные вводишь
     
  9. DeM56

    DeM56 New Member

    Joined:
    16 May 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    PHP:
    for(i=0;i<2;i++)
     {
     for(
    j=0;j<4;j++)
     {
     
    cin>>g;
    if(
    != 0) {
     
    a[i][j]=g
    }
     }
     }  
    вот что на получается
    Code:
    0
    0
    0
    1
    2
    3
    4
    5
    6
    7
    8
    0
    0
    0
    9
    10
    6
    7
    8
    1
    2
    3
    13
    15
    
    Process returned 0 (0x0)   execution time : 16.526 s
    Press any key to continue.
    Если предположить что в разреженной матрице более 500 чисел,а не равных нулю всего 16 то этот способ не подойдет.
    Думаю лучше использовать динамический массив :)
    Хотя если нам известно первоначальное количество чисел то вы правы. :)
     
    #9 DeM56, 31 Mar 2014
    Last edited: 31 Mar 2014
  10. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    И с каого перепугу оно так получаетсяя? что ты вводишь? у меня нормально всё получается, покажи вессь код
     
  11. DeM56

    DeM56 New Member

    Joined:
    16 May 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    PHP:
    #include <iostream>
    using namespace std;
    int main()
    {
      
    int a[2][4]={0};
      
    int b[2][4]={0};
      
    int c[2][4]={0};
      
    int d=0,f=0,g,h,i,j;
    for(
    i=0;i<2;i++)
       {
          for(
    j=0;j<4;j++)
          {
            
    cin>>g;
          if (
    g!=0)
          {
            
    a[i][j]=g;}
       }
     }
        for(
    i=0;i<2;i++)
      {
          for(
    j=0;j<4;j++)
          { 
    cin>>h;
          if (
    h!=0){
            
    b[i][j]=h;}
          }
      }

     for(
    i=0;i<2;i++) //Сложение 2-х матриц в 3
      
    {
          for(
    j=0;j<4;j++)
          {
            
    c[i][j]=a[i][j]+b[i][j];cout<<c[i][j]<<endl;
          }
      }
    return 
    0;
    }

    Хотя если нам известно первоначальное количество чисел то вы правы.
     
  12. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    ну нам и так известно, если нули не вводить то их не будет в матрице
     
  13. DeM56

    DeM56 New Member

    Joined:
    16 May 2010
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    хм,что-то не сходится:
    ввел 1 разреженную матрицу:
    0 1 2 0
    5 5 0 0
    ввел 2 разреженную матрицу:
    1 2 3 4
    0 0 0 0
    получил:
    1 3 5 4
    5 5 0 0
    а должно быть на выходе:
    2 4 8 9
    0 0 0 0
     
    #13 DeM56, 31 Mar 2014
    Last edited: 31 Mar 2014