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