[ enaB @ 22.05.2009. 19:08 ] @
Ovo je program, problem nastaje kod preklapanja operatora *. + i - rade dobro, a kod * ove vrednosti koje pokušavam da dodelim matrici ne dodeljuju se nego stalno se ispisuje 0 za sve elemente. Gde grešim? Code: #include <stdio.h> class matrica { double **baza; int br_kolona, br_vrsta; public: int dodeli (int v, int k); int unesi (); int ispis (); matrica operator =(matrica mat); matrica operator +(matrica B); matrica operator -(matrica B); matrica operator *(matrica B); }; matrica matrica::operator =(matrica mat){ int i, j; for (i=0; i<br_vrsta; i++) for(j=0; j<br_kolona; j++) baza[i][j]=mat.baza[i][j]; return *this; } matrica matrica::operator+(matrica B) { matrica temp; temp.dodeli(br_vrsta, br_kolona); int i, j; temp=B; for (i=0; i<br_vrsta; i++) for(j=0; j<br_kolona; j++) temp.baza[i][j]=baza[i][j]+B.baza[i][j]; return temp; } matrica matrica::operator-(matrica B) { matrica temp; temp.dodeli(br_vrsta, br_kolona); int i, j; temp=B; for (i=0; i<br_vrsta; i++) for(j=0; j<br_kolona; j++) temp.baza[i][j]=baza[i][j]-B.baza[i][j]; return temp; } matrica matrica::operator *(matrica B) { matrica temp; temp.dodeli(br_vrsta, B.br_kolona); // printf ("%dx%d\n",br_vrsta, B.br_kolona ); int i, j, k; for(i=0; i<br_vrsta; i++) for(j=0; j<B.br_kolona; j++) temp.baza[i][j]=20; for(i=0; i<br_vrsta; i++) for(j=0; j<B.br_kolona; j++) for(k=0; k<br_vrsta; k++) temp.baza[i][j]=10; return temp; } int matrica::dodeli(int v, int k) { baza=new double *[v]; for(int i=0; i<v; i++) baza[i]=new double [k]; br_vrsta=v; br_kolona=k; return 1; } int matrica::unesi() { int i, j; printf ("Elementi:\n"); for (i=0; i<br_vrsta; i++) for(j=0; j<br_kolona; j++) { printf ("[%d][%d]= ", i, j); scanf ("%d", &baza[i][j]); } return 1; } int matrica::ispis() { int i, j; for (i=0; i<br_vrsta; i++) { for(j=0; j<br_kolona; j++) { printf ("%4d ", baza[i][j]); } printf ("\n"); } printf ("\n"); return 1; } int main() { int x, y, i, j, Xprve, Yprve; char sel; matrica A, B, C; printf ("Unesite broj vrsta i kolona prve matrice: "); scanf ("%d%d", &x, &y); A.dodeli(x,y); Xprve=x; Yprve=y; A.unesi(); printf ("Unesite broj vrsta i kolona druge matrice: "); scanf ("%d%d", &x, &y); B.dodeli(x,y); B.unesi(); printf ("Elementi matrica su\n"); A.ispis(); printf ("i\n\n"); B.ispis(); C.dodeli(Xprve, y); // printf ("%dx%d\n",Xprve, y ); do{ printf ("Izaberite racunsku operaciju[+,-,*]: "); scanf (" %c", &sel); switch (sel) { case '+': { if(Xprve==x && Yprve==y) { printf ("Zbir matrica je\n"); C=A+B; C.ispis(); } else printf ("Matrice nisu istih dimenzija i nije ih moguce sabirati!\n"); } break; case '-': { if(Xprve==x && Yprve==y) { printf ("Razlika matrica je\n"); C=A-B; C.ispis(); } else printf ("Matrice nisu istih dimenzija i nije ih moguce oduzimati!\n"); } break; case '*': { if(Yprve==x) { printf ("Proizvod matrica je\n"); C=A*B; C.ispis(); } else printf ("Broj kolona prve matrice mora biti jednak broju redova druge da bi se mogle mnoziti!\n"); } break; default: printf ("Greska.Niste uneli validan karakter\n"); } printf ("Ponovo[y/n]? "); scanf (" %c", &sel); if (sel == 'n' || sel=='N') break; } while(1); return 0; } |