2016-10-30 9 views
0

2行(a1x + b1とa2x + b2)の係数を入力し、それらが一致しているか、平行であるか、または交差しているかどうかを計算するプログラムを作成しようとしています。交差点を見つける。私は係数をうまく比較することができず、プログラムの出力は常に以下のようになります:点(0.00,0.00)で交差します。私は間違って何をしていますか?行が平行か、一致しているか、交差しているかを調べます。交差する場合、交差点を見つける

#include <stdio.h> 
#include <math.h> 

#define epsilon 0.001 

int main() { 

    float a1, b1, a2, b2; 
    float x = 0; 
    float y = 0; 


    printf("Insert a1,b1,a2,b2: "); 
    scanf("%f %f %f %f", &a1, &b1, &a2, &b2); 
    if (fabs(a1 - a2) < epsilon && fabs(b1 - b2) < epsilon) { 
     printf("Coincident"); 
    } else if (fabs(a1 - a2) < epsilon && fabs(b1 - b2) > epsilon) { 
     printf("Parallel"); 
    } else if (((fabs(a1 - a2) > epsilon && fabs(b1 - b2) > epsilon) || 
      (fabs(a1 - a2) > epsilon && fabs(b1 - b2) < epsilon))) { 
     x = (b2 - b1)/(a1 - a2); 
     y = a1 * x + b1; 
     printf("They intersect at point (%.2f, %.2f)", x, y); 
    } 

    return 0; 
} 
+2

を再現することはできませんwrong.likeご入力され、right.Maybeです。 '1 0 -1 3'と入力すると'(1.50 1.50) 'が表示されます。 '2 1 -3 4'と入力すると '(0.60、2.20)'が表示されます。 –

+0

これは正しく動作します。 –

+0

何が*間違っているかはParallelに間違ったテストを使用していることです。あなたは既に一致を確認しているので、勾配 'a1'と 'a2'だけを比較するべきです。そして、最後のセクションで不要な条件テストがあります。なぜなら、線が平行でない場合、交差する必要があるからです。 –

答えて

2

right demo

それは、この〜wrong demo

+0

良いキャッチ:if(scanf( "%f%f%f%f"、&a1、&b1、&a2、&b2)== 4){...} 'を提案する。 (しかし、画像ではなくテキストを投稿してください)。 –

+0

コードと入力/出力ダンプを表すためにコードボックスを使用し、画像は使用しないでください。 –

関連する問題