Τελευταίο Μάθημα 1. Να χαρακτηρίσετε καθεμία από τις παρακάτω προτάσεις, ως σωστές (Σ) ή λανθασμένες (Λ) Ο χαρακτήρας του κενού ανήκει στο αλφάβητο της γλώσσας. Σ Λ Σε μία αλφαριθμητική τιμή μπορεί να περιέχονται και ψηφία. Σ Λ Αν σε ένα δυαδικό αριθμό γίνει ολίσθηση προς τα δεξιά, τότε έχει πολλαπλασιαστεί επί δύο. Σ Λ Οι τελεστές DIV και MOD, δεν μπορούν να χρησιμοποιηθούν σε πραγματικούς αριθμούς. Σ Λ Μία λογική έκφραση που περιέχει αριθμητικά δεδομένα, περιλαμβάνει υποχρεωτικά συγκριτικό τελεστή. Σ Λ Μία λογική έκφραση περιέχει υποχρεωτικά λογικό τελεστή. Σ Λ Μία αλφαριθμητική μεταβλητή δεν μπορεί να λάβει τις τιμές "Αληθής" ή "Ψευδής", καθώς σε αυτή την περίπτωση θα αποτελεί λογική μεταβλητή. Σ Λ Ο μεταγλωττιστής εντοπίζει τα λογικά λάθη και εμφανίζει κατάλληλα διαγνωστικά μηνύματα. Σ Λ Ο αλγόριθμος της σειριακής αναζήτησης ονομάζεται διαφορετικά και μέθοδος ευθείας ανταλλαγής. Σ Λ Η αναπαράσταση ενός αλγορίθμου με φυσική γλώσσα κατά βήματα, μπορεί να παραβιάσει το κριτήριο της καθοριστικότητας. Σ Λ Ο βρόχος Για Κ από 5 μέχρι 1, εκτελείται 5 φορές. Σ Λ Αν Χ K < 1, τότε η Χ μπορεί να πάρει δύο τιμές. Σ Λ Τα πλεονεκτήματα της τοπικής εμβέλειας των μεταβλητών είναι η απόλυτη αυτονομία όλων των υποπρογραμμάτων και η δυνατότητα να χρησιμοποιείται οποιοδήποτε όνομα, χωρίς να ενδιαφέρει αν το ίδιο χρησιμοποιείται σε άλλο υποπρόγραμμα. Σ Λ Η στοίβα χρόνου εκτέλεσης θα μπορούσε να περιέχει ταυτόχρονα δύο ή περισσότερες διευθύνσεις επιστροφής στο κύριο πρόγραμμα Σ Λ Ορίσματα ονομάζονται αλλιώς οι τυπικές παράμετροι. Σ Λ 2. Σε καθεμία από τις παρακάτω προτάσεις να συμπληρώσετε τη λέξη που λείπει: Το πρόγραμμα το γράφει ο προγραμματιστής στον. Το πρόγραμμα εξάγεται από τον συνδέτη και εκτελείται από τον υπολογιστή. Το αντικείμενο πρόγραμμα το δημιουργεί ο. Ο διαβάζει μία προς μία τις εντολές του πηγαίου προγράμματος και για καθεμία εκτελεί αμέσως μία ισοδύναμη ακολουθία εντολών μηχανής. Τα λάθη εντοπίζονται από έναν μεταγλωττιστή, ο οποίος εμφανίζει και κατάλληλα διαγνωστικά μηνύματα. Αντίθετα, δεν μπορεί να ανιχνεύσει τα λάθη. Μία είναι ο τύπος υποπρογράμματος που μπορεί να κάνει ότι και ένα πρόγραμμα. Σάββας Λερίου 1
3. Να γραφούν οι παρακάτω μαθηματικές εκφράσεις σε ΓΛΩΣΣΑ: x 3( x + 1) x α. β. 2x+ e 2 2 x + 5 y + 1 4. Να συμπληρώσετε τον παρακάτω πίνακα: A B (ΟΧΙ Α) ΚΑΙ (ΟΧΙ Β) ((ΟΧΙ Α) ΚΑΙ Β) Ή (Α ΚΑΙ (ΟΧΙ Β)) Ψευδής Ψευδής Αληθής Αληθής Ψευδής Αληθής Ψευδής Αληθής 5. Δίνεται το παρακάτω τμήμα αλγορίθμου: Κ 1 ΓΙΑ i ΑΠΟ -1 ΜΕΧΡΙ -5 ΜΕ_ΒΗΜΑ -2 Κ Κ * i ΓΡΑΨΕ Κ Να μετατραπεί το τμήμα αυτό αλγορίθμου σε ισοδύναμο: α. με χρήση της αλγοριθμικής δομής ΟΣΟ β. με χρήση της αλγοριθμικής δομής ΜΕΧΡΙΣ_ΟΤΟΥ 6. Δίνεται το παρακάτω τμήμα αλγορίθμου: ΓΡΑΨΕ "ΔΩΣΕ ΘΕΤΙΚΟ ΑΡΙΘΜΟ" ΔΙΑΒΑΣΕ... ΜΕΧΡΙΣ_ΟΤΟΥ Χ... 0 ΓΙΑ i ΑΠΟ 0 ΜΕΧΡΙ... ΜΕ_ΒΗΜΑ... Α i ^... ΓΡΑΨΕ... Να συμπληρωθεί κατάλληλα ο παραπάνω αλγόριθμος, ώστε να υπολογίζει και να εμφανίζει τα τετράγωνα των πολλαπλασίων του 5 από το 0 μέχρι τον αριθμό Χ που διαβάστηκε. 7. Δίνεται η παρακάτω ακολουθία εντολών: done ΑΛΗΘΗΣ ΟΣΟ done = ΑΛΗΘΗΣ ΕΠΑΝΑΛΑΒΕ ΔΙΑΒΑΣΕ Α, Β Χ Β / Α ΓΡΑΨΕ Χ Ποια αλγοριθμικά κριτήρια δεν ικανοποιούνται; Σάββας Λερίου 2
8. Δίνεται το παρακάτω τμήμα αλγορίθμου: Χ 0 Α 10 Β 14 ΟΣΟ Β > 0 ΕΠΑΝΑΛΑΒΕ ΑΝ Β MOD 2 = 0 ΤΟΤΕ Χ Χ + Α Α Α * 2 Β Β DIV 2 α. Να γραφούν οι τιμές των μεταβλητών Χ, Α και Β στο τέλος κάθε επανάληψης κατά την εκτέλεση του παραπάνω αλγόριθμου. β. Να σχεδιαστεί το αντίστοιχο διάγραμμα ροής. 9. Για το παρακάτω διάγραμμα ροής να γραφεί το αντίστοιχο τμήμα κωδικοποίησης: 10. Το διπλανό τμήμα αλγορίθμου προσπαθεί να διαβάσει 50 αριθμούς, να υπολογίσει και να εμφανίσει το άθροισμα και τον μέσο όρο τους. Να σημειωθούν οι γραμμές στις οποίες υπάρχουν λάθη και να χαρακτηριστούν ως λογικά ή συντακτικά. 1. S 1 2. Για i από 101 μέχρις 150 3. Διάβασε Χ 4. S S + X 5. Τέλος επανάληψης 6. ΜΟ S / (150-101)+1 7. Εμφάνισε S, MO 11. Δίνεται το παρακάτω τμήμα αλγόριθμου, που υλοποιεί την πρώτη φάση της συγχώνευσης των ταξινομημένων πινάκων Α[100] και Β[200] σε πίνακα Γ[300]. Ο πίνακας Α είναι ταξινομημένος σε αύξουσα σειρά και ο πίνακας Β σε φθίνουσα. Το τμήμα αυτό επεξεργάζεται τους πίνακες Α και Β τοποθετώντας τα στοιχεία τους στον πίνακα Γ σε αύξουσα σειρά. Η διαδικασία σταματά, όταν εξαντληθούν τα στοιχεία ενός από τους πίνακες Α και Β. Το τμήμα αλγόριθμου έχει 8 κενά. Συμπληρώστε κάθε κενό με τον τελεστή ή τη μεταβλητή που αντιστοιχεί. Σάββας Λερίου 3
i 1 j 200 k 1 Όσο i 100 και j 1 επανάλαβε Αν Α[i] B[j] τότε Γ[ ] Α[i] i i 1 Αλλιώς Γ[ ] Β[ ] j j 1 Τέλος_αν k k +1 Τέλος_επανάληψης 12. Δίνεται το παρακάτω πρόγραμμα και υποπρογράμματα: ΠΡΟΓΡΑΜΜΑ Κλήση_Υποπρογραμμάτων ΑΚΕΡΑΙΕΣ: a, b, x a 1 b 2 ΑΝ a<= 4 ΤΟΤΕ ΚΑΛΕΣΕ Διαδ1(a, b, x) x Συν1(a, b) ΓΡΑΨΕ a, b, x ΜΕΧΡΙΣ_ΟΤΟΥ x>11 ΓΡΑΨΕ x ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ ΔΙΑΔΙΚΑΣΙΑ Διαδ1 (λ, κ, μ) ΑΚΕΡΑΙΕΣ: κ, λ, μ κ κ+1 λ λ+3 μ κ+λ ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ ΣΥΝΑΡΤΗΣΗ Συν1(c, z): ΑΚΕΡΑΙΑ ΑΚΕΡΑΙΕΣ: c, z z z+2 c c*2 Συν1 c+z ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ Να γράψετε στο τετράδιό σας τo αντίστοιχο πρόγραμμα, χωρίς τη χρήση των υποπρογραμμάτων. Σάββας Λερίου 4
13. Ο παρακάτω αλγόριθμος αντιγράφει τα στοιχεία ενός μονοδιάστατου πίνακα Α[Y], όπου Υ=Μ*N, σε δισδιάστατο πίνακα Β[Μ,Ν] ξεκινώντας από την πρώτη στήλη και συνεχίζοντας με κάθε επόμενη στήλη γεμίζοντας καθεμιά από πάνω προς τα κάτω: Αλγόριθμος Αντιγραφή Δεδομένα // Α, Μ, Ν // k Για από 1 μέχρι... Για από 1 μέχρι k Β[j, i] Α[ ] Τέλος_Επανάληψης Τέλος_Επανάληψης Αποτελέσματα // Β // Τέλος Αντιγραφή Ο αλγόριθμος περιέχει 7 κενά. Συμπληρώστε τα κενά, ώστε ο αλγόριθμος να επιτελεί τη λειτουργία που περιγράφεται. 14. Ο Δήμος της πόλης σας κατασκεύασε ένα ανοικτό αμφιθέατρο για την πραγματοποίηση εκδηλώσεων. Το αμφιθέατρο αριθμεί 15 σειρές καθισμάτων. Αποφασίστηκε ότι για την πρώτη εκδήλωση, το κόστος του εισιτηρίου της πρώτης σειράς να είναι 20 και κάθε επόμενης να είναι μειωμένο κατά 2. Για τις 8 τελευταίες σειρές όμως, το κόστος θα είναι 5. Τα έσοδα θα διατεθούν για φιλανθρωπικούς σκοπούς. Να γραφεί πρόγραμμα σε ΓΛΩΣΣΑ που: α. Θα περιλαμβάνει τμήμα δηλώσεων. β. Θα διαβάζει επαναληπτικά τον αριθμό της σειράς και το πλήθος των εισιτηρίων της σειράς αυτής, που επιθυμεί να αγοράσει ένας θεατής. καθώς και το όνομά του. Η επανάληψη θα ολοκληρώνεται όταν εισαχθεί ως σειρά ο αριθμός 0. (θεωρούμε ότι τα εισιτήρια επαρκούν και δεν υπάρχει έλλειψη θέσεων). γ. Θα υπολογίζει και θα εμφανίζει το κόστος της κάθε αγοράς. Ο υπολογισμός του κόστους θα γίνεται μέσω του υποπρογράμματος που περιγράφεται στο ερώτημα (ε). δ. Στο τέλος, θα εμφανίζει το σύνολο των εισιτηρίων που κόπηκαν, το σύνολο των εισιτηρίων της πρώτης σειράς, το σύνολο των εισπράξεων, το ποσοστό των θεατών που επέλεξαν το φθηνό εισιτήριο των 5, καθώς και τα ονόματα των δύο θεατών που πλήρωσαν τα περισσότερα χρήματα. ε. Να αναπτυχθεί και το υποπρόγραμμα που αναφέρθηκε στο (γ) ερώτημα, που για κάθε αγορά θα δέχεται τον αριθμό σειράς και το πλήθος των εισιτηρίων και θα επιστρέφει το αντίστοιχο κόστος. 15. Να γραφεί πρόγραμμα σε «ΓΛΩΣΣΑ» το οποίο: α. Καταχωρεί στους πίνακες ακεραίων ΗΜΕΡΑ[500] και ΜΗΝΑΣ[500] την ημέρα και τον μήνα αντίστοιχα μιας δαπάνης, στον πίνακα ΠΕΡΙΓΡΑΦΗ[500] την αναλυτική περιγραφή της δαπάνης και στον πίνακα πραγματικών ΚΟΣΤΟΣ[500] το συνολικό ποσό της αντίστοιχης δαπάνης. Για τις τιμές των πινάκων ΗΜΕΡΑ και ΜΗΝΑΣ να γίνεται έλεγχος μέσω της διαδικασίας ΕΛΕΓΧΟΣ_ΗΜΕΡΟΜΗΝΙΑΣ που περιγράφεται στο ερώτημα (δ), ενώ μέσα στο πρόγραμμα να γίνεται έλεγχος ώστε οι τιμές του ΚΟΣΤΟΣ να μην είναι αρνητικές. Το μέγεθος των πινάκων να έχει εκχωρηθεί στη σταθερά Ν. Σάββας Λερίου 5
β. Ταξινομεί τους πίνακες πρώτα ως προς το μήνα κατά αύξουσα τάξη και στην περίπτωση ίδιου μήνα η ταξινόμηση να γίνει ως προς την ημέρα, κατά αύξουσα τάξη. γ. Διαβάζει από το πληκτρολόγιο μία ημερομηνία (με έλεγχο όπως και στο (α) ερώτημα) και εμφανίζει την περιγραφή κάθε δαπάνης με τα αντίστοιχα ποσά δαπάνης της χρονικής περιόδου μέχρι και την ημερομηνία που δόθηκε. Επίσης στο τέλος να εμφανίζει το συνολικό ποσό που έχει ξοδευτεί την αντίστοιχη χρονική περίοδο. δ. Να γίνεται, όποτε χρειάζεται χρήση της διαδικασίας ΕΛΕΓΧΟΣ_ΗΜΕΡΟΜΗΝΙΑΣ, που ελέγχει ότι οι τιμές για την ημέρα και τον μήνα ανήκουν στα διαστήματα [1,31] και [1,12] αντίστοιχα, επιστέφοντας μία εκ των τιμών ΑΛΗΘΗΣ ή ΨΕΥΔΗΣ. Δεχόμαστε πως ο συνδυασμός ημέρας και μήνα αντιστοιχεί σε έγκυρη ημερομηνία, χωρίς να χρειάζεται περαιτέρω έλεγχος. 16. Να γραφεί πρόγραμμα σε «ΓΛΩΣΣΑ» το οποίο να διαχειρίζεται πίνακα Τηλεφωνικού Καταλόγου 500 γραμμών, με 1η στήλη το Ονοματεπώνυμο, 2η στήλη την Διεύθυνση και 3η στήλη το Τηλέφωνο. Αρχικά τοποθετεί σε όλα τα στοιχεία του πίνακα ΚΑΤ[500,3] τον κενό χαρακτήρα και στη συνέχεια εμφανίζει το παρακάτω μενού επιλογών: 1. Εισαγωγή νέου συνδρομητή 2. Αναζήτηση συνδρομητή 3. Εμφάνιση καταλόγου 4. Έξοδος Εάν ο χρήστης επιλέξει 1, το πρόγραμμα ελέγχει εάν ο κατάλογος είναι πλήρης, οπότε και εμφανίζει μήνυμα, διαφορετικά καλεί τη διαδικασία ΕΙΣΑΓΩΓΗ, μέσω της οποίας εισάγει τα στοιχεία του νέου συνδρομητή και ενημερώνει το πλήθος των συνδρομητών. Εάν ο χρήστης επιλέξει 2, το πρόγραμμα ελέγχει εάν ο κατάλογος είναι κενός, οπότε και εμφανίζει μήνυμα, διαφορετικά καλεί τη διαδικασία ΑΝΑΖΗΤΗΣΗ, η οποία εμφανίζει το μενού: 1. Αναζήτηση με όνομα 2. Αναζήτηση με τηλέφωνο και βάσει της επιλογής του χρήστη πραγματοποιεί την κατάλληλη αναζήτηση, επιστρέφοντας στο κύριο πρόγραμμα τη γραμμή του καταλόγου στην οποία βρέθηκε η εγγραφή. Εάν επιστραφεί ως γραμμή το μηδέν, που σημαίνει πως το στοιχείο δεν βρέθηκε, το πρόγραμμα εμφανίζει μήνυμα, διαφορετικά εμφανίζει το μενού: 1. Διόρθωση δεδομένων συνδρομητή 2. Διαγραφή συνδρομητή 3. Επιστροφή Εάν ο χρήστης επιλέξει 1, καλείται η διαδικασία ΔΙΟΡΘΩΣΗ όπου ο χρήστης δίνει νέα στοιχεία για την εγγραφή που βρέθηκε, ενώ αν επιλέξει 2, καλείται η διαδικασία ΔΙΑΓΡΑΦΗ, όπου γίνεται αντιγραφή των εγγραφών από την επόμενη γραμμή αυτής στην οποία βρέθηκε στο στοιχείο, στην αμέσως προηγούμενη γραμμή, ενώ στο τελευταίο στοιχείο του πίνακα εκχωρούνται κενά, έτσι ώστε οι κενές εγγραφές να βρίσκονται στις τελευταίες θέσεις του καταλόγου και τελικά ενημερώνει το πλήθος των συνδρομητών. Εάν ο χρήστης επιλέξει 3, το πρόγραμμα ελέγχει εάν ο κατάλογος είναι κενός, οπότε και εμφανίζει μήνυμα, διαφορετικά καλεί τη διαδικασία ΕΜΦΑΝΙΣΗ, μέσω της οποίας εμφανίζει όλες τις μη κενές εγγραφές του καταλόγου. Σάββας Λερίου 6
Απαντήσεις 1. Να χαρακτηρίσετε καθεμία από τις παρακάτω προτάσεις, ως σωστές (Σ) ή λανθασμένες (Λ) Ο χαρακτήρας του κενού ανήκει στο αλφάβητο της γλώσσας. Σε μία αλφαριθμητική τιμή μπορεί να περιέχονται και ψηφία. Αν σε ένα δυαδικό αριθμό γίνει ολίσθηση προς τα δεξιά, τότε έχει πολλαπλασιαστεί επί δύο. Οι τελεστές DIV και MOD, δεν μπορούν να χρησιμοποιηθούν σε πραγματικούς αριθμούς. Μία λογική έκφραση που περιέχει αριθμητικά δεδομένα, περιλαμβάνει υποχρεωτικά συγκριτικό τελεστή. Μία λογική έκφραση περιέχει υποχρεωτικά λογικό τελεστή. Μία αλφαριθμητική μεταβλητή δεν μπορεί να λάβει τις τιμές "Αληθής" ή "Ψευδής", καθώς σε αυτή την περίπτωση θα αποτελεί λογική μεταβλητή. Ο μεταγλωττιστής εντοπίζει τα λογικά λάθη και εμφανίζει κατάλληλα διαγνωστικά μηνύματα. Ο αλγόριθμος της σειριακής αναζήτησης ονομάζεται διαφορετικά και μέθοδος ευθείας ανταλλαγής. Η αναπαράσταση ενός αλγορίθμου με φυσική γλώσσα κατά βήματα, μπορεί να παραβιάσει το κριτήριο της καθοριστικότητας. Ο βρόχος Για Κ από 5 μέχρι 1, εκτελείται 5 φορές. Αν Χ K < 1, τότε η Χ μπορεί να πάρει δύο τιμές Τα πλεονεκτήματα της τοπικής εμβέλειας των μεταβλητών είναι η απόλυτη αυτονομία όλων των υποπρογραμμάτων και η δυνατότητα να χρησιμοποιείται οποιοδήποτε όνομα, χωρίς να ενδιαφέρει αν το ίδιο χρησιμοποιείται σε άλλο υποπρόγραμμα. Η στοίβα χρόνου εκτέλεσης θα μπορούσε να περιέχει ταυτόχρονα δύο ή περισσότερες διευθύνσεις επιστροφής στο κύριο πρόγραμμα Ορίσματα ονομάζονται αλλιώς οι τυπικές παράμετροι. Σ Σ Σ Σ Σ Σ Σ Σ Λ Λ Λ Λ Λ Λ Λ 2. Σε καθεμία από τις παρακάτω προτάσεις να συμπληρώσετε τη λέξη που λείπει: Το πηγαίο πρόγραμμα το γράφει ο προγραμματιστής στον συντάκτη. Το εκτελέσιμο πρόγραμμα εξάγεται από τον συνδέτη και εκτελείται από τον υπολογιστή. Το αντικείμενο πρόγραμμα το δημιουργεί ο μεταγλωττιστής. Ο διερμηνευτής διαβάζει μία προς μία τις εντολές του πηγαίου προγράμματος και για καθεμία εκτελεί αμέσως μία ισοδύναμη ακολουθία εντολών μηχανής. Τα συντακτικά λάθη εντοπίζονται από έναν μεταγλωττιστή, ο οποίος εμφανίζει και κατάλληλα διαγνωστικά μηνύματα. Αντίθετα, δεν μπορεί να ανιχνεύσει τα λογικά λάθη. Μία διαδικασία είναι ο τύπος υποπρογράμματος που μπορεί να κάνει ότι και ένα πρόγραμμα. Σάββας Λερίου 7
3. α. (Α_Τ(x) - ΗΜ(θ)) / Τ_Ρ(x^2+5) β. 2*x + (3*(x+1)) / (y^2+1) - E(x) 4. Να συμπληρώσετε τον παρακάτω πίνακα: Α Β (ΟΧΙ Α) ΚΑΙ (ΟΧΙ Β) ((ΟΧΙ Α) ΚΑΙ Β) Ή (Α ΚΑΙ (ΟΧΙ Β)) Ψευδής Ψευδής Αληθής Ψευδής Ψευδής Αληθής Ψευδής Αληθής Αληθής Ψευδής Ψευδής Αληθής Αληθής Αληθής Ψευδής Ψευδής 5. α. Κ 1 i 1 ΟΣΟ i >= 5 ΕΠΑΝΑΛΑΒΕ Κ Κ * i ΓΡΑΨΕ Κ i i 2 β. Κ 1 i 1 Κ Κ * i ΓΡΑΨΕ Κ i i 2 ΜΕΧΡΙΣ_ΟΤΟΥ i < 5 6. ΓΡΑΨΕ "ΔΩΣΕ ΘΕΤΙΚΟ ΑΡΙΘΜΟ" ΔΙΑΒΑΣΕ...X... ΜΕΧΡΙΣ_ΟΤΟΥ Χ...>... 0 ΓΙΑ i ΑΠΟ 0 ΜΕΧΡΙ...X... ΜΕ_ΒΗΜΑ...5... Α i ^...2... ΓΡΑΨΕ...A... 7. α. Δεν ικανοποιείται το κριτήριο της περατότητας, καθώς δεν τροποποιείται εντός του βρόχου η μεταβλητή done, οπότε η συνθήκη θα ισχύει πάντα. β. Δεν ικανοποιείται το κριτήριο της καθοριστικότητας, καθώς στην περίπτωση που στο Α διαβαστεί η τιμή 0, δεν ορίζεται το κλάσμα. Σάββας Λερίου 8
8. Β > 0 Β MOD 2 = 0 X A B Αρχή 0 10 14 Αληθής Αληθής 10 20 7 Αληθής Ψευδής 10 40 3 Αληθής Ψευδής 10 80 1 Αληθής Ψευδής 10 160 0 Ψευδής Τέλος Εάν είχαμε τη συνθήκη Β MOD 2 = 1 (αντί της Β MOD 2 = 0), θα είχαμε τον αλγόριθμο για τον πολλαπλασιασμό αλά ρωσικά. 9. Για το παρακάτω διάγραμμα ροής να γραφεί το αντίστοιχο τμήμα κωδικοποίησης: Αλγόριθμος ροή Διάβασε Α, Β S 0 Όσο Β <= 0 επανάλαβε Αν Β mod 2 = 1 τότε S S + A Τέλος_αν Α Α * 2 Β Β div 2 Τέλος_επανάληψης Εμφάνισε S Τέλος ροή Εάν τα ναι και όχι της συνθήκης Β>0 ήταν ανάποδα, θα είχαμε τον αλγόριθμο για τον πολλαπλασιασμό αλά ρωσικά. 10. Στη γραμμή 1 υπάρχει λογικό λάθος (πρέπει S 0). Στη γραμμή 2 υπάρχει συντακτικό λάθος (μέχρις). Στη γραμμή 5 υπάρχει συντακτικό λάθος (λείπει η κάτω παύλα ανάμεσα στις δύο λέξεις). Στη γραμμή 6 υπάρχει λογικό λάθος (πρώτα γίνεται διαίρεση με το 49 και μετά προστίθεται το 1). 1. S 1 2. Για i από 101 μέχρις 150 3. Διάβασε Χ 4. S S + X 5. Τέλος επανάληψης 6. ΜΟ S / (150-101)+1 7. Εμφάνισε S, MO Σάββας Λερίου 9
11. i 1 j 200 k 1 Όσο i <= 100 και j >= 1 επανάλαβε Αν Α[i] < B[j] τότε Γ[k] Α[i] i i + 1 Αλλιώς Γ[k] Β[j] j j 1 Τέλος_αν k k +1 Τέλος_επανάληψης 12. ΠΡΟΓΡΑΜΜΑ Κλήση_Υποπρογραμμάτων ΑΚΕΡΑΙΕΣ: a, b, x, c, z a <- 1 b <- 2 ΑΝ a<=4 ΤΟΤΕ b <- b + 1 a <- a + 3 x <- a + b c <- a z <- b z <- z + 2 c <- c * 2 x <- c + z ΓΡΑΨΕ a, b, x ΜΕΧΡΙΣ_ΟΤΟΥ x>11 ΓΡΑΨΕ x ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ 13. Αλγόριθμος Αντιγραφή Δεδομένα // Α, Μ, Ν // k 0 Για i από 1 μέχρι N... Για j από 1 μέχρι M k k + 1 Β[j, i] Α[k] Τέλος_Επανάληψης Τέλος_Επανάληψης Αποτελέσματα // Β // Τέλος Αντιγραφή Σάββας Λερίου 10
14. ΠΡΟΓΡΑΜΜΑ askisi_14 ΑΚΕΡΑΙΕΣ: ΣΕΙΡΑ, ΠΛΗΘΟΣ, ΤΙΜΗ, S_ΠΛΗΘΟΣ, S_ΤΙΜΗ, S1, C, C5, MAX1, MAX2 ΧΑΡΑΚΤΗΡΕΣ: ΟΝΟΜΑ, POS1, POS2 ΠΡΑΓΜΑΤΙΚΕΣ: ΠΟΣΟΣΤΟ S_ΠΛΗΘΟΣ <- 0 S_ΤΙΜΗ <- 0 S1 <- 0 C <- 0 C5 <- 0 MAX1 <- -1 MAX2 <- -1 POS1 <- '' ΔΙΑΒΑΣΕ ΣΕΙΡΑ ΟΣΟ ΣΕΙΡΑ<>0 ΕΠΑΝΑΛΑΒΕ C <- C + 1 ΔΙΑΒΑΣΕ ΠΛΗΘΟΣ, ΟΝΟΜΑ S_ΠΛΗΘΟΣ <- S_ΠΛΗΘΟΣ + ΠΛΗΘΟΣ ΤΙΜΗ <- ΚΟΣΤΟΣ(ΣΕΙΡΑ,ΠΛΗΘΟΣ) ΓΡΑΨΕ ΤΙΜΗ S_ΤΙΜΗ <- S_ΤΙΜΗ + ΤΙΜΗ ΑΝ ΣΕΙΡΑ=1 ΤΟΤΕ S1 <- S1 + ΠΛΗΘΟΣ ΑΝ ΣΕΙΡΑ>=8 ΤΟΤΕ C5 <- C5 + 1 ΑΝ ΤΙΜΗ>MAX1 ΤΟΤΕ MAX2 <- MAX1 POS2 <- POS1 MAX1 <- ΤΙΜΗ POS1 <- ΟΝΟΜΑ _ΑΝ ΤΙΜΗ>MAX2 ΤΟΤΕ MAX2 <- ΤΙΜΗ POS2 <- ΟΝΟΜΑ ΔΙΑΒΑΣΕ ΣΕΙΡΑ ΓΡΑΨΕ S_ΠΛΗΘΟΣ, S1, S_ΤΙΜΗ ΑΝ C<>0 ΤΟΤΕ ΠΟΣΟΣΤΟ <- C5 / C * 100 ΓΡΑΨΕ ΠΟΣΟΣΤΟ ΓΡΑΨΕ POS1, POS2 ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ!============================== ΣΥΝΑΡΤΗΣΗ ΚΟΣΤΟΣ(ΣΕΙΡΑ,ΠΛΗΘΟΣ): ΑΚΕΡΑΙΑ ΑΚΕΡΑΙΕΣ: ΣΕΙΡΑ, ΠΛΗΘΟΣ ΑΝ ΣΕΙΡΑ=1 ΤΟΤΕ ΚΟΣΤΟΣ <- 20 * ΠΛΗΘΟΣ _ΑΝ ΣΕΙΡΑ<8 ΤΟΤΕ ΚΟΣΤΟΣ <- 20 - (ΣΕΙΡΑ - 1) * 2 * ΠΛΗΘΟΣ ΚΟΣΤΟΣ <- 5 * ΠΛΗΘΟΣ ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ Σάββας Λερίου 11
15. ΠΡΟΓΡΑΜΜΑ askisi_15 ΣΤΑΘΕΡΕΣ N=500 ΑΚΕΡΑΙΕΣ: ΗΜΕΡΑ[N], ΜΗΝΑΣ[N], i, j, temp1, D, M ΧΑΡΑΚΤΗΡΕΣ: ΠΕΡΙΓΡΑΦΗ[N], temp2 ΠΡΑΓΜΑΤΙΚΕΣ: ΚΟΣΤΟΣ[N], temp3, S ΛΟΓΙΚΕΣ: done ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ N ΔΙΑΒΑΣΕ ΗΜΕΡΑ[i], ΜΗΝΑΣ[i] ΚΑΛΕΣΕ ΕΛΕΓΧΟΣ_ΗΜΕΡΟΜΗΝΙΑΣ(ΗΜΕΡΑ[i], ΜΗΝΑΣ[i], done) ΜΕΧΡΙΣ_ΟΤΟΥ done=αληθησ ΔΙΑΒΑΣΕ ΠΕΡΙΓΡΑΦΗ[i] ΔΙΑΒΑΣΕ ΚΟΣΤΟΣ[i] ΜΕΧΡΙΣ_ΟΤΟΥ ΚΟΣΤΟΣ[i]>=0 ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ N ΓΙΑ j ΑΠΟ N ΜΕΧΡΙ i ΜΕ_ΒΗΜΑ -1 ΑΝ ΜΗΝΑΣ[j-1]>ΜΗΝΑΣ[j] ΤΟΤΕ temp1 <- ΜΗΝΑΣ[j-1] ΜΗΝΑΣ[j-1] <- ΜΗΝΑΣ[j] ΜΗΝΑΣ[j] <- temp1 temp1 <- ΗΜΕΡΑ[j-1] ΗΜΕΡΑ[j-1] <- ΗΜΕΡΑ[j] ΗΜΕΡΑ[j] <- temp1 temp2 <- ΠΕΡΙΓΡΑΦΗ[j-1] ΠΕΡΙΓΡΑΦΗ[j-1] <- ΠΕΡΙΓΡΑΦΗ[j] ΠΕΡΙΓΡΑΦΗ[j] <- temp2 temp3 <- ΚΟΣΤΟΣ[j-1] ΚΟΣΤΟΣ[j-1] <- ΚΟΣΤΟΣ[j] ΚΟΣΤΟΣ[j] <- temp3 _ΑΝ ΜΗΝΑΣ[j-1]=ΜΗΝΑΣ[j] ΤΟΤΕ ΑΝ ΗΜΕΡΑ[j-1]>ΗΜΕΡΑ[j] ΤΟΤΕ temp1 <- ΗΜΕΡΑ[j-1] ΗΜΕΡΑ[j-1] <- ΗΜΕΡΑ[j] ΗΜΕΡΑ[j] <- temp1 temp2 <- ΠΕΡΙΓΡΑΦΗ[j-1] ΠΕΡΙΓΡΑΦΗ[j-1] <- ΠΕΡΙΓΡΑΦΗ[j] ΠΕΡΙΓΡΑΦΗ[j] <- temp2 temp3 <- ΚΟΣΤΟΣ[j-1] ΚΟΣΤΟΣ[j-1] <- ΚΟΣΤΟΣ[j] ΚΟΣΤΟΣ[j] <- temp3 Σάββας Λερίου 12
ΔΙΑΒΑΣΕ D, M ΚΑΛΕΣΕ ΕΛΕΓΧΟΣ_ΗΜΕΡΟΜΗΝΙΑΣ(D, M, done) ΜΕΧΡΙΣ_ΟΤΟΥ done=αληθησ S <- 0 i <-1 done <- ΨΕΥΔΗΣ ΟΣΟ done=ψευδησ ΚΑΙ i<=n ΕΠΑΝΑΛΑΒΕ ΑΝ (ΜΗΝΑΣ[i]<M) Η (ΜΗΝΑΣ[i]=M ΚΑΙ ΗΜΕΡΑ[i]<=D) ΤΟΤΕ ΓΡΑΨΕ ΠΕΡΙΓΡΑΦΗ[i], ΚΟΣΤΟΣ[i] S <- S + ΚΟΣΤΟΣ[i] i <- i + 1 done <- ΑΛΗΘΗΣ ΓΡΑΨΕ S ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ!======================================================== ΔΙΑΔΙΚΑΣΙΑ ΕΛΕΓΧΟΣ_ΗΜΕΡΟΜΗΝΙΑΣ(D, M, done) ΑΚΕΡΑΙΕΣ: D, M ΛΟΓΙΚΕΣ: done done <- ΨΕΥΔΗΣ ΑΝ D>=1 ΚΑΙ D<=31 ΚΑΙ M>=1 ΚΑΙ M<=12 ΤΟΤΕ done <- ΑΛΗΘΗΣ ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ Σάββας Λερίου 13
16. ΠΡΟΓΡΑΜΜΑ askisi_16 ΑΚΕΡΑΙΕΣ: i, j, ΕΠΙΛΟΓΗ, C, pos ΧΑΡΑΚΤΗΡΕΣ: ΚΑΤ[500,3] C <- 0 ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 500 ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 3 ΚΑΤ[i,j] <- '' ΓΡΑΨΕ '---------------------------------' ΓΡΑΨΕ '1. Εισαγωγή νέου συνδρομητή' ΓΡΑΨΕ '2. Αναζήτηση συνδρομητή' ΓΡΑΨΕ '3. Εμφάνιση καταλόγου' ΓΡΑΨΕ '4. Έξοδος' ΓΡΑΨΕ '---------------------------------' ΔΙΑΒΑΣΕ ΕΠΙΛΟΓΗ ΜΕΧΡΙΣ_ΟΤΟΥ Α_Μ(ΕΠΙΛΟΓΗ)=ΕΠΙΛΟΓΗ ΚΑΙ ΕΠΙΛΟΓΗ>0 ΚΑΙ ΕΠΙΛΟΓΗ<5 ΑΝ ΕΠΙΛΟΓΗ=1 ΤΟΤΕ ΑΝ C=5 ΤΟΤΕ ΓΡΑΨΕ 'ΚΑΤΑΛΟΓΟΣ ΠΛΗΡΗΣ' ΚΑΛΕΣΕ ΕΙΣΑΓΩΓΗ(ΚΑΤ,C) _ΑΝ ΕΠΙΛΟΓΗ=2 ΤΟΤΕ ΑΝ C=0 ΤΟΤΕ ΓΡΑΨΕ 'ΚΑΤΑΛΟΓΟΣ ΚΕΝΟΣ' ΚΑΛΕΣΕ ΑΝΑΖΗΤΗΣΗ(ΚΑΤ,pos) ΑΝ pos=0 ΤΟΤΕ ΓΡΑΨΕ 'Δεν υπάρχει τέτοιος συνδρομητής' ΓΡΑΨΕ 'ΟΝΟΜΑ : ', ΚΑΤ[pos,1] ΓΡΑΨΕ 'ΔΙΕΥΘΥΝΣΗ: ', ΚΑΤ[pos,2] ΓΡΑΨΕ 'ΤΗΛΕΦΩΝΟ : ', ΚΑΤ[pos,3] ΓΡΑΨΕ '--------------------------------' ΓΡΑΨΕ '1. Διόρθωση δεδομένων συνδρομητή' ΓΡΑΨΕ '2. Διαγραφή συνδρομητή' ΓΡΑΨΕ '3. Επιστροφή' ΓΡΑΨΕ '--------------------------------' ΔΙΑΒΑΣΕ ΕΠΙΛΟΓΗ ΜΕΧΡΙΣ_ΟΤΟΥ Α_Μ(ΕΠΙΛΟΓΗ)=ΕΠΙΛΟΓΗ ΚΑΙ ΕΠΙΛΟΓΗ>0 ΚΑΙ ΕΠΙΛΟΓΗ<4 ΑΝ ΕΠΙΛΟΓΗ=1 ΤΟΤΕ ΚΑΛΕΣΕ ΔΙΟΡΘΩΣΗ(ΚΑΤ,pos) _ΑΝ ΕΠΙΛΟΓΗ=2 ΤΟΤΕ ΚΑΛΕΣΕ ΔΙΑΓΡΑΦΗ(ΚΑΤ,pos,C) _ΑΝ ΕΠΙΛΟΓΗ=3 ΤΟΤΕ ΑΝ C=0 ΤΟΤΕ ΓΡΑΨΕ 'ΚΑΤΑΛΟΓΟΣ ΚΕΝΟΣ' ΚΑΛΕΣΕ ΕΜΦΑΝΙΣΗ(ΚΑΤ,C) ΜΕΧΡΙΣ_ΟΤΟΥ ΕΠΙΛΟΓΗ=4 ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ!=============================================================== Σάββας Λερίου 14
ΔΙΑΔΙΚΑΣΙΑ ΕΙΣΑΓΩΓΗ(ΚΑΤ,C) ΑΚΕΡΑΙΕΣ: C ΧΑΡΑΚΤΗΡΕΣ: ΚΑΤ[500,3] C <- C + 1 ΔΙΑΒΑΣΕ ΚΑΤ[C,1] ΔΙΑΒΑΣΕ ΚΑΤ[C,2] ΔΙΑΒΑΣΕ ΚΑΤ[C,3] ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ!=============================================================== ΔΙΑΔΙΚΑΣΙΑ ΑΝΑΖΗΤΗΣΗ(ΚΑΤ,pos) ΑΚΕΡΑΙΕΣ: ΕΠΙΛΟΓΗ, C, i, pos, ΣΤΗΛΗ ΧΑΡΑΚΤΗΡΕΣ: ΚΑΤ[500,3], key ΛΟΓΙΚΕΣ: done ΓΡΑΨΕ '------------------------' ΓΡΑΨΕ '1. Αναζήτηση με όνομα' ΓΡΑΨΕ '2. Αναζήτηση με τηλέφωνο' ΓΡΑΨΕ '------------------------' ΔΙΑΒΑΣΕ ΕΠΙΛΟΓΗ ΜΕΧΡΙΣ_ΟΤΟΥ Α_Μ(ΕΠΙΛΟΓΗ)=ΕΠΙΛΟΓΗ ΚΑΙ ΕΠΙΛΟΓΗ>0 ΚΑΙ ΕΠΙΛΟΓΗ<3 ΑΝ ΕΠΙΛΟΓΗ=1 ΤΟΤΕ ΣΤΗΛΗ <- 1 ΣΤΗΛΗ <- 3 ΔΙΑΒΑΣΕ key pos <- 0 i <- 1 done <- ΨΕΥΔΗΣ ΟΣΟ done=ψευδησ ΚΑΙ i<=500 ΕΠΑΝΑΛΑΒΕ ΑΝ ΚΑΤ[i,ΣΤΗΛΗ]=key ΤΟΤΕ done <- ΑΛΗΘΗΣ pos <- i i <- i + 1 ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ!=============================================================== ΔΙΑΔΙΚΑΣΙΑ ΔΙΟΡΘΩΣΗ(ΚΑΤ,pos) ΑΚΕΡΑΙΕΣ: pos ΧΑΡΑΚΤΗΡΕΣ: ΚΑΤ[500,3] ΔΙΑΒΑΣΕ ΚΑΤ[pos,1] ΔΙΑΒΑΣΕ ΚΑΤ[pos,2] ΔΙΑΒΑΣΕ ΚΑΤ[pos,3] ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ!=============================================================== ΔΙΑΔΙΚΑΣΙΑ ΕΜΦΑΝΙΣΗ(ΚΑΤ,C) ΑΚΕΡΑΙΕΣ: C, i ΧΑΡΑΚΤΗΡΕΣ: ΚΑΤ[500,3] ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ C ΓΡΑΨΕ ΚΑΤ[i,1], ' -- ', ΚΑΤ[i,2], ' -- ', ΚΑΤ[i,3] ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ Σάββας Λερίου 15
!=============================================================== ΔΙΑΔΙΚΑΣΙΑ ΔΙΑΓΡΑΦΗ(ΚΑΤ,pos,C) ΑΚΕΡΑΙΕΣ: i, pos, C ΧΑΡΑΚΤΗΡΕΣ: ΚΑΤ[500,3] ΓΙΑ i ΑΠΟ pos ΜΕΧΡΙ 499 ΚΑΤ[i,1] <- ΚΑΤ[i+1,1] ΚΑΤ[i,2] <- ΚΑΤ[i+1,2] ΚΑΤ[i,3] <- ΚΑΤ[i+1,3] ΚΑΤ[5,1] <- '' ΚΑΤ[5,2] <- '' ΚΑΤ[5,3] <- '' C <- C - 1 ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ Σάββας Λερίου 16