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