Data_Structure/作業/老師解答/unit1/matrix-product-file-v1.cpp

109 lines
2.5 KiB
C++
Raw Normal View History

2025-01-20 21:25:33 +08:00
/*
Program: matrix-product-file-v1.c (Report comments/bugs to chikh@yuntech.edu.tw)
Function: <EFBFBD>q<EFBFBD>ɮ<EFBFBD>Ū<EFBFBD>J<EFBFBD>x<EFBFBD>}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>è̩һݺ<EFBFBD><EFBFBD>װt<EFBFBD>m<EFBFBD>O<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><EFBFBD>B<EFBFBD>x<EFBFBD>s<EFBFBD>x<EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD>A<EFBFBD>A<EFBFBD>i<EFBFBD><EFBFBD>k<EFBFBD>B<EFBFBD><EFBFBD>
Notes:
1) <EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>i<EFBFBD><EFBFBD> matrixData1.txt<EFBFBD>BmatrixData2.txt<EFBFBD>BmatrixData3.txt <EFBFBD><EFBFBD> matrixData4.txt
2) <EFBFBD>ʺA<EFBFBD>t<EFBFBD>m<EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>}<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ѩ<EFBFBD><EFBFBD>ĥ|<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƲߡG<EFBFBD>uC<EFBFBD>y<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>лP<EFBFBD>r<EFBFBD><EFBFBD><EFBFBD>v<EFBFBD>Ҹ<EFBFBD>PPT<EFBFBD>ɮײ<EFBFBD>64--68<EFBFBD><EFBFBD>
*/
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int row, col;
int **data; /* <20>N<EFBFBD>Ω<EFBFBD><CEA9><EFBFBD><EFBFBD>ܤG<DCA4><47><EFBFBD>}<7D>C */
} matrix;
int **readElements(FILE *filePtr, int row, int col)
{
int **data = (int**)malloc(row*sizeof(int*));
int i, j, value;
for (i = 0; i < row; i++) {
data[i] = (int*)malloc(col*sizeof(int));
for (j = 0; j < col; j++) {
fscanf(filePtr," %d",&value);
data[i][j] = value;
}
}
return data;
}
int init(FILE *f, char *idA, matrix *A, char *idB, matrix *B) //<2F><><EFBFBD>l<EFBFBD><6C>A<EFBFBD>PB<50>x<EFBFBD>}
{
fscanf(f," %c %d %d %c %d %d",idA,&A->row,&A->col,idB,&B->row,&B->col);
A->data = readElements(f,A->row,A->col);
B->data = readElements(f,B->row,B->col);
return 0;
}
int multiply(FILE *f, matrix *A, matrix *B, matrix *C)
{
int i, j, k, sum;
if (A->col != B->row) {
printf("<EFBFBD>x<EFBFBD>}<7D><><EFBFBD>פ<EFBFBD><D7A4>۲šA<C5A1>L<EFBFBD>k<EFBFBD>B<EFBFBD><42><EFBFBD>I");
return -1;
}
printf("<EFBFBD><EFBFBD><EFBFBD>n<EFBFBD><EFBFBD><EFBFBD>GC_%dx%d\n",A->row,B->col);
fprintf(f,"\n--- Output ---\nC_%dx%d\n",A->row,B->col);
C->data = (int**)malloc(A->row*sizeof(int*));
for (i = 0; i < A->row; i++) {
C->data[i] = (int*)malloc(B->col*sizeof(int));
for (j = 0; j < B->col; j++) {
for (k = sum = 0; k < A->col; k++)
sum += (A->data[i][k] * B->data[k][j]);
C->data[i][j] = sum;
printf("%d\t",C->data[i][j]);
fprintf(f,"%d\t",C->data[i][j]);
}
printf("\n");
fprintf(f,"\n");
}
C->row = A->row;
C->col = B->col;
return 0;
}
void show(char id, matrix *m)
{
int i, j;
printf("%c_%dx%d = \n",id,m->row,m->col);
for (i = 0; i < m->row; i++) {
for (j = 0; j < m->col; j++)
printf("%d\t",m->data[i][j]);
printf("\n");
}
printf("\n");
}
int main()
{
char fileName[20], idA, idB;
matrix A, B, C;
FILE *f;
printf("*** <20>x<EFBFBD>}<7D>ۭ<EFBFBD><DBAD>B<EFBFBD><42><EFBFBD>{<7B><> ***\n\n<EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>ɦW ==> ");
scanf("%s",fileName);
if ((f = fopen(fileName,"r+")) == NULL) {
printf("\a%s<>ɮפ<C9AE><D7A4>s<EFBFBD>b<EFBFBD>I\n",fileName);
return 1;
}
init(f,&idA,&A,&idB,&B);
show(idA,&A);
show(idB,&B);
freopen(fileName,"a+",f); //<2F><><EFBFBD>s<EFBFBD>}<7D>ɡA<C9A1>N<EFBFBD>H<EFBFBD><48><EFBFBD>[(append)<29>Ҧ<EFBFBD><D2A6>s<EFBFBD>W<EFBFBD><57><EFBFBD>ơA<C6A1>קK<D7A7>ɮ׭즳<D7AD><ECA6B3><EFBFBD><EFBFBD><EFBFBD>ƳQ<C6B3>мg<D0BC><67>
multiply(f,&A,&B,&C); //<2F><><EFBFBD><EFBFBD>k<EFBFBD>B<EFBFBD><42><EFBFBD>L<EFBFBD>{<7B><><EFBFBD>A<EFBFBD>N<EFBFBD><EFBFBD>G<EFBFBD><47><EFBFBD>ܩ<EFBFBD><DCA9>ù<EFBFBD><C3B9><EFBFBD><EFBFBD>x<EFBFBD>s<EFBFBD><73><EFBFBD>ɮפ<C9AE>
fclose(f);
return 0;
}