Witam,
piszę program na uczelnie na zaliczenie i problem jest taki że on mi działa jak go kompilje w domy w dev 4.9.9.2 a na uczyelni gdzi jest starszy to po skompilowaniu nie działa tak jak chcę.
#include <stdio.h>
double* mnozMacierz(double *tab1,double *tab2,int x,int y, int d, double* mnozona);
void wypiszMacierz(double *tab, int x, int y);
void wprowadzMacierz( double *tab, int x, int y, char a);
//###########################################################################################
int main(){
int Aw, Ak;
int Bw,Bk;
printf("Program przyjmujący i mnożący 2 macierze prostokatne\nMacierze definiowane sa przez wymiar wierszy i kolumn:");
printf("\n___________________________________________________\n");
//Określanie macierzy A
printf("\nOkreślanie macierzy A:\n\t\twierszy=");
scanf("%d",&Aw);//wiersze macierzy
printf("\n\t\tkolumny=");// kolumny macierzy
scanf("%d",&Ak);
double *A;
A = (double*) malloc(Aw*Ak*sizeof(double));
wprowadzMacierz( A, Aw,Ak,'A');
printf("\nPostać macierzy A:\n");
wypiszMacierz(A, Aw, Ak);
printf("\n___________________________________________________\n");
//Określanie macierzy B
printf("\nOkreślanie macierzy B:\n\t\twierszy=");
scanf("%d",&Bw);//wiersze macierzy
printf("\n\t\tkolumny=");// kolumny macierzy
scanf("%d",&Bk);
double *B ;
B=(double*) malloc(Bw*Bk*sizeof(double));
wprowadzMacierz( B, Bw,Bk,'B');
printf("\nPostać macierzy B:\n");
wypiszMacierz(B, Bw, Bk);
printf("\n___________________________________________________\n");
//Mnożenie macierzy
double *C;
C=(double *) malloc(Aw*Bk*sizeof(double));
double *D;
D= (double*) malloc(Bw*Ak*sizeof(double));
printf("Uzyskane wniki mnożenia macierzy:");
printf("\n A*B:\n");
if(Ak==Bw){
mnozMacierz(A,B,Aw,Bk, Ak,C);
wypiszMacierz( C, Aw, Bk);
}else printf("Nie można pomnożyć tych macierzy");
printf("\n\n B*A:\n");
if(Bk==Aw){
D=mnozMacierz(B,A,Bw,Ak, Aw,D);
wypiszMacierz(D,Bw, Ak);
}else printf("Nie można pomnożyć tych macierzy");
printf("\n___________________________________________________\n");
free(A);
free(B);
free(C);
system("PAUSE");
getchar();
return 0;
}
//################################################################################################
//
void wypiszMacierz(double *tab, int w, int k){
int i,j;
for(i=0;i<w;i++){
for(j=0;j<k;j++){
printf("%6.2lf ",*(tab+i*k+j));
}
printf("\n");
}
printf("\n");
}
double* mnozMacierz(double* tab1,double* tab2,int w,int k, int d,double* mnozona){
int i,j,l =0;
for( i=0; i<w; i++) {
for( j=0; j<k; j++){
for(l=0; l<d; l++){
*(mnozona+i*k+j) += *(tab1+i*d+l) *( *(tab2+l*k+j));
}
}
}
return mnozona;
}
void wprowadzMacierz( double *tab, int w, int k, char a){
int i,j;
for(i=0;i<w;i++){
for(j=0;j<k;j++){
printf("%C(%d,%d) = ", a, i+1,j+1);
scanf("%lf", tab+i*k+j);
}
}
}
Z tego co sam analizowałem to prolem jest przy alokacji pamięci przy:
double *C;
C=(double *) malloc(Aw*Bk*sizeof(double));
double *D;
D= (double*) malloc(Bw*Ak*sizeof(double));
Zwykłe proste mnożenie macierzy, a program myli się w alokacji.
Pozdrawiam i dziękuję z góry