ΠΡΟΓΡΑΜΜΑ Κυκλική_Ουρά
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Πίσω, Μπροστά, Ουρα[10], ι, Τιμή
ΑΡΧΗ
Τιμή <- 0
Πίσω <- 1
Μπροστά <- 0
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10
Ουρα[ι] <- 0
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ Δείξε(Πίσω, Μπροστά, Ουρα)
!! Προσθήκη 10 στοιχεία 1 έως 10
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10
ΚΑΛΕΣΕ Εισαγωγή_Στοιχείου(ι, Πίσω, Μπροστά, Ουρα)
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ Δείξε(Πίσω, Μπροστά, Ουρα)
!! Αφαίρεση 5 στοιχείων
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 5
ΑΝ Μπροστά <> 0 ΤΟΤΕ
ΚΑΛΕΣΕ Εξαγωγή_Στοιχείου(Τιμή, Πίσω, Μπροστά, Ουρα)
ΓΡΑΨΕ 'Εξαγωγή ', Τιμή
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Λάθος Εξαγωγής, Η ουρά είναι άδεια'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ Δείξε(Πίσω, Μπροστά, Ουρα)
!! Προσθήκη 5 στοιχεία 11 έως 15
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 5
ΚΑΛΕΣΕ Εισαγωγή_Στοιχείου(ι + 10, Πίσω, Μπροστά, Ουρα)
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ Δείξε(Πίσω, Μπροστά, Ουρα)
!! Αφαίρεση 10 στοιχείων
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10
ΑΝ Μπροστά <> 0 ΤΟΤΕ
ΚΑΛΕΣΕ Εξαγωγή_Στοιχείου(Τιμή, Πίσω, Μπροστά, Ουρα)
ΓΡΑΨΕ 'Εξαγωγή ', Τιμή
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Λάθος Εξαγωγής, Η ουρά είναι άδεια'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ Δείξε(Πίσω, Μπροστά, Ουρα)
!! Προσθήκη 2 στοιχεία 16 έως 17
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 2
ΚΑΛΕΣΕ Εισαγωγή_Στοιχείου(ι + 15, Πίσω, Μπροστά, Ουρα)
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ Δείξε(Πίσω, Μπροστά, Ουρα)
!! Αφαίρεση 3 στοιχείων
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 3
ΑΝ Μπροστά <> 0 ΤΟΤΕ
ΚΑΛΕΣΕ Εξαγωγή_Στοιχείου(Τιμή, Πίσω, Μπροστά, Ουρα)
ΓΡΑΨΕ 'Εξαγωγή ', Τιμή
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Λάθος Εξαγωγής, Η ουρά είναι άδεια'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ Δείξε(Πίσω, Μπροστά, Ουρα)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ Εισαγωγή_Στοιχείου(Α, Πίσω, Μπροστά, Ουρα)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α, Πίσω, Μπροστά, Ουρα[10]
ΑΡΧΗ
ΑΝ Πίσω = Μπροστά ΤΟΤΕ
ΓΡΑΨΕ 'Η ουρά γέμισε, δεν θα βάλω το ', Α
ΑΛΛΙΩΣ
ΑΝ Μπροστά = 0 ΤΟΤΕ
Μπροστά <- Πίσω
ΤΕΛΟΣ_ΑΝ
Ουρα[Πίσω] <- Α
Πίσω <- Πίσω mod 10 + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ Εξαγωγή_Στοιχείου(Α, Πίσω, Μπροστά, Ουρα)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α, Πίσω, Μπροστά, Ουρα[10]
ΑΡΧΗ
ΑΝ Μπροστά > 0 ΤΟΤΕ
Α <- Ουρα[Μπροστά]
Μπροστά <- Μπροστά mod 10 + 1
ΑΝ Μπροστά = Πίσω ΤΟΤΕ
Μπροστά <- 0
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ Δείξε(Πίσω, Μπροστά, Ουρα)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Πίσω, Μπροστά, Ουρα[10], ι
ΑΡΧΗ
ΑΝ Μπροστά = 0 ΤΟΤΕ
ΓΡΑΨΕ 'Η ουρά είναι άδεια'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Αρχή Ουράς ', Μπροστά
ΑΝ Μπροστά = Πίσω ΤΟΤΕ
ΓΡΑΨΕ Ουρα[Μπροστά]
ι <- Μπροστά mod 10 + 1
ΑΛΛΙΩΣ
ι <- Μπροστά
ΤΕΛΟΣ_ΑΝ
ΟΣΟ ι <> Πίσω ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ Ουρα[ι]
ι <- ι mod 10 + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Τέλος ουράς ', Πίσω
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Proud of my student...
Άξιος! Οι web τεχνολογίες (HTML5/Javascript/CSS) πλέον είναι υπερ-ώριμες για ένα τέτοιο εγχείρημα, και θα βοηθήσει αρκετούς μαθητές που έχουν πρόσβαση μόνο σε tablets/κινητά. Να μην παρασυρθείς μόνο και μειώσεις το διάβασμα για τις Πανελλαδικές, γιατί θα είναι κρίμα να φτιάξεις διερμηνευτή και να μην πάρεις 20 στην ΑΕΠΠ!
Να υποθέσω θα σε έχουμε συνάδελφο Πληροφορικό σε λίγα χρόνια;
@komni
Καλή η προσπάθεια, της μετατροπής σε javascript.
1. Εκτός από τα μονά ' ' για εισαγωγικά αλφαριθμητικών θα πρέπει να βάλεις και τα διπλά " "
2. Η εξαγωγή σε αρχείο γίνεται σε UTF-8. πράγμα που σημαίνει ότι για να τρέξει στον διερμηνευτή του Άλκη πρέπει να ανοιχτεί με το πρόχειρο, και από εκεί να γίνει αντιγραφή και επικόλληση.
3. To "ανθρωπάκι" που τρέχει εμφανίζει αργά το κώδικα στην οθόνη, και συνεχίζει και όταν οι γραμμές κώδικα περάσουν τις προβαλλόμενες γραμμές. Δεν έχει νόημα να γίνεται κάτι τέτοιο
Δοκίμασα αυτόν τον κώδικα (έβγαλα τις σταθερές, και άλλαξα τα εισαγωγικά σε μονά)Κώδικας: [Επιλογή]ΠΡΟΓΡΑΜΜΑ Κυκλική_Ουρά
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Πίσω, Μπροστά, Ουρα[10], ι, Τιμή
ΑΡΧΗ
Τιμή <- 0
Πίσω <- 1
Μπροστά <- 0
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10
Ουρα[ι] <- 0
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ Δείξε(Πίσω, Μπροστά, Ουρα)
!! Προσθήκη 10 στοιχεία 1 έως 10
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10
ΚΑΛΕΣΕ Εισαγωγή_Στοιχείου(ι, Πίσω, Μπροστά, Ουρα)
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ Δείξε(Πίσω, Μπροστά, Ουρα)
!! Αφαίρεση 5 στοιχείων
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 5
ΑΝ Μπροστά <> 0 ΤΟΤΕ
ΚΑΛΕΣΕ Εξαγωγή_Στοιχείου(Τιμή, Πίσω, Μπροστά, Ουρα)
ΓΡΑΨΕ 'Εξαγωγή ', Τιμή
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Λάθος Εξαγωγής, Η ουρά είναι άδεια'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ Δείξε(Πίσω, Μπροστά, Ουρα)
!! Προσθήκη 5 στοιχεία 11 έως 15
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 5
ΚΑΛΕΣΕ Εισαγωγή_Στοιχείου(ι + 10, Πίσω, Μπροστά, Ουρα)
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ Δείξε(Πίσω, Μπροστά, Ουρα)
!! Αφαίρεση 10 στοιχείων
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 10
ΑΝ Μπροστά <> 0 ΤΟΤΕ
ΚΑΛΕΣΕ Εξαγωγή_Στοιχείου(Τιμή, Πίσω, Μπροστά, Ουρα)
ΓΡΑΨΕ 'Εξαγωγή ', Τιμή
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Λάθος Εξαγωγής, Η ουρά είναι άδεια'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ Δείξε(Πίσω, Μπροστά, Ουρα)
!! Προσθήκη 2 στοιχεία 16 έως 17
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 2
ΚΑΛΕΣΕ Εισαγωγή_Στοιχείου(ι + 15, Πίσω, Μπροστά, Ουρα)
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ Δείξε(Πίσω, Μπροστά, Ουρα)
!! Αφαίρεση 3 στοιχείων
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 3
ΑΝ Μπροστά <> 0 ΤΟΤΕ
ΚΑΛΕΣΕ Εξαγωγή_Στοιχείου(Τιμή, Πίσω, Μπροστά, Ουρα)
ΓΡΑΨΕ 'Εξαγωγή ', Τιμή
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Λάθος Εξαγωγής, Η ουρά είναι άδεια'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΚΑΛΕΣΕ Δείξε(Πίσω, Μπροστά, Ουρα)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ Εισαγωγή_Στοιχείου(Α, Πίσω, Μπροστά, Ουρα)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α, Πίσω, Μπροστά, Ουρα[10]
ΑΡΧΗ
ΑΝ Πίσω = Μπροστά ΤΟΤΕ
ΓΡΑΨΕ 'Η ουρά γέμισε, δεν θα βάλω το ', Α
ΑΛΛΙΩΣ
ΑΝ Μπροστά = 0 ΤΟΤΕ
Μπροστά <- Πίσω
ΤΕΛΟΣ_ΑΝ
Ουρα[Πίσω] <- Α
Πίσω <- Πίσω mod 10 + 1
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ Εξαγωγή_Στοιχείου(Α, Πίσω, Μπροστά, Ουρα)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α, Πίσω, Μπροστά, Ουρα[10]
ΑΡΧΗ
ΑΝ Μπροστά > 0 ΤΟΤΕ
Α <- Ουρα[Μπροστά]
Μπροστά <- Μπροστά mod 10 + 1
ΑΝ Μπροστά = Πίσω ΤΟΤΕ
Μπροστά <- 0
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ Δείξε(Πίσω, Μπροστά, Ουρα)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Πίσω, Μπροστά, Ουρα[10], ι
ΑΡΧΗ
ΑΝ Μπροστά = 0 ΤΟΤΕ
ΓΡΑΨΕ 'Η ουρά είναι άδεια'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Αρχή Ουράς ', Μπροστά
ΑΝ Μπροστά = Πίσω ΤΟΤΕ
ΓΡΑΨΕ Ουρα[Μπροστά]
ι <- Μπροστά mod 10 + 1
ΑΛΛΙΩΣ
ι <- Μπροστά
ΤΕΛΟΣ_ΑΝ
ΟΣΟ ι <> Πίσω ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ Ουρα[ι]
ι <- ι mod 10 + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Τέλος ουράς ', Πίσω
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
@komni,Ευχαριστώ πολύ!
Μπράβο και πάλι! Θα ήθελα να δω τι θα φτιάχνεις δέκα χρόνια αργότερα! :)
Μόλις δοκίμασα τη Κυκλική Ουρά, όπως ήταν με Σταθερές και διπλά εισαγωγικά. Σφαίρα πήγε! Όλα Καλά!
Να προσθέσω: Ανοίγει άμεσα στο Διερμηνευτή του Αλκη! Είχε ΒΟΜ (και πάλι μπράβο γιατί ανταποκρίθηκες άμεσα).
Πολύ καλή δουλειά, μπράβο!!Πολύ καλό παράδειγμα! Δεν είχα σκεφτεί να περάσω την ίδια μεταβλητή ως παράμετρο πάνω από μια φορά. Υπάρχει ένα bug εδώ γιατί θα έπρεπε να τυπώνει 496 αντί για 28 αλλά ξέρω ακριβώς τι είναι και θα το διορθώσω το βράδυ μαζί με ένα άλλο bug στο ΕΠΙΛΕΞΕ.
Στο github γράφεις The programming language was created by the AEPP book authors and inspired by Pascal and BASI
έχεις ξεχάσει το C στην BASIC.
Δοκίμασα και το παρακάτω πρόγραμμα να δω πως υλοποίησες τη μεταβίβαση παραμέτρων :
Πολλά μπράβο για την πρωτοβουλία και, κυρίως, για τη δουλειά σου!Ευχαριστώ πολύ - όντως οι διαφορές είναι ελάχιστες. Θα το δω από 'βδομάδα αλλά λογικά θα είναι αρκετά εύκολο.
Μια πρόταση, αν έχεις χρόνο και διάθεση, είναι να εντάξεις στον διερμηνευτή και την Ψευδογλώσσα, κυρίως για τους μαθητές της Β' Λυκείου. Υπάρχει βέβαια το πολύ καλό pseudoglossa.gr (https://www.pseudoglossa.gr) όμως βασίζεται σε flash του οποίου η υποστήριξη τελειώνει 31/12/2020 πράγμα που σημαίνει ότι μετά από κάποιο διάστημα το pseudoglossa.gr θα πάψει να είναι λειτουργικό (το ίδιο ισχύει και για το επίσης πολύ καλό και χρήσιμο algo.pk (http://algo.pk)).
Οι συντακτικές διαφορές μεταξύ Γλώσσας και Ψευδογλώσσας είναι λίγες οπότε εκτιμώ ότι δεν θα πρέπει να είναι πολύ δύσκολο αφού έχεις ήδη τον διερμηνευτή για τη Γλώσσα.
Ευχαριστώ πολύ!
Πολύ καλό παράδειγμα! Δεν είχα σκεφτεί να περάσω την ίδια μεταβλητή ως παράμετρο πάνω από μια φορά. Υπάρχει ένα bug εδώ γιατί θα έπρεπε να τυπώνει 496 αντί για 28 αλλά ξέρω ακριβώς τι είναι και θα το διορθώσω το βράδυ μαζί με ένα άλλο bug στο ΕΠΙΛΕΞΕ.
Όχι δεν θα έπρεπε σωστά το έχεις! :D :D :D :D
Μην το αλλάξεις!
Α <- (τιμή του Χ μετά την εκτέλεση της διαδικασίας δηλαδή 496)
Α <- (τιμή του Y μετά την εκτέλεση της διαδικασίας δηλαδή 6)
Α <- (τιμή του Z μετά την εκτέλεση της διαδικασίας δηλαδή 28)
Kαι έτσι βγαίνει αποτέλεσμα 28.ΠΡΟΓΡΑΜΜΑ ΤΕΣΤ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α[4]
ΑΡΧΗ
Α[2] <- 0
ΚΑΛΕΣΕ ΠΡΟΒΛΗΜΑ(Α, Α, Α)
ΓΡΑΨΕ Α[2]
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ ΠΡΟΒΛΗΜΑ(Χ, Υ, Ζ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Χ[4], Υ[4], Ζ[4]
ΑΡΧΗ
Υ[2] <- 6
Ζ[2] <- 28
ΓΡΑΨΕ Υ[2], Ζ[2]
Χ[2] <- 496
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΠΡΟΓΡΑΜΜΑ ΤΕΣΤ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α
ΑΡΧΗ
Α <- 1
ΚΑΛΕΣΕ ΠΡΟΒΛΗΜΑ(Α, Α, Α)
ΓΡΑΨΕ Α
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ ΠΡΟΒΛΗΜΑ(Χ, Υ, Ζ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Χ, Υ, Ζ
ΑΡΧΗ
Χ <- Υ + 1
Χ <- Ζ + 1
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΠΡΟΓΡΑΜΜΑ ΤΕΣΤ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Α
ΑΡΧΗ
Α <- 1
ΚΑΛΕΣΕ ΠΡΟΒΛΗΜΑ(Α, Α, Α)
ΓΡΑΨΕ Α
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ ΠΡΟΒΛΗΜΑ(Χ, Υ, Ζ)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Χ, Υ, Ζ
ΑΡΧΗ
Ζ <- Χ + 1
Ζ <- Υ + 1
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Α=1
Κ1(&Α, &Α, &Α)
Τύπωσε Α
Α=1
Κ2(&Α, &Α, &Α)
Τύπωσε Α
Ρουτίνα Κ1(&Χ, &Υ, &Ζ)
Χ=Υ+1
Χ=Ζ+1
Τέλος Ρουτίνας
Ρουτίνα Κ2(&Χ, &Υ, &Ζ)
Ζ=Χ+1
Ζ=Υ+1
Τέλος Ρουτίνας
Προγραμμα ShortCircuit
Μεταβλητες
Ακεραιες: κ
Αρχη
Διαβασε κ
Αν κ <> 0 και 5 mod κ = 2 τοτε
Γράψε 'Οκ'
Τελος_Αν
Τελος_Προγραμματος
Προφανώς, δεν γίνεται το δεξί μέρος του mod να είναι ίσο με το μηδέν οπότε θα έπρεπε να σκάσει με Runtime Error....(όπως γίνεται σε όλες τις γλώσσες προγραμματισμού)...
Επίσης κάποιος είχε ρωτήσει για υποστήριξη ψευδογλώσσας στον διερμηνευτή: Το κοίταξα χθες και έβαλα υποστήριξη στον lexer και parser αλλά ο διερμηνευτής μου κανει resolve τους τύπους των μεταβλητών πριν αρχίσει την εκτέλεση του προγράμματος και αυτό είναι ένα πρόβλημα καθώς δεν μπορεί να το κάνει στην ψευδογλώσσα λόγω μη ύπαρξης τμήματος δηλώσεων. Θα πρέπει να εισάγω type resolution στον διερμηνευτή που γίνεται αλλά θέλω να πάρω τον χρόνο μου με αυτό για να μην καταλήξω με spaghetti code. Θα προσπαθήσω να το υλοποιήσω πριν τη λήξη υποστήριξης του pseudoglossa.gr
Έχεις δίκιο, το σκέφτηκα εκ των υστέρων ότι, ενώ η σύνταξη είναι σχεδόν ίδια, στην Ψευδογλώσσα οι μεταβλητές είναι typeless και αυτή η σημασιολογική διαφορά είναι σημαντική για τον διερμηνευτή... Μάλιστα, θεωρητικά, κατά την εκτέλεση του προγράμματος η ίδια μεταβλητή μπορεί να φιλοξενήσει δεδομένα διαφορετικού τύπου.
Επειδή ρώτησες, στη Β' ΓΕΛ υπάρχει το μάθημα "Εισαγωγή στην Επιστήμη των Η/Υ" το οποίο, στο μεγαλύτερο μέρος του, είναι μια εισαγωγή στις βασικές αρχές προγραμματισμού με χρήση της Ψευδογλώσσας. Το μάθημα ήταν μονόωρο και από φέτος δίωρο, συνεπώς αποτελεί μια καλή προετοιμασία εν όψει της ΑΕΠΠ της Γ' ΓΕΛ. Για το λόγο αυτό είναι χρήσιμο να υπάρχει ένα online εργαλείο για την Ψευδογλώσσα, ειδικά αφού το pseudoglossa.gr φαίνεται πως θα μας αποχαιρετίσει...
Συγχαρητήρια komni χρειάζεται μια έκδοση js/html 5 ώστε να "τρέχει" σε οποιοδήποτε λειτουργικό/συσκευή.
Όσον αφορά τη Β' Λυκείου, κατά τη γνώμη μου πολύ καλή ιδέα θα ήταν για να αποκτήσουν ευκολότερα αλγοριθμική σκέψη και να γίνει πολύ πιο αποδοτικό το μάθημα, να ξεκινήσουν με μια blockly like εκδοχή της ψευδογλώσσας βασισμένη σε bockly to javascript. https://blockly-demo.appspot.com/static/demos/interpreter/async-execution.html
Με αυτόν τον τρόπο γνώμη μου είναι ότι ευκολότερα θα γινόταν η παράδοση και από ένα σημείο και έπειτα η μετάβαση σε κειμενική γλώσσα θα ήταν παιχνιδάκι. Μάλιστα είναι σχεδόν ολοκληρωμένη, αν προσθέσουμε μια εισαγωγή δεδομένων από το πληκτρολόγιο, πίνακες και τη Για (μπορούμε και χωρίς αυτήν όμως).
Από την άλλη το αν η ψευδογλώσσα/ΓΛΩΣΣΑ τελείωσε και θα μας αφήσει, είναι μεγάλη κουβέντα σχετικά με τα πλεονεκτήματα/μειονεκτήματα μετάβασης πχ στην python που περισσότερο συζητείται μιας και ήδη έχουν συγγραφεί και εγχειρίδια
... στην Ψευδογλώσσα οι μεταβλητές είναι typeless και αυτή η σημασιολογική διαφορά είναι σημαντική για τον διερμηνευτή... Μάλιστα, θεωρητικά, κατά την εκτέλεση του προγράμματος η ίδια μεταβλητή μπορεί να φιλοξενήσει δεδομένα διαφορετικού τύπου.
Από την άλλη, στο βιβλίο της Β' ΓΕΛ για τις μεταβλητές αναφέρεται το εξής:
"Οι μεταβλητές χαρακτηρίζονται ως αριθμητικές, αλφαριθμητικές ή λογικές ανάλογα με την τιμή που θα αποδοθεί σε αυτές. Πριν από την απόδοση κάποιας τιμής σε μια μεταβλητή (με εντολή εισόδου ή εκχώρησης) η μεταβλητή έχει απροσδιόριστη τιμή."
Ερμηνεύοντας αυτό δεν προκύπτει ξεκάθαρα ότι ο τύπος μιας μεταβλητής δεν μπορεί να αλλάξει με μια νέα ανάθεση. Αν υπήρχε ξεκάθαρα π.χ. ότι: "ανάλογα με την πρώτη τιμή που θα αποδοθεί σε αυτές" τότε ναι, αλλά τώρα είναι ίσως θέμα ερμηνείας.
Να δώσω και ένα παράδειγμα που δεν το θεωρώ και πολύ τραβηγμένο:
Να γραφεί αλγόριθμος ο οποίος να διαβάζει και να προσθέτει αριθμούς. Ο αλγόριθμος τερματίζει όταν ο χρήστης εισάγει τη λέξη ΤΕΛΟΣ:Κώδικας: Pascal
Σ <- 0 Διάβασε α Όσο α <> 'ΤΕΛΟΣ' Σ <- Σ + α Διάβασε α Τέλος_επανάληψης
Μιας και μιλάμε για αλγόριθμο (και όχι πρόγραμμα) και η ψευδογλώσσα υποτίθεται ότι προσπαθεί να περιγράψει την ουσία του αλγορίθμου χωρίς να μπαίνει σε "τεχνικές" λεπτομέρειες δεν είμαι σίγουρος ότι το παραπάνω τμήμα αλγορίθμου σε ψευδογλώσσα θα πρέπει να θεωρηθεί λανθασμένο.
Επαναλαμβάνω ότι "μαζί σας είμαι" :-) απλά νομίζω ότι με βάση το βιβλίο η αλλαγή τύπου μεταβλητής στην ψευδογλώσσα θεωρητικά επιτρέπεται.
Συμπληρώνοντας... στο βιβλίο της Γ' Λυκείου αναφέρει (σελ. 37) :
Ανάλογα με το είδος της τιμής που μπορούν να λάβουν, οι μεταβλητές διακρίνονται σε αριθμητικές, αλφαριθμητικές και λογικές.
ΠΡΟΓΡΑΜΜΑ Ρύποι_2αλλλά στον online νέο διερμηνευτή πρέπει να γίνουν αλλαγές στον κώδικα όπως σημειώνονται παρακάτω:
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΝO2, O3
ΑΡΧΗ
!Έλεγχος τιμής για το διοξείδιο του αζώτου,NO2
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε την τιμή του Διοξειδίου του αζώτου'
ΔΙΑΒΑΣΕ ΝO2
ΑΝ ΝO2 < 0 ΤΟΤΕ
ΓΡΑΨΕ 'Δώσε θετική τιμή ή μηδέν για το Διοξειδίου του αζώτου'
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ ΝO2 >= 0
!Έλεγχος τιμής για το διοξείδιο του όζον,O3
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε την τιμή του Όζοντος'
ΔΙΑΒΑΣΕ O3
ΑΝ O3 < 0 ΤΟΤΕ
ΓΡΑΨΕ 'Δώσε θετική τιμή ή μηδέν για το Όζον'
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ O3 >= 0
ΑΝ ΝO2 > 700 Η O3 > 500 ΤΟΤΕ
ΓΡΑΨΕ 'ΠΑΡΑ ΠΟΛΥ ΥΨΗΛΟΙ ΡΥΠΟΙ ΑΠΑΓΟΡΕΥΣΗ ΚΥΚΛΟΦΟΡΙΑΣ'
ΑΛΛΙΩΣ_ΑΝ ΝO2 > 500 Η O3 > 300 ΤΟΤΕ
ΓΡΑΨΕ 'ΠΟΛΥ ΥΨΗΛΟΙ ΡΥΠΟΙ ΕΚΤΑΚΤΑ ΜΕΤΡΑ'
ΑΛΛΙΩΣ_ΑΝ ΝO2 > 400 Η O3 > 250 ΤΟΤΕ
ΓΡΑΨΕ 'ΠΡΟΣΟΧΗ ΥΨΗΛΟΙ ΡΥΠΟΙ'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Ρύποι μέσα στα όρια'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΠΡΟΓΡΑΜΜΑ Ρύποι_2Αν αφαιρεθούν οι παρενθέσεις εμφανίζονται τα εξής μηνύματα σφάλματος
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΝΟ2, Ο3
ΑΡΧΗ
!Έλεγχος τιμής για το διοξείδιο του αζώτου,NO2
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε την τιμή του Διοξειδίου του αζώτου'
ΔΙΑΒΑΣΕ ΝΟ2
ΑΝ ΝΟ2 < 0 ΤΟΤΕ
ΓΡΑΨΕ 'Δώσε θετική τιμή ή μηδέν για το Διοξειδίου του αζώτου'
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ ΝΟ2 >= 0
!Έλεγχος τιμής για το διοξείδιο του όζοντος O3
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε την τιμή του Όζοντος'
ΔΙΑΒΑΣΕ Ο3
ΑΝ Ο3 < 0 ΤΟΤΕ
ΓΡΑΨΕ 'Δώσε θετική τιμή ή μηδέν για το Όζον'
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ Ο3 >= 0
ΑΝ (ΝΟ2 > 700) Η (Ο3 > 500) ΤΟΤΕ
ΓΡΑΨΕ 'ΠΑΡΑ ΠΟΛΥ ΥΨΗΛΟΙ ΡΥΠΟΙ ΑΠΑΓΟΡΕΥΣΗ ΚΥΚΛΟΦΟΡΙΑΣ'
ΑΛΛΙΩΣ_ΑΝ (ΝΟ2 > 500) Η (Ο3 > 300) ΤΟΤΕ
ΓΡΑΨΕ 'ΠΟΛΥ ΥΨΗΛΟΙ ΡΥΠΟΙ ΕΚΤΑΚΤΑ ΜΕΤΡΑ'
ΑΛΛΙΩΣ_ΑΝ (ΝΟ2 > 400) Η (Ο3 > 250) ΤΟΤΕ
ΓΡΑΨΕ 'ΠΡΟΣΟΧΗ ΥΨΗΛΟΙ ΡΥΠΟΙ'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Ρύποι μέσα στα όρια'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Κώδικας για το παραπάνω σφάλμα,
- Σφάλμα: Περίμενα τον αριστερό τελεστέο να είναι τύπου Λογική, αλλά έλαβα μη συμβατό τύπο Ακέραια
ΠΡΟΓΡΑΜΜΑ Ρύποι_2
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΝΟ2, Ο3
ΑΡΧΗ
!Έλεγχος τιμής για το διοξείδιο του αζώτου,NO2
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε την τιμή του Διοξειδίου του αζώτου'
ΔΙΑΒΑΣΕ ΝΟ2
ΑΝ ΝΟ2 < 0 ΤΟΤΕ
ΓΡΑΨΕ 'Δώσε θετική τιμή ή μηδέν για το Διοξειδίου του αζώτου'
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ ΝΟ2 >= 0
!Έλεγχος τιμής για το διοξείδιο του όζοντος,O3
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε την τιμή του Όζοντος'
ΔΙΑΒΑΣΕ Ο3
ΑΝ Ο3 < 0 ΤΟΤΕ
ΓΡΑΨΕ 'Δώσε θετική τιμή ή μηδέν για το Όζον'
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ Ο3 >= 0
ΑΝ ΝΟ2 > 700 Η Ο3 > 500 ΤΟΤΕ
ΓΡΑΨΕ 'ΠΑΡΑ ΠΟΛΥ ΥΨΗΛΟΙ ΡΥΠΟΙ ΑΠΑΓΟΡΕΥΣΗ ΚΥΚΛΟΦΟΡΙΑΣ'
ΑΛΛΙΩΣ_ΑΝ ΝΟ2 > 500 Η Ο3 > 300 ΤΟΤΕ
ΓΡΑΨΕ 'ΠΟΛΥ ΥΨΗΛΟΙ ΡΥΠΟΙ ΕΚΤΑΚΤΑ ΜΕΤΡΑ'
ΑΛΛΙΩΣ_ΑΝ (ΝΟ2 > 400) Η (Ο3 > 250) ΤΟΤΕ
ΓΡΑΨΕ 'ΠΡΟΣΟΧΗ ΥΨΗΛΟΙ ΡΥΠΟΙ'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Ρύποι μέσα στα όρια'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Καλησπέρα σε όλους,
Δοκιμών συνέχεια,
ο παρακάτω κώδικας
τρέχει στον Διερμηνευτή του Άλκη,αλλλά στον online νέο διερμηνευτή πρέπει να γίνουν αλλαγές στον κώδικα όπως σημειώνονται παρακάτω:Αν αφαιρεθούν οι παρενθέσεις εμφανίζονται τα εξής μηνύματα σφάλματοςΚώδικας για το παραπάνω σφάλμα,Κώδικας: [Επιλογή]ΠΡΟΓΡΑΜΜΑ Ρύποι_2
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: ΝΟ2, Ο3
ΑΡΧΗ
!Έλεγχος τιμής για το διοξείδιο του αζώτου,NO2
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε την τιμή του Διοξειδίου του αζώτου'
ΔΙΑΒΑΣΕ ΝΟ2
ΑΝ ΝΟ2 < 0 ΤΟΤΕ
ΓΡΑΨΕ 'Δώσε θετική τιμή ή μηδέν για το Διοξειδίου του αζώτου'
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ ΝΟ2 >= 0
!Έλεγχος τιμής για το διοξείδιο του όζοντος,O3
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε την τιμή του Όζοντος'
ΔΙΑΒΑΣΕ Ο3
ΑΝ Ο3 < 0 ΤΟΤΕ
ΓΡΑΨΕ 'Δώσε θετική τιμή ή μηδέν για το Όζον'
ΤΕΛΟΣ_ΑΝ
ΜΕΧΡΙΣ_ΟΤΟΥ Ο3 >= 0
ΑΝ ΝΟ2 > 700 Η Ο3 > 500 ΤΟΤΕ
ΓΡΑΨΕ 'ΠΑΡΑ ΠΟΛΥ ΥΨΗΛΟΙ ΡΥΠΟΙ ΑΠΑΓΟΡΕΥΣΗ ΚΥΚΛΟΦΟΡΙΑΣ'
ΑΛΛΙΩΣ_ΑΝ ΝΟ2 > 500 Η Ο3 > 300 ΤΟΤΕ
ΓΡΑΨΕ 'ΠΟΛΥ ΥΨΗΛΟΙ ΡΥΠΟΙ ΕΚΤΑΚΤΑ ΜΕΤΡΑ'
ΑΛΛΙΩΣ_ΑΝ (ΝΟ2 > 400) Η (Ο3 > 250) ΤΟΤΕ
ΓΡΑΨΕ 'ΠΡΟΣΟΧΗ ΥΨΗΛΟΙ ΡΥΠΟΙ'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Ρύποι μέσα στα όρια'
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Γραψε 1/3 ! -> 0.33
Γραψε 2/3 ! -> 0.66
Γράψε 1/3 + 2/3 ! -> 0.99
Γράψε 'α' / 3 ! Παράνομη πράξη (δεν ορίζεται μεταξύ χαρακτήρων και ακεραίων)
Βγάζει σφάλμα:Σφάλμα Διερμηνευτή: TypeError: left.divide is not a functionΤο συγκεκριμένο αφορά μόνο τις σταθερές εκφράσεις και θα διορθωθεί το επόμενο Σάββατο
Για να την τρέξω και στο δικό σου διερμηνευτή, αντικατέστησα τα
<--
με
<-
Επίσης, είδα ότι δεν υποστηρίζεις σταθερές (εννοώ συμβολικές σταθερές, που δηλώνουμε στο ΣΤΑΘΕΡΕΣ) ως διαστάσεις κατά τη δήλωση του πίνακα, οπότε στον πίνακα έβαλα "καρφωτά" το νούμερο που έχω ως σταθερά Ν.
Σενάριο που δοκίμασα και δεν παίζει σωστά στον δικό σου διερμηνευτή: εισαγωγή δύο τιμών στην ουρά, εξαγωγή μιας τιμής, επιλογή 3 για μετακίνηση της ουράς στην αρχή δύο φορές (η δεύτερη δεν χρειάζεται και εμφανίζει σχετικό μήνυμα), εισαγωγή μιας τιμής στην ουρά.
Δηλαδή με τη σειρά εισάγουμε τα εξής στις εντολές ΔΙΑΒΑΣΕ:
1
ένα
1
δύο
2
3
3
1
τρία
Θα δεις ότι ήδη από το πρώτο 3 που δίνεις, δεν εμφανίζει καθόλου την ουρά και στην εισαγωγή του στοιχείου στη συνέχεια δίνει λάθος.
νομίζω ότι η εντολή
ΓΡΑΨΕ ' '
(με έναν κενό χαρακτήρα ανάμεσα στα μονά εισαγωγικά) θα έπρεπε να εμφανίζει μια κενή γραμμή, πράγμα που νομίζω δεν το κάνεις
Καλημέρα σε όλους!
Ευχαριστούμε για την προσφορά Κομνηνέ και τις (διαρκείς) διορθώσεις.
Να προτείνω κάτι που θεωρώ πως χρειάζεται να υλοποιήσεις όταν έχεις χρόνο:
την αρχικοποίηση του Διερμηνευτή με χρήση πλήκτρου ή επιλογής σε μενού για δημιουργία νέου(αρχείου)(screen cleaning)
Αν εγω δεν πρόσεξα την ύπαρξη του, να με συγχωρείς...
Καλησπέρα αν εννοείτε κουμπί που θα καθαρίζει τον γραμμένο πηγαίο κώδικα, αποφάσισα να μην κάνω τέτοιο κουμπί γιατί μπορεί ο χρήστης να πατήσει Ctrl+A και μετά Backspace ή ακόμη να επιλέξει τον κώδικα με το ποντίκι και να τον διαγράψει.
Γενικά θέλω να κρατήσω το UI όσο πιο clean γίνεται ώστε να είναι απλό και να μην φοβίζει.
Άμα δεν κατάλαβα σωστά πάντως πείτε μου τι εννοούσατε.
Να σας ξαναευχαριστήσω για την βοήθειά σας στο project.
Βρήκα Bug (τι Bugman θα ήμουν).
Αν το αλφαριθμητικό εισόδου (από το αρχείο εισόδου) έχει δυο λέξεις (δηλαδή έχει διάστημα εντός, και όχι σε άκρες), τότε ο διερμηνευτής γυρίζει ένα μυστήριο μήνυμα ότι "Σφάλμα: Περίμενα να διαβάσω 1 μεταβλητή αλλά μου δόθηκαν 2 μεταβλητές".
Δεν υπάρχουν τέτοια μηνύματα! Η μεταβλητή μπορεί να είναι αλφαριθμητική και να έχει διαστήματα. Το κόμμα διαχωρίζει τις εισαγωγές "παραμέτρων" όχι "μεταβλητών". Αν δεν θέλουμε το διαχωρισμό με το κόμμα κάνουμε κάτι που λέγεται Line Input, δηλαδή τραβάμε όλη την εισαγωγή μέχρι την αλλαγή γραμμής ή το τέλος αρχείου!
Τσέκαρα και με τα νούμερα στο ίδιο πρόγραμμα (έβαλα στις λέξεις όπου είχε διάστημα το _) και πάλι έβγαλε λάθος λίγο διαφορετικό "Σφάλμα: Περίμενα να διαβάσω 2 μεταβλητές αλλά μου δόθηκε 1 μεταβλητή" γιατί μια Διάβασε με τρεις μεταβλητές περιμένει να τις βρει όπου αυτό θέλει, και όχι σε κάθε γραμμή ξεχωριστά όπως κάνει ο διερμηνευτής του Άλκη. Πάλι εδώ η κάθε εισαγωγή πρέπει να γίνεται μέχρι την αλλαγή γραμμής (ή το κόμμα, ή το τέλος αρχείου, όποιο έρθει πρώτο).
ΠΡΟΓΡΑΜΜΑ ΛΟΓΑΡΙΑΣΜΟΣ_ΝΕΡΟΥ
ΣΤΑΘΕΡΕΣ
ΦΠΑ = 0.18
ΤΙΜΗ1 = 0.34
ΤΙΜΗ2 = 0.52
ΤΙΜΗ3 = 1.51
ΤΙΜΗ4 = 2.11
ΤΙΜΗ5 = 2.64
ΠΑΓΙΟ = 1.47
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Μετρητής
ΠΡΑΓΜΑΤΙΚΕΣ: Κατανάλωση, Τιμή, Αποχέτευση, Άλλα, Αξία_ΦΠΑ, Αξία,
& Τελική_Τιμή
ΧΑΡΑΚΤΗΡΕΣ: Όνομα, Επώνυμο
ΑΡΧΗ
ΓΡΑΨΕ 'Δώσε Αριθμό του μετρητή (0 για τέλος)'
ΔΙΑΒΑΣΕ Μετρητής
ΟΣΟ Μετρητής <> 0 ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ 'Δώσε το Ονοματεπώνυμο'
ΔΙΑΒΑΣΕ Επώνυμο, Όνομα
ΓΡΑΨΕ 'Δώσε την Κατανάλωση'
ΔΙΑΒΑΣΕ Κατανάλωση
ΕΠΙΛΕΞΕ Κατανάλωση
ΠΕΡΙΠΤΩΣΗ 0..15
Αξία <- Κατανάλωση*ΤΙΜΗ1
ΠΕΡΙΠΤΩΣΗ 15..60
Αξία <- 15*ΤΙΜΗ1 + (Κατανάλωση - 15)*ΤΙΜΗ2
ΠΕΡΙΠΤΩΣΗ 60..81
Αξία <- 15*ΤΙΜΗ1 + 45*ΤΙΜΗ2 + (Κατανάλωση - 60)*ΤΙΜΗ3
ΠΕΡΙΠΤΩΣΗ 81..105
Αξία <- 15*ΤΙΜΗ1 + 45*ΤΙΜΗ2 + 21*ΤΙΜΗ3 + (Κατανάλωση - 81)*ΤΙΜΗ4
ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
Αξία <- 15*ΤΙΜΗ1 + 45*ΤΙΜΗ2 + 21*ΤΙΜΗ3 + 24*ΤΙΜΗ4 + (Κατανάλωση - 105)*ΤΙΜΗ5
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
Αποχέτευση <- Αξία*0.4
Άλλα <- Αξία*0.01
Τιμή <- Αξία + Αποχέτευση + Άλλα + ΠΑΓΙΟ
Αξία_ΦΠΑ <- Τιμή* ΦΠΑ
Τελική_Τιμή <- Τιμή + Αξία_ΦΠΑ
ΓΡΑΨΕ 'Ο λογαριασμός του ', Επώνυμο, ' είναι ', Τελική_Τιμή
ΓΡΑΨΕ 'Αξία νερού:', Αξία
ΓΡΑΨΕ 'άλλα:', Αποχέτευση + Άλλα, 'ΦΠΑ:', Αξία_ΦΠΑ
ΓΡΑΨΕ 'Δώσε Αριθμό του επόμενου μετρητή (0 για τέλος)'
ΔΙΑΒΑΣΕ Μετρητής
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Καλησπέρα σε όλους,
η ακόλουθη δοκιμήΚώδικας: [Επιλογή]ΠΡΟΓΡΑΜΜΑ ΛΟΓΑΡΙΑΣΜΟΣ_ΝΕΡΟΥ
ΣΤΑΘΕΡΕΣ
ΦΠΑ = 0.18
ΤΙΜΗ1 = 0.34
ΤΙΜΗ2 = 0.52
ΤΙΜΗ3 = 1.51
ΤΙΜΗ4 = 2.11
ΤΙΜΗ5 = 2.64
ΠΑΓΙΟ = 1.47
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Μετρητής
ΠΡΑΓΜΑΤΙΚΕΣ: Κατανάλωση, Τιμή, Αποχέτευση, Άλλα, Αξία_ΦΠΑ, Αξία,
& Τελική_Τιμή
ΧΑΡΑΚΤΗΡΕΣ: Όνομα, Επώνυμο
ΑΡΧΗ
ΓΡΑΨΕ 'Δώσε Αριθμό του μετρητή (0 για τέλος)'
ΔΙΑΒΑΣΕ Μετρητής
ΟΣΟ Μετρητής <> 0 ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ 'Δώσε το Ονοματεπώνυμο'
ΔΙΑΒΑΣΕ Επώνυμο, Όνομα
ΓΡΑΨΕ 'Δώσε την Κατανάλωση'
ΔΙΑΒΑΣΕ Κατανάλωση
ΕΠΙΛΕΞΕ Κατανάλωση
ΠΕΡΙΠΤΩΣΗ 0..15
Αξία <- Κατανάλωση*ΤΙΜΗ1
ΠΕΡΙΠΤΩΣΗ 15..60
Αξία <- 15*ΤΙΜΗ1 + (Κατανάλωση - 15)*ΤΙΜΗ2
ΠΕΡΙΠΤΩΣΗ 60..81
Αξία <- 15*ΤΙΜΗ1 + 45*ΤΙΜΗ2 + (Κατανάλωση - 60)*ΤΙΜΗ3
ΠΕΡΙΠΤΩΣΗ 81..105
Αξία <- 15*ΤΙΜΗ1 + 45*ΤΙΜΗ2 + 21*ΤΙΜΗ3 + (Κατανάλωση - 81)*ΤΙΜΗ4
ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
Αξία <- 15*ΤΙΜΗ1 + 45*ΤΙΜΗ2 + 21*ΤΙΜΗ3 + 24*ΤΙΜΗ4 + (Κατανάλωση - 105)*ΤΙΜΗ5
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
Αποχέτευση <- Αξία*0.4
Άλλα <- Αξία*0.01
Τιμή <- Αξία + Αποχέτευση + Άλλα + ΠΑΓΙΟ
Αξία_ΦΠΑ <- Τιμή* ΦΠΑ
Τελική_Τιμή <- Τιμή + Αξία_ΦΠΑ
ΓΡΑΨΕ 'Ο λογαριασμός του ', Επώνυμο, ' είναι ', Τελική_Τιμή
ΓΡΑΨΕ 'Αξία νερού:', Αξία
ΓΡΑΨΕ 'άλλα:', Αποχέτευση + Άλλα, 'ΦΠΑ:', Αξία_ΦΠΑ
ΓΡΑΨΕ 'Δώσε Αριθμό του επόμενου μετρητή (0 για τέλος)'
ΔΙΑΒΑΣΕ Μετρητής
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
'Εδωσε το παρακάτω μήνυμα σφάλματος,
στο διερμηνευτή του Άλκη εκτελείται κανονικά.
Παρατήρηση: στο Τετράδιο Εργασιών υπάρχει λάθος στη δήλωση μερικών σταθερών με κόμμα το οποίο έχω διορθώσει και η δήλωση των περιπτώσεων ακολουθεί την δομή π.χ. 1..60 κα όχι αυτή του βιβλίου (π.χ. <=60) όπως στο παράδειγμα του αχολικού ετραδίου
Καλησπέρα,
Έπρεπε να το είχα αναφέρει αλλά ο διερμηνευτής δεν έχει υποστήριξη για τον τελεστή &.
Αυτό γιατί ο τελεστής αυτός δημιουργήθηκε για το χαρτί όπου αν δεν μπορούμε να γράψουμε άλλο, πρέπει αναγκαστικά να αλλάξουμε γραμμή.
Καλησπέρα,Καλησπέρα
Έπρεπε να το είχα αναφέρει αλλά ο διερμηνευτής δεν έχει υποστήριξη για τον τελεστή &.
Αυτό γιατί ο τελεστής αυτός δημιουργήθηκε για το χαρτί όπου αν δεν μπορούμε να γράψουμε άλλο, πρέπει αναγκαστικά να αλλάξουμε γραμμή.
Δεν υπάρχει τέτοιο πρόβλημα στον υπολογιστή αφού μπορούμε να γράφουμε όσο θέλουμε σε μία γραμμή και επίσης η υλοποίηση αυτού θα μου χάλαγε τα error messages πολύ.
Πλέον δίνεται συγκεκριμένο σφάλμα όταν χρησιμοποιείται αυτός ο τελεστής.
Πω πω δίκιο που έχει....... ;D ;D ;D
Αλλά Komnni σε ανάλυση 800x600 τι κάνουμε; Σκέψου το ενδεχόμενο να προσθέσεις τον ειδικό χαρακτήρα (δε νομίζω να θεωρείται τελεστής) έτσι για να κάνεις τη ζωή όσων τρέχουν σε χαμηλότερες αναλύσεις λειτουργικό, για να έχουν άνετη χρήση του προγράμματός σου. :)
Κομνηνέ, θα μπορούσες κατά το Paste του κώδικα να το πέταγες το & και να έκανες συνένωση γραμμών. Δεν νομίζω να μην μπορείς να το κάνεις!
;D
δεν ανοίγει ο ιστότοπος
Συγχαρητήρια, πολύ καλή δουλειά!Ευχαριστώ!
δεν ανοίγει ο ιστότοποςΚαλησπέρα πείτε μου ποιο browser και OS χρησιμοποιείται για να σας βοηθήσω. Ο διερμηνευτής δεν υποστηρίζει καθόλου Internet Explorer και πολύ παλίες εκδόσεις Chrome/Firefox/Opera.
Μπράβο Κομνηνέ!
Δοκίμασα το παρακάτω και δεν τρέχει, υποτίθεται ότι πρέπει να ζητήσει ως είσοδο τον πίνακα Α, και στη συνέχεια να εμφανίσει το πρώτο στοιχείο του:Κώδικας: Ψευδογλώσσα
Αλγόριθμος Πίνακες Δεδομένα // Α // Εμφάνισε Α[1] Τέλος
Να επισημάνουμε εδώ Άλκη βέβαια, πως η αυτή η απορία, του Κομνηνού είναι πάρα πολύ σωστή κατά τη γνώμη μου.Συμφωνώ με όλα αλλά ο διερμηνευτής της Ψευδογλώσσας μου είναι ξεχωριστός από αυτόν της Γλώσσας. Απλά μοιράζονται το ίδιο front-end(AST, symbol table) για να δουλεύει η βηματική εκτέλεση(και άλλα debugging εργαλεία που θα προσθέσω) σε ανώτερο abstraction level.
Εννοώ, πως στη ΓΛΩΣΣΑ ορίζεις μέγεθος πίνακα πριν την εκτέλεση, κατά τη δήλωση των μεταβλητών.
Οπότε δεν είναι και τόσο συμβατή η ΓΛΩΣΣΑ με τη ψευδογλώσσα αν το καλοσκεφτούμε,
στην υλοποίηση πίνακα με την εντολή ΔΕΔΟΜΕΝΑ // //.
Δικαίως λοιπόν έχει το παιδί την απορία, αφού αν κατά την εκτέλεση ορίζεις το μέγεθος, το μεταβάλλεις, άρα και τη θεωρείς δυναμική δομή δεδομένων, αλλά ο πίνακας στα πλαίσια του μαθήματος και των δυνατοτήτων της ΓΛΩΣΣΑΣ, είναι στατική δομή.
Να σημειωθεί εδώ το ερώτημα: Σε ψευδογλώσσα ο ορισμός δεδομένων πότε γίνεται; Κατά τον ορισμό ή κατά την εκτέλεση; Αν σπεύσουμε να πούμε κατά τον ορισμό, για να το σώσουμε το θέμα, τότε θυμόμαστε πως κατά τον ορισμό μεταβλητών στη ΓΛΩΣΣΑ, δε μπορούμε να... αρχικοποιήσουμε τιμές.
Απ' όπου κι αν το δεις δε μαζεύεται.
Οπότε πιστεύω πως ήταν τέλεια επιλογή να υλοποιηθεί ως ξεχωριστό εργαλείο διερμηνευτής για ψευδογλώσσα.
Άλλωστε η ψευδογλώσσα ΔΕΝ εκτελείται από υπολογιστή, οπότε κάθε τέτοιος περιορισμός είναι εσφαλμένος. Αλλά αν πάμε να την κάνουμε να εκτελεστεί... συναντάμε τέτοια θέματα, πού έτσι κι αλλιώς συναντάμε αν πάμε να μετατρέψουμε αλγόριθμο ψευδογλώσσας στην Ελληνική, σε ΓΛΩΣΣΑ. Το ίδιο το βιβλίο έχει θέματα. Πολλά.
Κομνηνέ μπράβο παρεμπιπτόντως και για την υλοποίηση και για την απορία σου!
Αυτό που αναφέρεις είναι μεγάλο πρόβλημα με τη ΓΛΩΣΣΑ ως διδακτικό εργαλείο, σε συνδυασμό με ψευδογλώσσα στην Ελληνική. Βάλτο δίπλα στο πρόβλημα με το ότι τα παιδιά τα μπερδεύουν αυτά τα δύο, ως το ίδιο πράγμα καικαταλαβαίνεις γιατί κάποιες φορές με τόσο πάθος υποστηρίζω την αναβάθμιση του μαθήματος σε κάποια γλώσσα που... να μπορούμε να διδάξουμε κι αντικειμενοστραφή προγραμματισμό (που πολύ βολικά και φέτος βγήκε εκτός ύλης).
Ναι, δες για παράδειγμα στη σελίδα 58 του βιβλίου μαθητή:Έστω το παρακάτω πρόγραμμα σε ΨευδογλώσσαΚώδικας: Ψευδογλώσσα
Αλγόριθμος Ελάχ_Πίνακα Δεδομένα // table // Min ← table[1] Για i από 2 μέχρι 100 Αν table[i] < Min τότε Min ← table[i] Τέλος_επανάληψης Αποτελέσματα //Min// Τέλος Ελάχ_Πίνακα
Μπορείς να συμπεράνεις ότι είναι πίνακας επειδή χρησιμοποιείται με αγκύλες εντός του προγράμματος.
Για μία λύση στο πώς μπορείς να πάρεις το μέγεθος και τα δεδομένα, τρέξε το παράδειγμα π.χ. στον Διερμηνευτή μου.
Αλγόριθμος _
Δεδομένα // πίνακας //
Για ι από 1 μέχρι 100
αποτέλεσμα[ι] <- πίνακας[πίνακας[ι]]
Τέλος_επανάληψης
Αποτελέσματα // αποτέλεσμα //
Τέλος _
Πώς ξέρει ο διερμηνευτής πόσες γραμμές και στήλες να διαβάσει για τον πίνακα 'πίνακας'; (Δεν έχω μηχανή Windows για να το τεστάρω με τον διερμηνευτή σου αυτή τη στιγμή)
Πλέον και με υποστήριξη Ψευδογλώσσας στο pseudo.gloglossa.gr (https://pseudo.gloglossa.gr)!
Αλγόριθμος καλούμενος
Διάβασε α, β
Γράψε 10
Διάβασε δ
Γράψε 20
Τέλος καλεσμένος
Αλγόριθμος καλών
α <- 1
β <- 2
γ <- 3
δ <- 4
ε <- 5
Κάλεσε καλούμενος(α, β, γ, δ, ε)
Γράψε α, β, γ, δ, ε
Τέλος καλών
Πως ακριβώς θα εκτελεστεί;;
ΠΡΟΓΡΑΜΜΑ ΘΕΜΑ_2
ΜΕΤΑΒΛΗΤΕΣ
ΠΡΑΓΜΑΤΙΚΕΣ:X,Y
ΑΡΧΗ
ΓΡΑΨΕ 'ΔΩΣΕ ΤΟ X= '
ΔΙΑΒΑΣΕ X
ΑΝ X MOD 2 =0 ΤΟΤΕ
Y <- X DIV 2
ΑΝ Y<= 10 ΤΟΤΕ
Y<-2*X+Y
ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ
Y<-X^2
ΤΕΛΟΣ_ΑΝ
ΓΡΑΨΕ 'ΤΟ Y ΕΙΝΑΙ =',Y
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Μπορεί να μου εξηγήσει κανείς πως ακριβώς δουλεύει αυτός ο μηχανισμός; Τι γίνεται αν έχω πολλά διάβασε και πολλά γράψε; Αν είναι κάπως έτσι:
Υ.Γ. δεν μου έρχονται πλέον email για απαντήσεις στο ποστ @alkisg
Αλγόριθμος Ασκ6
χ <- 1200
ετ <- 0
Όσο χ <= 2000 επανάλαβε
χ <- χ + χ*0.038
ετ <- ετ + 1
Εμφάνισε ετ, χ
Τέλος_επανάληψης
Εμφάνισε ετ
Τέλος Ασκ6
ο διερμηνευτής δίνει:Καλησπέρα,
στον παρακάτω αλγόριθμοΚώδικας: [Επιλογή]Αλγόριθμος Ασκ6
ο διερμηνευτής δίνει:
χ <- 1200
ετ <- 0
Όσο χ <= 2000 επανάλαβε
χ <- χ + χ*0.038
ετ <- ετ + 1
Εμφάνισε ετ, χ
Τέλος_επανάληψης
Εμφάνισε ετ
Τέλος Ασκ6
1 1245.60
2 1292.93
3 1342.06
4 1393.06
5 1446.00
6 1500.95
7 1557.98
8 1617.19
9 1678.64
10 1742.43
11 1808.64
12 1877.37
13 1948.71
14 2022.76
14
ενώ το https://pseudo.gloglossa.gr/ δίνει
1 1236
2 1273.08
3 1311.27
4 1350.6
5 1391.11
6 1432.84
7 1475.82
8 1520.09
9 1565.69
10 1612.66
11 1661.04
12 1710.87
13 1762.19
14 1815.05
15 1869.5
16 1925.58
17 1983.34
18 2042.84
18
Σε κάθε πράξη κάνω truncate τα δεκαδικά ψηφία και αφήνω μόνο τα πρώτα δύο. Δεν είμαι σίγουρος τι κάνει ο @alkisg
Καλησπέρα,
Θα το κοιτάζω βραδάκι αλλά φαντάζομαι έχει σχέση με τον τρόπο που χειρίζομαι τους πραγματικούς. Σε κάθε πράξη κάνω truncate τα δεκαδικά ψηφία και αφήνω μόνο τα πρώτα δύο. Δεν είμαι σίγουρος τι κάνει ο @alkisg
Άρχισαν να μου ξαναέρχονται τα email, τέλεια.
Καλησπέρα και πάλι,
Το σφάλμα που επισήμανε ο dpa, το code formatting(αντί για κουμί θα γίνεται αυτόματα οταν ο χρήστης πατάει το κουμπί εκτέλεση) και η πρόταση του George Eco θα εχουν υλοποιηθεί μέχρι την Κυριακή.
Όσο για το κάλεσμα αλγορίθμων/προγραμμάτων, θα αργήσει λιγάκι. Πιθανότατα να το κάνω την επόμενη βδομάδα.
Υ.Γ. δεν μου έρχονται πλέον email για απαντήσεις στο ποστ @alkisg
Καλησπέρα,
στον παρακάτω αλγόριθμοΚώδικας: [Επιλογή]Αλγόριθμος Ασκ6
ο διερμηνευτής δίνει:
χ <- 1200
ετ <- 0
Όσο χ <= 2000 επανάλαβε
χ <- χ + χ*0.038
ετ <- ετ + 1
Εμφάνισε ετ, χ
Τέλος_επανάληψης
Εμφάνισε ετ
Τέλος Ασκ6
1 1245.60
2 1292.93
3 1342.06
4 1393.06
5 1446.00
6 1500.95
7 1557.98
8 1617.19
9 1678.64
10 1742.43
11 1808.64
12 1877.37
13 1948.71
14 2022.76
14
ενώ το https://pseudo.gloglossa.gr/ (https://pseudo.gloglossa.gr/) δίνει
1 1236
2 1273.08
3 1311.27
4 1350.6
5 1391.11
6 1432.84
7 1475.82
8 1520.09
9 1565.69
10 1612.66
11 1661.04
12 1710.87
13 1762.19
14 1815.05
15 1869.5
16 1925.58
17 1983.34
18 2042.84
18
ΠΡΟΓΡΑΜΜΑ MasterMind
!Το πρόγραμμα επιδεικνύει την εκτενή χρήση υποπρογραμμάτων.
!Οδηγίες για το παιχνίδι δίνονται κατά την εκτέλεσή του.
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: προσπάθειαΧρήστη, αποτέλεσμαΠροσπάθειας, κατάστασηΕκτέλεσης
ΑΡΧΗ
ΚΑΛΕΣΕ ΕμφάνισεΟδηγίες
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε έναν τετραψήφιο αριθμό ή 0 (μηδέν) αν παραιτείσαι: '
ΔΙΑΒΑΣΕ προσπάθειαΧρήστη
αποτέλεσμαΠροσπάθειας <- ΑξιολόγησεΠροσπάθεια(προσπάθειαΧρήστη)
ΕΠΙΛΕΞΕ αποτέλεσμαΠροσπάθειας
ΠΕΡΙΠΤΩΣΗ 2222
ΓΡΑΨΕ 'Το αποτέλεσμα της σύγκρισης με το μυστικό αριθμό είναι: '
ΚΑΛΕΣΕ ΕμφάνισεΑποτέλεσμα(αποτέλεσμαΠροσπάθειας)
ΚΑΛΕΣΕ ΕμφάνισεΣυγχαρητήρια
ΠΕΡΙΠΤΩΣΗ -1
ΚΑΛΕΣΕ ΕμφάνισεΜήνυμαΠαραίτησης
ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Το αποτέλεσμα της σύγκρισης με το μυστικό αριθμό είναι: '
ΚΑΛΕΣΕ ΕμφάνισεΑποτέλεσμα(αποτέλεσμαΠροσπάθειας)
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
ΜΕΧΡΙΣ_ΟΤΟΥ αποτέλεσμαΠροσπάθειας = 2222 Η αποτέλεσμαΠροσπάθειας = -1
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ ΕμφάνισεΟδηγίες
ΑΡΧΗ
ΓΡΑΨΕ ' ▄ ▄ ▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄ ▄ ▄ ▄ ▄ ▄ ▄▄▄'
ΓΡΑΨΕ ' █▀▄▀█ █▄█ ▀▄ █ █▄ █▄▀ █▀▄▀█ █ █▀▄ █ █ █'
ΓΡΑΨΕ ' █ █ █ █ █▄▄ █ █▄▄ █ █ █ █ █ █ ▀█ █▄▄▀'
ΓΡΑΨΕ 'Οδηγίες:'
ΓΡΑΨΕ 'Στο παιχνίδι αυτό ο σκοπός είναι να μαντέψουμε έναν τετραψήφιο αριθμό'
ΓΡΑΨΕ 'τον οποίο κρατάει κρυφό ο υπολογιστής. Τα ψηφία του αριθμού είναι'
ΓΡΑΨΕ 'διαφορετικά μεταξύ τους, αλλά επιτρέπεται το πρώτο ψηφίο να είναι μηδέν,'
ΓΡΑΨΕ 'για παράδειγμα ο μυστικός αριθμός μπορεί να είναι 0248.'
ΓΡΑΨΕ 'Αν προσπαθώντας να το βρούμε εισάγουμε τον αριθμό 1234,'
ΓΡΑΨΕ 'τότε ο υπολογιστής θα μας απαντήσει με το κείμενο ΟΝΟΠ.'
ΓΡΑΨΕ 'Τα γράμματα αυτά σημαίνουν:'
ΓΡΑΨΕ '«Ο»χι, ο μυστικός αριθμός δεν περιέχει το ψηφίο 1.'
ΓΡΑΨΕ '«Ν»αι, ο μυστικός αριθμός περιέχει το ψηφίο 2.'
ΓΡΑΨΕ '«Ο»χι, ο μυστικός αριθμός δεν περιέχει το ψηφίο 3.'
ΓΡΑΨΕ '«Π»ερίπου, υπάρχει 4 στο μυστικό αριθμό αλλά όχι σ'' αυτή τη θέση.'
ΓΡΑΨΕ ''
ΓΡΑΨΕ 'Η εκτέλεση συνεχίζεται μέχρι να πετύχουμε τον αριθμό,'
ΓΡΑΨΕ 'ή να δώσουμε 0000, το οποίο σημαίνει ότι παραιτούμαστε.'
ΓΡΑΨΕ ''
! ΓΡΑΨΕ '...............................................................................'
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΣΥΝΑΡΤΗΣΗ ΑξιολόγησεΠροσπάθεια(προσπάθειαΧρήστη): ΑΚΕΡΑΙΑ
!Η συνάρτηση αυτή υπολογίζει το αποτέλεσμα, π.χ. 'ΟΝΟΠ'. Αλλά επειδή η ΓΛΩΣΣΑ
!δεν υποστηρίζει χειρισμό αλφαριθμητικών, χρησιμοποιεί αριθμούς, π.χ. 0201.
!Το 2222 σημαίνει ότι ο χρήστης πέτυχε τον αριθμό,
!ενώ το -1 σημαίνει ότι παραιτείται, αφού έδωσε μηδέν σαν είσοδο.
ΣΤΑΘΕΡΕΣ
!Οι πράξεις είναι απλά για να μη φαίνεται ο μυστικός αριθμός
Μυστικός = 1234*9876 MOD 10000
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: προσπάθειαΧρήστη, αποτέλεσμα, ι, κ
ΛΟΓΙΚΕΣ: υπάρχει
ΑΡΧΗ
ΑΝ προσπάθειαΧρήστη = 0 ΤΟΤΕ
αποτέλεσμα <- -1
ΑΛΛΙΩΣ
αποτέλεσμα <- 0
ΓΙΑ ι ΑΠΟ 4 ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ -1
ΑΝ Ψηφίο(Μυστικός, ι) = Ψηφίο(προσπάθειαΧρήστη, ι) ΤΟΤΕ
αποτέλεσμα <- 10*αποτέλεσμα + 2
ΑΛΛΙΩΣ
υπάρχει <- ΨΕΥΔΗΣ
ΓΙΑ κ ΑΠΟ 1 ΜΕΧΡΙ 4
ΑΝ Ψηφίο(προσπάθειαΧρήστη, ι) = Ψηφίο(Μυστικός, κ) ΤΟΤΕ
υπάρχει <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ υπάρχει ΤΟΤΕ
αποτέλεσμα <- 10*αποτέλεσμα + 1
ΑΛΛΙΩΣ
αποτέλεσμα <- 10*αποτέλεσμα
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΑΝ
ΑξιολόγησεΠροσπάθεια <- αποτέλεσμα
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
ΣΥΝΑΡΤΗΣΗ Ψηφίο(αριθμός, ποιο): ΑΚΕΡΑΙΑ
!Απομονώνει το #ποιο ψηφίο του αριθμού.
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: αριθμός, ποιο
ΑΡΧΗ
Ψηφίο <- αριθμός DIV Α_Μ(10^(ποιο - 1)) MOD 10
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
ΔΙΑΔΙΚΑΣΙΑ ΕμφάνισεΣυγχαρητήρια
ΑΡΧΗ
ΓΡΑΨΕ ' ▄▄▄ ▄ ▄ ▄▄▄ ▄ ▄ ▄ ▄▄ ▄ ▄ ▄▄▄ ▄ ▄ ▄▄ ▄ ▄ ▄'
ΓΡΑΨΕ ' ▀▄ ▀▄▀ █ ▀▄▀ █▄█ █▄▀ █▄█ █ █▄█ █▄▀ █ █▄█ █'
ΓΡΑΨΕ ' █▄▄ █ █ ▄▀ ▀▄ █ █ █ █ █ █ █ █ █ █ █ █ ▄'
ΓΡΑΨΕ ' Είσαι ιδιοφυία, πέτυχες το μυστικό αριθμό!'
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ ΕμφάνισεΜήνυμαΠαραίτησης
ΑΡΧΗ
ΓΡΑΨΕ ' ▄▄▄ ▄ ▄ ▄▄▄ ▄ ▄ ▄ ▄▄ ▄ ▄ ▄▄▄ ▄ ▄ ▄▄ ▄ ▄ ▄'
ΓΡΑΨΕ ' ▀▄ ▀▄▀ █ ▀▄▀ █▄█ █▄▀ █▄█ █ █▄█ █▄▀ █ █▄█ █'
ΓΡΑΨΕ ' █▄▄ █ █ ▄▀ ▀▄ █ █ █ █ █ █ █ █ █ █ █ █ ▄'
ΓΡΑΨΕ ' ...θα πάρεις την επόμενη φορά αν καταφέρεις να τον πετύχεις!'
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ ΕμφάνισεΑποτέλεσμα(αποτέλεσμαΠροσπάθειας)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: αποτέλεσμαΠροσπάθειας, ι
ΑΡΧΗ
ΓΙΑ ι ΑΠΟ 4 ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ -1
ΕΠΙΛΕΞΕ Ψηφίο(αποτέλεσμαΠροσπάθειας, ι)
ΠΕΡΙΠΤΩΣΗ 0
ΓΡΑΨΕ 'Ο '
ΠΕΡΙΠΤΩΣΗ 1
ΓΡΑΨΕ 'Π '
ΠΕΡΙΠΤΩΣΗ 2
ΓΡΑΨΕ 'Ν '
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ''
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
όταν δοκίμασα να το εκτελέσω στοΠΡΟΓΡΑΜΜΑ MasterMind
!Το πρόγραμμα επιδεικνύει την εκτενή χρήση υποπρογραμμάτων.
!Οδηγίες για το παιχνίδι δίνονται κατά την εκτέλεσή του.
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: προσπάθειαΧρήστη, αποτέλεσμαΠροσπάθειας, κατάστασηΕκτέλεσης
ΑΡΧΗ
ΚΑΛΕΣΕ ΕμφάνισεΟδηγίες()
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε έναν τετραψήφιο αριθμό ή 0 (μηδέν) αν παραιτείσαι: '
ΔΙΑΒΑΣΕ προσπάθειαΧρήστη
αποτέλεσμαΠροσπάθειας <- ΑξιολόγησεΠροσπάθεια(προσπάθειαΧρήστη)
ΕΠΙΛΕΞΕ αποτέλεσμαΠροσπάθειας
ΠΕΡΙΠΤΩΣΗ 2222
ΓΡΑΨΕ 'Το αποτέλεσμα της σύγκρισης με το μυστικό αριθμό είναι: '
ΚΑΛΕΣΕ ΕμφάνισεΑποτέλεσμα(αποτέλεσμαΠροσπάθειας)
ΚΑΛΕΣΕ ΕμφάνισεΣυγχαρητήρια()
ΠΕΡΙΠΤΩΣΗ -1
ΚΑΛΕΣΕ ΕμφάνισεΜήνυμαΠαραίτησης()
ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Το αποτέλεσμα της σύγκρισης με το μυστικό αριθμό είναι: '
ΚΑΛΕΣΕ ΕμφάνισεΑποτέλεσμα(αποτέλεσμαΠροσπάθειας)
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
ΜΕΧΡΙΣ_ΟΤΟΥ αποτέλεσμαΠροσπάθειας = 2222 Η αποτέλεσμαΠροσπάθειας = -1
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ ΕμφάνισεΟδηγίες
ΑΡΧΗ
ΓΡΑΨΕ ' ▄ ▄ ▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄ ▄ ▄ ▄ ▄ ▄ ▄▄▄'
ΓΡΑΨΕ ' █▀▄▀█ █▄█ ▀▄ █ █▄ █▄▀ █▀▄▀█ █ █▀▄ █ █ █'
ΓΡΑΨΕ ' █ █ █ █ █▄▄ █ █▄▄ █ █ █ █ █ █ ▀█ █▄▄▀'
ΓΡΑΨΕ 'Οδηγίες:'
ΓΡΑΨΕ 'Στο παιχνίδι αυτό ο σκοπός είναι να μαντέψουμε έναν τετραψήφιο αριθμό'
ΓΡΑΨΕ 'τον οποίο κρατάει κρυφό ο υπολογιστής. Τα ψηφία του αριθμού είναι'
ΓΡΑΨΕ 'διαφορετικά μεταξύ τους, αλλά επιτρέπεται το πρώτο ψηφίο να είναι μηδέν,'
ΓΡΑΨΕ 'για παράδειγμα ο μυστικός αριθμός μπορεί να είναι 0248.'
ΓΡΑΨΕ 'Αν προσπαθώντας να το βρούμε εισάγουμε τον αριθμό 1234,'
ΓΡΑΨΕ 'τότε ο υπολογιστής θα μας απαντήσει με το κείμενο ΟΝΟΠ.'
ΓΡΑΨΕ 'Τα γράμματα αυτά σημαίνουν:'
ΓΡΑΨΕ '«Ο»χι, ο μυστικός αριθμός δεν περιέχει το ψηφίο 1.'
ΓΡΑΨΕ '«Ν»αι, ο μυστικός αριθμός περιέχει το ψηφίο 2.'
ΓΡΑΨΕ '«Ο»χι, ο μυστικός αριθμός δεν περιέχει το ψηφίο 3.'
ΓΡΑΨΕ '«Π»ερίπου, υπάρχει 4 στο μυστικό αριθμό αλλά όχι σ΄ αυτή τη θέση.'
ΓΡΑΨΕ ''
ΓΡΑΨΕ 'Η εκτέλεση συνεχίζεται μέχρι να πετύχουμε τον αριθμό,'
ΓΡΑΨΕ 'ή να δώσουμε 0000, το οποίο σημαίνει ότι παραιτούμαστε.'
ΓΡΑΨΕ ''
! ΓΡΑΨΕ '...............................................................................'
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΣΥΝΑΡΤΗΣΗ ΨΗΦΙΟ(αριθμός, ποιο): ΑΚΕΡΑΙΑ
!Απομονώνει το #ποιο ψηφίο του αριθμού.
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: αριθμός, ποιο
ΑΡΧΗ
Ψηφίο <- αριθμός DIV Α_Μ(10^(ποιο - 1)) MOD 10
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
ΣΥΝΑΡΤΗΣΗ ΑξιολόγησεΠροσπάθεια(προσπάθειαΧρήστη): ΑΚΕΡΑΙΑ
!Η συνάρτηση αυτή υπολογίζει το αποτέλεσμα, π.χ. 'ΟΝΟΠ'. Αλλά επειδή η ΓΛΩΣΣΑ
!δεν υποστηρίζει χειρισμό αλφαριθμητικών, χρησιμοποιεί αριθμούς, π.χ. 0201.
!Το 2222 σημαίνει ότι ο χρήστης πέτυχε τον αριθμό,
!ενώ το -1 σημαίνει ότι παραιτείται, αφού έδωσε μηδέν σαν είσοδο.
ΣΤΑΘΕΡΕΣ
!Οι πράξεις είναι απλά για να μη φαίνεται ο μυστικός αριθμός
Μυστικός = 1234*9876 MOD 10000
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: προσπάθειαΧρήστη, αποτέλεσμα, ι, κ
ΛΟΓΙΚΕΣ: υπάρχει
ΑΡΧΗ
ΑΝ προσπάθειαΧρήστη = 0 ΤΟΤΕ
αποτέλεσμα <- -1
ΑΛΛΙΩΣ
αποτέλεσμα <- 0
ΓΙΑ ι ΑΠΟ 4 ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ -1
ΑΝ ΨΗΦΙΟ(Μυστικός, ι) = ΨΗΦΙΟ(προσπάθειαΧρήστη, ι) ΤΟΤΕ
αποτέλεσμα <- 10*αποτέλεσμα + 2
ΑΛΛΙΩΣ
υπάρχει <- ΨΕΥΔΗΣ
ΓΙΑ κ ΑΠΟ 1 ΜΕΧΡΙ 4
ΑΝ ΨΗΦΙΟ(προσπάθειαΧρήστη, ι) = ΨΗΦΙΟ(Μυστικός, κ) ΤΟΤΕ
υπάρχει <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ υπάρχει ΤΟΤΕ
αποτέλεσμα <- 10*αποτέλεσμα + 1
ΑΛΛΙΩΣ
αποτέλεσμα <- 10*αποτέλεσμα
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΑΝ
ΑξιολόγησεΠροσπάθεια <- αποτέλεσμα
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
ΔΙΑΔΙΚΑΣΙΑ ΕμφάνισεΣυγχαρητήρια
ΑΡΧΗ
ΓΡΑΨΕ ' ▄▄▄ ▄ ▄ ▄▄▄ ▄ ▄ ▄ ▄▄ ▄ ▄ ▄▄▄ ▄ ▄ ▄▄ ▄ ▄ ▄'
ΓΡΑΨΕ ' ▀▄ ▀▄▀ █ ▀▄▀ █▄█ █▄▀ █▄█ █ █▄█ █▄▀ █ █▄█ █'
ΓΡΑΨΕ ' █▄▄ █ █ ▄▀ ▀▄ █ █ █ █ █ █ █ █ █ █ █ █ ▄'
ΓΡΑΨΕ ' Είσαι ιδιοφυία, πέτυχες το μυστικό αριθμό!'
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ ΕμφάνισεΜήνυμαΠαραίτησης
ΑΡΧΗ
ΓΡΑΨΕ ' ▄▄▄ ▄ ▄ ▄▄▄ ▄ ▄ ▄ ▄▄ ▄ ▄ ▄▄▄ ▄ ▄ ▄▄ ▄ ▄ ▄'
ΓΡΑΨΕ ' ▀▄ ▀▄▀ █ ▀▄▀ █▄█ █▄▀ █▄█ █ █▄█ █▄▀ █ █▄█ █'
ΓΡΑΨΕ ' █▄▄ █ █ ▄▀ ▀▄ █ █ █ █ █ █ █ █ █ █ █ █ ▄'
ΓΡΑΨΕ ' ...θα πάρεις την επόμενη φορά αν καταφέρεις να τον πετύχεις!'
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ ΕμφάνισεΑποτέλεσμα(αποτέλεσμαΠροσπάθειας)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: αποτέλεσμαΠροσπάθειας, ι
ΑΡΧΗ
ΓΙΑ ι ΑΠΟ 4 ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ -1
ΕΠΙΛΕΞΕ ΨΗΦΙΟ(αποτέλεσμαΠροσπάθειας, ι)
ΠΕΡΙΠΤΩΣΗ 0
ΓΡΑΨΕ 'Ο '
ΠΕΡΙΠΤΩΣΗ 1
ΓΡΑΨΕ 'Π '
ΠΕΡΙΠΤΩΣΗ 2
ΓΡΑΨΕ 'Ν '
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ''
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Προφανώς πρέπει να γίνει έλεγχος με πολλές διαδικασίες και συναρτήσεις με ανακατεμένους ορισμούς για να βρεθεί το λάθος!
Υπάρχουν προβλήματα. Αν κάθε λάθος με τη σειρά τα αντιμετωπίσουμε, όπως εκεί που καλούμε διαδικασία χωρίς ορίσματα πρέπει να βάλουμε () για να κληθεί σωστά, τότε θα φτάσουμε να μην δέχεται τη συνάρτηση Ψηφίο. Δοκίμασα και την γύρισα σε κεφαλαία και πάλι είχε πρόβλημα, οπότε την μετακίνησα ακριβώς μετά τη διαδικασία ΕμφάνισεΟδηγίες και ξεκίνησε το πρόγραμμα χωρίς πρόβλημα.
Αυτό ξεκίνησε αν και δεν είχα χρόνο να το δοκιμάσω, δηλαδή δεν το είδα όλο, αν θέλει κάποιος να το δει, ας το δοκιμάσει.Κώδικας: [Επιλογή]ΠΡΟΓΡΑΜΜΑ MasterMind
Προφανώς πρέπει να γίνει έλεγχος με πολλές διαδικασίες και συναρτήσεις με ανακατεμένους ορισμούς για να βρεθεί το λάθος!
!Το πρόγραμμα επιδεικνύει την εκτενή χρήση υποπρογραμμάτων.
!Οδηγίες για το παιχνίδι δίνονται κατά την εκτέλεσή του.
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: προσπάθειαΧρήστη, αποτέλεσμαΠροσπάθειας, κατάστασηΕκτέλεσης
ΑΡΧΗ
ΚΑΛΕΣΕ ΕμφάνισεΟδηγίες()
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Δώσε έναν τετραψήφιο αριθμό ή 0 (μηδέν) αν παραιτείσαι: '
ΔΙΑΒΑΣΕ προσπάθειαΧρήστη
αποτέλεσμαΠροσπάθειας <- ΑξιολόγησεΠροσπάθεια(προσπάθειαΧρήστη)
ΕΠΙΛΕΞΕ αποτέλεσμαΠροσπάθειας
ΠΕΡΙΠΤΩΣΗ 2222
ΓΡΑΨΕ 'Το αποτέλεσμα της σύγκρισης με το μυστικό αριθμό είναι: '
ΚΑΛΕΣΕ ΕμφάνισεΑποτέλεσμα(αποτέλεσμαΠροσπάθειας)
ΚΑΛΕΣΕ ΕμφάνισεΣυγχαρητήρια()
ΠΕΡΙΠΤΩΣΗ -1
ΚΑΛΕΣΕ ΕμφάνισεΜήνυμαΠαραίτησης()
ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
ΓΡΑΨΕ 'Το αποτέλεσμα της σύγκρισης με το μυστικό αριθμό είναι: '
ΚΑΛΕΣΕ ΕμφάνισεΑποτέλεσμα(αποτέλεσμαΠροσπάθειας)
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
ΜΕΧΡΙΣ_ΟΤΟΥ αποτέλεσμαΠροσπάθειας = 2222 Η αποτέλεσμαΠροσπάθειας = -1
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ ΕμφάνισεΟδηγίες
ΑΡΧΗ
ΓΡΑΨΕ ' ▄ ▄ ▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄▄ ▄ ▄ ▄ ▄ ▄ ▄▄▄'
ΓΡΑΨΕ ' █▀▄▀█ █▄█ ▀▄ █ █▄ █▄▀ █▀▄▀█ █ █▀▄ █ █ █'
ΓΡΑΨΕ ' █ █ █ █ █▄▄ █ █▄▄ █ █ █ █ █ █ ▀█ █▄▄▀'
ΓΡΑΨΕ 'Οδηγίες:'
ΓΡΑΨΕ 'Στο παιχνίδι αυτό ο σκοπός είναι να μαντέψουμε έναν τετραψήφιο αριθμό'
ΓΡΑΨΕ 'τον οποίο κρατάει κρυφό ο υπολογιστής. Τα ψηφία του αριθμού είναι'
ΓΡΑΨΕ 'διαφορετικά μεταξύ τους, αλλά επιτρέπεται το πρώτο ψηφίο να είναι μηδέν,'
ΓΡΑΨΕ 'για παράδειγμα ο μυστικός αριθμός μπορεί να είναι 0248.'
ΓΡΑΨΕ 'Αν προσπαθώντας να το βρούμε εισάγουμε τον αριθμό 1234,'
ΓΡΑΨΕ 'τότε ο υπολογιστής θα μας απαντήσει με το κείμενο ΟΝΟΠ.'
ΓΡΑΨΕ 'Τα γράμματα αυτά σημαίνουν:'
ΓΡΑΨΕ '«Ο»χι, ο μυστικός αριθμός δεν περιέχει το ψηφίο 1.'
ΓΡΑΨΕ '«Ν»αι, ο μυστικός αριθμός περιέχει το ψηφίο 2.'
ΓΡΑΨΕ '«Ο»χι, ο μυστικός αριθμός δεν περιέχει το ψηφίο 3.'
ΓΡΑΨΕ '«Π»ερίπου, υπάρχει 4 στο μυστικό αριθμό αλλά όχι σ΄ αυτή τη θέση.'
ΓΡΑΨΕ ''
ΓΡΑΨΕ 'Η εκτέλεση συνεχίζεται μέχρι να πετύχουμε τον αριθμό,'
ΓΡΑΨΕ 'ή να δώσουμε 0000, το οποίο σημαίνει ότι παραιτούμαστε.'
ΓΡΑΨΕ ''
! ΓΡΑΨΕ '...............................................................................'
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΣΥΝΑΡΤΗΣΗ ΨΗΦΙΟ(αριθμός, ποιο): ΑΚΕΡΑΙΑ
!Απομονώνει το #ποιο ψηφίο του αριθμού.
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: αριθμός, ποιο
ΑΡΧΗ
Ψηφίο <- αριθμός DIV Α_Μ(10^(ποιο - 1)) MOD 10
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
ΣΥΝΑΡΤΗΣΗ ΑξιολόγησεΠροσπάθεια(προσπάθειαΧρήστη): ΑΚΕΡΑΙΑ
!Η συνάρτηση αυτή υπολογίζει το αποτέλεσμα, π.χ. 'ΟΝΟΠ'. Αλλά επειδή η ΓΛΩΣΣΑ
!δεν υποστηρίζει χειρισμό αλφαριθμητικών, χρησιμοποιεί αριθμούς, π.χ. 0201.
!Το 2222 σημαίνει ότι ο χρήστης πέτυχε τον αριθμό,
!ενώ το -1 σημαίνει ότι παραιτείται, αφού έδωσε μηδέν σαν είσοδο.
ΣΤΑΘΕΡΕΣ
!Οι πράξεις είναι απλά για να μη φαίνεται ο μυστικός αριθμός
Μυστικός = 1234*9876 MOD 10000
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: προσπάθειαΧρήστη, αποτέλεσμα, ι, κ
ΛΟΓΙΚΕΣ: υπάρχει
ΑΡΧΗ
ΑΝ προσπάθειαΧρήστη = 0 ΤΟΤΕ
αποτέλεσμα <- -1
ΑΛΛΙΩΣ
αποτέλεσμα <- 0
ΓΙΑ ι ΑΠΟ 4 ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ -1
ΑΝ ΨΗΦΙΟ(Μυστικός, ι) = ΨΗΦΙΟ(προσπάθειαΧρήστη, ι) ΤΟΤΕ
αποτέλεσμα <- 10*αποτέλεσμα + 2
ΑΛΛΙΩΣ
υπάρχει <- ΨΕΥΔΗΣ
ΓΙΑ κ ΑΠΟ 1 ΜΕΧΡΙ 4
ΑΝ ΨΗΦΙΟ(προσπάθειαΧρήστη, ι) = ΨΗΦΙΟ(Μυστικός, κ) ΤΟΤΕ
υπάρχει <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ υπάρχει ΤΟΤΕ
αποτέλεσμα <- 10*αποτέλεσμα + 1
ΑΛΛΙΩΣ
αποτέλεσμα <- 10*αποτέλεσμα
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΑΝ
ΑξιολόγησεΠροσπάθεια <- αποτέλεσμα
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ
ΔΙΑΔΙΚΑΣΙΑ ΕμφάνισεΣυγχαρητήρια
ΑΡΧΗ
ΓΡΑΨΕ ' ▄▄▄ ▄ ▄ ▄▄▄ ▄ ▄ ▄ ▄▄ ▄ ▄ ▄▄▄ ▄ ▄ ▄▄ ▄ ▄ ▄'
ΓΡΑΨΕ ' ▀▄ ▀▄▀ █ ▀▄▀ █▄█ █▄▀ █▄█ █ █▄█ █▄▀ █ █▄█ █'
ΓΡΑΨΕ ' █▄▄ █ █ ▄▀ ▀▄ █ █ █ █ █ █ █ █ █ █ █ █ ▄'
ΓΡΑΨΕ ' Είσαι ιδιοφυία, πέτυχες το μυστικό αριθμό!'
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ ΕμφάνισεΜήνυμαΠαραίτησης
ΑΡΧΗ
ΓΡΑΨΕ ' ▄▄▄ ▄ ▄ ▄▄▄ ▄ ▄ ▄ ▄▄ ▄ ▄ ▄▄▄ ▄ ▄ ▄▄ ▄ ▄ ▄'
ΓΡΑΨΕ ' ▀▄ ▀▄▀ █ ▀▄▀ █▄█ █▄▀ █▄█ █ █▄█ █▄▀ █ █▄█ █'
ΓΡΑΨΕ ' █▄▄ █ █ ▄▀ ▀▄ █ █ █ █ █ █ █ █ █ █ █ █ ▄'
ΓΡΑΨΕ ' ...θα πάρεις την επόμενη φορά αν καταφέρεις να τον πετύχεις!'
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ ΕμφάνισεΑποτέλεσμα(αποτέλεσμαΠροσπάθειας)
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: αποτέλεσμαΠροσπάθειας, ι
ΑΡΧΗ
ΓΙΑ ι ΑΠΟ 4 ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ -1
ΕΠΙΛΕΞΕ ΨΗΦΙΟ(αποτέλεσμαΠροσπάθειας, ι)
ΠΕΡΙΠΤΩΣΗ 0
ΓΡΑΨΕ 'Ο '
ΠΕΡΙΠΤΩΣΗ 1
ΓΡΑΨΕ 'Π '
ΠΕΡΙΠΤΩΣΗ 2
ΓΡΑΨΕ 'Ν '
ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ ''
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
Καλησπέρα σε όλους,
Ζητώ συγγνώμη που αργώ με τα bugs αλλά αυτό τον καιρό έχω πολύ λίγο χρόνο. Θα προσπαθήσω να διορθώσω όσα μπορώ το επόμενο ΣΚ.
Στο κομμάτι κώδικα που έστειλε ο dpa, το σφάλμα δεν βρίσκεται στην γραμμή 6 αλλά στην γραμμή όπου ορίζεται η διαδικασία ΕμφάνισεΟδηγίες. Οπότε εδώ έχουμε 2 bugs: ένα στο ότι δεν επιτρέπω ορισμό διαδικασίας χωρίς () και ένα άλλο στο error handling.
ΠΡΟΓΡΑΜΜΑ Αεροπορικές_εταιρείες
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Ν, Ι, Εισπράξεις[50], Σύνολο
ΠΡΑΓΜΑΤΙΚΕΣ: ΜΟ
ΧΑΡΑΚΤΗΡΕΣ: Εταιρεία[50]
ΑΡΧΗ
ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
ΓΡΑΨΕ 'Αριθμός εταιρειών.. (μικρότερο από 50)'
ΔΙΑΒΑΣΕ Ν
ΜΕΧΡΙΣ_ΟΤΟΥ Ν <= 50
Σύνολο <-- 0
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
ΓΡΑΨΕ 'Δώσε αεροπορική εταιρεία…'
ΔΙΑΒΑΣΕ Εταιρεία[Ι]
ΓΡΑΨΕ 'Δώσε εισπράξεις…'
ΔΙΑΒΑΣΕ Εισπράξεις[Ι]
Σύνολο <-- Σύνολο + Εισπράξεις[Ι]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΜΟ <-- Σύνολο/Ν
ΓΡΑΨΕ 'Μεγαλύτερες από το μέσο όρο'
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ Ν
ΑΝ Εισπράξεις[Ι] > ΜΟ ΤΟΤΕ
ΓΡΑΨΕ 'Η Εταιρεία:', Εταιρεία[Ι],', με εισπράξεις:', Εισπράξεις[Ι]
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ