|
No,19287でUNIXのCとVisual C++.netの違いで投稿させて
いただいたIYOIYOです。
あの後ソースプログラムを作ったのですが
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define MAXSIZE_M 10
#define MAXSIZE_N 10
double m,n,x,y;
main()
{
int i,j,k,m = MAXSIZE_M,n=MAXSIZE_N ;
static double x[MAXSIZE_M+1][MAXSIZE_N+1]={
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 20.0, 10.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 20.0,12.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 20.0, 4.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 20.0, 6.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0,0.0, 0.0, 20.0, 0.0,
20.0, 0.0, 0.0, 80.0, 0.0, 0.0, 20.0,0.0, 0.0, 20.0,5.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 20.0, 6.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 20.0, 9.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 20.0, 5.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 20.0, 7.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0, 0.0, 0.0, 20.0, 4.0
};
static double y[MAXSIZE_M+1][MAXSIZE_N+1]={
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0,0.0, 0.0, 20.0, 10.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0,0.0, 0.0, 20.0, 12.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0,0.0, 0.0, 20.0, 4.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0,0.0, 0.0, 20.0, 6.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0,0.0, 0.0, 20.0,0.0,
20.0, 0.0, 0.0, 80.0, 0.0, 0.0, 20.0,0.0, 0.0, 20.0, 5.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0,0.0, 0.0, 20.0,6.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0,0.0, 0.0, 20.0,9.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0,0.0, 0.0, 20.0,5.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0,0.0, 0.0, 20.0,7.0,
20.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0,0.0, 0.0, 20.0,4.0
};
double P,K,H,R,S,Q ;
int MK=100; /*Keisan Kaisuu*/ /*after upper "double",why?*/
int KK=0;
double value, det();
value =det(m,n,x,y);
if(value==1)
printf("x[i][j];\n");
printf("KK=%d\n",KK);
for(j=0; j<n+1; j++){
for(i=0; i<m+1; i++){
printf("%6.1f",x[i][j]);
}
printf("\n");
}
printf("y[i][j];\n");
printf("KK=%d\n",KK);
for(j=0; j<n+1; j++){
for(i=0; i<m+1; i++){
printf("%6.1f",y[i][j]);
}
printf("\n");
}
}/*main end*/
double det(m,n,x,y)
double (*x)[MAXSIZE_N+1];
double (*y)[MAXSIZE_N+1];
{
int i,j,k,m = MAXSIZE_M,n=MAXSIZE_N;
int MK=100;
int KK=0;
double P,K,H,R,S,Q;
H=0.1;
K=0.05;
P=3.14159;
/*Initiation*/
for(i=1; i<m; i++){
x[i][0]=sin(P*i*H);
}
for(j=0; j<n+1; j++){
x[0][j]=0.0; /*U(0.J)=0: Kyoukai*/
x[m][j]=0.0;
}
/*Same for y[i][j]*/
for(i=1; i<m; i++){
y[i][0]=sin(P,i,H); /*U(I,0)=Initial*/
}
for(j=0; j<n+1; j++){
y[0][j]=0.0;
y[m][j]=0.0;
}
/*Calculation*/
for(k=1; k<MK+1; k++){
KK++;
/*U(I,1)*/
for(i=1; i<m; i++){
y[i][j]=x[i][j];
R=(K/H)*(K/H)*(i*H+1.0);
S=2.0*(1.0-R);
j=0;
Q=K*K*i*H*exp(-j*K);
x[i][1]=(R*(x[i+1][0]+x[i-1][0])+S*x[i][0]+ Q)/2.0;
}
/*U(I,J+1)*/
for(j=1; j<n; j++){
for(i=1; i<m; i++){
y[i][j]=x[i][j];
R=(K/H)*(K/H)*(i*H+1.0);
S=2.0*(1.0-R);
Q=K*K*i*H*exp(-j*K);
x[i][j+1]=R*(x[i+1][j]+x[i-1][j])+S*x[i][j]-x[i][j-1]+Q;
}
}
} /* k */
return (1);
}
Visual C++.netでの結果
(50): error C2660: 'det' : 関数に 4 個の引数を指定できません。
(76): error C2078: 初期化子の数が多すぎます。
(76): error C2199: 構文エラー : グローバル スコープで 'double (' が見つかりました。
(76): fatal error C1004: 予期しない EOF が見つかりました。
UNIX Cでの結果
cc-1174 cc: WARNING File = rea.c Line=13
The variable “k” was declared but never referenced.
int、i、j、k、m=MAXSIZE_M, n=MAXSIZE_N;
cc-1174 cc :WARNING File = rea.c Line=47
The variable “P” was declared but never referenced.
double P,K,H,R,S,Q;
cc-1409 cc WARNING File =rea.c Line=82
Parameter ”m” is hidden by a adeclaration in the function
int i, j ,k m=MAXSIZE_M, n=MAXSIZE_N;
cc-1020 cc: ERROR File=rea.c,Line=91
The identifier “KP” is undefined
P=KP*K(H*H);
……他
という結果の違いがでました。
これは,以前に教えていただいた警告レベルやコンパイラオプション
が違うために起きたことなのでしょうか?それとも別のなにかでしょうか?
(UNIXでは,ファイル名を入力して実行できたのですが)
教えていただけないでしょうか?又上記の改良点もございましたら
あげてもらえれば,幸いです。力を貸してくださいよろしくお願いしますm(__)m
|