GOTO- oder WHILE-Programme mit beliebig vielen Eingabewerten



  • Hallo,

    man betrachte folgende Funktion:
    Eingabe: Beliebig große aber endliche Menge von Zahlen
    Ausgabe: Eigentlich egal, z.B. die Eingabezahlen sortiert.

    In einer "normalen" Programmiersprache ist das kein Problem. Die Eingabe ist ein Array und dem Sortieralgorithmus ist die Größe egal.

    Aber bei jedem GOTO- oder WHILE-Programm ist die Anzahl der Eingabewerte doch konstant, oder?

    Demnach wären übliche Programmiersprachen mächtiger als GOTO/WHILE.

    Was übersehe ich?

    P.S. Mir ist klar, dass es für jedes feste n ein GOTO/WHILE-Programm gibt, dass n Zahlen sortiert. Aber ich sehe nicht, warum es ein Programm geben muss, dass diese Aufgabe für ein beliebiges n erfüllt. Bei den Eingabewerten gibt es Probleme, oder?



  • Ich bin mir nicht sicher, ob ich deine Frage richtig verstanden habe.

    Ich nehme einfach mal an, dass du mit GOTO die Sprunganweisung und WHILE die Schleife meinst.

    GOTO und WHILE gibt es in fast jeder Programmiersprache auf die eine oder andere Weise. Im Prinzip kann man damit auch eine große, nur durch den verfügbaren Speicherplatz begrenzte Menge an Zahlen sortieren

    Das Problem ist lediglich, dass du die Zahlen in irgendeiner Struktur speichern musst. Das wären z.B. sog. Felder. Bei Feldern muss aber immer vorher die größe feststehen, damit ein bestimmter Bereich im Speicher hierfür freigehalten wird.

    Eine Möglichkeit dies zu vergrößern, wäre z.B. das Feld jedesmal bei Eingabe einer neuen Zahl in ein neues Feld zu kopieren, das um ein Element größer ist.

    Höhere Programmiersprachen bieten aber normalerweise bessere Möglichkeiten hierfür, z.B. Zeiger, oder spezielle Strukturen wie etwa ArrayList(), oder Vector() in der Programmiersprache JAVA.



  • MrBesserwisser schrieb:

    Ich bin mir nicht sicher, ob ich deine Frage richtig verstanden habe.

    Ich nehme einfach mal an, dass du mit GOTO die Sprunganweisung und WHILE die Schleife meinst.

    Nein, GOTO-Programm und WHILE-Programm sind grundlegende Konzepte in der Berechenbarkeitstheorie.

    @TS: Es ist vielleicht ein wenig her, aber ich erinnere mich düster an eine Indizierungsmöglichkeit innerhalb der Variablen (ala A[Ai]) oder arithmetische Basteleien, um komplexere Datenstrukturen in einer Programm-Variablen unterzubringen.


  • Mod

    @Mr.Besserwisser: Es geht um theoretische Informatik, genauer Berechenbarkeitstheorie. Da sind ein WHILE-Programm und ein GOTO-Programm feststehende formelle Begriffe (mal auf Wikipedia gucken) die ein Programm ganz abstrakt beschreiben. So wie die Turing-Maschine, die einen abstrakten Computer formell beschreibt.
    @Threadersteller: Ich verstehe zwar deine Frage und kann dein Problem verstehen, kann es aber leider nicht beantworten, da ich selbst kein Informatiker bin 😞 .

    edit: Zu langsam...



  • CStoll schrieb:

    @TS: Es ist vielleicht ein wenig her, aber ich erinnere mich düster an eine Indizierungsmöglichkeit innerhalb der Variablen (ala A[Ai]) oder arithmetische Basteleien, um komplexere Datenstrukturen in einer Programm-Variablen unterzubringen.

    Spontane Idee: Speicher in der ersten Variablen die maximal benötigte Anzahl Bits pro Input-Zahl. Kodiere den Input in der zweiten Variablen mit fixer Breite. Damit kannst du den gesamten Input in die zweite Variable schmeißen und nachher wieder sauber trennen.



  • Michael E. schrieb:

    CStoll schrieb:

    @TS: Es ist vielleicht ein wenig her, aber ich erinnere mich düster an eine Indizierungsmöglichkeit innerhalb der Variablen (ala A[Ai]) oder arithmetische Basteleien, um komplexere Datenstrukturen in einer Programm-Variablen unterzubringen.

    Spontane Idee: Speicher in der ersten Variablen die maximal benötigte Anzahl Bits pro Input-Zahl. Kodiere den Input in der zweiten Variablen mit fixer Breite. Damit kannst du den gesamten Input in die zweite Variable schmeißen und nachher wieder sauber trennen.

    Aaaaah jetzt kommt die Erinnerung dunkel und langsam. Die Vorlesung ist auch schon 10 Jahre her.

    Das macht durchaus Sinn die Eingabe in eine Variable zu packen. So könnte sie beliebig groß sein und darüber hinaus indiziert werden können.

    Ich bin so sehr Praktiker geworden, dass mir sowas nicht mehr eingefallen ist 😉

    Thx, jetzt bin ich beruhigt 🙂



  • Michael E. schrieb:

    CStoll schrieb:

    @TS: Es ist vielleicht ein wenig her, aber ich erinnere mich düster an eine Indizierungsmöglichkeit innerhalb der Variablen (ala A[Ai]) oder arithmetische Basteleien, um komplexere Datenstrukturen in einer Programm-Variablen unterzubringen.

    Spontane Idee: Speicher in der ersten Variablen die maximal benötigte Anzahl Bits pro Input-Zahl. Kodiere den Input in der zweiten Variablen mit fixer Breite. Damit kannst du den gesamten Input in die zweite Variable schmeißen und nachher wieder sauber trennen.

    Ja, sowas in der Art hatt ich auch im Sinn. Eine alternative Idee, die mit nur einer Variablen auskommt - wir lesen die Zahlenliste als eine Zahl zur Basis 11 (mit dem Trennzeichen als Ziffer "10").


Log in to reply