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