ΘΕΩΡΙΑ ΠΙΝΑΚΩΝ ΟΥΡΑΣ ΚΑΙ ΣΤΟΙΒΑΣ
Ως γνωστό ασκήσεις για την ουρά δεν μπορούν να υλοποιηθούν σε γλώσσα. Παρακάτω παραθέτω μερικά παραδείγματα ουράς για θεωρητική και μόνο χρήση.
ΑΣΚΗΣΗ ΟΥ1 *** (ΕΙΣΑΓΩΓΗ ΣΕ ΟΥΡΑ)
Να γράψετε πρόγραμμα το οποίο να διαβάζει έναν ακέραιο και να τον εισάγει στην ουρά δεδομένου ότι η ουρά είναι 50 θέσεων. Επίσης να διαβάζει τους δείκτες ΜΠΡΟΣΤΑ και ΠΙΣΩ χωρίς να απαιτείται έλεγχος ορθότητας.
Απάντηση
ΠΡΟΓΡΑΜΜΑ ΟΥ1
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : ΟΥΡΑ[50], ΜΠΡΟΣΤΑ, ΠΙΣΩ, ΑΡΙΘΜΟΣ
ΛΟΓΙΚΕΣ : DONE
ΑΡΧΗ
!ΕΙΣΟΔΟΣ ΑΡΧΗΣ ΚΑΙ ΤΕΛΟΥΣ ΟΥΡΑΣ
ΔΙΑΒΑΣΕ ΜΠΡΟΣΤΑ
ΔΙΑΒΑΣΕ ΠΙΣΩ
ΔΙΑΒΑΣΕ ΑΡΙΘΜΟΣ
!ΕΛΕΓΧΟΣ ΑΝ Η ΟΥΡΑ ΔΕΝ ΕΙΝΑΙ ΓΕΜΑΤΗ
ΑΝ ΠΙΣΩ<50 ΤΟΤΕ
ΠΙΣΩ<-ΠΙΣΩ+1
ΟΥΡΑ[ΠΙΣΩ]<-ΑΡΙΘΜΟΣ
DONE<- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
DONE<-ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Να γράψετε πρόγραμμα το οποίο να διαβάζει έναν ακέραιο και να τον εισάγει στην ουρά δεδομένου ότι η ουρά είναι 50 θέσεων. Επίσης να διαβάζει τους δείκτες ΜΠΡΟΣΤΑ και ΠΙΣΩ χωρίς να απαιτείται έλεγχος ορθότητας.
Απάντηση
ΠΡΟΓΡΑΜΜΑ ΟΥ1
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : ΟΥΡΑ[50], ΜΠΡΟΣΤΑ, ΠΙΣΩ, ΑΡΙΘΜΟΣ
ΛΟΓΙΚΕΣ : DONE
ΑΡΧΗ
!ΕΙΣΟΔΟΣ ΑΡΧΗΣ ΚΑΙ ΤΕΛΟΥΣ ΟΥΡΑΣ
ΔΙΑΒΑΣΕ ΜΠΡΟΣΤΑ
ΔΙΑΒΑΣΕ ΠΙΣΩ
ΔΙΑΒΑΣΕ ΑΡΙΘΜΟΣ
!ΕΛΕΓΧΟΣ ΑΝ Η ΟΥΡΑ ΔΕΝ ΕΙΝΑΙ ΓΕΜΑΤΗ
ΑΝ ΠΙΣΩ<50 ΤΟΤΕ
ΠΙΣΩ<-ΠΙΣΩ+1
ΟΥΡΑ[ΠΙΣΩ]<-ΑΡΙΘΜΟΣ
DONE<- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
DONE<-ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΑΣΚΗΣΗ ΟΥ2 *** (ΕΞΑΓΩΓΗ ΑΠΟ ΟΥΡΑ)
Να γράψετε πρόγραμμα το οποίο να εξάγει έναν ακέραιο από μία ουρά 50 θέσεων.
Απάντηση
ΠΡΟΓΡΑΜΜΑ ΟΥ2
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : ΟΥΡΑ[50], ΜΠΡΟΣΤΑ, ΠΙΣΩ, ΑΡΙΘΜΟΣ
ΛΟΓΙΚΕΣ : DONE
ΑΡΧΗ
!ΕΛΕΓΧΟΣ ΑΝ Η ΟΥΡΑ ΕΙΝΑΙ ΑΔΕΙΑ
ΑΝ ΠΙΣΩ=0 Ή ΜΠΡΟΣΤΑ>ΠΙΣΩ ΤΟΤΕ
DONE<- ΨΕΥΔΗΣ
ΑΛΛΙΩΣ
ΑΡΙΘΜΟΣ<-ΟΥΡΑ[ΜΠΡΟΣΤΑ]
ΜΠΡΟΣΤΑ<-ΜΠΡΟΣΤΑ+1
DONE<-ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Να γράψετε πρόγραμμα το οποίο να εξάγει έναν ακέραιο από μία ουρά 50 θέσεων.
Απάντηση
ΠΡΟΓΡΑΜΜΑ ΟΥ2
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : ΟΥΡΑ[50], ΜΠΡΟΣΤΑ, ΠΙΣΩ, ΑΡΙΘΜΟΣ
ΛΟΓΙΚΕΣ : DONE
ΑΡΧΗ
!ΕΛΕΓΧΟΣ ΑΝ Η ΟΥΡΑ ΕΙΝΑΙ ΑΔΕΙΑ
ΑΝ ΠΙΣΩ=0 Ή ΜΠΡΟΣΤΑ>ΠΙΣΩ ΤΟΤΕ
DONE<- ΨΕΥΔΗΣ
ΑΛΛΙΩΣ
ΑΡΙΘΜΟΣ<-ΟΥΡΑ[ΜΠΡΟΣΤΑ]
ΜΠΡΟΣΤΑ<-ΜΠΡΟΣΤΑ+1
DONE<-ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΑΣΚΗΣΗ ΟΥ3_ΚΥΚΛΙΚΗ_ΟΥΡΑ **** (ΕΞΑΓΩΓΗ ΣΤΟΙΧΕΙΟΥ ΑΠΟ ΚΥΚΛΙΚΗ ΟΥΡΑ)
Να γράψετε πρόγραμμα το οποίο να υλοποιεί την εξαγωγή ενός στοιχείου από μία ουρά 10 θέσεων. Μετά από κάθε εξαγωγή να μεταφέρονται όλα τα στοιχεία της ουράς μία θέση αριστερά (δηλαδή η θέση του μπροστινού δείκτη της ουράς να είναι πάντα 1). Η μετακίνηση προς τα αριστερά να γίνεται ανεξαρτήτως αν η ουρά είναι γεμάτη ή όχι.
Απάντηση
ΠΡΟΓΡΑΜΜΑ ΟΥ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: μπροστα, πισω, i, στοιχειο, ΟΥ[10]
ΛΟΓΙΚΕΣ: done
ΑΡΧΗ
ΑΝ μπροστα <= πισω ΚΑΙ πισω> 0 ΤΟΤΕ
στοιχειο <- ΟΥ[μπροστα]
μπροστα<- μπροστα+ 1
done <-- ΑΛΗΘΗΣ
!Μετακίνηση όλων των στοιχείων της ουράς μία θέση αριστερά
ΑΝ μπροστα <= πισω ΤΟΤΕ !Για να σιγουρέψουμε ότι η ουρά δεν είναι άδεια
ΓΙΑ ι ΑΠΟ μπροστα ΜΕΧΡΙ πισω
ΟΥ[μπροστα-1] <- ΟΥ[μπροστα]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
μπροστα <- 1 !ή μπροστα <- μπροστα - 1
πισω <- πισω - 1
ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ
done <-- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Να γράψετε πρόγραμμα το οποίο να υλοποιεί την εξαγωγή ενός στοιχείου από μία ουρά 10 θέσεων. Μετά από κάθε εξαγωγή να μεταφέρονται όλα τα στοιχεία της ουράς μία θέση αριστερά (δηλαδή η θέση του μπροστινού δείκτη της ουράς να είναι πάντα 1). Η μετακίνηση προς τα αριστερά να γίνεται ανεξαρτήτως αν η ουρά είναι γεμάτη ή όχι.
Απάντηση
ΠΡΟΓΡΑΜΜΑ ΟΥ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: μπροστα, πισω, i, στοιχειο, ΟΥ[10]
ΛΟΓΙΚΕΣ: done
ΑΡΧΗ
ΑΝ μπροστα <= πισω ΚΑΙ πισω> 0 ΤΟΤΕ
στοιχειο <- ΟΥ[μπροστα]
μπροστα<- μπροστα+ 1
done <-- ΑΛΗΘΗΣ
!Μετακίνηση όλων των στοιχείων της ουράς μία θέση αριστερά
ΑΝ μπροστα <= πισω ΤΟΤΕ !Για να σιγουρέψουμε ότι η ουρά δεν είναι άδεια
ΓΙΑ ι ΑΠΟ μπροστα ΜΕΧΡΙ πισω
ΟΥ[μπροστα-1] <- ΟΥ[μπροστα]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
μπροστα <- 1 !ή μπροστα <- μπροστα - 1
πισω <- πισω - 1
ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ
done <-- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ