C++ :: Aufgabe #28 :: Lösung #3

5 Lösungen Lösungen öffentlich
#28

Abstand zweier Punkte

Anfänger - C++ von Dome - 03.01.2013 um 01:09 Uhr
Schreiben Sie ein Programm, welches den Abstand zweier Punkte berechnet. Zuvor müssen die Koordinaten beider Punkte abgefragt werden.

Konsolenausgabe:

x1:1
y1:1
x2:2
y2:2
1.4142135623730951
#3
vote_ok
von Sone (2570 Punkte) - 03.01.2013 um 19:52 Uhr
Eine schnelle Lösung findet sich durch ein wenig C++11 und einem kleinen, extra dafür entworfenen Klassentemplate Point:

Quellcode ausblenden C-Code
#include <iostream>
#include <cmath>
#include <iterator>

template<typename T>
T square(T a) { return a*a; }

template<typename T>
struct Point
{
    T x, y;

    static Point from_command_line()
    {
        #define do_for(what) (std::cout << #what ": ", *std::istream_iterator<T>(std::cin))
        return { do_for(x), do_for(y) };
    }

    double distance_to(Point const& p)
    {
        return ::sqrt( square( ::abs(p.y - y) ) + square( ::abs(p.x - x) ) );
    }
};

#include <iomanip>
#include <limits>

int main()
{
    auto p1 = Point<int>::from_command_line(),
         p2 = Point<int>::from_command_line();

    std::cout << "distance: " << std::setprecision( std::numeric_limits<double>::digits10 ) << std::fixed << p1.distance_to(p2);
}


Konsolenausgabe:

x: 1
y: 1
x: 2
y: 2
distance: 1.414213562373095


Zu beachten ist, dass dies eine IMO hässliche Variante ist. Man könnte alles sehr viel allgemeiner und flexibler gestalten.

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2115842

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.