C++ :: Aufgabe #363
1 Lösung
Erzeugung einer Entfernungstabelle
Anfänger - C++
von hollst
- 27.04.2021 um 20:13 Uhr
In der unendlich ausgedehnten euklidischen 2D-Eben wähle man zufällig N unterschiedliche Punkte P1, P2 ... PN. Die XY-Punktkoordinaten seien in Meter bemaßt.
Man schreibe eine Funktion, die P1 ... PN als Input annimmt und als Rückgabe eine Entfernungstabelle als (Double) N x N - Matrix ausgibt. D. h. die Hauptdiagonale ist mit Null besetzt und die Matrix ist bzgl. dieser symmetrisch.
Viel Spaß!
Man schreibe eine Funktion, die P1 ... PN als Input annimmt und als Rückgabe eine Entfernungstabelle als (Double) N x N - Matrix ausgibt. D. h. die Hauptdiagonale ist mit Null besetzt und die Matrix ist bzgl. dieser symmetrisch.
Viel Spaß!
Lösungen:
C++ 17
.h
.cpp
C-Code
#include"DiffMatrix.h" int main() { // (1) Anzahl der Punkte im Koordinatensystem // (2) maximal positiver bzw. negativer Wert (x, y) eines Punktes (+/-) DiffMatrix d{ 20, 20 }; d.print_coordinates(); d.print_matrix(); }
.h
C-Code
#pragma once #include <iostream> #include <vector> #include <iomanip> using namespace std; struct Point { double x; double y; }; class DiffMatrix { private: int _num_of_coordinates; int _max_value; vector<Point> _points{}; vector<vector<double>> _matrix{}; double get_diff(Point p1, Point p2); double get_rnd(); public: DiffMatrix(int num_of_coordinates, int max_value) { _num_of_coordinates = num_of_coordinates; _max_value = max_value; srand((unsigned int)time(0)); _points = get_coordinates(); _matrix = get_matrix(); } vector<Point> get_coordinates(); void print_coordinates(); void print_matrix(); vector<vector<double>> get_matrix(); };
.cpp
C-Code
#include "DiffMatrix.h" double DiffMatrix::get_diff(Point p1, Point p2) { return sqrt(pow(p2.x - p1.x, 2) + pow(p2.y - p1.y, 2)); } double DiffMatrix::get_rnd() { return (2 * rand()) % _max_value * 2 - _max_value; } vector<Point> DiffMatrix::get_coordinates() { vector<Point>v{}; for (int i = 0; i < _num_of_coordinates; i++) v.push_back({ get_rnd(), get_rnd() }); return v; } void DiffMatrix::print_coordinates() { for (size_t i = 0; i < _points.size(); i++) cout << "P" << i + 1 << "(" << _points[i].x << ", " << _points[i].y << ")\n"; cout << "\n"; } void DiffMatrix::print_matrix() { for (const auto& k : _matrix) { for (const auto& l : k) cout << fixed << setprecision(2) << l << "\t"; cout << "\n\n"; } } vector<vector<double>> DiffMatrix::get_matrix() { vector<vector<double>> v; for (size_t i = 0; i < _points.size(); i++) { vector<double> v2; for (size_t k = 0; k < _points.size(); k++) v2.push_back(get_diff(_points[i], _points[k])); v.push_back(v2); } return v; }