Strona 1 z 1

[C++]Mnozenie macierzy

: 29 lis 2010, 12:38
autor: mazix2
Problem wydawaloby sie, banalny, a jednak ... Mam z tym klopot - napisalem sobie mnozenie macierzy, jednak dla podanych na sztywno macierzy (dla przykladu) wyswietla mi zle wyniki. (poprawne wyniki, jakie powienin program wypisac zamiescilem w komentarzu po wyswietlaniu).

Mecze sie z tym strasznie, moze ktos pomoze znalezc blad?

Kod: Zaznacz cały

#include <iostream>
using namespace std;

int** mulMatrixes(int r1, int c1, int r2, int c2,int **a, int **b){
      
      int **c = new int*[r1];
      for(int i=0; i<r1; i++)
          c[i] = new int[c2];

      for(int i=0;i<r1;i++)
      {
       for(int j=0;j<c2;j++)
       {
        c[i][j]=0;
        for(int k=0;k<r1;k++)
            c[i][j] += a[i][k] * b[k][j];
       }
      }

      return c;
}
     
int main(int argc, char **argv){
    
    int r1,r2,c1,c2;
    int **a, **b,**c;
    
    c1 = r2 = 3;
    r1 = 1;
    c2 = 3;
    
    a = new int*[r1];
    for(int i=0; i<r1; i++)
        a[i] = new int[c1];
        
    b = new int*[r2];
    for(int i=0; i<r2; i++)
        b[i] = new int[c2];
        
    a[0][0] = 4;
    a[0][1] = 5;
    a[0][2] = 1;
    
    b[0][0] = 1;
    b[0][1] = 0;
    b[0][2] = 0;
    b[1][0] = 0;
    b[1][1] = 1;
    b[1][2] = 0;
    b[2][0] = 1;
    b[2][1] = 1;
    b[2][2] = 1;
    
    c = mulMatrixes(r1,c1,r2,c2,a,b);
    
    cout << c[0][0] << "\n";         //5
    cout << c[0][1] << "\n";         //6
    cout << c[0][2] << "\n";         //1
    
    for(int i=0; i<c1; i++)
        delete[] a[i];
    delete[] a;
    
    for(int i=0; i<c2; i++)
        delete[] b[i];
    delete[] b;
    
    for(int i=0; i<c2; i++)
        delete[] c[i];
    delete[] c;
    
    cin.get();
    return 0;
}

Odp: [C++]Mnozenie macierzy

: 29 lis 2010, 19:45
autor: dawwin

Kod: Zaznacz cały

int** mulMatrixes(int r1, int c1, int r2, int c2,int **a, int **b){

      int **c = new int*[r1];
      for(int i=0; i<r1; i++)
          c[i] = new int[c2];

      for(int i=0;i<r1;i++)
      {
       for(int j=0;j<c2;j++)
       {
        c[i][j]=0;
        for(int k=0;k<c1;k++)
            c[i][j] += a[i][k] * b[k][j];
       }
      }

      return c;
}
Trzecia pętla powinna się wykonywać dopóki k jest mniejsze od c1 a nie r1

Odp: [C++]Mnozenie macierzy

: 29 lis 2010, 21:09
autor: mazix2
Pięknie dziękuję, juz wszytsko ok :)