#include <iostream>
#include <print>
#include <cstdlib>
#include <ctime>

// Definition der Konstanten für die Feldgrösse
constexpr auto ZEILEN = 10;
constexpr auto SPALTEN = 10;

// Tabelle definieren
int tabelle[ZEILEN][SPALTEN];

int main()
{
    // aktuelle Uhrzeit auslesen
    unsigned int actTime = static_cast<decltype(actTime)>(std::time(nullptr));
    // Zufallszahlen initialisieren
    std::srand(actTime);

    // Tabelle mit Zufallszahlen fuellen
    for (auto& zeile : tabelle)
        for (auto& elem : zeile)
            elem = std::rand() % 10;

    // Hilfsfeld für Spaltensummen anlegen und mit 0 initialisieren
    int spaltenSumme[SPALTEN]{};

    // Alle Zeilen durchlaufen
    for (auto& zeile : tabelle)
    {
        // Zeilensumme auf 0 setzen
        auto zeilenSumme = 0;
        // Alle Spalten der akt. Zeile durchlaufen
        for (auto spalte = 0; auto elem: zeile)
        {
            // Tabellenwert ausgeben
            std::print("{:4}", elem);
            // Zeilensumme aktualisieren
            zeilenSumme += elem;
            // Spaltensumme aktualisieren
            spaltenSumme[spalte++] += elem;
        }
        // Zeilensumme ausgeben
        std::println(" : {:4}", zeilenSumme);
    }

    // Zum Schluss Spaltensummen ausgeben
    std::println("------------------------------------------");
    for (auto element : spaltenSumme)
        std::print("{:4}", element);
    std::cout << '\n';
}
