ページ 11

直角三角形の値の求め方

Posted: 2010年11月25日(木) 08:44
by ヒロ
a,b,cを総当たりで調べるそうです。
一応プログラム自体は動いたのですが結果が正しくありませんでした。
どなたか間違い箇所などを指摘してください。
お願いします><

6 #include<stdio.h>
7 int main( void ){
8 int i, a, b, c, ab, aa[30], bb[30], cc[30];
9 for(a=1; a<=30; a++){
10 for(b=1; b<=30; b++){
11 for(c=1; c<=30; c++){
12 ab=a*a+b*b;
13 if(ab=c*c){
14 aa[c-1]=a;
15 bb[c-1]=b;
16 cc[c-1]=c;
17 }
18 else{}
19 }
20 }
21 }
22 for(i=0; i<30; i++){
23 printf("%d,%d,%d\n", aa, bb, cc);
24 }
25 return 0;
26 }

Re: 直角三角形の値の求め方

Posted: 2010年11月25日(木) 09:02
by non
13 if(ab=c*c){
= は代入であって、比較ではありません。

Re: 直角三角形の値の求め方

Posted: 2010年11月25日(木) 13:52
by さかまき
C=25 の時
7,24と15,20の2つの組み合わせがありますが
C=25の値で配列にセットすると1組しかセットできません。

Re: 直角三角形の値の求め方

Posted: 2010年11月26日(金) 00:10
by box
そもそも、cの値を配列の添字に使うという発想が間違い。
せっかく求めた(7,24,25)という解を(15,20,25)で上書きしてるんだから。

Re: 直角三角形の値の求め方

Posted: 2010年11月27日(土) 09:29
by naohiro19
わかりづらいので字下げした形で掲載します。

コード:

#include<stdio.h>

int main( void ){
	int i, a, b, c, ab, aa[30], bb[30], cc[30];
	for(a=1; a<=30; a++){
		for(b=1; b<=30; b++){
			for(c=1; c<=30; c++){
				ab=a*a+b*b;
				if(ab=c*c){ //ココが違う
					aa[c-1]=a;
					bb[c-1]=b;
					cc[c-1]=c;
				}
				else{}
			}
		}
	}
	for(i=0; i<30; i++){
		printf("%d,%d,%d\n", aa[i], bb[i], cc[i]);
	}
	return 0;
}

Re: 直角三角形の値の求め方

Posted: 2010年11月27日(土) 12:07
by Tatu
この問題、配列で記憶して後でまとめて書くこともできますが
そのようにする意味はあるのでしょうか?
a,b,cが条件を満たしていたらその場で出力してはいけないのでしょうか?

Re: 直角三角形の値の求め方

Posted: 2010年11月27日(土) 22:13
by box
Tatu さんが書きました:そのようにする意味はあるのでしょうか?
もちろん、何も意味はないですね。まとめて出力するため「だけ」に、配列に入れているのですから。
Tatu さんが書きました:a,b,cが条件を満たしていたらその場で出力してはいけないのでしょうか?
まあ、ふつうはそうするでしょうね。

Re: 直角三角形の値の求め方

Posted: 2010年11月27日(土) 22:19
by Ultimate
Tatuさんが言っているようにわざわざ値を配列に保存して後でまとめて表示させる意味はないのではないでしょうか?
普通に値が出た時点で出力したほうがソースも見やすくてコンパクトになりますよ。
また、if(ab=c*c)についてですが、=が単体だと同等という意味ではなく、代入演算子になってしまいます。
同等のものを表す時は=を二つ並べてif(ab==c*c)とします。
下のソースでうまくいくはずです。

コード:

#include<stdio.h>
 
int main( void ){
    int i, a, b, c, ab;
    for(a=1; a<=30; a++){
        for(b=1; b<=30; b++){
            for(c=1; c<=30; c++){
                ab=a*a+b*b;
                if(ab==c*c){
                    printf("%d,%d,%d\n", a, b, c);
                }
            }
        }
    }
    return 0;
}
非常に基本的なところでの間違えがあるようなので、一応練習として、30の部分を指定した数にできるようにしてみてください。
スポイラーの中に解答例を書いておきます。
► スポイラーを表示