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
