C# :: Aufgabe #393

1 Lösung Lösung öffentlich

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ß!

Lösungen:

vote_ok
von JKooP (18070 Punkte) - 16.05.2021 um 12:48 Uhr
NET 5.x; C# 9.x; VS-2019
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;

var rnd = new Random();
var lst = new List<Point>();

// Zufällige Anzahl Punkte (mindestens 2, maximal hier: 20)
var max = rnd.Next(2, 20);

// Zufällige Koordinaten (von -20 bis +20)
for (var i = 0; i < max; i++)
    lst.Add(new Point(rnd.Next(-20, 20), rnd.Next(-20, 20)));

Matrix(lst);


static void Matrix(List<Point> p)
{
    // Ausgabe der Punkte als Koordinate
    for (var i = 0; i < p.Count; i++)
        Console.WriteLine($"P{i+1} ({p[i].X}, {p[i].Y})");

    // Ausgabe der Matrix
    Console.Write($"\n {"",-7}");

    for (var i = 0; i < p.Count; i++)
        Console.Write($"P{i + 1,-7}");

    Console.WriteLine("\n");

    for (var i = 0; i < p.Count; i++)
    {
        Console.Write($"P{i + 1,-3}");

        for (var k = 0; k < p.Count; k++)
            Console.Write($"{Math.Round(GetDiff(p[i], p[k]),2),7:f2} ");

        Console.WriteLine("\n");
    }
}

static double GetDiff(Point p1, Point p2) => Math.Sqrt(Math.Pow(p2.X - p1.X, 2) + Math.Pow(p2.Y - p1.Y, 2));

record Point(double X, double Y);