Allgemeine Frage zu I/O



  • Hi,
    ich muss eine Eingabe, die sowohl eine Datei- als auch eine User-Eingabe über Konsole sein kann, einlesen und diese in einem Stack (FIFO) speichern. Der Stack wird nun (schrittweise) ausgelesen und in einem globalen Puffer geschrieben. Wichtig: Der Puffer ist i. d. R. kleiner als der Stack! Wird nun der globale Puffer ausgelesen, dann soll dieselbe Reihenfolge wie beim Input gewährleistet sein. Gibt also der User "a, b, c, ..., z" ein, soll auch beim Buffer-Auslesen wieder "a, b, c, ..., z" rauskommen.
    Hätte ich das Problem der manuellen User-Eingabe nicht, hätte ich die Datei von unten nach oben auslesen können, so dass die Eingabe dann in der richtigen Reihenfolge im Stack steht, aber mit manueller User-Eingabe geht das natürlich nicht.

    Wie gehe ich nun am Besten vor?
    Ich habe mal eine Skizze erstellt, um das Problem zu verdeutlichen.

    Danke im Voraus!

    L. G.
    Steffo



  • Stack = LIFO
    Queue = FIFO

    Jetzt stell die Frage nochmal.



  • Ein Stack (LIFO!) ist die falsche Struktur. Nimm eine FIFO Struktur und fertig.



  • FIFO kam mir auch in den Sinn, aber 1. will ich jetzt nicht eine Queue implementieren (wir dürfen nur unsere eigenen Implementierungen benutzen), 2. Auf das Problem angesprochen, meinte mein Prof., dass es eine einfachere Möglichkeit gibt als eine Queue zu implementieren.
    Genau die suche ich.

    Ich könnte theoretisch die Eingabe in eine Datei schreiben und diese dann umgekehrt lesen...

    L. G.
    Steffo



  • Steffo schrieb:

    FIFO kam mir auch in den Sinn, aber 1. will ich jetzt nicht eine Queue implementieren (wir dürfen nur unsere eigenen Implementierungen benutzen), 2. Auf das Problem angesprochen, meinte mein Prof., dass es eine einfachere Möglichkeit gibt als eine Queue zu implementieren.

    Dann brauchen wir mehr Infos. Eine Queue ist eine klassische FIFO-Struktur und hier ziemlich ideal.

    Laut deiner Beschreibung hast du aber schon eine Queue im Einsatz.

    Der Stack wird nun (schrittweise) ausgelesen und in einem globalen Puffer geschrieben. Wichtig: Der Puffer ist i. d. R. kleiner als der Stack! Wird nun der globale Puffer ausgelesen, dann soll dieselbe Reihenfolge wie beim Input gewährleistet sein.

    Diesen Buffer verwendest du ja wie eine FIFO Struktur.



  • Verdammt, ich meinte LIFO wird von mir momentan verwendet!
    Viel mehr gibt es eigentlich nicht zu sagen, außer, dass der Puffer parallel beschrieben und ausgelesen wird (das Einlesen der Datei/Eingabe in den Stack erfolgt aber sequenziell), aber diese Info wollte ich euch eigentlich vorenthalten, da das mein Problem sein soll.



  • Eine Queue kann man mit zwei Stacks nachbilden: Einfügen immer in Stack 1, Herausnehmen aus Stack 2. Ist Stack 2 leer, einmal Stack 1 komplett nach Stack 2 umschaufeln.

    Ob du das brauchst, keine Ahnung. Kann man nicht wissen bei der dürftigen Informationslage.



  • Also sowas wie Producer und Consumer?



  • knivil schrieb:

    Also sowas wie Producer und Consumer?

    Genau das.
    @Bashar: Ich machs wohl so, thx!



  • Du must doch nur deinen Buffer vor gemeinsamen Zugriff schuetzen.



  • Unser Prof. hat da nochmals deutlich höhere Anforderungen. Die Reihenfolge soll genauso sein wie der im Input, auch wenn da mehrere Threads gleichzeitig in den Buffer pushen und popen. Außerdem soll das Programm jederzeit abbrechbar sein, wobei darauf geachtet werden soll, dass auch alles aufgeräumt wird und und und...
    Aber ich kriege das schon hin. Ein Großteil steht schon.
    Daher danke soweit!

    L. G.
    Steffo


Anmelden zum Antworten