Wynik iloczynu macierzy jest w postaci wykładniczej

0

Witam, problem polega na tym, że wynik iloczynu dwóch macierzy jest macierz o elementach w postaci wykładniczej, z dodawaniem jest ok. Proszę o pomoc, gdyż nie wiem co mam poprawić.

Kod programu:

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

using namespace std;

const int N = 10;
void czyt_dane(float A[] [N], int &n, int &m)
{

    cout << "Podaj liczbe kolumn"<<endl;
    cin>> n;
    cout << "Podaj liczbe wierszy" <<endl;
    cin >> m;

    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
    {
            cout << "Podaj element "<< i<<" "<<j<<" tablicy"<<endl;
            cin >> A[i][j];
    }
}

bool sprawdzanie_danych_suma(int n, int m, int k, int l)// sprawdzenie danych dla dodawania
{
    bool d=false;
    if (n!=k || m!=l)
    {   

    d=true;
    }
    return(d);
}
bool sprawdzanie_danych_mnozenie(int n, int m, int k, int l)//sprawdzenie danych dla mnozenia
{
    bool d=false;
    if (m==k)
    {   

    d=true;
    }
    return(d);
}

void suma_mac( float A[ ][N], float B[ ][N], int n, int m, float C[ ][N])
{

    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)

        C[i][j] = A[i][j] + B[i][j];

}

float iloczyn_mac( float A[ ][N], float B[ ][N], int n, int m, int k, int l, float D[ ][N])
{
    for(int i = 0; i < n; i++)
        for(int j = 0; j < l; j++)
        {
            D[i][j] = 0;
            for (int z =0;z<m; z++)
            {
                D[i][j] += A[i][k] * B[k][j];
            }
        }
        return 0;
}

void pisz_tabs( float C[ ][N], int n, int m)
{
    cout<<"wynik dodawania to macierz C"<<endl;
    cout<<"\n";
    for(int i = 0; i < n; i++)
    {

        for(int j = 0; j < m; j++)
        {

    cout <<C[i][j]<<" ";
        }
        cout << "\n";
    }
}

void pisz_tabi( float D[ ][N], int n, int l)
{
    cout<<"wynik mnozenia to macierz D"<<endl;
    cout<<"\n";
    for(int i = 0; i < n; i++)
    {

        for(int j = 0; j < l; j++)
        {

    cout <<D[i][j]<<" ";
        }
        cout << "\n";
    }

}

int main ()

{

int n,m,k,l;
bool d;
float A [N][N];
float B [N][N];
float C [N][N];
float D [N][N];

        czyt_dane(A,n,m);
        czyt_dane(B,k,l);
        //.................................................
        if (sprawdzanie_danych_suma (n,m,k,l) != false)
        {cout << "Zle dane dla dodawania"<<endl;
            getch();
        }
        else

        //.................................................
        if (sprawdzanie_danych_mnozenie (n,m,k,l) == false)
        {cout << "Zle dane dla mnozenia"<<endl;
            getch();
        }

        //.................................................
        suma_mac(A,B,n,m,C);
        iloczyn_mac(A,B,n,m,k,l,D);
        pisz_tabs(C,n,m);
        pisz_tabi(D,n,l);

getch();
}

Pozdro

Wpisując wszędzie liczbę 2 otrzymamy:

Podaj liczbe kolumn
2
Podaj liczbe wierszy
2
Podaj element 0 0 tablicy
2
Podaj element 0 1 tablicy
2
Podaj element 1 0 tablicy
2
Podaj element 1 1 tablicy
2
Podaj liczbe kolumn
2
Podaj liczbe wierszy
2
Podaj element 0 0 tablicy
2
Podaj element 0 1 tablicy
2
Podaj element 1 0 tablicy
2
Podaj element 1 1 tablicy
2
wynik dodawania to macierz C

4 4
4 4
wynik mnozenia to macierz D

2.30584e+016 2.30584e+016
2.30584e+016 2.30584e+016

0

W mnożeniu macierzy używasz k, a pętle robisz po z. Tak się dzieje jak używasz za dużo zmiennych o jednoliterowych nazwach. Powinieneś stworzyć klasę dla macierzy, w której byś przechowywął ją i jej wymiary. Dzięki temu łatwiej będziesz mógł przejść na dynamiczne jej tworzenie i zmniejszysz zamieszanie w parametrach funkcji (7 parametrów znaczy, że najprawdopodobniej coś spieprzyłeś w swojej koncepcji).

0

Pętlę robię po z, tak, ale to tylko licznik tak jak "i' oraz "j". Dlatego w funkcji nie deklaruje z tylko k jako rozmiar tabeli.

Nie wiem, kombinowałem już z tymi zmiennymi różnie i nie może mi nic wyjść, mógłby ktoś pomóc??

0

Panowie, poratujcie proszę :)

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