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

Problem z programem [mnozenie macierzy]

Ostatnio zmodyfikowano 2014-03-29 00:20
Autor Wiadomość
RodzynR
Temat założony przez niniejszego użytkownika
Problem z programem [mnozenie macierzy]
» 2014-03-28 23:56:17
Potrzebuję pomocy z programem. Napisałem program który wymnaża macierze. Jednakże program źle wyświetla drugą tablicę oraz źle mnoży.
Bardzo bym był wdzięczny gdyby ktoś wychwycił błąd.

C/C++
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
    srand( time( NULL ) );
    cout << "PROGRAM MNOZENIE MACIERZY" << endl << endl << endl;
    int rozmiar = 50;
    int tab1[ rozmiar ][ rozmiar ];
    int tab2[ rozmiar ][ rozmiar ];
    int tab3[ rozmiar ][ rozmiar ];
    int wiersz1, wiersz2, kolumna1, kolumna2, i, j, k, sumamno = 0;
    do
    {
        cin.clear();
        cin.sync();
        cout << "Wprowadz rozmiar wiersza pierwszej macierzy" << endl;
        cin >> wiersz1;
        cout << "Wprowadz rozmiar kolumny pierwszej macierzy" << endl;
        cin >> kolumna1;
        cout << "Wprowadz rozmiar wiersza drugiej macierzy" << endl;
        cin >> wiersz2;
        cout << "Wprowadz rozmiar kolumny drugiej macierzy" << endl;
        cin >> kolumna2;
        cout << "***********************************************" << endl;
    }
    while( wiersz1 <= 0 or wiersz2 <= 0 or kolumna1 <= 0 or kolumna2 <= 0 or wiersz1 > rozmiar or wiersz2 > rozmiar or kolumna1 > rozmiar or kolumna2 > rozmiar );
   
    for( i = 0; i < wiersz1; i++ )
    {
        for( j = 0; j < kolumna1; j++ )
             tab1[ i ][ j ] = rand() % 10;
       
    }
    for( i = 0; i < wiersz2; i++ )
    {
        for( j = 0; j < kolumna2; j++ )
             tab2[ i ][ j ] = rand() % 10;
       
    }
    for( i = 0; i < rozmiar; i++ );
   
    {
        for( j = 0; j < rozmiar; j++ )
             tab3[ i ][ j ] = 0;
       
    }
   
    if( kolumna1 == wiersz2 )
    {
        for( i = 0; i < wiersz1; i++ )
        {
            for( j = 0; j < kolumna2; j++ )
            {
                for( k = 0; k < kolumna1; k++ )
                     sumamno += tab1[ i ][ k ] * tab2[ k ][ j ];
               
                tab3[ i ][ j ] = sumamno;
            }
        }
       
       
        cout << "Pierwsza macierz" << endl;
        for( i = 0; i < wiersz1; i++ )
        {
            {
                for( j = 0; j < kolumna1; j++ )
                     cout << tab1[ i ][ j ] << "  ";
               
            }
            cout << endl; }
        cout << "Druga macierz" << endl;
        for( i = 0; i < wiersz2; i++ )
        {
            {
                for( j = 0; j < kolumna2; j++ )
                     cout << tab2[ i ][ j ] << "  ";
               
            }
            cout << endl; }
        cout << "Macierze po wymnozeniu" << endl;
        for( i = 0; i < wiersz1; i++ )
        {
            {
                for( j = 0; j < kolumna2; j++ )
                     cout << tab3[ i ][ j ] << "  ";
               
            }
            cout << endl; }
    }
    else
         cout << "Zle wymiary macierzy" << endl;
   
}
P-107370
docentpp
» 2014-03-29 00:20:07
W tym fragmencie kodu nie zerujesz zmiennej sumamno,
i dlatego mnożenie jest nieprawidłowe.

C/C++
for( k = 0; k < kolumna1; k++ )
sumamno += tab1[ i ][ k ] * tab2[ k ][ j
     tab3[ i ][ j ] = sumamno;


powinno byc tak

C/C++
sumamno = 0;

for( k = 0; k < kolumna1; k++ )
     sumamno += tab1[ i ][ k ] * tab2[ k ][ j ];

tab3[ i ][ j ] = sumamno;
P-107372
« 1 »
  Strona 1 z 1