Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Γ΄ Λυκείου => Δομές δεδομένων => Μήνυμα ξεκίνησε από: akalest0s στις 14 Φεβ 2020, 06:41:21 ΠΜ

Τίτλος: Άσκηση με στοίβα
Αποστολή από: akalest0s στις 14 Φεβ 2020, 06:41:21 ΠΜ
Α) Να γραφεί πρόγραμμα, το οποίο να δέχεται από το χρήστη μια ακολουθία χαρακτήρων, έναν-έναν χαρακτήρα κάθε φορά. Το πρόγραμμα θα χειρίζεται τα δεδομένα με μία στοίβα 8 θέσεων. Η εισαγωγή δεδομένων θα τερματίζει, μόλις ο χρήστης εισάγει τον κενό χαρακτήρα "  ". Αν ο χαρακτήρας που εισάγεται είναι ο " * ", να πραγματοποιεί μία απώθηση (pop) στη στοίβα, ενώ αν είναι οποιοσδήποτε άλλος, να πραγματοποιεί μια ώθηση (push) στη στοίβα, για αυτόν τον χαρακτήρα.
Β) Να σχεδιάσετε την στοίβα και τα περιεχόμενά της:
-πριν γίνει οποιαδήποτε λειτουργία της,
-μετά από την 10η κατά σειρά, λειτουργία της,
-στο τέλος της εισαγωγής δεδομένων,
αν για είσοδο ο χρήστης εισάγει την εξής ακολουθία χαρακτήρων:
LA*STI*N*FIR*ST**OU*T*******
Σημείωση: δεν απαιτείται κανένας έλεγχος εγκυρότητας τιμών (θεωρούμε ότι ο χρήστης εισάγει έναν-έναν, αναμενόμενους χαρακτήρες κάθε φορά).
Επίσης, φροντίστε ώστε το πρόγραμμα να εμφανίζει σε κάθε περίπτωση κατάλληλα μηνύματα: αν πραγματοποιήθηκε μια λειτουργία ή όχι, και αν ναι, σε ποια θέση της στοίβας. Τι αναμένετε ότι πρέπει να ισχύει στα μηνύματα που θα λαμβάνετε, όταν τρέξετε το πρόγραμμα;


(Εμπνεύστηκα την άσκηση από την συνημμένη εικόνα, στο βιβλίο "Αλγόριθμοι σε C", R. Sedgewick.)
Τίτλος: Απ: Άσκηση με στοίβα
Αποστολή από: akalest0s στις 14 Φεβ 2020, 06:47:19 ΠΜ
μια λύση
Κώδικας (javascript) [Επιλογή]

ΠΡΟΓΡΑΜΜΑ μο_στοίβα_sw
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: top
  ΧΑΡΑΚΤΗΡΕΣ: Σ[8], input
ΑΡΧΗ
  top <- 0
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΔΙΑΒΑΣΕ input
    ΑΝ input = "*" ΤΟΤΕ
!απώθηση
      ΑΝ top >= 1 ΤΟΤΕ
        ΓΡΑΨΕ 'έγινε απώθηση στη θέση: ', top
        top <- top - 1
      ΑΛΛΙΩΣ
        ΓΡΑΨΕ 'ΔΕΝ έγινε απώθηση λόγω underflow'
      ΤΕΛΟΣ_ΑΝ
    ΑΛΛΙΩΣ_ΑΝ input <> ' ' ΤΟΤΕ
!ώθηση
      ΑΝ top < 8 ΤΟΤΕ
        top <- top + 1
        ΓΡΑΨΕ 'έγινε ώθηση στη θέση: ', top
        Σ[top] <- input
      ΑΛΛΙΩΣ
        ΓΡΑΨΕ 'ΔΕΝ έγινε ώθηση λόγω overflow'
      ΤΕΛΟΣ_ΑΝ
    ΑΛΛΙΩΣ
      ΓΡΑΨΕ 'τερματισμός εισαγωγής δεδομένων'
    ΤΕΛΟΣ_ΑΝ
  ΜΕΧΡΙΣ_ΟΤΟΥ input = ' '
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ