このプログラムを実行するには?

解決


ごんた君  2003-07-01 13:55:35  No: 51634  IP: [192.*.*.*]

どうしても分からなくて悩んでいます。
以下に示すプログラムをビルドしますと  debug assertion failed!という警告が出て実行することができません。
どうしてでしょうか?どなたかご教授願えませんか。
プログラミング環境はwindows vc++ 6.0です。
#include "stdafx.h"
#include <stdio.h>
#define M 4
main(int argc, char *argv[])
{
double a[M][M];
double b[M];
double c[M];
double l[M][M];
double u[M][M];
double x[M];
int i,j,k;
FILE *fp;
fp = fopen(argv[1], "r"); /* ファイルより入力行列を読み込む*/
for(i = 0; i < M; i++){
for(j = 0; j < M; j++){
fscanf(fp,"%lf",&a[i][j]);
}
fscanf(fp,"%lf",&b[i]);
}
fclose(fp);

for(i = 0; i < M; i++){ /* L行列、U行列を1と0で初期化*/
for(j = 0; j < M; j++){
u[i][j] = 0;
if(i == j)
l[i][j] = 1;
else
l[i][j] = 0;
}
}
for(i = 0; i < M; i++){
for(j = i; j < M; j++){ /* U行列の生成*/
u[i][j] = a[i][j];
for(k = 0; k < i; k++){
u[i][j] -= u[k][j] * l[i][k];
}
}
for(j = i+1; j < M; j++){ /* L行列の生成*/
l[j][i] = a[j][i];
for(k = 0; k < i; k++){
l[j][i] -= u[k][i] * l[j][k];
}
l[j][i] /= u[i][i];
}
}

for(i = 0; i < M; i++){ /* c行列の生成*/
c[i] = b[i];
for(j = 0; j < i; j++){
c[i] -= l[i][j] * c[j];
}
}
for(i = M-1; i >= 0; i--){ /* x行列の生成*/
x[i] = c[i];
for(j = M-1; j > i; j--){
x[i] -= u[i][j] * x[j];
}
x[i] /= u[i][i];
}
printf("入力行列\n"); /* 入力行列の出力*/
for(i = 0; i < M; i++){
for(j = 0; j < M; j++){
printf("%10.5lf ",a[i][j]);
}
printf("%10.5lf\n",b[i]);
}
printf("\nL行列\n"); /* L行列の出力*/
for(i = 0; i < M; i++){
for(j = 0; j < M; j++){
printf("%10.5lf ",l[i][j]);
}
printf("\n");
}
printf("\nU行列\n"); /* U行列の出力*/
for(i = 0; i < M; i++){
for(j = 0; j < M; j++){
printf("%10.5lf ",u[i][j]);
}
printf("\n");
}
printf("\n");
for(i = 0; i < M; i++){ /* 解の出力*/
printf("x%d = %10.5lf\n",i,x[i]);
}
}

編集 削除
YuO  2003-07-01 14:11:49  No: 51635  IP: [192.*.*.*]

> 以下に示すプログラムをビルドしますと  debug assertion failed!という警告が出て実行することができません。

それは既に実行している状態のはずです。
単にassertの引数に偽となる式を渡したときに表示される文字列ですから。


> どうしてでしょうか?どなたかご教授願えませんか。

CRT関数の引数が正しくなかったりするときにassertで引っかかります。
一旦retryでデバッグ状態にして,
コールスタックで問題となる関数が何かを調べるとよいでしょう。


あと,
> printf("%10.5lf ",a[i][j]);
printfでは,f指定子にlは先行しません。
#Lはlong doubleで先行しますが。
なので,この文は未定義の動作となります。

編集 削除
 2003-07-01 15:39:17  No: 51636  IP: [192.*.*.*]

お返事ありがとうございます。

>一旦retryでデバッグ状態にして,
すいません。この件が良く分かりませんでした。
コマンドでいうとどういったものでしょうか?
お手数おかけいたします。

編集 削除
瀬戸っぷ  2003-07-01 17:03:38  No: 51637  IP: [192.*.*.*]

…………こっちもでしたか…

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200307/03070002.txt
http://www.net24.ne.jp/~kenji/bbs/wforum.cgi?no=370&reno=no&oya=370&mode=msgview&page=0

編集 削除
ごんた君  2003-07-01 17:12:54  No: 51638  IP: [192.*.*.*]

解決しました。
有難うございました。
瀬戸っぷ様すいません。
ずっと悩んでましたから。

編集 削除
ごんた君  2003-07-01 17:13:26  No: 51639  IP: [192.*.*.*]

解決です。

編集 削除