Pomoc w projekcie, mnożenie i dodawanie macierzy.

0

Witam! Mam do napisania program w którym zdefiniuje dwie klasy macierzy i zrealizuje ich dodawanie mnożenie z wykorzystaniem "funkcji języka" które mam zamieszczać w programie na poszczególne oceny. Jestem początkującym "programistą" dlatego możliwe, że będe miał pare pytań i problemów z tym projektem. Mam nadzieje, że będę mógł liczyć na jakąś pomoc w tym temacie. Jak wybrałem zły dział to z góry przepraszam.

Na początku napisałem jedną klase "M3" w której zamieściłem metode do wypełniania przez użytkownika macierzy(tablicy dwuwymiarowej) oraz przeciązyłem operator "<<". No i na tym etapie stanąłem, ponieważ program sie kompiluje ale nie wyświetla mi elementów macierzy. Dostaje na ekranie pierwszy wiersz wypełniony trzema liczbami "-9.25596e+061" Mógłby ktoś wskazać co może być źle ?

Poniżej listing :

     #include <iostream>
#include <string> 

using namespace std;

 class M3 
 {
 public:
 double macierz[3][3]; 

void load_elements();

friend ostream & operator << (ostream &, M3 );
 };

void M3::load_elements()
 {
    double a,b,c,d,e,f,g,h,i ;
      cout << "Podaj elementy macierzy";
        cin >> a >> b >> c >> d >> e >> f >> g >> h >> i ; 
         double macierz[3][3]= {{a,b,c},{d,e,f},{g,h,i}};

}

ostream & operator << (ostream & wyjscie, M3 mx)
    {
        for(int n=0;n<3;n++)
           {wyjscie << "|" ;
            for(int m=0;m<3;m++)
            wyjscie << mx.macierz[3][3] << '\t' ;
                wyjscie << "|" << '\n' ;
                return wyjscie;
        }

}

int main()

{
    M3 mat;
    mat.load_elements();
    cout << mat;

    system("pause");
} 
1

Musisz uważać, dla macierzy powyżej 26 elementów skończy Ci się alfabet.

Funkcja load_elements jest bez sensu. Zrób to normalnie w pętli. Poza tym, teraz tworzysz zmienną lokalną, która natychmiast przestaje istnieć. Składowa macierz składa się cały czas z różnych nieokreślonych wartości.

0

Hmm nie bardzo wiem jak zrobić to wypełnianie przez użytkownika pętlą ale przerobiłem tą funkcje na coś takiego, żeby sprawdzic czy działa i niestety dalej jest ten sam problem co wczesniej.

void M3::load_elements()
 {

    double macierz[3][3];

           for(int i=0; i<3;i++)
            for(int j=0;j<3;j++)
            {
                macierz[i][j]=2;

                 }
1

Bo ten kod niewiele się różni pod względem sensu. Mianowicie w dalszym ciągu jest go pozbawiony.

Skoro Twoja klasa M3 ma zmienną składową macierz to po co tworzysz w tej funkcji zmienną lokalną i do niej wpisujesz te wartości? Wywal tę definicję double macierz[3][3]; z funkcji load_elements - wtedy będziesz operować na prawidłowej zmiennej macierz.

Jak zrobić wypełnienie przez użytkownika? Tak samo! zamiast przypisania 2 daj tam wczytanie z cin.

Dlaczego po prostu nie nauczysz się języka w którym chcesz pisać? I to nie jest żadna złośliwość z mojej strony - to naprawdę oszczędzi Ci problemów...

0

Teraz to zrozumiałem, dzięki za pomoc. Właśnie staram się uczyć tego języka ale wiadomo, że praktyka a znanie składni i definicji to trochę inna bajka dlatego staram się pytać bardziej doświadczonych. Biorę się dalej za pisanie i może coś mi sie uda sensownego stworzyć.

Hmm niestety w dalszym ciągu tego nie rozumiem albo robię coś źle bo dalej nie wyświetla mi właściwych elementów tablicy :
Nawet bez wczytywania liczb z klawiatury, przypisując jakąś liczbę do elementów dalej jest to samo...

 #include <iostream>
#include <string> 

using namespace std;

 class M3 
 {
 public:

     double macierz[3][3];

  void load();

friend ostream & operator << (ostream &, M3 );
 };

void M3::load()
 {

for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
         { 
             macierz[i][j]= 3;
}
}
}

ostream & operator << (ostream & wyjscie, M3 mac)
    {
        for(int n=0;n<3;n++)
           {wyjscie << "|" ;
            for(int m=0;m<3;m++)
                wyjscie << mac.macierz[3][3] << '\t' ;
            wyjscie << "|" << '\n' ;}
                return wyjscie;
}

int main()

{
    M3 mat;
    mat.load();
    cout << mat;

    system("pause");
}
0

Podbijam. Jakis pomysł co jest nie tak?

0

Hmm czyli problem leży po stronie mojego kompilatora. Dzięki za pomoc.

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