mnozenie macierzy z wykorzystaniem zaprzyjaznia

0

Witam! MAm problem mam do napisania program ktory mnozy macierz i wektor z wykorzytaniem klas i zaprzyjazniania. MA on wyswietlic losowy wektor losowa macierz a nastepnie wymnorzyc je. Do tej pory napisalem ich wyswielanie ale niewem jak zrobic aby sie je wymnozyc. Prosze o pomoc i z gory dzieki.

#include <cstdlib>
#include <iostream>
#include <conio.h>

using namespace std;

class wektor{
     float wek[3];
      
public:
     wektor(float wek_tmp[3]){
	  for(int i=0;i<3;i++) 
	       wek[i]=wek_tmp[i];
     }
     friend void wyswietl(wektor a);        
};
void wyswietl(wektor a){
     cout  << a.wek[0] << "," << a.wek[1]<< "," << a.wek[2] << "\n\n" << endl;}

class macierz{
     float mac[3][3];
      
public:
     macierz(float mac_tmp[3][3]){
	  for(int i=0;i<3;i++) {
	       for (int j=0;j<3;j++){mac[i][j]=mac_tmp[i][j];}
	  }
     }
                         
     friend void wyswietl2(macierz b); 
          
};



void wyswietl2(macierz b){
     cout <<  endl;
     for(int i=0;i<3;i++) {
	  for(int j=0;j<3;j++){
	       cout << b.mac[i][j] << " ";}
	  cout << endl;
     }
}
   

int main()
{
     srand((unsigned)time( NULL));    
    
     float wek_tmp[3];
     int i;
     for(i=0;i<3;i++) {
	  wek_tmp[i]=rand()%10;
     }
     wektor a(wek_tmp);
     wyswietl(a);
    
     float mac_tmp[3][3];
     for(i=0;i<3;i++) {
	  for(int j=0;j<3;j++) {
	       mac_tmp[i][j]=rand()%10;
	  }
   
     }
     macierz b(mac_tmp);
     wyswietl2(b);
    
     system("PAUSE");
     return EXIT_SUCCESS;
}
0

Operatorem czy funkcją?

0

w c++ nie musisz nadawac funkcjim wyswietl roznych nazw.. kompilator sie domysli ktorej uzyc na podstawie innych parametrow (wektor/macierz).. patrz "overloading"

a najprosciej IMHO bedzie Ci napisac funkcje pobierajaca macierz i wektor, tworzaca macierz wynikowa, wyliczajaca jej pola i zwracajaca ja..

0

Napisałem cos takiego ale w wyniku wyskakuja mi smieci. Teraz naprawde juz nie weim co mam zrobic. Bardzo bym prosił o napisanie chciaz kawalka kodu ktory mam gdzie sdopasoawc albo jakiejs poprawki w kodzie. BArdzo mi na tym zalezy . Jeszcze raz z gory dzieki.

#include <cstdlib>
#include <iostream>
#include <conio.h>

using namespace std;

class wektor{
     float wek[3];
      
public:
     wektor(float wek_tmp[3]){
	  for(int i=0;i<3;i++) {
	       wek[i]=wek_tmp[i];
	  }
     }
             
     friend void wyswietl(wektor a);        
};
void wyswietl(wektor a){
     cout  << a.wek[0] << "," << a.wek[1]<< "," << a.wek[2] << "\n\n" << endl;}

class macierz{
     float mac[3][3];
      
public:
     macierz(float mac_tmp[3][3]){
	  for(int i=0;i<3;i++) {
	       for (int j=0;j<3;j++){mac[i][j]=mac_tmp[i][j];}
	  }
     }
                         
     friend void wyswietl2(macierz b); 
          
};



void wyswietl2(macierz b){
     cout <<  endl;
     for(int i=0;i<3;i++) {
	  for(int j=0;j<3;j++){
	       cout << b.mac[i][j] << " ";}
	  cout << endl;
     }
}
   

int main()
{
     srand((unsigned)time( NULL));

     float wek_tmp[3];
     int i;
     for(i=0;i<3;i++) {
	  wek_tmp[i]=rand()%10;
     }
     wektor a(wek_tmp);
     wyswietl(a);
    
     float mac_tmp[3][3];
     for(i=0;i<3;i++) {
	  for(int j=0;j<3;j++) {
	       mac_tmp[i][j]=rand()%10;
	  }
   
     }
     macierz b(mac_tmp);
     wyswietl2(b);
    
     {
	  float mnozenie[3][3];
	  for(int i=0;i<3;i++) {
	       for(int j=0;j<3;j++)
		    mnozenie[i][j]=mac_tmp[j][i]*wek_tmp[i];
       
	       cout << mnozenie<< endl;
	  }

     }
                    
     system("PAUSE");
     return EXIT_SUCCESS;
}
0
Truskawa napisał(a)

Napisałem cos takiego ale w wyniku wyskakuja mi smieci.

patrzac w Twoj kod:

     {
	  float mnozenie[3][3];
	  for(int i=0;i<3;i++) {
	       for(int j=0;j<3;j++)
		    mnozenie[i][j]=mac_tmp[j][i]*wek_tmp[i];
       
	       cout << mnozenie<< endl;   <----TU
	  }

to sobie wypisujesz adres tablicy 'mnozenie' kilka razy, bez bialych znakow w dodatku.. wez przewin kod lekko w gore i zobacz jak wczesniej wypisywales macierze.. czekaj, niech zgadne, tamten kodzik wczeniej moze nie Ty pisales? bo jakos nie wierze ze nagle zapomniales "jak to sie robi"..

0

Wiekszosc kodu pisalismy na laborkach przy pomocy wykladowcy i kolegow. dokonczyc za to mamy w domu. ale gdy jesetm juz sam bez niczyjej pomocy nie jestem w staie niczego sensownego napisac mino naprawde usilnych i wszelakich prob.(kilka goddzin spedzonych nad zadaniem) :-(

1 użytkowników online, w tym zalogowanych: 0, gości: 1