Άσκηση με στοίβα

Ξεκίνησε από akalest0s, 14 Φεβ 2020, 06:41:21 ΠΜ

« προηγούμενο - επόμενο »

akalest0s

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


(Εμπνεύστηκα την άσκηση από την συνημμένη εικόνα, στο βιβλίο "Αλγόριθμοι σε C", R. Sedgewick.)
"Abstraction is not the first stage, but the last stage, in a mathematical development." MK
"I don't want to write about a high level thing, unless I fully understand about a low level thing" DK

akalest0s

μια λύση
Κώδικας: 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 = ' '
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
"Abstraction is not the first stage, but the last stage, in a mathematical development." MK
"I don't want to write about a high level thing, unless I fully understand about a low level thing" DK