2016-12-02 8 views
0

Ich möchte den Abstand zwischen zwei Punkten berechnen, aber ich muss es tun, indem Sie eine Hauptfunktion verwenden. Ich habe einige Schwierigkeiten, um sicherzustellen, dass mein Programm den richtigen Wert zurückgibt. Ich habe meinen Code an diesen Code angehängt, so dass ich es schätzen würde, wenn jemand mir helfen könnte, den Teil zu korrigieren, bei dem ich vielleicht einen Fehler gemacht habe. (Anmerkung: Ich bin ziemlich neu in C so kann ich verstehen, einige Dinge einige zusätzliche Hilfe benötigen.)Die Entfernung zwischen zwei Punkten in C finden

#include <stdio.h> 
double distance(double x1, double y1, double x2, double y2) 
{ 
    double square_difference_x = (x2 - x1) * (x2 - x1); 
    double square_difference_y = (y2 - y1) * (y2 - y1); 
    double sum = square_difference_x + square_difference_y; 
    double z = 0.00001; 
    for (double i = 0; i < sum; i = i + z) 
    { 
     if (i * i == sum) 
     { 
      return i; 
     } 
    } 
} 

int main(void) 
{ 
    double a = 1.0, b = 2.0, c = 4.0, d = 6.0; 
    double dis; 
    dis = distance(a, b, c, d); 
    printf("The distance of the points (%lf, %lf) and (%lf, %lf) is %lf\n", a,b,c,d,dis); 

    return 0; 
} 

ich wie mein Problem fühlen geschieht mit der return Option in der Hauptfunktion, obwohl ich nicht so bin sicher, wie Sie dieses Problem beheben können, wenn es eines gibt. `

+4

"Abstand" kann sehr gut keinen Wert zurückgeben, da der 'i * i == Summe' Test wahrscheinlich fehlt. Gleitkommazahlen auf Computern sind [im Allgemeinen nicht genau] (und http://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency/3730040#3730040) und sogar wenn sie wären, würde das wahrscheinlich immer noch häufig nicht treffen. Vielleicht möchten Sie einfach 'sqrt (sum)' aus '' verwenden, mit dem zusätzlichen Vorteil, dass es schneller ist als eine lineare Suche nach der Quadratwurzel. Wenn Sie das nicht können, werden Sie wahrscheinlich "i * i> = sum" machen wollen, was wahrscheinlich irgendwann passieren wird. – zneak

+2

Beachten Sie auch, dass bei sehr großen Zahlen 'i + 0.00001' tatsächlich einen Wert zurückgibt, der mit" i "identisch ist, wodurch Ihr Programm in einer Endlosschleife stehen würde. – zneak

+1

Das 'printf' Format für' double' ist '% f'. –

Antwort

2

Auf diese Weise bessere und effiziente Lösung.

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

double distance(double x1, double y1, double x2, double y2) 
{ 
    double square_difference_x = (x2 - x1) * (x2 - x1); 
    double square_difference_y = (y2 - y1) * (y2 - y1); 
    double sum = square_difference_x + square_difference_y; 
    double value = sqrt(sum); 
    return value; 
} 
+4

Oder sogar 'Hypot (x2 - x1, y2 - y1);' –

+0

Ja, noch besser. – MSH

+0

In dem Verlauf, den ich mache, haben wir noch nicht über die Quadratwurzelfunktion gelernt mit '#include '. Gibt es eine andere Möglichkeit, die Quadratwurzel von 'sum' zu finden? –

1

Dies wird nur auf Weather Vane Kommentar über die Verwendung von Hypotenuse erweitert.

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


typedef struct 
{ 
    double x, y; 
} Point; 

typedef struct 
{ 
    Point a,b; 
} Line; 


double length(Line line) 
{ 
    return(hypot(line.b.x - line.a.x, line.b.y - line.a.y)); 
} 


int main(int argc, char *argv[]) 
{ 
    Line line = { {4,0},{0,3} }; 

    printf("Line length = %lf\n", length(line)); 
    return(0); 
} 

Dies zeigt das bekannte 3,4,5-Dreieck. Kompilieren Sie mit gcc xxx.c -lm

Verwandte Themen