直角三角形の値の求め方

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

直角三角形の値の求め方

#1

投稿記事 by ヒロ » 9年前

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 }

non

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

#2

投稿記事 by non » 9年前

13 if(ab=c*c){
= は代入であって、比較ではありません。

アバター
さかまき
記事: 92
登録日時: 9年前

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

#3

投稿記事 by さかまき » 9年前

C=25 の時
7,24と15,20の2つの組み合わせがありますが
C=25の値で配列にセットすると1組しかセットできません。

box
記事: 1747
登録日時: 9年前

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

#4

投稿記事 by box » 9年前

そもそも、cの値を配列の添字に使うという発想が間違い。
せっかく求めた(7,24,25)という解を(15,20,25)で上書きしてるんだから。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

naohiro19
記事: 256
登録日時: 9年前
住所: 愛知県

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

#5

投稿記事 by naohiro19 » 9年前

わかりづらいので字下げした形で掲載します。

コード:

#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;
}

アバター
Tatu
記事: 445
登録日時: 9年前
住所: 北海道

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

#6

投稿記事 by Tatu » 9年前

この問題、配列で記憶して後でまとめて書くこともできますが
そのようにする意味はあるのでしょうか?
a,b,cが条件を満たしていたらその場で出力してはいけないのでしょうか?

box
記事: 1747
登録日時: 9年前

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

#7

投稿記事 by box » 9年前

Tatu さんが書きました:そのようにする意味はあるのでしょうか?
もちろん、何も意味はないですね。まとめて出力するため「だけ」に、配列に入れているのですから。
Tatu さんが書きました:a,b,cが条件を満たしていたらその場で出力してはいけないのでしょうか?
まあ、ふつうはそうするでしょうね。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
Ultimate
記事: 38
登録日時: 9年前
住所: 埼玉県
連絡を取る:

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

#8

投稿記事 by Ultimate » 9年前

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の部分を指定した数にできるようにしてみてください。
スポイラーの中に解答例を書いておきます。
► スポイラーを表示

閉鎖

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