Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Mnożenie macierzy

Ostatnio zmodyfikowano 2017-02-27 20:41
Autor Wiadomość
Maciekb
Temat założony przez niniejszego użytkownika
Mnożenie macierzy
» 2017-02-27 19:14:26
C/C++
#include <iostream>
using namespace std;
int wczytlkola()
{
    int lkol;
    cout << "Podaj liczbe kolumn A:";
    cin >> lkol;
    return lkol;
}

int wczytlwiera()
{
    int lwier;
    cout << "Podaj liczbe wierszy A:";
    cin >> lwier;
    return lwier;
}
int wczytlwierb()
{
    int lwier;
    cout << "Podaj liczbe wierszy B:";
    cin >> lwier;
    return lwier;
}

int wczytlkolb()
{
    int lkol;
    cout << "Podaj liczbe kolumn B:";
    cin >> lkol;
    return lkol;
}

double ** utworzmac( int lw, int lk )
{
    double ** m;
    m = new double *[ lw ];
    for( int j = 0; j < lw; j++ )
         m[ j ] = new double[ lk ];
   
    return m;
   
}
void wczytmac( double ** m, int lk, int lw )
{
    for( int j = 0; j < lw; j++ )
    {
        cout << "" << endl;
        for( int i = 0; i < lk; i++ )
        {
            cin >> m[ j ][ i ];
        }
    }
   
}
void wyswietlmac( double ** m, int lk, int lw )
{
    for( int j = 0; j < lw; j++ )
    {
       
        for( int i = 0; i < lk; i++ )
        {
            cout << m[ j ][ i ] << '\t';
        }
        cout << "" << endl;
    }
   
}
double ** mnozenie( double ** A, double ** B, int lka, int lwa, int lkb, int lwb )
{
    double ** W;
    if( lka != lwb )
         cout << "Zle dane!";
   
   
    W = new double *[ lwb ];
    for( int j = 0; j < lwa; j++ )
         W[ j ] = new double[ lka ];
   
    for( int j = 0; j < lwb; j++ )
    {
       
        for( int i = 0; i < lkb; i++ )
        {
            for( int m = 0; m < lwb; m++ )
            {
                W[ j ][ i ] += A[ j ][ m ] * B[ m ][ i ];
            }
        }
    }
    return W;
   
   
}
int main()
{
    int lwiea, lkola, lwieb, lkolb;
    double ** maca;
    double ** macb;
   
    lwiea = wczytlwiera();
    lkola = wczytlkola();
    lwieb = wczytlwierb();
    lkolb = wczytlkolb();
    maca = utworzmac( lwiea, lkola );
    macb = utworzmac( lwieb, lkolb );
    cout << "Wczytaj macierz A:" << endl;
    wczytmac( maca, lkola, lwiea );
    cout << "Wczytaj macierz B:" << endl;
    wczytmac( macb, lkolb, lwieb );
    cout << "Macierz A:" << endl;
    wyswietlmac( maca, lkola, lwiea );
    cout << "Macierz B:" << endl;
    wyswietlmac( macb, lkolb, lwieb );
    cout << "Macierz A*B:" << endl;
    wyswietlmac( mnozenie( maca, macb, lkola, lwiea, lkolb, lwieb ), lkolb, lwieb );
}
Program nie wylicza pierwszej kolumny począwszy od wiersza pierwszego chciałbym się zapytać dlaczego, proszę o pomoc :)
P-158323
carlosmay
» 2017-02-27 19:40:51
Debugger
P-158324
mateczek
» 2017-02-27 20:41:13
poprawione
C/C++
#include <iostream>
using namespace std;
int wczytlkola()
{
    int lkol;
    cout << "Podaj liczbe kolumn A:";
    cin >> lkol;
    return lkol;
}

int wczytlwiera()
{
    int lwier;
    cout << "Podaj liczbe wierszy A:";
    cin >> lwier;
    return lwier;
}
int wczytlwierb()
{
    int lwier;
    cout << "Podaj liczbe wierszy B:";
    cin >> lwier;
    return lwier;
}

int wczytlkolb()
{
    int lkol;
    cout << "Podaj liczbe kolumn B:";
    cin >> lkol;
    return lkol;
}

double ** utworzmac( int lw, int lk )
{
    double ** m;
    m = new double *[ lw ];
    for( int j = 0; j < lw; j++ )
         m[ j ] = new double[ lk ];
   
    return m;
   
}
void wczytmac( double ** m, int lk, int lw )
{
    for( int j = 0; j < lw; j++ )
    {
        cout << "" << endl;
        for( int i = 0; i < lk; i++ )
        {
            cin >> m[ j ][ i ];
        }
    }
   
}
void wyswietlmac( double ** m, int lk, int lw )
{
    for( int j = 0; j < lw; j++ )
    {
       
        for( int i = 0; i < lk; i++ )
        {
            cout << m[ j ][ i ] << '\t';
        }
        cout << "" << endl;
    }
   
}
double ** mnozenie( double ** A, double ** B, int lka, int lwa, int lkb, int lwb )
{
    double ** W;
    if( lka != lwb )
         cout << "Zle dane!";
   
   
    W = new double *[ lwa ];
    for( int j = 0; j < lwa; j++ )
         W[ j ] = new double[ lkb ];
   
    for( int j = 0; j < lwa; j++ )
    {
       
        for( int i = 0; i < lkb; i++ )
        {
            W[ j ][ i ] = 0;
            for( int m = 0; m < lwb; m++ )
            {
                W[ j ][ i ] += A[ j ][ m ] * B[ m ][ i ];
            }
        }
    }
    return W;
   
   
}
int main()
{
    int lwiea, lkola, lwieb, lkolb;
    double ** maca;
    double ** macb;
   
    lwiea = wczytlwiera();
    lkola = wczytlkola();
    lwieb = wczytlwierb();
    lkolb = wczytlkolb();
    maca = utworzmac( lwiea, lkola );
    macb = utworzmac( lwieb, lkolb );
    cout << "Wczytaj macierz A:" << endl;
    wczytmac( maca, lkola, lwiea );
    cout << "Wczytaj macierz B:" << endl;
    wczytmac( macb, lkolb, lwieb );
    cout << "Macierz A:" << endl;
    wyswietlmac( maca, lkola, lwiea );
    cout << "Macierz B:" << endl;
    wyswietlmac( macb, lkolb, lwieb );
    cout << "Macierz A*B:" << endl;
    wyswietlmac( mnozenie( maca, macb, lkola, lwiea, lkolb, lwieb ), lkolb, lwiea );
}
P-158326
« 1 »
  Strona 1 z 1