Program do operacji na macierzach

0

niedawno pisalem post odnosnie macierzy, jednak nikt nie pomogl. Teraz prawie sam do wszystkiego doszedlem jednak mam problem. Tu mam tylko macierz 2x2 a musze miec tez inne rozmiary, moglby mi ktos podpowiedziec jak przerobic kod, aby obslugiwal tez inne rozmiary?

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

using namespace std;

class macierz
{
private:
    int pier[2];
    int dru[2];
public:
    macierz operator+( macierz a);//prze³adowanie +
    macierz operator-( macierz a);//prze³adowanie -
    macierz operator*( macierz a);//prze³adowanie *
    macierz operator*( int a);//prze³adowanie * przez liczbe zeczywist¹
    macierz operator/(int a);//prze³adowanie ~ negacja
    friend ostream & operator<< (ostream &, macierz &);
    friend istream & operator>>(istream &, macierz &);
};
int i;

macierz macierz::operator+(macierz a)//prze³adowanie +

{

    macierz suma;
    for(i=0; i<2; i++)
    {
        suma.pier[i] = pier[i] + a.pier[i];
        suma.dru[i] = dru[i] + a.dru[i];
    }
    return suma;

}
macierz macierz::operator-(macierz a)//prze³adowanie +

{

    macierz suma;
    for(i=0; i<2; i++)
    {
        suma.pier[i] = pier[i] - a.pier[i];
        suma.dru[i] = dru[i] - a.dru[i];
    }
    return suma;

}
macierz macierz::operator*(macierz a)//prze³adowanie +
{
    macierz suma;

    suma.pier[0] = pier[0] * a.pier[0] + pier[1] * a.dru[0];
    suma.dru[0] = dru[0] * a.pier[0] + dru[1] * a.dru[0];
    suma.pier[1] = pier[0] * a.pier[1] + pier[1] * a.dru[1];
    suma.dru[1] = dru[0] * a.pier[1] + dru[1] * a.dru[1];
    return suma;
}
macierz macierz::operator*(int a)//prze³adowanie +
{
    macierz suma;
    for(i=0; i<2; i++)
    {
        suma.pier[i] = pier[i] * a;
        suma.dru[i] = dru[i] * a;
    }
    return suma;

}

macierz macierz::operator/(int a)//prze³adowanie +
{
    macierz suma;

    a= pier[0] * dru[1] + pier[1] * dru[0];

    suma.pier[0] = dru[1]*(1 / a) ;
    suma.dru[0] = pier[1] * -1*(1 / a);
    suma.pier[1] = dru[0] *-1*(1 / a);
    suma.dru[1] = pier[0]*(1 / a);
    return suma;
}


macierz pokaz;
ostream & operator<< (ostream & oko, macierz & pokaz)   //przeci¹¿ony operator strumienia wyjscia
{

    oko << " " << pokaz.pier[0] << " " << pokaz.pier[1]<< " ";
    oko <<endl<< " " << pokaz.dru[0] << " " << pokaz.dru[1]<< " ";
    return oko;

}

istream & operator>>( istream & klik,macierz & pokaz)//przeci¹¿ony operator strumienia wejœcia
{
    cout<<" pierwsza kolumna: "<<endl ;
    klik>>pokaz.pier[0] >>pokaz.dru[0] ;
    cout<<" druga kolumna : "<<endl ;
    klik>>pokaz.pier[1]>>pokaz.dru[1] ;
    return klik;
}

int main(int argc, char *argv[])
{
    int b=0,li=0;
    int q=0,w=1;
    macierz pierwsza,druga,wynik;
    for(; q!=w;)
    {
        system("cls");
        cout<<"\n\n************ MENU GLUWNE **************\n\n\n";

        cout<<"wybierz operacje jakiej chcesz dokonaæ na macierzach\n\n";
        cout<<"1 dodawanie\n2 odejmowanie\n3 mnozenie\n4 mnozenie przez liczbe rzeczywista\n5 odwrotnosc\n";
        cout<<"6 zakoncz program\n";
        cin>>b;
        switch (b)
        {
        case 1:
            system("cls");
            cout<<"KAZDY ELEMENT MACIERZY PROSZE ZATWIERDZIC KLAWISZEM\n\n";
            cout<<"                    E N T E R                          ";
            cout<<"\n\n\n";
            cout<<"\npodaj parametry pierwszej macierzy\n";
            cin>>pierwsza;
            cout<<"\npodaj parametry drugiej macierzy\n";
            cin>>druga;

            cout<<"\n\ntwoja operaca to : \n\n"<<pierwsza<<"\n\n + \n\n"<<druga<<endl;
            wynik = pierwsza * druga;
            cout<<"wynik twojej operacji : \n\n"<<wynik<<endl;
            getch();
            break;

        case 2:
            system("cls");
            cout<<"KAZDY ELEMENT MACIERZY PROSZE ZATWIERDZIC KLAWISZEM\n\n";
            cout<<"                    E N T E R                          ";
            cout<<"\n\n\n";
            cout<<"\npodaj parametry pierwszej macierzy\n";
            cin>>pierwsza;
            cout<<"\npodaj parametry drugiej liczby\n";
            cin>>druga;

            cout<<"\n\ntwoja operaca to : \n\n"<<pierwsza<<"\n\n - \n\n"<<druga<<endl;
            wynik = pierwsza - druga;
            cout<<"wynik twojej operacji : \n\n"<<wynik<<endl;
            getch();
            break;

        case 3:
            system("cls");
            cout<<"KAZDY ELEMENT MACIERZY PROSZE ZATWIERDZIC KLAWISZEM\n\n";
            cout<<"                    E N T E R                          ";
            cout<<"\n\n\n";
            cout<<"\npodaj parametry pierwszej macierzy\n";
            cin>>pierwsza;
            cout<<"\npodaj parametry drugiej macierzy\n";
            cin>>druga;

            cout<<"\n\ntwoja operaca to : \n\n"<<pierwsza<<"\n\n * \n\n"<<druga<<endl;
            wynik = pierwsza * druga;
            cout<<"wynik twojej operacji : \n\n"<<wynik<<endl;
            getch();
            break;

        case 4:
            system("cls");
            cout<<"KAZDY ELEMENT MACIERZY PROSZE ZATWIERDZIC KLAWISZEM\n\n";
            cout<<"                    E N T E R                          ";
            cout<<"\n\n\n";
            cout<<"\npodaj parametry macierzy\n";
            cin>>pierwsza;
            cout<<"\npodaj liczbe rzeczywista\n";
            cin>>li;

            cout<<"\n\ntwoja operaca to : \n\n"<<pierwsza<<"\n\n - \n\n"<<druga<<endl;
            wynik = pierwsza * li;
            cout<<"wynik twojej operacji : \n\n"<<wynik<<endl;
            getch();
            break;

        case 5:
            system("cls");
            cout<<"KAZDY ELEMENT MACIERZY PROSZE ZATWIERDZIC KLAWISZEM\n\n";
            cout<<"                    E N T E R                          ";
            cout<<"\n\n\n";
            cout<<"\npodaj parametry macierzy\n";
            cin>>pierwsza;

            cout<<"\n\ntwoja operaca to odwracanie macierzy : \n\n"<<pierwsza<<endl;
            wynik = pierwsza / 1 ;
            getch();
            break;

        case 6:
            w=0;
            break;

        default:
            cout<<"zla opcja sprobuj ponownie";
            getch();
            break;
        }// for q w

    }

    system("PAUSE");
    return EXIT_SUCCESS;
}
0

http://h2o.blox.pl/2011/11/Tworzenie-dynamicznych-tablic-dwuwymiarowych-C.html
Do tego oczywiście musisz przechowywać wielkość macierzy i sprawdzać czy wielkości obu macierzy się zgadzają ze sobą przed rozpoczęciem wykonywania mnożenia/dodawania etc.
Przy przeładowaniu każdego operatora niezbędna będzie pętla w pętli

Jeżeli nie potrzebujesz się jeszcze pakować w tablice dynamiczne możesz utworzyć "normalną" tablicę np. 20x20 i do 20 ograniczyć dozwoloną wielkość

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