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

Γενικό Λύκειο => Γ΄ Λυκείου => Μονοδιάστατοι πίνακες => Μήνυμα ξεκίνησε από: karasainis στις 21 Ιούλ 2011, 09:15:59 μμ

Τίτλος: Διαχείριση στοίβας μέσω πίνακα
Αποστολή από: karasainis στις 21 Ιούλ 2011, 09:15:59 μμ
Παραθέτω ένα πρόβλημα με τη λύση του:
=====================================================================
Να γραφεί πρόγραμμα το οποίο διαχειρίζεται μία στοίβα μέσω ενός πίνακα ακεραίων 10 θέσεων. Συγκεκριμένα εμφανίζεται ένα επαναλαμβανόμενο μενού επιλογών της μορφής:
1. Push
2. Pop
3. Print
0. Exit
μέχρις ότου δοθεί ο αριθμός 0 όπου τότε τερματίζεται η εφαρμογή.
Για την 1η επιλογή ζητείται ένας ακέραιος αριθμός και εισάγεται στη στοίβα.
Για την 2η επιλογή γίνεται απώθηση του κορυφαίου στοιχείου της στοίβας.
Για την 3η επιλογή εκτυπώνεται η στοίβα με μορφή στοίβας (δηλ. από το κορυφαίο έως το πρώτο στοιχείο).
Για την 4η επιλογή (0) γίνεται τερματισμός του επαναλαμβανόμενου μενού.
Σε όλες τις περιπτώσεις να γίνεται έλεγχος αν έχουμε φτάσει στα όρια της στοίβας και να εμφανίζεται ανάλογο μήνυμα.

Λύση
=====================================================================

ΠΡΟΓΡΑΜΜΑ STACK
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: A[10], TOP, BOTTOM, CHOICE, NUMBER, I
ΑΡΧΗ
  TOP <-- 0
  BOTTOM <-- 0
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ '1. PUSH, 2. POP, 3. PRINT, 0. EXIT  -->'
    ΔΙΑΒΑΣΕ CHOICE
   
    ΕΠΙΛΕΞΕ CHOICE
      ΠΕΡΙΠΤΩΣΗ 1
        ΓΡΑΨΕ 'ΔΩΣΕ ΕΝΑΝ ΑΚΕΡΑΙΟ ΑΡΙΘΜΟ ΓΙΑ PUSH:'
        ΔΙΑΒΑΣΕ NUMBER
        TOP <-- TOP+1
        ΑΝ TOP>10 ΤΟΤΕ
          ΓΡΑΨΕ 'Η ΣΤΟΙΒΑ ΕΙΝΑΙ ΓΕΜΑΤΗ!!!'
          TOP <-- TOP-1
        ΑΛΛΙΩΣ
          A[TOP] <-- NUMBER
        ΤΕΛΟΣ_ΑΝ
        ΓΡΑΨΕ '-----------------------------------------------------------------'

      ΠΕΡΙΠΤΩΣΗ 2
        ΑΝ TOP=BOTTOM ΤΟΤΕ
          ΓΡΑΨΕ 'Η ΣΤΟΙΒΑ ΕΙΝΑΙ ΑΔΕΙΑ!!!'
        ΑΛΛΙΩΣ
          ΓΡΑΨΕ 'ΤΟ ΣΤΟΙΧΕΙΟ ', A[TOP], ' ΣΤΗ ΘΕΣΗ ', TOP, ' ΕΞΑΧΘΗΚΕ!!!'
          TOP <-- TOP-1
        ΤΕΛΟΣ_ΑΝ
        ΓΡΑΨΕ '-----------------------------------------------------------------'

      ΠΕΡΙΠΤΩΣΗ 3
        ΓΡΑΨΕ '-----------------------------------------------------------------'
          ΓΙΑ I ΑΠΟ TOP ΜΕΧΡΙ 1 ΜΕ ΒΗΜΑ -1 ΕΠΑΝΑΛΑΒΕ
            ΓΡΑΨΕ A
          ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
        ΓΡΑΨΕ '-----------------------------------------------------------------'

      ΠΕΡΙΠΤΩΣΗ 0
        ΓΡΑΨΕ 'ΕΞΟΔΟΣ!!!'

      ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
        ΓΡΑΨΕ 'ΛΑΘΟΣ ΕΠΙΛΟΓΗ!!!       
    ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
  ΜΕΧΡΙΣ_ΟΤΟΥ CHOICE=0
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
 
Τίτλος: Απ: Διαχείριση στοίβας μέσω πίνακα
Αποστολή από: dski στις 22 Ιούλ 2011, 09:59:24 πμ
Σωστή και καλογραμμένη λύση. Δύο μόνο μικρές παρατηρήσεις:

1.Η μεταβλητή BOTTOM δε χρειάζεται (δεν αλλάζει ποτέ τιμή). Ο έλεγχος για άδεια στοίβα μπορεί να γίνει με τη συνθήκη TOP=0

2.Στην περίπτωση εισαγωγής στοιχείου στη στοίβα θα ήταν μάλλον καλύτερο να γίνεται ο έλεγχος για το αν αυτή είναι γεμάτη πριν ο χρήστης δώσει τον αριθμό (όπως π.χ. γίνεται στην περίπτωση της εξαγωγής ενός στοιχείου)