Καθηγητής Πληροφορικής, ΠΕ86

10.5, 10.5.1, 10.5.2, 10.5.3

Διαδικασίες και συναρτήσεις, Ορισμός και κλήση συναρτήσεων, Ορισμός και κλήση διαδικασιών, Πραγματικές και τυπικές παράμετροι
 ΣΥΖΗΤΗΣΕΙΣ ΕΝΟΤΗΤΑΣ

ΘΕΩΡΙΑ – ΠΑΡΑΔΕΙΓΜΑΤΑ

Από το σχολικό βιβλίο:

Κ10Β ΘΕΩΡΙΑ ΠΒ

Σημειώσεις – Διαφάνειες:

ΔΙΑΦΑΝΕΙΕΣ – (648η μέχρι 658η)

MOORE…

Βιντεομαθήματα:

Συναρτήσεις 1 – ΣΠΥΡΟΣ ΓΕΩΡΓΙΟΣ ΖΥΓΟΥΡΗΣ

Συναρτήσεις 2 – ΣΠΥΡΟΣ ΓΕΩΡΓΙΟΣ ΖΥΓΟΥΡΗΣ

Συναρτήσεις 3 – ΣΠΥΡΟΣ ΓΕΩΡΓΙΟΣ ΖΥΓΟΥΡΗΣ

ΔΙΑΔΙΚΑΣΙΕΣ 1 – ΣΠΥΡΟΣ ΓΕΩΡΓΙΟΣ ΖΥΓΟΥΡΗΣ

ΔΙΑΔΙΚΑΣΙΕΣ 2 – ΣΠΥΡΟΣ ΓΕΩΡΓΙΟΣ ΖΥΓΟΥΡΗΣ

ΕΡΩΤΗΣΕΙΣ

Από το σχολικό βιβλίο:

Από άλλο υλικό:

ΑΣΚΗΣΕΙΣ

Από το σχολικό βιβλίο:

Από άλλο υλικό:

Άσκηση 1

Ένας πωλητής λαϊκών αγορών διαθέτει 3 είδη φρούτων: πορτοκάλια, μπανάνες και ροδάκινα. Τα πορτοκάλια πωλούνται προς 0.60 ευρώ/κιλό, οι μπανάνες προς 1.70 ευρώ/κιλό και τα ροδάκινα προς 1.10 ευρώ/κιλό. Να γίνει πρόγραμμα που για κάθε πελάτη που προσέρχεται:
1) Διαβάζει τις ποσότητες σε κιλά για κάθε ένα από τα παραπάνω είδη. Όταν ένας πελάτης δεν αγοράσει κάποιο είδος τότε η αντίστοιχη ποσότητα είναι μηδέν κιλά.
2) Υπολογίζει και εμφανίζει το ποσό που πρέπει να πληρώσει ο καταναλωτής. Ο υπολογισμός θα γίνει με τη κλήση κατάλληλου υποπρογράμματος το οποίο θα υπολογίζει και επιστρέφει τα πληρωτέο ποσό.
3) Να επαναλαμβάνει την παραπάνω διαδικασία μέχρι να δοθεί για κάποια από το φρούτα αρνητική τιμή ως ποσότητα.
4) Στο τέλος θα εμφανίζει τα συνολικά έσοδα του πωλητή.

Λύση

ΠΡΟΓΡΑΜΜΑ μανάβης
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: ποσΠορτοκάλια, ποσΜπανάνες, ποσΡοδάκινα, έσοδα
ΑΡΧΗ
  έσοδα <- 0
  ΔΙΑΒΑΣΕ ποσΠορτοκάλια, ποσΜπανάνες, ποσΡοδάκινα
  ΟΣΟ ποσΠορτοκάλια >= 0 ΚΑΙ ποσΜπανάνες >= 0 ΚΑΙ ποσΡοδάκινα >= 0 ΕΠΑΝΑΛΑΒΕ
    έσοδα <- έσοδα + ΛΟΓΑΡΙΑΣΜΟΣ_ΠΕΛΑΤΗ(ποσΠορτοκάλια, ποσΜπανάνες, ποσΡοδάκινα) 
    ΔΙΑΒΑΣΕ ποσΠορτοκάλια, ποσΜπανάνες, ποσΡοδάκινα
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ "Συνολικά έσοδα: ", έσοδα, " ευρώ"
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
 
ΣΥΝΑΡΤΗΣΗ ΛΟΓΑΡΙΑΣΜΟΣ_ΠΕΛΑΤΗ(ποσΠορτοκάλια, ποσΜπανάνες, ποσΡοδάκινα): ΠΡΑΓΜΑΤΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: ποσΠορτοκάλια, ποσΜπανάνες, ποσΡοδάκινα
ΑΡΧΗ
  ΛΟΓΑΡΙΑΣΜΟΣ_ΠΕΛΑΤΗ <- ποσΠορτοκάλια * 0.6 + ποσΜπανάνες * 1.7 + ποσΡοδάκινα * 1.1
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Άσκηση 2

Σε κάποιο διαγωνισμό σφαιροβολίας, συμμετέχουν 15 αθλητές οι οποίοι έχουν δικαίωμα για 5 βολές. Η καλύτερη από τις 5 προσπάθειες του κάθε αθλητή συγκρίνεται με τις καλύτερες των άλλων αθλητών και νικητής βγαίνει αυτός που είχε την μεγαλύτερη βολή. Να γίνει πρόγραμμα το οποίο:
1) Να διαβάζει τα ονομάτων των αθλητών και κάθε μία από τις βολές τους.
2) Για κάθε αθλητή, να καλεί υποπρόγραμμα το οποίο θα υπολογίζει και επιστρέφει την καλύτερη από τις πέντε βολές του.
3) Να βρίσκει και να εμφανίζει τα ονόματα των τριών πρώτων αθλητών. Υποθέστε πως κάθε βολή έχει διαφορετική τιμή από τις υπόλοιπες.

Λύση

ΠΡΟΓΡΑΜΜΑ σφαιροβολία
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i, j
  ΠΡΑΓΜΑΤΙΚΕΣ: βολες[5], καλύτερηΒολη[15], tmp1
  ΧΑΡΑΚΤΗΡΕΣ: ον[15], ονΚαλύτερου, tmp2
ΑΡΧΗ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 15
    ΔΙΑΒΑΣΕ ον[i] 
    ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 5
      ΔΙΑΒΑΣΕ βολες[j] 
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    καλύτερηΒολη[i] <- maxΒολή(βολες) 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 15
    ΓΙΑ j ΑΠΟ 15 ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1
      ΑΝ καλύτερηΒολη[j] > καλύτερηΒολη[j - 1] ΤΟΤΕ
        tmp1 <- καλύτερηΒολη[j] 
        καλύτερηΒολη[j] <- καλύτερηΒολη[j - 1] 
        καλύτερηΒολη[j - 1] <- tmp1
        tmp2 <- ον[j] 
        ον[j] <- ον[j - 1] 
        ον[j - 1] <- tmp2
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ ον[1], ον[2], ον[3] 
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
 
ΣΥΝΑΡΤΗΣΗ maxΒολή(βολες): ΠΡΑΓΜΑΤΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i
  ΠΡΑΓΜΑΤΙΚΕΣ: βολες[5], max
ΑΡΧΗ
  max <- βολες[1] 
  ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 5
    ΑΝ βολες[i] > max ΤΟΤΕ
      max <- βολες[i] 
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  maxΒολή <- max
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Άσκηση 3

Μία κτηνοτροφική μονάδα παράγει ημερησίως φρέσκο γάλα το οποίο διαθέτει σε συνεργαζόμενη γαλακτοβιομηχανία. Να γράψετε πρόγραμμα το οποίο:
1) Θα διαβάζει την ημερήσια ποσότητα γάλατος που παρήγαγε τον τελευταίο μήνα και θα το αποθηκεύει σε πίνακα 30 θέσεων.
2) Θα υπολογίζει και εμφανίζει τη συνολική μηνιαία παραγωγή γάλατος. Για τον υπολογισμό να δημιουργήσετε υποπρόγραμμα το οποίο θα δέχεται ως παράμετρο τον πίνακα της ημερήσιας παραγωγής και θα επιστρέφει το συνολικό άθροισμα.
3) Θα εντοπίζει τον αριθμό ημέρας με την μεγαλύτερη παραγωγή. Θεωρήστε ότι κάθε μέρα η ημερήσια παραγωγή είναι διαφορετική. Για τον υπολογισμό της μέγιστης παραγωγής να δημιουργήσετε υποπρόγραμμα το οποίο θα δέχεται ως παράμετρο τον πίνακα της ημερήσιας παραγωγής και θα επιστρέφει την θέση του πίνακα με την μεγαλύτερη τιμή.
4) Αν η 1η του μήνα ήταν Δευτέρα, να εμφανίζει ποια μέρα της εβδομάδας σημειώθηκε η μέγιστη παραγωγή. Για την εύρεση της ημέρας να δημιουργήσετε υποπρόγραμμα το οποίο θα δέχεται τον αριθμό της ημέρας και θα επιστρέφει το όνομά της.

Λύση

ΠΡΟΓΡΑΜΜΑ κτηνοτροφική_μονάδα
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i, μεγ_θέση
  ΠΡΑΓΜΑΤΙΚΕΣ: παραγωγή[30], συν_ποσότητα
  ΧΑΡΑΚΤΗΡΕΣ: μεγ_μέρα
ΑΡΧΗ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30
    ΔΙΑΒΑΣΕ παραγωγή[i]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  συν_ποσότητα <- ΑΘΡΟΙΣΜΑ(παραγωγή)
  ΓΡΑΨΕ συν_ποσότητα
  μεγ_θέση <- MAX_ΘΕΣΗ(παραγωγή)
  μεγ_μέρα <- ΜΑΧ_ΗΜΕΡΑ(μεγ_θέση)
  ΓΡΑΨΕ μεγ_μέρα
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
 
ΣΥΝΑΡΤΗΣΗ ΑΘΡΟΙΣΜΑ(ποσότητα):ΠΡΑΓΜΑΤΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i
  ΠΡΑΓΜΑΤΙΚΕΣ: ποσότητα[30], Σ
ΑΡΧΗ
  Σ <- 0
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30
    Σ <- Σ + ποσότητα[i]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΘΡΟΙΣΜΑ <- Σ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
 
ΣΥΝΑΡΤΗΣΗ MAX_ΘΕΣΗ(ποσότητα):ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i, maxθ
  ΠΡΑΓΜΑΤΙΚΕΣ: ποσότητα[30]
ΑΡΧΗ
  maxθ <- 1
  ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 30
    ΑΝ ποσότητα[i] > ποσότητα[maxθ] ΤΟΤΕ
      maxθ <- i
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  MAX_ΘΕΣΗ <- maxθ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
 
ΣΥΝΑΡΤΗΣΗ ΜΑΧ_ΗΜΕΡΑ(maxθ):ΧΑΡΑΚΤΗΡΑΣ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: μ, maxθ
  ΧΑΡΑΚΤΗΡΕΣ: μέρες[7]
ΑΡΧΗ
  μέρες[1] <- "Δευτέρα"
  μέρες[2] <- "Τρίτη"
  μέρες[3] <- "Τετάρτη"
  μέρες[4] <- "Πέμπτη"
  μέρες[5] <- "Παρασκευή"
  μέρες[6] <- "Σάββατο"
  μέρες[7] <- "Κυριακή"
  ! Πιθανά αποτελέσματα: 1 = Δευτέρα, 2 = Τρίτη, 3 = Τετάρτη ... 0 = Κυριακή
  μ <- maxθ MOD 7 
  ΑΝ μ = 0 ΤΟΤΕ
    μ <- 7
  ΤΕΛΟΣ_ΑΝ ! η εντολή ΑΝ θα μπορούσε να αποφευχθεί, αν προηγουμένως γράφαμε: μ <-((maxθ-1) MOD 7) + 1
 
  ΜΑΧ_ΗΜΕΡΑ <- μέρες[μ]
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

εναλλακτικά και πιο απλοϊκά η τελευταία συνάρτηση θα μπορούσε να είχε γραφεί ως εξής:

ΣΥΝΑΡΤΗΣΗ ΜΑΧ_ΗΜΕΡΑ(maxθ):ΧΑΡΑΚΤΗΡΑΣ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: μ, maxθ
ΑΡΧΗ
  ! Πιθανά αποτελέσματα: 1 = Δευτέρα, 2 = Τρίτη, 3 = Τετάρτη ... 0 = Κυριακή
  μ <- maxθ MOD 7 
  ΑΝ μ = 0 ΤΟΤΕ
    ΜΑΧ_ΗΜΕΡΑ <- "Κυριακή"  
  ΑΛΛΙΩΣ_ΑΝ μ = 1 ΤΟΤΕ
    ΜΑΧ_ΗΜΕΡΑ <- "Δευτέρα"  
  ΑΛΛΙΩΣ_ΑΝ μ = 2 ΤΟΤΕ
    ΜΑΧ_ΗΜΕΡΑ <- "Τρίτη"  
  ΑΛΛΙΩΣ_ΑΝ μ = 3 ΤΟΤΕ
    ΜΑΧ_ΗΜΕΡΑ <- "Τετάρτη"  
  ΑΛΛΙΩΣ_ΑΝ μ = 4 ΤΟΤΕ
    ΜΑΧ_ΗΜΕΡΑ <- "Πέμπτη"  
  ΑΛΛΙΩΣ_ΑΝ μ = 5 ΤΟΤΕ
    ΜΑΧ_ΗΜΕΡΑ <- "Παρασκευή"  
  ΑΛΛΙΩΣ
    ΜΑΧ_ΗΜΕΡΑ <- "Σαββάτο"  
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Άσκηση 4

Μία τάξη αποτελείται από 30 μαθητές, κάθε ένας από τους οποίος συμμετείχε σε ένα διαγώνισμα.
Α. Να γίνει πρόγραμμα το οποίο:

θα διαβάζει τους βαθμούς των 30 μαθητών σε έναν πίνακα ΒΑΘ[30] και τα ονόματα τους σε έναν πίνακα ΟΝ_ΜΑΘ[30].
θα εμφανίζει πόσοι μαθητές βαθμολογήθηκαν κάτω από τον μέσο όρο με την βοήθεια των υποπρογραμμάτων ΜΟ και ΠΛΗΘΟΣ_ΚΑΤΩ_ΑΠΟ_ΜΟ που περιγράφονται παρακάτω.
θα εμφανίζει τους καλύτερους μαθητές μέσω του υποπρογράμματος ΕΜΦΑΝΙΣΕ_ΚΑΛΥΤΕΡΟΥΣ_ΜΑΘΗΤΕΣ που περιγράφεται παρακάτω

Β. Στη συνέχεια να κάνετε τα υποπρογράμματα:

ΜΟ που θα δέχεται τις βαθμολογίες των μαθητών και θα υπολογίζει και επιστρέφει το μέσο όρο τους.
ΠΛΗΘΟΣ_ΚΑΤΩ_ΑΠΟ_ΜΟ που θα υπολογίζει και επιστρέφει το πλήθος των μαθητών που πήραν βαθμό μικρότερο από τον μέσο όρο της τάξης.
ΕΜΦΑΝΙΣΕ_ΚΑΛΥΤΕΡΟΥΣ_ΜΑΘΗΤΕΣ που θα εμφανίζει το όνομα των μαθητών που πήραν τον μέγιστο βαθμό που εμφανίστηκε στην τάξη.

Λύση

ΣΥΝΑΡΤΗΣΗ ΜΟ(βαθμός):ΠΡΑΓΜΑΤΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: βαθμός[30], α
  ΑΚΕΡΑΙΕΣ: i
ΑΡΧΗ
  α <- 0
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30
    α <- α + βαθμός[i]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΜΌ <- α / 30
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

ΣΥΝΑΡΤΗΣΗ ΠΛΗΘΟΣ_ΚΑΤΩ_ΑΠΟ_ΜΕΣΟ_ΟΡΟ(βαθμός, μέσος):ΑΚΕΡΑΙΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: βαθμός[30], μέσος
  ΑΚΕΡΑΙΕΣ: i, πλήθος
ΑΡΧΗ
  πλήθος <- 0
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30
    ΑΝ βαθμός[i] < μέσος ΤΟΤΕ
      πλήθος <- πλήθος + 1
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΠΛΗΘΟΣ_ΚΑΤΩ_ΑΠΟ_ΜΕΣΟ_ΟΡΟ <- πλήθος
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

ΔΙΑΔΙΚΑΣΙΑ ΕΜΦΑΝΙΣΕ_ΚΑΛΥΤΕΡΟΥΣ_ΜΑΘΗΤΕΣ(βαθμός, ονόματα)
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: ονόματα[30]
  ΠΡΑΓΜΑΤΙΚΕΣ: βαθμός[30], μέγιστος
  ΑΚΕΡΑΙΕΣ:: i, σύνολο
ΑΡΧΗ
  μέγιστος <-βαθμός[1]
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30
    ΑΝ (βαθμός[i] > μέγιστος)
      μέγιστος <- βαθμός[i]
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 30
    ΑΝ βαθμός[i] = μέγιστος ΤΟΤΕ
      ΓΡΑΨΕ ονόματα[i]
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΠΡΟΓΡΑΜΜΑ μαθητές
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: ΒΑΘ[30], Μ_Ο
  ΧΑΡΑΚΤΗΡΕΣ: ΟΝ_ΜΑΘ [30]
  ΑΚΕΡΑΙΕΣ: i, σύνολο
ΑΡΧΗ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30
    ΔΙΑΒΑΣΕ ΒΑΘ[i]
    ΔΙΑΒΑΣΕ ΟΝ_ΜΑΘ[i]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  Μ_Ο <- ΜΟ(ΒΑΘ)
  σύνολο <- ΠΛΗΘΟΣ_ΚΑΤΩ_ΑΠΟ_ΜΕΣΟ_ΟΡΟ(ΒΑΘ, Μ_Ο)
  ΓΡΑΨΕ σύνολο
  ΚΑΛΕΣΕ ΕΜΦΑΝΙΣΕ_ΚΑΛΥΤΕΡΟΥΣ_ΜΑΘΗΤΕΣ(ΒΑΘ, ΟΝ_ΜΑΘ)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

Άσκηση 5

Μία αίθουσα κινηματογράφου αποτελείται από 15 σειρές καθισμάτων. Κάθε σειρά καθισμάτων περιλαμβάνει 30 καθίσματα.
Η 1η σειρά βρίσκεται μπροστά στην αίθουσα, ενώ αντίστοιχα η 15η στο πίσω μέρος της αίθουσας.
Για τον λόγο αυτό υπάρχει ένας πίνακας ΘΕΣΕΙΣ[15, 30] που αναπαριστά τις μέχρι τώρα δεσμευμένες θέσεις. Έτσι, το στοιχείο ΘΕΣΕΙΣ[i,j] αναπαριστά την j θέση της i σειράς. Τιμή 0 σε αυτό το στοιχείο σημαίνει πως η θέση δεν έχει ακόμη δεσμευθεί, ενώ τιμή 1 σημαίνει πως η θέση είναι δεσμευμένη.
Να γίνει πρόγραμμα το οποίο:

Θα γεμίζει τον πίνακα ΘΕΣΕΙΣ με μηδενικά (0).
Για κάθε πελάτη,
α.θα διαβάζει τον αριθμό των εισιτηρίων που θέλει να αγοράσει. Κατά την ανάγνωση να πραγματοποιείται έλεγχος εγκυρότητας ώστε ο αριθμός των εισιτηρίων να είναι μεταξύ 1 και 4 ή -1.
β. θα καλεί το υποπρόγραμμα ΒΡΕΣ_ΚΑΛΥΤΕΡΕΣ_ΘΕΣΕΙΣ με την βοήθεια του οποίου θα εμφανίζει σε ποια σειρά και σε ποιες θέσεις έγινε η κράτηση ή κατάλληλο μήνυμα σε περίπτωση που ήταν αδύνατο να βρεθούν θέσεις μέσα στην αίθουσα,
γ. να ενημερώνει τις κατάλληλες θέσεις του πίνακα ΘΕΣΕΙΣ εφόσον πραγματοποιήθηκε η κράτηση
δ. να σταματάει όταν η αίθουσα γεμίσει ή δοθεί η τιμή -1 για αριθμό εισιτηρίων
Να εμφανίζει τον αριθμό των αδιάθετων θέσεων.
Να γίνει το υποπρόγραμμα ΒΡΕΣ_ΚΑΛΥΤΕΡΕΣ_ΘΕΣΕΙΣ που θα δέχεται τον πίνακα ΘΕΣΕΙΣ και τον αριθμό των εισιτηρίων προς κράτηση. Το υποπρόγραμμα θα αναζητά τις καλύτερες διαδοχικές θέσεις και θα πρέπει να βρίσκονται όλες στην ίδια σειρά, ξεκινώντας πάντα από την τελευταία σειρά. Το υποπρόγραμμα να επιστρέφει τον αριθμό της σειράς και την πρώτη θέση από το σύνολο των θέσεων που εντοπίστηκαν προς κράτηση. Αν δεν βρέθηκαν θέσεις, τότε να επιστρέφει 0 και 0 για αριθμό σειράς και θέσης αντίστοιχα.

Λύση

ΠΡΟΓΡΑΜΜΑ κινηματογράφος
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i, j, ΘΕΣΕΙΣ[15, 30], σειρά, θέση, εισ, διατέθηκαν
ΑΡΧΗ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 15
    ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 30
      ΘΕΣΕΙΣ[i, j] <- 0
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
 
  διατέθηκαν <- 0
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
      ΔΙΑΒΑΣΕ εισ
    ΜΕΧΡΙΣ_ΟΤΟΥ εισ >= 1 ΚΑΙ εισ <= 4 Η εισ = -1
    ΑΝ εισ > 0 ΤΟΤΕ
      ΚΑΛΕΣΕ ΒΡΕΣ_ΚΑΛΥΤΕΡΕΣ_ΘΕΣΕΙΣ(ΘΕΣΕΙΣ, εισ, σειρά, θέση) 
      ΑΝ σειρά <> 0 ΚΑΙ θέση <> 0 ΤΟΤΕ
        ΓΡΑΨΕ "Βρέθηκαν εισιτήρια στην σειρά ", σειρά, " από την θέση ", θέση, " μέχρι την θέση ", (θέση + εισ - 1) 
        ΓΙΑ j ΑΠΟ θέση ΜΕΧΡΙ θέση + εισ - 1
          ΘΕΣΕΙΣ[σειρά, j] <- 1
        ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
        διατέθηκαν <- διατέθηκαν + εισ
      ΑΛΛΙΩΣ
        ΓΡΑΨΕ "Δεν βρέθηκαν ", εισ, " διαδοχικές θέσεις σε κάποια σειρά"
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΑΝ
  ΜΕΧΡΙΣ_ΟΤΟΥ διατέθηκαν = 15*30 Η εισ = -1
 
  ΓΡΑΨΕ "Έμειναν αδιάθετες ", 15*30 - διατέθηκαν, " θέσεις!"
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ κινηματογράφος
 
ΔΙΑΔΙΚΑΣΙΑ ΒΡΕΣ_ΚΑΛΥΤΕΡΕΣ_ΘΕΣΕΙΣ(ΘΕΣΕΙΣ, εισ, σειρά, θέση) 
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i, j, ΘΕΣΕΙΣ[15, 30], σειρά, θέση, εισ, κ, πλ
  ΛΟΓΙΚΕΣ: βρέθηκε, βρέθηκε2
ΑΡΧΗ
  σειρά <- 0
  θέση <- 0
 
  i <- 15
  βρέθηκε <- ΨΕΥΔΗΣ
  ΟΣΟ (i >= 1 ΚΑΙ βρέθηκε = ΨΕΥΔΗΣ) ΕΠΑΝΑΛΑΒΕ
    j <- 1
    πλ <- 0
    ΟΣΟ j <= 30 ΚΑΙ βρέθηκε = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ
      ΑΝ ΘΕΣΕΙΣ[i, j] = 0 ΤΟΤΕ
        πλ <- πλ + 1
        ΑΝ πλ = εισ ΤΟΤΕ
          βρέθηκε <- ΑΛΗΘΗΣ
          σειρά <- i
          θέση <- j - εισ + 1
        ΤΕΛΟΣ_ΑΝ
      ΤΕΛΟΣ_ΑΝ
      j <- j + 1
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    i <- i - 1
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Άσκηση 6

Να γράψετε συνάρτηση Μ_0_3 σε ΓΛΩΣΣΑ η οποία να υπολογίζει το μέσο όρο 3 ακεραίων.

Λύση

ΣΥΝΑΡΤΗΣΗ Μ_Ο_3(Α, Β, Γ): ΠΡΑΓΜΑΤΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ :  Α, Β, Γ
ΑΡΧΗ
Μ_Ο_3 <- (Α+Β+Γ)/3
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Άσκηση 7

Να γράψετε συνάρτηση σε ΓΛΩΣΣΑ η οποία θα παίρνει είσοδο τα ονόματα και τους πόντους που πέτυχαν 2 ομάδες μπάσκετ και θα δίνει σαν αποτέλεσμα το όνομα της νικήτριας ομάδας ή το μήνυμα “ΙΣΟΠΑΛΙΑ”.

Λύση

ΣΥΝΑΡΤΗΣΗ ΑΓ(Ο1, Ο2,Π1, Π2): ΧΑΡΑΚΤΗΡΑΣ
ΜΕΤΑΒΛΗΤΕΣ
ΧΑΡΑΚΤΗΡΕΣ:  Ο1, Ο2
ΑΚΕΡΑΙΕΣ : Π1, Π2
ΑΡΧΗ
ΑΝ Π1>Π2 ΤΟΤΕ
ΑΓ <- Ο1
ΑΛΛΙΩΣ_ΑΝ Π1<Π2 ΤΟΤΕ
ΑΓ <- Ο2
ΑΛΛΙΩΣ
ΑΓ <- ‘ΙΣΟΠΑΛΙΑ’
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Άσκηση 8

Να γράψετε διαδικασία σε ΓΛΩΣΣΑ η οποία θα διαβάζει 2 πραγματικούς αριθμούς και θα ελέγχει αν αυτοί είναι θετικοί.

Λύση

ΔΙΑΔΙΚΑΣΙΑ ΘΕΤΙΚΟΙ(Α, Β)
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ:  Α, Β
ΑΡΧΗ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΔΙΑΒΑΣΕ Α
ΜΕΧΡΙΣ_ΟΤΟΥ Α>0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ 
    ΔΙΑΒΑΣΕ Β
ΜΕΧΡΙΣ_ΟΤΟΥ Β>0
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Άσκηση 9

Να γράψετε διαδικασία σε ΓΛΩΣΣΑ η οποία θα εφαρμόζει σειριακή αναζήτηση σε πίνακα ακεραίων Π[50] και θα επιστρέφει ΑΛΗΘΗΣ ή ΨΕΥΔΗΣ αναλόγως αν βρεθεί το ζητούμενο στοιχείο στον πίνακα ή όχι. Όταν το ζητούμενο στοιχείο βρεθεί να σταματά η αναζήτηση.

Λύση

ΔΙΑΔΙΚΑΣΙΑ ΣΕΡΙΑΚΗ(Π, ΖΗΤΟΥΜΕΝΟ, ΒΡΕΘΗΚΕ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ:  Π[50], ι, ΖΗΤΟΥΜΕΝΟ
ΛΟΓΙΚΕΣ : ΒΡΕΘΗΚΕ
ΑΡΧΗ
ΒΡΕΘΗΚΕ<- ΨΕΥΔΗΣ
ι <- 1
ΟΣΟ ι<=50 ΚΑΙ ΒΡΕΘΗΚΕ = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ
ΑΝ ΖΗΤΟΥΜΕΝΟ = Π[ι] ΤΟΤΕ
ΒΡΕΘΗΚΕ <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
ι<- ι + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Άσκηση 10

Να γράψετε πρόγραμμα το οποίο να διαβάζει έναν πίνακα 100 πραγματικών με την βοήθεια μια διαδικασίας και να υπολογίζει τον μέσο όρο των στοιχείων αυτών. Ο υπολογισμός του μέσου όρου να γίνει με την βοήθεια συνάρτησης.

Λύση

ΠΡΟΓΡΑΜΜΑ ΥΠ10
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ : Π[100] ΑΡΧΗ
ΚΑΛΕΣΕ ΕΙΣΑΓΩΓΗ(Π)  !ΚΑΛΟΥΜΕ ΔΙΑΔΙΚΑΣΙΑ ΓΙΑ ΕΙΣΑΓΩΓΗ ΤΩΝ ΣΤΟΙΧΕΙΩΝ  ΤΟΥ ΠΙΝΑΚΑ Π .    Ο ΠΙΝΑΚΑΣ ΑΝΑΦΕΡΕΤΕ ΣΤΙΣ ΠΑΡΑΜΕΤΡΟΥΣ ΑΠΛΑ ΜΕ ΤΟ
! ΟΝΟΜΑ ΤΟΥ ΔΛΔ Π

ΓΡΑΨΕ ΜΟ[Π] !ΚΑΛΟΥΜΕ ΤΗ ΣΥΝΑΡΤΗΣΗ ΜΟ ΓΙΑ ΤΟΝ ΠΙΝΑΚΑ Π
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΔΙΑΔΙΚΑΣΙΑ ΕΙΣΑΓΩΓΗ(Π)
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ : Π[100], ι
ΑΡΧΗ
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 100
ΔΙΑΒΑΣΕ Π[ι] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΣΥΝΑΡΤΗΣΗ ΜΟ(Π) : ΠΡΑΓΜΑΤΙΚΗ
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ : Π[100], ι , ΑΘΡΟΙΣΜΑ
ΑΡΧΗ
ΑΘΡΟΙΣΜΑ <- 0
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 100
ΑΘΡΟΙΣΜΑ <- ΑΘΡΟΙΣΜΑ + Π[ι] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΟ <- ΑΘΡΟΙΣΜΑ / 100
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Άσκηση 11

Να υλοποιήσετε την ώθηση και την απώθηση σε στοίβα με χρήση υποπρογραμμάτων. Στο κυρίως πρόγραμμα να γίνεται ώθηση 10 στοιχείων και στη συνέχεια απώθηση 10 στοιχείων. Η στοίβα να υλοποιηθεί με πίνακα 50 θέσεων. Τα υποπρογράμματα να έχουν ως έξοδο τη στοίβα, έναν δείκτη και μια λογική μεταβλητή για το αν η ενέργεια ολοκληρώθηκε.

Λύση

ΠΡΟΓΡΑΜΜΑ ΥΠ11_ΣΤΟΙΒΑ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : ι, κορυφή, Σ[50], στοιχείο
ΛΟΓΙΚΕΣ : οκ
ΑΡΧΗ
κορυφή <- 0
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10
ΔΙΑΒΑΣΕ στοιχείο
ΚΑΛΕΣΕ Ωθηση(Σ, στοιχείο, κορυφή, οκ)
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10
ΚΑΛΕΣΕ Απώθηση(Σ, στοιχείο, κορυφή, οκ)
ΓΡΑΨΕ στοιχείο
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

​ΔΙΑΔΙΚΑΣΙΑ Ωθηση(Σ, στοιχείο, κορυφή, οκ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : Σ[50], στοιχείο, κορυφή
ΛΟΓΙΚΕΣ : οκ
ΑΡΧΗ
ΑΝ κορυφή <50 ΤΟΤΕ
κορυφή <- κορυφή + 1
Σ[κορυφή] <- στοιχείο
οκ <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
οκ <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΔΙΑΔΙΚΑΣΙΑ Απώθηση(Σ, στοιχείο, κορυφή, οκ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : Σ[50], στοιχείο, κορυφή
ΛΟΓΙΚΕΣ : οκ
ΑΡΧΗ
ΑΝ κορυφή >0 ΤΟΤΕ
στοιχείο <- Σ[κορυφή] κορυφή <- κορυφή -1
οκ <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
οκ <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Άσκηση 12

Να χρησιμοποιήσετε στοίβα για να υλοποιήσετε την μετατροπή ενός θετικού δεκαδικού αριθμού [0-10000] στον αντίστοιχο δυαδικό. Για την ώθηση και την απώθηση των στοιχείων της στοίβας να χρησιμοποιήσετε διαδικασίες. Στη συνέχεια να εμφανίζεται ο δυαδικός αριθμός.

Λύση

ΠΡΟΓΡΑΜΜΑ ΥΠ12_ΣΤΟΙΒΑ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : κορυφή, Σ[50], στοιχείο, δεκαδικος
ΛΟΓΙΚΕΣ : οκ
ΑΡΧΗ
κορυφή <- 0
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ  !έλεγχος ορθότητας εισόδου για τον δεκαδικό αριθμό
    ΔΙΑΒΑΣΕ δεκαδικος
ΜΕΧΡΙΣ_ΟΤΟΥ δεκαδικος >= 0 ΚΑΙ δεκαδικος <=10000

ΟΣΟ δεκαδικος > 0 ΕΠΑΝΑΛΑΒΕ  !Υπολογισμός του δυαδικού με τη βοήθεια της ώθησης σε στοίβα
στοιχείο <- δεκαδικος MOD 2
ΚΑΛΕΣΕ Ωθηση(Σ, στοιχείο, κορυφή, οκ)
δεκαδικος <- δεκαδικος DIV 2
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΚΑΛΕΣΕ Απωθηση(Σ, στοιχείο, κορυφή, οκ)
 ΑΝ οκ= ΑΛΗΘΗΣ ΤΟΤΕ
ΓΡΑΨΕ στοιχείο
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ οκ = ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

​ΔΙΑΔΙΚΑΣΙΑ Ωθηση(Σ, στοιχείο, κορυφή, οκ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : Σ[50], στοιχείο, κορυφή
ΛΟΓΙΚΕΣ : οκ
ΑΡΧΗ
ΑΝ κορυφή <50 ΤΟΤΕ
κορυφή <- κορυφή + 1
Σ[κορυφή] <- στοιχείο
οκ <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
οκ <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΔΙΑΔΙΚΑΣΙΑ Απώθηση(Σ, στοιχείο, κορυφή, οκ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : Σ[50], στοιχείο, κορυφή
ΛΟΓΙΚΕΣ : οκ
ΑΡΧΗ
ΑΝ κορυφή >0 ΤΟΤΕ
στοιχείο <- Σ[κορυφή] κορυφή <- κορυφή -1
οκ <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
οκ <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Άσκηση 13

Να χρησιμοποιήσετε στοίβα για να υλοποιήσετε τον έλεγχο εισερχομένων (εισ) – εξερχομένων (εξ) εγγράφων σε μία υπηρεσία. Στο τέλος κάθε ημέρας πρέπει όλα τα εισερχόμενα να έχουν ελεγχθεί και να επιστρέφουν ως εξερχόμενα στον αποστολέα τους. Κάθε εισ. σημειώνεται με το σύμβολο ‘+’ και κάθε εξ. με το σύμβολο ‘-‘. Να χρησιμοποιήσετε πίνακα 50 θέσεων για την υλοποίηση της στοίβας. Σε περίπτωση λάθους όσον αφορά το συνολικό πλήθος εισ -εξ (τα οποία πρέπει να είναι ίσα) να εμφανίζεται το μήνυμα ‘Παρακαλώ ελέγξτε τα εισ και τα εξ.’ αλλιώς να εμφανίζει το μήνυμα ‘Καλή δουλειά σήμερα!’. Να πραγματοποιείται έλεγχος εισόδου για το σύμβολο εισ-εξ. Το τέλος εισόδου πραγματοποιείται αν δοθεί είσοδος η λέξη ‘ΤΕΛΟΣ’.

Λύση

ΠΡΟΓΡΑΜΜΑ ΥΠ13_ΣΤΟΙΒΑ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : κορυφή
ΧΑΡΑΚΤΗΡΕΣ : συμβολο, ΣΤ[50] ΛΟΓΙΚΕΣ : οκ, οχι_λαθος
ΑΡΧΗ
κορυφή <- 0
οχι_λαθος <- ΑΛΗΘΗΣ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ  !έλεγχος ορθότητας εισόδου
    ΔΙΑΒΑΣΕ συμβολο
ΜΕΧΡΙΣ_ΟΤΟΥ συμβολο = ‘+’   Ή   συμβολο = ‘-‘

ΟΣΟ συμβολο<>’ΤΕΛΟΣ’  ΚΑΙ οχι_λαθος = ΑΛΗΘΗΣ ΕΠΑΝΑΛΑΒΕ  
ΑΝ συμβολο = ‘+’ ΤΟΤΕ
ΚΑΛΕΣΕ Ωθηση(ΣΤ, συμβολο, κορυφη, οκ)
ΑΛΛΙΩΣ_ΑΝ συμβολο = ‘-‘ ΤΟΤΕ
ΚΑΛΕΣΕ Απωθηση(ΣΤ, συμβολο, κορυφη, οκ)
ΑΝ οκ=ΨΕΥΔΗΣ ΤΟΤΕ οχι_λαθος<- ΨΕΥΔΗΣ
    ΤΕΛΟΣ_ΑΝ
    ΑΝ οχι_λαθος = ΑΛΗΘΗΣ ΤΟΤΕ ΔΙΑΒΑΣΕ συμβολο
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΑΝ συμβολο = ‘ΤΕΛΟΣ’ ΤΟΤΕ  !Στο τέλος θα πρέπει η στοίβα να είναι αδεια. Δλδ η απώθηση να δώσει οκ ΨΕΥΔΗΣ, αλλιώς έχουμε λάθος
ΚΑΛΕΣΕ Απωθηση(ΣΤ, συμβολο, κορυφη, οκ)
ΑΝ οκ = ΑΛΗΘΗΣ ΤΟΤΕ οχι_λαθος <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ

ΑΝ οχι_λαθος = ΨΕΥΔΗΣ ΤΟΤΕ
ΓΡΑΨΕ ‘Παρακαλώ ελέγξτε τα εισ και τα εξ.’
ΑΛΛΙΩΣ
ΓΡΑΨΕ ‘Καλή δουλειά σήμερα!’
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

​ΔΙΑΔΙΚΑΣΙΑ Ωθηση(Σ, στοιχείο, κορυφή, οκ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : κορυφή
ΧΑΡΑΚΤΗΡΕΣ : στοιχείο, ΣΤ[50] ΛΟΓΙΚΕΣ : οκ
ΑΡΧΗ
ΑΝ κορυφή <50 ΤΟΤΕ
κορυφή <- κορυφή + 1
Σ[κορυφή] <- στοιχείο
οκ <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
οκ <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΔΙΑΔΙΚΑΣΙΑ Απώθηση(Σ, στοιχείο, κορυφή, οκ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : κορυφή
ΧΑΡΑΚΤΗΡΕΣ : στοιχείο, ΣΤ[50] ΛΟΓΙΚΕΣ : οκ
ΑΡΧΗ
ΑΝ κορυφή >0 ΤΟΤΕ
στοιχείο <- Σ[κορυφή] κορυφή <- κορυφή -1
οκ <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
οκ <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Άσκηση 14

Ένας καθηγητής Πληροφορικής επιθυμεί να υλοποιήσει ένα πρόγραμμα το οποίο θα επιδεικνύει τη χρήση μίας ουράς η οποία θα υλοποιείται με έναν μονοδιάστατο πίνακα 50 ακεραίων αριθμών και δύο δείκτες ΕΜΠΡΟΣ και ΠΙΣΩ. Το πρόγραμμα θα πρέπει να περιλαμβάνει ένα υποπρόγραμμα για την εισαγωγή ενός στοιχείου στην ουρά και ένα υποπρόγραμμα για την εξαγωγή ενός στοιχείου από την ουρά (στα υποπρογράμματα θα πρέπει να εμφανίζονται κατάλληλα μηνύματα όταν δεν είναι δυνατό να υλοποιηθεί μία ενέργεια).

Να γραφεί πρόγραμμα το οποίο:

α) Θα αρχικοποιεί μία ουρά 50 θέσεων και θα εκτελεί, με χρήση κατάλληλων υποπρογραμμάτων, τις παρακάτω ενέργειες: εισαγωγή του αριθμού 10 στην ουρά, εισαγωγή του αριθμού 20 στην ουρά, εξαγωγή ενός στοιχείου από την ουρά και εμφάνιση του στο κυρίως πρόγραμμα, εισαγωγή του αριθμού 30 στην ουρά και εξαγωγή ενός στοιχείου από την ουρά και εμφάνιση του στο κυρίως πρόγραμμα,

β) Θα περιέχει υποπρόγραμμα το οποίο θα εισάγει ένα στοιχείο στην ουρά και

γ) Θα περιέχει υποπρόγραμμα το οποίο θα εξάγει ένα στοιχείο από την ουρά και θα το επιστρέφει.

Λύση

ΠΡΟΓΡΑΜΜΑ Επίδειξη_Ουράς
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΟΥΡΑ[50], ΕΜΠΡΟΣ, ΠΙΣΩ, ΣΤΟΙΧΕΙΟ
ΑΡΧΗΕΜΠΡΟΣ <- 0
ΠΙΣΩ <- 0

ΚΑΛΕΣΕ ΕΙΣΑΓΩΓΗ(ΟΥΡΑ, ΕΜΠΡΟΣ, ΠΙΣΩ, 10)
ΚΑΛΕΣΕ ΕΙΣΑΓΩΓΗ(ΟΥΡΑ, ΕΜΠΡΟΣ, ΠΙΣΩ, 20)
ΚΑΛΕΣΕ ΕΞΑΓΩΓΗ(ΟΥΡΑ, ΕΜΠΡΟΣ, ΠΙΣΩ, ΣΤΟΙΧΕΙΟ)
ΓΡΑΨΕ ΣΤΟΙΧΕΙΟ
ΚΑΛΕΣΕ ΕΙΣΑΓΩΓΗ(ΟΥΡΑ, ΕΜΠΡΟΣ, ΠΙΣΩ, 30)
ΚΑΛΕΣΕ ΕΞΑΓΩΓΗ(ΟΥΡΑ, ΕΜΠΡΟΣ, ΠΙΣΩ, ΣΤΟΙΧΕΙΟ)
ΓΡΑΨΕ ΣΤΟΙΧΕΙΟ

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Επίδειξη_Ουράς

ΔΙΑΔΙΚΑΣΙΑ ΕΙΣΑΓΩΓΗ(ΟΥΡΑ, ΕΜΠΡΟΣ, ΠΙΣΩ, ΣΤΟΙΧΕΙΟ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΟΥΡΑ[50], ΕΜΠΡΟΣ, ΠΙΣΩ, ΣΤΟΙΧΕΙΟ
ΑΡΧΗ
ΑΝ ΕΜΠΡΟΣ = 0 ΚΑΙ ΠΙΣΩ = 0 ΤΟΤΕ
ΕΜΠΡΟΣ <- 1
ΠΙΣΩ <- 1
ΟΥΡΑ[ΠΙΣΩ] <- ΣΤΟΙΧΕΙΟ
ΑΛΛΙΩΣ_ΑΝ ΠΙΣΩ < 50 ΤΟΤΕ
ΠΙΣΩ <- ΠΙΣΩ + 1
ΟΥΡΑ[ΠΙΣΩ] <- ΣΤΟΙΧΕΙΟ
ΑΛΛΙΩΣ
ΓΡΑΨΕ ‘Γεμάτη ουρά.’
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΔΙΑΔΙΚΑΣΙΑ ΕΞΑΓΩΓΗ(ΟΥΡΑ, ΕΜΠΡΟΣ, ΠΙΣΩ, ΣΤΟΙΧΕΙΟ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΟΥΡΑ[50], ΕΜΠΡΟΣ, ΠΙΣΩ, ΣΤΟΙΧΕΙΟ
ΑΡΧΗ
ΑΝ ΕΜΠΡΟΣ = 0 ΚΑΙ ΠΙΣΩ = 0 ΤΟΤΕ
ΓΡΑΨΕ ‘Άδεια ουρά.’
ΑΛΛΙΩΣ_ΑΝ ΕΜΠΡΟΣ = ΠΙΣΩ ΤΟΤΕ
ΣΤΟΙΧΕΙΟ <- ΟΥΡΑ[ΕΜΠΡΟΣ] ΕΜΠΡΟΣ <- 0
ΠΙΣΩ <- 0
ΑΛΛΙΩΣ
ΣΤΟΙΧΕΙΟ <- ΟΥΡΑ[ΕΜΠΡΟΣ] ΕΜΠΡΟΣ <- ΕΜΠΡΟΣ + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ


Άσκηση 15

Χρησιμοποιώντας την κατάλληλη μορφή υποπρογράμματος, να γραφεί ως υποπρόγραμμα ο αλγόριθμος αλά ρωσικά με είσοδο ακεραίους Μ1, Μ2.

Λύση

ΣΥΝΑΡΤΗΣΗ Γινόμενο(Μ1, Μ2): ΑΚΕΡΑΙΑ

ΜΕΤΑΒΛΗΤΕΣ

ΑΚΕΡΑΙΕΣ: ΜΙ, Μ2, άθροισμα

ΑΡΧΗ

άθροισμα ← Ο

ΟΣΟ Μ2 > Ο ΕΠΑΝΑΛΑΒΕ

ΑΝ Μ2 MOD 2 = 1 ΤΟΤΕ

άθροισμα ← άθροισμα + Μ1

ΤΕΛΟΣ_ΑΝ

Μ1 ← Μ1*2

Μ2 ← Μ2 DIV 2

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Γινόμενο ← άθροισμα

ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ

Άσκηση 16

Να γράψετε πρόγραμμα που θα διαβάζει 10 ακεραίους αριθμούς και θα κάνει εισαγωγή των αριθμών σε μια ουρά 10 θέσεων, στη συνέχεια να εξαχθούν 5 αριθμοί οι οποίοι θα εμφανίζονται με τη σειρά που εξάγονται.
Να εμφανιστούν κατά σειρά οι αριθμοί που βρίσκονται στο τέλος μέσα στην ουρά.
Το πρόγραμμα θα καλεί τις διαδικασίες ΕΙΣΑΓΩΓΗ και ΕΞΑΓΩΓΗ που θα υλοποιούν τις αντίστοιχες λειτουργίες της ουράς τις οποίες και θα γράψετε. Αν η ουρά γεμίσει αλλά έχει άδειες θέσεις μπροστά, τότε να μεταφέρονται τα στοιχεία που βρίσκονται στην ουρά μπροστά ώστε να συνεχίζεται η διαδικασία της εισαγωγής.
Θα επιστρέφονται από τις διαδικασίες οι λογικές τιμές ΑΛΗΘΗΣ ή ΨΕΥΔΗΣ αναλόγως αν η εισαγωγή ή η εξαγωγή στοιχείου στην ουρά έγιναν επιτυχώς ή όχι.

Λύση

ΠΡΟΓΡΑΜΜΑ ΥΠ16
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: μπροστα, πισω, i, στοιχειο, ΟΥ[10] ΛΟΓΙΚΕΣ: done
ΑΡΧΗ
μπροστα <- 0
πισω <- 0
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10
ΓΡΑΨΕ ‘Δώστε ακέραιο αριθμό’
ΔΙΑΒΑΣΕ στοιχειο
ΚΑΛΕΣΕ ΕΙΣΑΓΩΓΗ (ΟΥ, στοιχειο, μπροστα, πισω, done)
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5
ΚΑΛΕΣΕ ΕΞΑΓΩΓΗ (ΟΥ, στοιχειο, μπροστα, πισω, done)
ΓΡΑΨΕ στοιχειο
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ    

ΓΙΑ i ΑΠΟ μπροστα ΜΕΧΡΙ πισω
ΓΡΑΨΕ ΟΥ[i] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΔΙΑΔΙΚΑΣΙΑ ΕΙΣΑΓΩΓΗ (ΟΥ, στοιχειο, μπροστα, πισω, done)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΟΥ[10], στοιχειο, μπροστα, πισω, S, i
ΛΟΓΙΚΕΣ: done
ΑΡΧΗ
ΑΝ πισω< 10 ΤΟΤΕ
πισω <- πισω + 1
ΟΥ[πισω] <-στοιχειο
ΑΝ μπροστα= 0 ΤΟΤΕ
μπροστα <- 1
ΤΕΛΟΣ_ΑΝ
done <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ_ΑΝ  μπροστα = 1 ΤΟΤΕ
done <- ΨΕΥΔΗΣ  ! Έχουμε στοίβα με δείκτη πισω=10 και μπροστα=1, δηλαδή γεμάτη λίστα
ΑΛΛΙΩΣ        !μετακίνηση στοιχείων στην αρχή του πίνακα αφού υπάρχουν κενές θέσεις μπροστά
S <- πισω – μπροστα + 1
ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ S
ΟΥ[i] <- ΟΥ[μπροστα] μπροστα <- μπροστα + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
μπροστα <- 1
πισω <- S + 1
ΟΥ[πισω] <- στοιχειο
done <– ΑΛΗΘΗΣ
 ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΔΙΑΔΙΚΑΣΙΑ ΕΞΑΓΩΓΗ (ΟΥ, στοιχειο, μπροστα, πισω, done)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΟΥ[10], στοιχειο, μπροστα, πισω
ΛΟΓΙΚΕΣ: done
ΑΡΧΗ
ΑΝ μπροστα <= πισω ΚΑΙ μπροστα <> 0 ΤΟΤΕ
στοιχειο <- ΟΥ[μπροστα] μπροστα<- μπροστα+ 1
done <– ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
done <– ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Άσκηση 17

Να υλοποιήσετε την εισαγωγή και την εξαγωγή σε ουρά με χρήση υποπρογραμμάτων. Στο κυρίως πρόγραμμα να γίνεται εισαγωγή 10 στοιχείων και στη συνέχεια εξαγωγή 10 στοιχείων. Η ουρά να υλοποιηθεί με πίνακα 50 θέσεων. Τα υποπρογράμματα να παράγουν ως έξοδο τη ουρά, το στοιχείο, τον δείκτη μπροστά, στον δείκτη πίσω και μια λογική μεταβλητή για το αν η ενέργεια ολοκληρώθηκε.

Λύση

ΠΡΟΓΡΑΜΜΑ ΥΠ17_ΟΥΡΑ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : ι, μπροστά, πίσω, Ο[50], στοιχείο
ΛΟΓΙΚΕΣ : οκ
ΑΡΧΗ
μπροστά <- 0
πίσω <- 0
ΓΙΑ ι ΑΠΟ ΜΕΧΡΙ 10
ΔΙΑΒΑΣΕ στοιχείο
ΚΑΛΕΣΕ Εισαγωγή(Ο, στοιχείο, μπροστά, πίσω, οκ)
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΓΙΑ ι ΑΠΟ ΜΕΧΡΙ 10
ΚΑΛΕΣΕ Εξαγωγή(Ο, στοιχείο, μπροστά, πίσω, οκ)
ΓΡΑΨΕ στοιχείο
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

​ΔΙΑΔΙΚΑΣΙΑ Εισαγωγή(Ο, στοιχείο, μπροστά, πίσω, οκ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : Ο[50], στοιχείο, μπροστά, πίσω
ΛΟΓΙΚΕΣ : οκ
ΑΡΧΗ
ΑΝ πίσω<50 ΤΟΤΕ
πίσω<- πίσω + 1
Ο[πίσω] <- στοιχείο
οκ <- ΑΛΗΘΗΣ
    ΑΝ μπροστά =0 ΤΟΤΕ 
μπροστά <- 1
ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ
οκ <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΔΙΑΔΙΚΑΣΙΑ Εξαγωγή(Ο, στοιχείο, μπροστά, πίσω, οκ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ : Ο[50], στοιχείο, μπροστά, πίσω
ΛΟΓΙΚΕΣ : οκ
ΑΡΧΗ
ΑΝ μπροστά<=πίσω ΚΑΙ πίσω>0 ΤΟΤΕ
στοιχείο <- Ο[μπροστά] μπροστά<- μπροστά + 1
οκ <- ΑΛΗΘΗΣ
ΑΛΛΙΩΣ
οκ <- ΨΕΥΔΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΓΙΑ ΤΟ ΣΠΙΤΙ…

ΣΤΕΙΛΕ ΜΟΥ ΤΙΣ ΑΠΑΝΤΗΣΕΙΣ: ΕΔΩ