Cześć, za zadanie mam napisać program, który będzie mnożył dwie macierze, których wartości pobiera z jednego pliku tekstowego i wynik tworzy w innym pliku. Wszystko robie krok po kroku i zaczalem od mnozenia macierzy 3x3. Nastepnie chciałem zrobić dowolną macierz nxn. Jednakże kiedy utworzyłem funkcję z mnożeniem macierzy pojawia się problem z deklaracją tablicy, gdyż chce by była ona dynamiczna a musze od razu podać jej długość.
Oto kod:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int rowlength,collength;
int row=0,col=0;
FILE* file;
file = fopen("macierz.txt", "r");
printf("Podaj ilosc wierszy ");
scanf("%d",&rowlength);
printf("Podaj ilosc kolumn ");
scanf("%d",&collength);
int tab[rowlength][collength], tab1[rowlength][collength], tab2[3][3];
printf("Elementy w pliku\n\n");
while( fscanf( file, "%d,", &tab[row][col] ) != EOF )
{
printf("%d ", tab[row][col]);
col++;
if(col==3 && row==2) // Ten warunek == wypelnieniem calej tabeli wartoœciami z 1 macierzy.
{
printf("\n\n");
row=0;
col=0;
while( fscanf( file, "%d,", &tab1[row][col] ) != EOF )
{
printf("%d ", tab1[row][col]);
col++;
if(col==3)
{
printf("\n");
col=0;
row++;
}
}
}
if(col==3)
{
printf("\n");
col=0;
row++;
}
}
printf("\n");
fclose(file);
int i,j;
mnozeniemacierzy(tab,tab1);
FILE* file2;
file2 = fopen("wynik.txt", "w");
if(file2==NULL) printf("Nie moge otworzyc!"); //zapisanie do pliku
else
{
fprintf(file2,"Wynik to: \n");
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
fprintf(file2,"%d ", tab2[i][j]);
}
fprintf(file2,"\n");
}
fclose(file2);
}
return 0;
}
int mnozeniemacierzy(int tab[][], int tab1[][])
{
int i,j;
int tab2[3][3];
printf("Wynik mnozenia pierwszej macierzy przez druga:\n\n");
for(i=0; i<3; i++)
{
tab2[0][i] = tab[0][0]*tab1[0][i]+tab[0][1]*tab1[1][i]+tab[0][2]*tab1[2][i];
}
printf("\n");
for(i=0; i<3; i++)
{
tab2[1][i] = tab[1][0]*tab1[0][i]+tab[1][1]*tab1[1][i]+tab[1][2]*tab1[2][i];
}
printf("\n");
for(i=0; i<3; i++)
{
tab2[2][i] = tab[2][0]*tab1[0][i]+tab[2][1]*tab1[1][i]+tab[2][2]*tab1[2][i];
}
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
printf("%d ", tab2[i][j]);
}
printf("\n");
}
}