Ja napisałem coś takiego ale niestety występuję błąd przy obliczaniu iloczynu macierzy. Mógłby ktoś poradzić/poprawić co jest nie tak zmienić ?
#include <stdio.h>
#include <stdlib.h>
#include <string>
void pisz_macierz(int N,FILE *strumien){
int x,a,b;
fread(&x,sizeof(int),1,strumien);
while (feof(strumien) == 0)
{
for (a=0; a<N; a++) {
for (b=0; b<N; b++){
fread(&x,sizeof(int),1,strumien);
printf("%d ",x);
}
printf("\n");
}
}
}
int mnozenie(int N,FILE *strumien1,FILE *strumien2){
int a,b,p,i,j,k;
int tab1[N][N],tab2[N][N],tab3[N][N];
fread(&a,sizeof(int),1,strumien1);
while (feof(strumien1) == 0)
{
for (i=0; i<N; i++) {
for (j=0; i<N; j++){
fread(&a,sizeof(int),1,strumien1);
tab1[i][j]=a;
}
printf("\n");
}
}
fread(&b,sizeof(int),1,strumien2);
while (feof(strumien2) == 0)
{
for (i=0; i<N; i++) {
for (j=0; i<N; j++){
fread(&b,sizeof(int),1,strumien2);
tab2[i][j]=b;
}
printf("\n");
}
}
printf("Wynik mnozenia macierzy:\n");
for (i=0; i<N; i++) {
for (j=0; i<N; j++){
p=0;
for(k=0;k<N;k++)
p=p+(tab1[i][k]*tab2[k][j]);
}
tab3[i][j]=p;
}
for (i=0; i<N; i++) {
for (j=0; i<N; j++){
printf("%d ",tab3[i][j]);
}
printf("\n");
}
}
void sprawdz_macierz(int x,int y,FILE *strumien1,FILE *strumien2){
int N,c,v;
if(x==y){
printf("Macierze maja taki sam stopien \n");
pisz_macierz(x,strumien1);
printf("\n");
pisz_macierz(y,strumien2);
printf("\n");
mnozenie(x,strumien1,strumien2);
}
else{
printf("Macierze sa rozne stopniem \n ");
}
}
int main(void)
{
char znak;
int wybor;
FILE *macierz1;
FILE *macierz2;
FILE *macierz3;
FILE *macierz4;
macierz1=fopen("m1.dat","rb"); //otwarcie strumieni
macierz2=fopen("m2.dat","rb");
macierz3=fopen("m3.dat","rb");
macierz4=fopen("m4.dat","rb");
if (macierz1 == NULL || macierz2 == NULL || macierz3 == NULL || macierz4 == NULL) //kontrola otwarcia
{
printf("Blad otwarcia pliku!\n");
return -1;
}
int a,b,c,d;
fread(&a,sizeof(int),1,macierz1); //odczytanie stopni macierzy
fread(&b,sizeof(int),1,macierz2);
fread(&c,sizeof(int),1,macierz3);
fread(&d,sizeof(int),1,macierz4);
do
{
printf(" MACIERZE \n");
printf("Wybierz co chcesz porownac:\n");
printf("1-Porowanj macierz 1 z 2\n");
printf("2-Porowanj macierz 1 z 3\n");
printf("3-Porowanj macierz 1 z 4\n");
printf("4-Porowanj macierz 2 z 3\n");
printf("5-Porowanj macierz 2 z 4\n");
printf("6-Porowanj macierz 3 z 4\n");
printf("7-Wyjscie\n");
printf("Wybierz numer: ");
scanf("%d" ,&wybor);
printf("\n");
switch (wybor)
{
case 1:
{
sprawdz_macierz(a,b,macierz1,macierz2);
}
break;
case 2:
{
sprawdz_macierz(a,c,macierz1,macierz3);
}
break;
case 3:
{
sprawdz_macierz(a,d,macierz1,macierz4);
}
break;
case 4:
{
sprawdz_macierz(b,c,macierz2,macierz3);
}
break;
case 5:
{
sprawdz_macierz(b,d,macierz2,macierz4);
}
break;
case 6:
{
sprawdz_macierz(c,d,macierz3,macierz4);
}
break;
case 7:{
return 0;
}
}
printf("\nCzy chcesz zakonczyc sprawdzanie macierzy: t/n? ");
scanf("%s" ,&znak);
system ("cls");
}
while (znak != 't');
fclose(macierz4);
fclose(macierz3);
fclose(macierz2);
fclose(macierz1);
system("Pause");
return 0;
}