Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Klase, dodeljivanje vrednosti problem

[es] :: C/C++ programiranje :: C/C++ za početnike :: Klase, dodeljivanje vrednosti problem

[ Pregleda: 2321 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

enaB
Beograd

Član broj: 59951
Poruke: 397
*.dynamic.sbb.rs.

ICQ: 276002814


+9 Profil

icon Klase, dodeljivanje vrednosti problem22.05.2009. u 19:08 - pre 181 meseci
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;
}
 
Odgovor na temu

enaB
Beograd

Član broj: 59951
Poruke: 397
*.dynamic.sbb.rs.

ICQ: 276002814


+9 Profil

icon Re: Klase, dodeljivanje vrednosti problem25.05.2009. u 17:17 - pre 181 meseci
E svaka vam dala....
Rešio sam problem i sam.

[Ovu poruku je menjao enaB dana 25.05.2009. u 18:29 GMT+1]
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Klase, dodeljivanje vrednosti problem25.05.2009. u 21:21 - pre 181 meseci
Meni je sve delovalo okej. Šta je bio problem?
 
Odgovor na temu

enaB
Beograd

Član broj: 59951
Poruke: 397
*.dynamic.sbb.rs.

ICQ: 276002814


+9 Profil

icon Re: Klase, dodeljivanje vrednosti problem25.05.2009. u 23:30 - pre 181 meseci
%d kod unosa za double tip :)
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.rcub.bg.ac.yu.



+9 Profil

icon Re: Klase, dodeljivanje vrednosti problem29.05.2009. u 13:38 - pre 181 meseci
Uzmi opet i vrati se malo na operatore...

operator= treba da vraća referencu na objekat

Dakle, matrica &operator=
 
Odgovor na temu

enaB
Beograd

Član broj: 59951
Poruke: 397
*.dynamic.sbb.rs.

ICQ: 276002814


+9 Profil

icon Re: Klase, dodeljivanje vrednosti problem29.05.2009. u 14:34 - pre 181 meseci
Promenio sam , hvala. Radi isto kao i bez reference :)
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Klase, dodeljivanje vrednosti problem

[ Pregleda: 2321 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.