行列を三角化するプログラムで、うまくいきません。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Ten

行列を三角化するプログラムで、うまくいきません。

#1

投稿記事 by Ten » 14年前

下のようなプログラムを作ったのですがうまくいきません、どこがおかしいのか教えてください。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
int i,j,k;
double x,y,r,p,b;
double martrix[3][4];

srand((unsigned)time(NULL));
for(i=0;i<=3;i++){
for(j=0;j<=4;j++)
x= rand()%21;
y= x/10 -1;
martrix[j]=y;
}

for(k=0;k<=3;k++){
for(j=0;j<=k;i++){
for(i=0;i<=3;i++){
r=martrix[k]/martrix[k][k];
p=martrix[j]/r*martrix[k][j];
b=martrix[3]/r*martrix[k][3];


martrix[j]=p;
martrix[3]=b;
}
}
}
return 0;
}

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: 行列を三角化するプログラムで、うまくいきません。

#2

投稿記事 by bitter_fox » 14年前

コード:

srand((unsigned)time(NULL));
for(i=0;i<=3;i++)
{
	for(j=0;j<=4;j++)
		x= rand()%21;

	y= x/10 -1;
	martrix[i][j]=y;
}
問題点1:二重目のforが単文のforになっている。
問題点2:i<=3などにした場合、配列の範囲外を参照することになる。

以上の二つです。

それから、フォーラムルールに従った投稿を心がけてください、でないと解答がつかない場合がありますよ。

Ten

Re: 行列を三角化するプログラムで、うまくいきません。

#3

投稿記事 by Ten » 14年前

ありがとうございます。
それと、
for(k=0;k<=3;k++){
for(j=0;j<=k;i++){
for(i=0;i<=3;i++){
r=martrix[k]/martrix[k][k];
p=martrix[j]/r*martrix[k][j];
b=martrix[3]/r*martrix[k][3];


martrix[j]=p;
martrix[3]=b;
}
}
}

の部分もおかしいと思うのですが、そこはどうなのでしようか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 行列を三角化するプログラムで、うまくいきません。

#4

投稿記事 by softya(ソフト屋) » 14年前

マルチポストしていませんか?
http://detail.chiebukuro.yahoo.co.jp/qa ... 1351388313
規約違反ですので、フォーラムルールの再確認をお願いします。
相互リンクをすれば、規約上OKです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
パコネコ
記事: 139
登録日時: 14年前
住所: 大阪

Re: 行列を三角化するプログラムで、うまくいきません。

#5

投稿記事 by パコネコ » 14年前

ちなみに何を持って失敗となされたのでしょうか?
printfなどのプログラムの確認も最後に必要だと思うのですが…

コード:

for(k=0;k<3;k++){
	for(i=0;i<4;i++){
		printf("martrix[%d][%d]=%lf\t",k,i,martrixt[k][i]);
	}
	printf("\n");
}
例えばこんな感じ?

===
あれ?L(エル)が1(イチ)に見える・・・
ニャン!!\(゜ロ\)(/ロ゜)/

アバター
パコネコ
記事: 139
登録日時: 14年前
住所: 大阪

Re: 行列を三角化するプログラムで、うまくいきません。

#6

投稿記事 by パコネコ » 14年前

ごめんなさい。
よく見たらバグありました。

コード:

for(k=0;k<=3;k++){
	for(j=0;j<=k;i++){
		for(i=0;i<=3;i++){
			r=martrix[i][k]/martrix[k][k];
			p=martrix[i][j]/r*martrix[k][j];
			b=martrix[i][3]/r*martrix[k][3];

			martrix[i][j]=p;
			martrix[i][3]=b;
		}
	}
}
martrix[3][4]
に対して、iの値が最大いくつになったのかみてみればわかるかもしれません。
ニャン!!\(゜ロ\)(/ロ゜)/


閉鎖

“C言語何でも質問掲示板” へ戻る