【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.21298

for文でわからない所があります。
投稿者---初心者太郎(2005/06/09 12:55:41)


質問です。
次のようなプログラムの場合にはどうなるんですか?

#define N 3

double a[N][N]={{2.,1.,1.},{1.,3.,1.},{1.,1.,2.}};
double b[N]={4.,5.,4.];
double y[N];
n=N;
for(i=0;i<=n-1;i++)
{
w=b[i];
for(k=0;k<=i-1;k++)
w=w-a[i][k]*y[k];
y[i]=w
}


必要最低限のところしか書かなかったんですけど、私がわからないのはfor文のところです。
「for(k=0;k<=i-1;k++)」このfor文がわかりません。
まず「for(i=0;i<=n-1;i++)」この文は最初はi=0となりますよね?
そのあと「for(k=0;k<=i-1;k++)」この文のiに0を入れると、
「for(k=0;k<=-1;k++)」となります。
これを見てみると、k++なんだからkは0,1,2・・・という風に大きくなるはずなんですけど、k<=-1だから終わらないんですよ。
k--だったら-1,-2,・・・っていう風に小さくなってkが-1になって終わるんですけどk++だと終わらないんですよ。
しかも、a[i][k]が最初はa[0][0]になって2になると思うんですけど、もし、k=-1となったら配列にマイナスはないはずなので答えが出なくなってしまうと思うんですよ。
ここら辺がまったくわかりません。
あと、「w=w-a[i][k]*y[k]」の文のy[k]があると思うんですけどこの値はどっから出てくるんですか?
k=0でy[k]に代入すると、y[0]になりますけど、この値はどっから出るですか?
a[N][N]の場合は「{{2.,1.,1.},{1.,3.,1.},{1.,1.,2.}}」の様にちゃんと書いてあるんでわかるんですが、y[N]は全然書いてないのでわかりません。
y[N]の値はどうやったらわかるのかも教えてください。
分かりにくかったかもしれませんがよろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:for文でわからない所があります。 21299 わたしも初心者だけどさ 2005/06/09 13:39:17
<子記事> Re:for文でわからない所があります。 21300 si 2005/06/09 14:46:57
<子記事> Re:for文でわからない所があります。 21305 まきじ 2005/06/09 17:48:32


No.21299

Re:for文でわからない所があります。
投稿者---わたしも初心者だけどさ(2005/06/09 13:39:17)


>これを見てみると、k++なんだからkは0,1,2・・・という風に大きくなるはずなんですけど、k<=-1だから終わらないんですよ。

for文の二つ目は継続条件です。
二番目の式が成り立っている間for分を実行します。
i=0, k=0 の場合の二番目のfor文の継続条件は 0 <= -1 となっていて、
いきなり成り立っていません。ので、一回も実行せずにfor文を抜けます。
なにか根本的なところで勘違いしてませんか?


この投稿にコメントする

削除パスワード

No.21300

Re:for文でわからない所があります。
投稿者---si(2005/06/09 14:46:57)


>私がわからないのはfor文のところです。
>「for(k=0;k<=i-1;k++)」このfor文がわかりません。
>k++だと終わらないんですよ。

このfor文が終わらないのであれば、他に間違いがあるはずです。
i=0の時、k<=-1 は偽となり以下のfor文内ブロックは実行されません。
例えば、i が符号なし整数であれば、無限ループに陥ります。
このとき、普通のCコンパイラはエラーも警告も出しません。
その辺りを考慮して、 i < n とか k < i  と書くのが普通です。

>あと、「w=w-a[i][k]*y[k]」の文のy[k]があると思うんですけどこの値はどっから出てくるんですか?
>y[N]の値はどうやったらわかるのかも教えてください。

それは、こっちが聞きたい。

上記プログラムを私の環境で動作させると、
y[0] = 4.000000
y[1] = 1.000000
y[2] = -1.000000
と一応、結果は出ます。
y[]は0で初期化されている様ですが、これが仕様だとは思えない。

あと、配列の初期化部分に括弧の間違いがありますよ。


この投稿にコメントする

削除パスワード

No.21313

Re:for文でわからない所があります。
投稿者---RAPT(2005/06/10 00:48:53)


まぁ、字下げ整形してみたけど。

#define N 3

double a[N][N]={{2.,1.,1.},{1.,3.,1.},{1.,1.,2.}};
double b[N]={4.,5.,4.};  // ] を } に修正
double y[N];
n=N;
for(i=0;i<=n-1;i++)
{
    w=b[i];
    for(k=0;k<=i-1;k++)
        w=w-a[i][k]*y[k];
    y[i]=w;  // セミコロンを追加
}


>>私がわからないのはfor文のところです。
>>「for(k=0;k<=i-1;k++)」このfor文がわかりません。
>>k++だと終わらないんですよ。
本当ですか? 確認しましたか? どうやって確認しましたか?
もっとも、i , k の宣言が無いので、何とも言えませんが。

>>あと、「w=w-a[i][k]*y[k]」の文のy[k]があると思うんですけどこの値はどっから出てくるんですか?
>>y[N]の値はどうやったらわかるのかも教えてください。
>
>それは、こっちが聞きたい。
i == 0 のとき、for(k .. 文で実行されず、次の y[i]=w が評価され、y[0] = w = b[0] = 4. です。
i == 1 のとき、for(k .. 文で k == 0 より、w=w-a[1][0]*y[0]; となります。(以下略) 

>上記プログラムを私の環境で動作させると、
>y[0] = 4.000000
>y[1] = 1.000000
>y[2] = -1.000000
>と一応、結果は出ます。
>y[]は0で初期化されている様ですが、これが仕様だとは思えない。
初期化されていないと思います。
一応、使用前に有効値がセットされているようですが。



この投稿にコメントする

削除パスワード

No.21320

Re:for文でわからない所があります。
投稿者---si(2005/06/10 02:12:43)


si>>y[]は0で初期化されている様ですが、これが仕様だとは思えない。
初期化されていないと思います。
>一応、使用前に有効値がセットされているようですが。

恥ずかしい。
最近ボケ防止で、C してます。
もうだめかな?


この投稿にコメントする

削除パスワード

No.21305

Re:for文でわからない所があります。
投稿者---まきじ(2005/06/09 17:48:32)


>次のようなプログラムの場合にはどうなるんですか?

色々と仰ってますが、これは何をするプログラムですか?
それが、分からないと何とも言えません(^^;


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧