大学の必修科目の課題ができなくて悩んでいます(;_;)
まず乱数を生成しファイルに出力するプログラムを作成します。
ここで二つのテキストファイルに乱数を出力させました。
次にそのプログラムを実行後テキストファイルに出力された乱数を2つの2次元配列に読み込み行列の和と積を求め演算結果をファイルに出力するプログラムを作るというものです。
乱数をファイルに出力するプログラムは問題無いのですが、乱数を2次元配列に読み込んで行列演算し、結果をファイルに出力するプログラムがうまくできません。取りあえず1個目のプログラムは問題ないと思うので2個目のプログラムを書きます。
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *myfile1; FILE *myfile2; FILE *myfile3; int **array1 = (int **)malloc(sizeof(int)*100); int **array2 = (int **)malloc(sizeof(int)*100); int i,j,k,num1,num2; int wa[20][20],seki[20][20]; char line[124]; for(i=0; i<100; ++i) { array1 = (int*)malloc(sizeof(int)*100); } if((myfile1=fopen("1つ目のテキストファイル名","r"))==NULL){ fprintf(stderr,"Cannot open 1つ目のテキストファイル名\n"); return 1; } for(i=0; i<10; ++i) { for(j=0; j<10; ++j) { fgets(line,sizeof(line),myfile1); sscanf(line,"%d",&num1); array1[j] = num1; } } for(i=0; i<10; ++i) { array2 = (int*)malloc(sizeof(int)*100); } if((myfile2=fopen("二つ目のテキストファイル名","r")) == NULL){ fprintf(stderr,"Cannnot open 二つ目の乱数ファイル名\n"); return 1; } for(i=0; i<10; ++i) { for(j=0; j<10; ++j) { fgets(line,sizeof(line),myfile2); sscanf(line,"%d",&num2); array2[j] = num2; } } if((myfile3=fopen("演算結果を書き込むテキストファイル名\n") return 1; } fprintf(myfile3,"行列の和\n"); for(i=0; i<10; i++){ for(j=0; j<10; j++){ wa[j] = array[j] + array2[j]; fprintf(myfile3, "%d ",wa[j] ); } fprintf(myfile3, "\n"); fprintf(myfile3,"行列の積\n"); for(i=0; i<10; i++) { for(j=0; j<10; j++){ seki[j] = 0; for(k=0; k<10; k++) seki[j] += array1[i][k] *array2[k][j]; fprintf(myfile3,"%d",seki[i][j] );} fprintf(myfile3,"\n" ); } fclose(myfile3); fclose(myfile1); for(i=0; i<100; ++i) { free( array1[i] ); } free( array1 ); fclose(myfile2); for(i=0; i<100; ++i) { free( array2[i] ); } free( array2 ); return 0; }
直したいところは固定長の行列の生成と演算しかできないところです。malloc使用も固定長なので駄目だといわれてしまいました。
教えてもらえるような友人もいなく独りでずっと考えてたのですが
手のつけようがなかったので、手助けお願いしますm(_ _)m
年末は何かと忙しい時期なのに、申し訳ないです(T_T)