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

int main()
{
    unsigned short stackSize;   // Stackgroesse

    // Stackgroesse einlesen
    std::print("Wie gross soll der Stack sein (5..20)? ");
    std::cin >> stackSize;
    // Fehlerhafte Eingabe abfangen
    if ((stackSize < 5) || (stackSize > 20))
    {
        std::println("Erlaubte Stackgroesse ist 5...20!");
        exit(1);
    }
    // Stack reservieren
    auto stack = new unsigned short[stackSize];

    // Stack mit beliebigen Werten fuellen
    std::println("Werte auf dem Stack:");
    unsigned short stackPtr = 0;    // Stackpointer
    while (stackPtr < stackSize)
    {
        stack[stackPtr] = std::rand() % 100;
        std::print("{}, ", stack[stackPtr]);
        stackPtr++;                 // Stackpointer inkr.
    }

    // Letze 3 Werte vom Stack auslesen
    std::println("\nHole letzte 3 Werte vom Stack");
    for (auto index = 0; index < 3; index++)
    {
        std::print("{}, ", stack[--stackPtr]);
    }

    // Stackbereich wieder freigeben
    std::println("\nStackbereich auch wieder freigeben!");
    delete[] stack;
}
