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

#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

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:
C-Code
Zu beachten ist, dass dies eine IMO hässliche Variante ist. Man könnte alles sehr viel allgemeiner und flexibler gestalten.

#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
Seite 1 von 0
1