Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void multiply(double**,double**,double**,int,int,int);
int main()
{
int i,j,m,n,p,r;
char ch;
double **A,**B,**C;
do{
printf("Podaj wymiary pierwszej macierzy
");
scanf("%d %d",&m,&n);
printf("Podaj wymiary drugiej macierzy
");
scanf("%d %d",&r,&p);
if(n!=r) main();
A=(double**)malloc(m*sizeof(double));
for(i=0;i<m;i++)
A[i]=(double*)malloc(n*sizeof(double));
B=(double**)malloc(n*sizeof(double));
for(i=0;i<n;i++)
B[i]=(double*)malloc(p*sizeof(double));
C=(double**)malloc(m*sizeof(double));
for(i=0;i<m;i++)
C[i]=(double*)malloc(p*sizeof(double));
for(i=0;i<m;i++)
for(j=0;j<n;j++){
printf("A[%d][%d]=",i+1,j+1);
scanf("%lf",&A[i][j]);
}
for(i=0;i<n;i++)
for(j=0;j<p;j++){
printf("B[%d][%d]=",i+1,j+1);
scanf("%lf",&B[i][j]);
}
multiply(C,A,B,m,p,n);
printf("A*B=
");
for(i=0;i<m;i++){
for(j=0;j<p;j++){
printf("%.12lf %s",C[i][j]," ");
}
printf("
");
}
for(i=0;i<m;i++)
free(A[i]);
free(A);
for(i=0;i<n;i++)
free(B[i]);
free(B);
for(i=0;i<m;i++)
free(C[i]);
free(C);
ch=getch();
}
while(ch!=27);
return 0;
}
void multiply(double**C,double**A,double**B,int m,int p,int n)
{
int i,j,k;
double s;
for(i=0;i<m;i++)
for(k=0;k<p;k++){
s=0.0;
for(j=0;j<n;j++)
s+=A[i][j]*B[j][k];
C[i][k]=s;
}
}
A oto kod z zapisem wyników do pliku
(jeszcze trzeba sprawdzić czy nie ma jakichś błędów)
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void multiply(double**,double**,double**,int,int,int);
int main()
{
int i,j,m,n,p,r;
char ch;
double **A,**B,**C;
FILE *fout;
if ((fout = fopen("C:\mulmat.txt", "at"))
== NULL)
{
fprintf(stderr, "Nie mozna otworzyc pliku do dopisywania
");
return 1;
}
do{
printf("Podaj wymiary pierwszej macierzy
");
scanf("%d %d",&m,&n);
printf("Podaj wymiary drugiej macierzy
");
scanf("%d %d",&r,&p);
if(n!=r) main();
A=(double**)malloc(m*sizeof(double));
for(i=0;i<m;i++)
A[i]=(double*)malloc(n*sizeof(double));
B=(double**)malloc(n*sizeof(double));
for(i=0;i<n;i++)
B[i]=(double*)malloc(p*sizeof(double));
C=(double**)malloc(m*sizeof(double));
for(i=0;i<m;i++)
C[i]=(double*)malloc(p*sizeof(double));
for(i=0;i<m;i++)
for(j=0;j<n;j++){
printf("A[%d][%d]=",i+1,j+1);
scanf("%lf",&A[i][j]);
}
fprintf(fout,"A=
");
for(i=0;i<m;i++){
for(j=0;j<n;j++)
fprintf(fout,"%.12lf %s",A[i][j]," ");
fprintf(fout,"
");
}
for(i=0;i<n;i++)
for(j=0;j<p;j++){
printf("B[%d][%d]=",i+1,j+1);
scanf("%lf",&B[i][j]);
}
fprintf(fout,"B=
");
for(i=0;i<n;i++){
for(j=0;j<p;j++)
fprintf(fout,"%.12lf %s",B[i][j]," ");
fprintf(fout,"
");
}
multiply(C,A,B,m,p,n);
printf("A*B=
");
for(i=0;i<m;i++){
for(j=0;j<p;j++){
printf("%.12lf %s",C[i][j]," ");
}
printf("
");
}
fprintf(fout,"A*B=
");
for(i=0;i<m;i++){
for(j=0;j<p;j++){
fprintf(fout,"%.12lf %s",C[i][j]," ");
}
fprintf(fout,"
");
}
fprintf(fout,"
");
for(i=0;i<m;i++)
free(A[i]);
free(A);
for(i=0;i<n;i++)
free(B[i]);
free(B);
for(i=0;i<m;i++)
free(C[i]);
free(C);
ch=getch();
}
while(ch!=27);
fclose(fout);
return 0;
}
void multiply(double**C,double**A,double**B,int m,int p,int n)
{
int i,j,k;
double s;
for(i=0;i<m;i++)
for(k=0;k<p;k++){
s=0.0;
for(j=0;j<n;j++)
s+=A[i][j]*B[j][k];
C[i][k]=s;
}
}
Można jeszcze wszystkim liczbom całkowitym dodać modyfikator unsigned