0

そのため、c がユーザーが入力した数値よりも小さい限り、ピタゴラスの 3 重を計算するプログラムを作成していました。そのため、これを実現するために 3 つの while ループを使用しました。私が達成したいのは、画面に出力することです。内角が最も薄いトリプルのセットは、直角三角形でなければなりません。基本的に、正弦法則を使用して各トリプルの最小角度を計算し、その最小角度を配列に格納しました。その直後に、配列の 3 つのインデックスが対応するトリプルを表します。次に、トリプルからの各角度を比較し、1 つが大きい場合は配列の最初の 4 つのスポットに格納する方法を作成しました。私は現在、配列のサイズについて心配しておらず、9999 と宣言しています。したがって、問題は、複数のトリプル セットを比較すると、プログラムは、配列内のインデックスの最初のセットを最小角度のトリプルに等しくしません。私が使用した手順は非常に非効率的で時間がかかることに同意しますが、何らかの解決策を教えていただければ、または正しい方向に導くことができれば幸いです. ありがとう。ああ、これが私のコードです。

#include <stdio.h>
#include <math.h>
#define PI 3.14159265

static int a[9999];

int main(void)
{

    int side1, side2, hyp, num;
    int i = 0;
    int j;
    side1 = 1;
    hyp = 0;

    printf("Please enter a number\n");
    scanf("%d", &num);

    while (side1 < num) {
    side2 = 1;

    while (side2 < num) {
        hyp = 1;

        while (hyp < num) {
        if (side1 * side1 + side2 * side2 == hyp * hyp && side1 < side2) {

            printf("The side lengths are %d,%d,%d\n", side1, side2, hyp);

            float angle1 = (asin((float) side1 / hyp) * (180 / PI));
            float angle2 = (asin((float) side2 / hyp) * (180 / PI));

            if (angle1 > angle2) {
            a[i] = (int)angle2;
            a[i + 1] = side1;
            a[i + 2] = side2;
            a[i + 3] = hyp;

            } else if (angle2 > angle1) {
            a[i] = (int)angle1;
            a[i + 1] = side1;
            a[i + 2] = side2;
            a[i + 3] = hyp;

            } else {
            a[i] = (int)angle1;
            a[i + 1] = side1;
            a[i + 2] = side2;
            a[i + 3] = hyp;
            }
            i=i+4;
        }
        hyp++;
        }
        side2++;
    }
    side1++;
    }
      a[i+1]=99.99;
      a[i+2]=99.99;
      a[i+3]=99.99;
      a[i+4]=99.99;

compare(i);

    return (0);
}

void compare(int i)
{
    int j;

    for(j=0;j<i;j=j+4)
    {
        if (a[0]>a[j+4])
        {
            a[0]=a[j+4];
            a[1]=a[j+5];
            a[2]=a[j+6];
            a[3]=a[j+7];

        }
//printf("%d\n",a[0]);
    }
  printf("The thinnest triangle is formed by (%d , %d , %d)", a[1], a[2], a[3]);

}

もう1つ、いくつかのインデックスを99.9にした理由は、ループがチェックしていて、それが最後のトリプルではない場合、エラーが発生しないようにするためです.ループには前のトリプルを比較するものが何もないからです. OK、1 つの等号に変更しましたが、出力は常に 99,99,99 になります。

4

2 に答える 2

1

おそらく、 で始まる 4 つのステートメントは、代わりにa[0]==a[j+4]を使用する必要があります。===

于 2013-10-21T23:56:07.050 に答える
0

=割り当てを二重の等号ではなく単一の等号に切り替えます==

void compare(int i)
{
    int j;

    for(j=0;j<i;j=j+4)
    {
        if (a[0]>a[j+4])
        {
            a[0] = a[j+4]; // <- here,
            a[1] = a[j+5]; // <- here,
            a[2] = a[j+6]; // <- here,
            a[3] = a[j+7]; // <- and here

        }
    //printf("%d\n",a[0]);
    }
    printf("The thinnest triangle is formed by (%d , %d , %d)", a[1], a[2], a[3]);

}
于 2013-10-21T23:56:25.523 に答える