ファイル作成
Posted: 2015年12月19日(土) 01:30
乱数を使用し問題ファイルの生成プログラムを作成したいのですがファイルについてですが問題ファイルは一行目に問題サイズ、二行目以降に係数a。さらに右辺に定数bを。
解ファイルは一行目に問題サイズ、二行目以降に解xをだすプログラムです。
ですが以下のプログラムではエラーになってしまいます。どこがちがうのでしょうか
#include<stdio.h>
#include<stdlib.h>
double randf(void);
void keisub(int n,double *a,double *x);
void uhenb(int n,double *a,double *x,double *b);
void houtei(FILE *fo,int n,double *a,double *x,double *b);
int main(int argc,char *argv[]){
int n;
double *a;
double *b;
double *x;
char fnam[80];
FILE *fo;
n = atoi(argv[1]);
a = (double*)malloc(sizeof(double)*n*n);
b = (double*)malloc(sizeof(double)*n);
x = (double*)malloc(sizeof(double)*n);
strcpy(fnam,argv[2]);
fo = fopen(fnam,"w");
srand(1234);
initiate(n,a,x);
multmtrx(n,a,x,b);
outsyseq(fo,n,a,x,b);
fclose( fo );
return 0;
}
double randf(void) {
double rn;
rn = 2.0*((double)rand()/RAND_MAX-0.5);
return rn;
}
void keisub(int n,double *a,double *x){
int i,j;
for(i=0;i<n;i++) {
for(j=i;j<n;j++) {
a[n*j+i] = a[n*i+j] = randf();
}
x = (int)(99*randf());
}
for(i=0;i<n;i++) {
a[n*i+i] = fabs(a[n*i+i]);
for(j=0;j<n;j++) {
if(j!=i) {
a[n*i+i] += fabs(a[n*i+j]);
}
}
}
return;
}
void uhenb(int n,double *a,double *x,double *b)
{
int i,j;
for(i=0;i<n;i++) {
b = 0.;
for(j=0;j<n;j++) {
b += a[n*i+j]*x[j];
}
}
return;
}
void_houtei(FILE *fo,int n,double *a,double *x,double *b)
{
int i,j;
fprintf(fo,"%d\n",n);
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
fprintf(fo," %10f",a[n*i+j]);
} fprintf(fo," %12f",b);
fprintf(fo,"\n");
}
for(j=0;j<n;j++) {
fprintf(fo,"_%10f",x[j]);
} fprintf(fo,"\n");
return;
}
解ファイルは一行目に問題サイズ、二行目以降に解xをだすプログラムです。
ですが以下のプログラムではエラーになってしまいます。どこがちがうのでしょうか
#include<stdio.h>
#include<stdlib.h>
double randf(void);
void keisub(int n,double *a,double *x);
void uhenb(int n,double *a,double *x,double *b);
void houtei(FILE *fo,int n,double *a,double *x,double *b);
int main(int argc,char *argv[]){
int n;
double *a;
double *b;
double *x;
char fnam[80];
FILE *fo;
n = atoi(argv[1]);
a = (double*)malloc(sizeof(double)*n*n);
b = (double*)malloc(sizeof(double)*n);
x = (double*)malloc(sizeof(double)*n);
strcpy(fnam,argv[2]);
fo = fopen(fnam,"w");
srand(1234);
initiate(n,a,x);
multmtrx(n,a,x,b);
outsyseq(fo,n,a,x,b);
fclose( fo );
return 0;
}
double randf(void) {
double rn;
rn = 2.0*((double)rand()/RAND_MAX-0.5);
return rn;
}
void keisub(int n,double *a,double *x){
int i,j;
for(i=0;i<n;i++) {
for(j=i;j<n;j++) {
a[n*j+i] = a[n*i+j] = randf();
}
x = (int)(99*randf());
}
for(i=0;i<n;i++) {
a[n*i+i] = fabs(a[n*i+i]);
for(j=0;j<n;j++) {
if(j!=i) {
a[n*i+i] += fabs(a[n*i+j]);
}
}
}
return;
}
void uhenb(int n,double *a,double *x,double *b)
{
int i,j;
for(i=0;i<n;i++) {
b = 0.;
for(j=0;j<n;j++) {
b += a[n*i+j]*x[j];
}
}
return;
}
void_houtei(FILE *fo,int n,double *a,double *x,double *b)
{
int i,j;
fprintf(fo,"%d\n",n);
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
fprintf(fo," %10f",a[n*i+j]);
} fprintf(fo," %12f",b);
fprintf(fo,"\n");
}
for(j=0;j<n;j++) {
fprintf(fo,"_%10f",x[j]);
} fprintf(fo,"\n");
return;
}