Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης



Σχετικά έγγραφα
Pascal. 15 Νοεμβρίου 2011

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Εντολές ελέγχου ροής if, for, while, do-while

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) a= b= c= 3 read(d,e)

Pascal, απλοί τύποι, τελεστές και εκφράσεις

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Βασικές Έννοιες Αλγορίθμων Τι είναι αλγόριθμος

2ο σετ σημειώσεων. 1 Εντολές εκτέλεσης υπό συνθήκη. 19 Μαρτίου 2012

Pascal. 26 Οκτωβρίου 2011

ΜΑΗΣ ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ

8. Η δημιουργία του εκτελέσιμου προγράμματος γίνεται μόνο όταν το πηγαίο πρόγραμμα δεν περιέχει συντακτικά λάθη.

Η ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ Εντολές Επανάληψης REPEAT UNTIL, FOR, WHILE

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά.

Ενότητα 3: «Εισαγωγή στην Αλγοριθμική και στον Προγραμματισμό: loops, subroutines, tables»

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Εντολές Ελέγχου & Επανάληψης

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο ΚΕΦΑΛΑΙΟ

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΠΑΝΕΛΛΑ ΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α Β ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙ ΙΚΟΤΗΤΑΣ

Εισαγωγή - Βασικές έννοιες. Ι.Ε.Κ ΓΛΥΦΑΔΑΣ Τεχνικός Τεχνολογίας Internet Αλγοριθμική Ι (Ε) Σχολ. Ετος A Εξάμηνο

ΑΕΠΠ Ερωτήσεις θεωρίας

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

Προγραμματισμός PASCAL

ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑ Α A1. 2-Λάθος 3-Λάθος 4-Σωστό 5-Λάθος A2. integer. real. Boolean. char. string A3.

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ )

Pascal. 1 Γλώσσες προγραμματισμού. 21 Οκτωβρίου 2011

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

Δομή Επανάληψης. Κεφάλαιο 7 Mike Trimos

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον. Διάρκεια 3 ώρες. Όνομα... Επώνυμο... Βαθμός...

Σημειώσεις για πρόοδο στο εργαστήριο

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

ΕΚΦΩΝΗΣΕΙΣ ΘΕΜΑ Α. β. Οι πληροφορίες είναι δεδομένα τα οποία δεν έχουν υποστεί επεξεργασία.

ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω:

Πρόβλημα 29 / σελίδα 28

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ ΔΟΜΗΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γ ΕΠΑΛ

Α1. Χαρακτηρίστε τις παρακάτω προτάσεις ως σωστές ή λανθασμένες.

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Γραπτές εξετάσεις στο μάθημα: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Θ) Εισηγητής: Γεωργίου Χρήστος ΘΕΜΑΤΑ & ΑΠΑΝΤΗΣΕΙΣ. Β. Χαρακτήρας(Αλφαριθμητικά)

ΕΡΩΤΗΣΕΙΣ ΑΞΙΟΛΟΓΗΣΗΣ

ΑΠΑΝΤΗΣΕΙΣ. H διαδικασία ανεύρεσης λογικών λαθών περιλαμβάνει : β- Σωστό. Διαπίστωση του είδους του λάθους γ- Σωστό δ- Λάθος

Αλγόριθμοι. Βασικές έννοιες ΤΕΛΟΣ

Ενδεικτικές Ερωτήσεις Θεωρίας

Επικοινωνία:

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές

ιαφάνειες παρουσίασης #4

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

Α1. Στον προγραµµατισµό χρησιµοποιούνται δοµές δεδοµένων. 1. Τι είναι δυναµική δοµή δεδοµένων; Μονάδες 3 2. Τι είναι στατική δοµή δεδοµένων;

Εισαγωγή στο Προγραμματισμό για Μηχανολόγους Οδηγός Προετοιμασίας για τη Τελική Εξέταση

Πρόβλημα 37 / σελίδα 207

Προγραμματισμός Ι. Ασκήσεις. Τζάλλας Αλέξανδρος, Καθηγητής Εφαρμογών. Τμ. Μηχανικών Πληροφορικής Τ.Ε.

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω:

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ. Για i από 1 μέχρι Μ Εμφάνισε A[4,i] Τέλος_επανάληψης. (μονάδες 6) ΤΕΛΟΣ 1ης ΑΠΟ 7 ΣΕΛΙΔΕΣ

Αλγόριθμοι και δομές δεδομένων

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΤΑΞΗ / ΤΜΗΜΑ : Γ ΛΥΚΕΙΟΥ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΑΠΡΙΛΙΟΣ 2018 ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ : 7 (ΕΠΤΑ)

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012. Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις:

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

ΤΕΛΙΚΟ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ

I. ΑΛΓΟΡΙΘΜΟΣ II. ΠΡΑΞΕΙΣ - ΣΥΝΑΡΤΗΣΕΙΣ III. ΕΠΑΝΑΛΗΨΕΙΣ. 1. Τα πιο συνηθισμένα σενάρια παραβίασης αλγοριθμικών κριτηρίων είναι:

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

ΑΠΑΝΤΗΣΕΙΣ. α- Σωστό β- Σωστό γ- Λάθος δ- Λάθος ε- Σωστό στ- Σωστό

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2. Α1. Ο αλγόριθμος είναι απαραίτητος μόνο για την επίλυση προβλημάτων πληροφορικής

ΤΕΧΝΙΚΟΣ ΤΕΧΝΟΛΟΓΙΑΣ INTERNET

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Αποτελέσματα προόδου

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΤΑΞΗ / ΤΜΗΜΑ : Γ ΛΥΚΕΙΟΥ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΑΠΡΙΛΙΟΣ 2019 ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ : 7 (ΕΠΤΑ)

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Εργαστήριο 10 Πίνακες. Πίνακες. Η έννοια της δόμησης δεδομένων στη PASCAL. Σκοπός

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Πληροφορική 2. Αλγόριθμοι

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ:

Αλγόριθμοι Αναπαράσταση αλγορίθμων Η αναπαράσταση των αλγορίθμων μπορεί να πραγματοποιηθεί με:

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 7: ΑΝΑΔΡΟΜΗ

4. Επιλογή και Επανάληψη

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΙΟΙΚΗΣΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ

Α2. Να γράψετε στο τετράδιο σας τον αριθμό 1-4 κάθε πρότασης και δίπλα το γράμμα που δίνει τη σωστή επιλογή.

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

Πρόβλημα είναι μια κατάσταση η οποία χρήζει αντιμετώπισης, απαιτεί λύση, η δε λύση της δεν είναι γνωστή, ούτε προφανής.

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον. Τελευταίο Μάθημα

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων

Transcript:

Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης 4 Φεβρουαρίου 2014 1 Ομάδα Α - Ερωτήσεις Γενικών Γνώσεων 1. (ΕΓΓ.11) Τι εννοούμε με τον όρο πρόβλημα; (Ενότητα 1.1 Βιβλίου) Με τον όρο πρόβλημα εννοείται μια κατάσταση η οποία χρήζει αντιμετώπισης, απαιτεί λύση, η δε λύση της δεν είναι γνωστή, ούτε προφανής. 2. (ΕΓΓ.12) Σε τι αναφερόμαστε με τον όρο Δομή Προβλήματος ; (Ενότητα 1.3 Βιβλίου) Με τον όρο δομή ενός προβλήματος αναφερόμαστε στα συστατικά του μέρη, στα επιμέρους τμήματα που το αποτελούν καθώς επίσης και στον τρόπο που αυτά τα μέρη συνδέονται μεταξυ τους. Η δομή ενός προβλήματος μπορεί να αναπαρασταθεί με τη διαγραμματική απεικόνιση (σελίδες 10 και 11 του βιβλίου). 3. (ΕΓΓ.13) Σε ποιες κατηγορίες διακρίνονται τα προβλήματα με κριτήριο τη δυνατότητα επίλυσής τους; (Ενότητα 1.5 Βιβλίου, σελίδα 16) Διακρίνονται σε επιλύσιμα, ανοικτά και άλυτα. Τα επιλύσιμα είναι εκείνα για τα οποία έχει ήδη διατυπωθεί λύση ή είναι τόσο σαφής η σχέση τους με άλλα ήδη λυμένα προβλήματα που μπορούμε να τα θεωρήσουμε ότι η λύση τους είναι προφανής. Τα ανοικτά είναι προβλήματα για τα οποία δεν έχει δοθεί ακόμα λύση αλλά είναι υπό έρευνα. Τα άλυτα είναι προβλήματα για τα οποία έχει αποδειχθεί ότι δεν υπάρχει λύση. 4. (ΕΓΓ.14) Σε ποιες κατηγορίες διακρίνονται τα επιλύσιμα προβλήματα με κριτήριο το βαθμό δόμησης των λύσεών τους; (Ενότητα 1.5 Βιβλίου, σελίδα 17) Διακρίνονται σε δομημένα, ημιδομημένα και αδόμητα. Δομημένα είναι εκείνη για τα οποία η λύση βρίσκεται με μια αυτοματοποιημένη διαδικασία. Ημιδομημένα είναι εκείνα στα οποία η λύση αναζητάται μέσα σε ένα εύρος πιθανών λύσεων και αφήνεται στον άνθρωπο η δυνατότητα επιλογής ανάμεσά τους. Αδόμητα είναι τα προβλήματα των οποίων οι λύσεις δεν μπορούν να δομηθούν και καθοριστικό παράγοντα στη λύση τους παίζει η ανθρώπινη δημιουργικότητα και διαίσθηση. 5. (ΕΓΓ.15) Σε ποιες κατηγορίες διακρίνονται τα προβλήματα με κριτήριο το είδος επίλυσης που επιζητούν; 1

(Ενότητα 1.5 Βιβλίου, σελίδα 17) Απόφασης, υπολογιστικά και βελτιστοποίησης. Στα προβλήματα απόφασης αναζητούμε μια θετική ή αρνητική απάντηση (ναι/όχι). Στα υπολογιστικά πρέπει να εκτελεστούν κάποια υπολογιστικά βήματα για να βρεθεί η λύση και στα βελτιστοποίησης αναζητούμε μία λύση η οποία να είναι η καλύτερη δυνατή σύμφωνα με κάποια κριτήρια. 6. (ΕΓΓ.16) Ποιες ενέργειες/διαδικασίες περιλαμβάνει η ανάλυση ενός προβλήματος; (Ενότητα 1.4, σελίδα 16) Κατανόηση, ανάλυση, επίλυση. Κατανόηση όπου απαιτείται η σωστή και πλήρης αποσαφήνιση των δεδομένων και των ζητούμενων του προβλήματος. Ανάλυση, όπου το αρχικό πρόβλημα διασπάται σε άλλα επιμέρους απλούστερα προβλήματα. Επίλυση, όπου υλοποιείται η λύση του προβλήματος μέσω της λύσης των επιμέρους προβλήματων. 7. (ΕΓΓ.17) Να αναφέρετε τις πιο συνηθισμένες τεχνικές σχεδίασης αλγορίθμων. Οι πιο συνηθισμένες τεχνικές είναι η διαίρει και βασίλευε, ο δυναμικός προγραμματισμός και η άπληστη μέθοδος. Στη διαίρει και βασίλευε το αρχικό σύνθετο πρόβλημα διασπάται σε μικρότερα επιμέρους προβλήματα της ίδιας φύσης με το αρχικό αλλά μικρότερα σε μέγεθος. Ένα παράδειγμα τέτοιας μεθόδου είναι η δυαδική αναζήτηση στην οποία η αναζήτηση ενός στοιχείου σε έναν πίνακα ανάγεται στην αναζήτηση του στοιχείου στο πάνω ή κάτω μισό του πίνακα. Αυτή η προσέγγιση εντάσσεται στη top-down μεθοδολογία, από πάνω προς τα κάτω δηλαδή από το σύνθετο στο απλό. (σελίδα 85 βιβλίου). Στο δυναμικό προγραμματισμό αρχικά επιλύονται μικρότερα σε μέγεθος άρα απλούστερα στιγμιότυπα του αρχικού προβλήματος και μέσω της σύνθεσης αυτών επιχειρείται η επίλυση του αρχικού συνθετότερου προβλήματος. Στη σελίδα 87 του βιβλίου παρουσιάζεται η μέθοδος και σχετικά παραδείγματα. Στην άπληστη μέθοδο επιχειρείται σε κάθε βήμα επίλυσης του προβλήματος η επιλογή που φαίνεται καλύτερη εκείνη τη στιγμή χωρίς να γίνεται προσπάθεια συνολικής θεώρησης του προβλήματος. Σε πολλές περιπτώσεις αυτή η προσέγγιση οδηγεί στην καλύτερη δυνατή λύση. Η μέθοδος παρουσιάζεται αναλυτικά στη σελίδα 90 του βιβλίου. 8. (ΕΓΓ.18) Τι εννοούμε με τον όρο αλγόριθμος και τι με τον όρο πρόγραμμα; (Ενότητα 2.1, σελίδα 25) Αλγόριθμος είναι μια πεπερασμένη σειρά ενεργειών, αυστηρά καθορισμένων και εκτελέσιμων σε πεπερασμένο χρόνο, που στοχεύουν στην επίλυση ενός προβλήματος. Πρόγραμμα είναι η αδιάσπαστη ενότητα ενός αλγορίθμου και των δομών δεδομένων που αυτός απαιτεί υλοποιημένα σε μορφή εκτελέσιμη από έναν υπολογιστή. 9. (ΕΓΓ.19) Ποια τα χαρακτηριστικά ενός αλγορίθμου; (Ενότητα 2.1 σελίδες 25-26) Είσοδος, έξοδος, καθοριστικότητα, περατότητα, αποτελεσματικότητα. 2

Είσοδος Καμία, μία ή περισσότερες τιμές δεδομένων πρέπει να δίνονται ως είσοδος σε κάποιον αλγόριθμο. Περίπτωση που δεν δίνονται τιμές εισόδου στον αλγόριθμο παρουσιάζονται όταν τα δεδομένα προκύπτουν από γεννήτριες τυχαιων αριθμων, ανάγνωση αρχείων ή άλλες πηγές. Έξοδος Κάθε αλγόριθμος παράγει κάποια αποτελέσματα. Καθοριστικότητα Τα βήματα ενός αλγορίθμου πρέπει να είναι σαφώς καθορισμένα (όχι αμφίσημα ή σχετικά με υποκειμενικές εκτιμήσεις). Περατότητα Ένας αλγόριθμος πρέπει να τερματίζεται μετά από πεπερασμένο χρόνο. Αποτελεσματικότητα Κάθε μεμονωμένη εντολή ενός αλγορίθμου πρέπει να είναι απλή, δηλαδή άμεσα εκτελέσιμη από έναν υπολογιστή. 10. (ΕΓΓ.20) Με ποιους τρόπους πραγματοποιείται η περιγραφή ενός αλγορίθμου; (Ενότητα 2.3, σελίδα 28) Ελεύθερο κείμενο, διαγραμματικές τεχνικές, φυσική γλώσσα, κωδικοποίηση. Ελεύθερο κείμενο δηλαδή περιγραφή σε μία ανθρώπινη γλώσσα. Είναι η πιο ανεπεξέργαστη και αδόμητη μέθοδος περιγραφής για αυτό και εγκυμονεί κινδύνους σχετικά με την αποτελεσματικότητα που αναφέρεται στην παραπάνω ερώτηση δηλαδή τη δυνατότητα εκτέλεσης από έναν υπολογιστή. Διαγραμματικές τεχνικές δηλαδή σχηματική παρουσίαση εκτέλεσης ενός αλγορίθμου. Ένα παράδειγμα διαγραμματικής τεχνικής είναι και τα διαγράμματα ροής. Οι διαγραμματικές τεχνικές δε χρησιμοποιούνται ιδαίτερα λόγω του ότι δεν είναι άμεση η διαδικασία μετατροπής τους σε εκτελέσιμο κώδικα. Φυσική γλώσσα με την οποία περιγράφονται τα βήματα εκτέλεσης του αλγορίθμου. Η μέθοδος είναι προτιμότερη από το ελεύθερο κείμενο αλλα ακόμα η χρησιμοποίηση φυσικής γλώσσας εγκυμονεί τον κίνδυνο ασάφειας οπότε μπορεί να παραβιάζει την αρχή της καθοριστικότητας που αναφέρεται παραπάνω. Κωδικοποίηση δηλαδή η περιγραφή ενός αλγορίθμου με κάποια μορφή κώδικα ο οποίος μπορεί να μετατραπεί με κάποιο περισσότερο ή λιγότερο άμεσο τρόπο σε μορφή εκτελέσιμη από υπολογιστή. Σε αυτήν την κατηγορία εμπίπτουν οι γλώσσες προγραμματισμού αλλά και οι ψευδογλώσσες εφόσον είναι αυστηρά καθορισμένες και συμβατές με το υπολογιστικό μοντέλο. 11. (ΕΓΓ.21) Τι ονομάζουμε δομή δεδομένων; (Ενότητα 3.2, σελίδα 54) Δομή δεδομένων είναι ένα σύνολο αποθηκευμένων δεδομένων που υφίστανται επεξεργασία από ένα σύνολο λειτουργιών. 12. (ΕΓΓ.22) Ποιες οι βασικές λειτουργίες επί των δομών δεδομένων; (Ενότητα 3.2, σελίδες 54-55) Προσπέλαση, εισαγωγή, διαγραφή, αναζήτηση, ταξινόμηση, αντιγραφή, συγχώνευση, διαχωρισμός. 3

2 Ομάδα Β - Ερωτήσεις Ειδικών γνώσεων Τα προγράμματα που αναφέρονται εδώ βρίσκονται και σε ηλεκτρονική μορφή στο http://www. syros.aegean.gr/users/quasi/iek/tep/pascal/programmata/pisto.zip 1. Να γραφεί αλγόριθμος που να διαβάζει 3 ακέραιους αριθμούς που παριστάνουν την ώρα, τα λεπτά και τα δευτερόλεπτα που έχουν περάσει από τα μεσάνυχτα (ώρα μηδέν) και να εμφανίζει το σύνολο των δευτερολέπτων. 1: Αλγόριθμος Ώρες 2: Διάβασε hours 3: Διάβασε minutes 4: Διάβασε seconds 5: total hours 60 60 + minutes 60 + seconds 6: Τύπωσε total 7: Τέλος Ώρες 2. Να σχεδιασθεί ο αλγόριθμος εύρεσης του μικρότερου στοιχείου από πίνακα 100 στοιχείων. 1: Αλγόριθμος Μικρότερο 2: Δεδομένα // p // 3:! Ο πίνακας p περιέχει 100 στοιχεία 4: min p[1] 5: Για i από 2 μέχρι 100 6: Αν p[i] < min τότε 7: min p[i] 8: Τέλος_αν 9: Τέλος_επανάληψης 10: Τύπωσε min 11: Τέλος Μικρότερο 3. Να σχεδιασθεί ο αλγόριθμος εύρεσης του αθροίσματος των στοιχείων δισδιάστατου πίνακα Περιγραφή της δομής του δισδιάστατου πίνακα μπορείτε να βρείτε στις σημειώσεις σχετικές με τις δομές δεδομένων. Υποθέτοντας ότι έχουμε έναν πίνακα p με m γραμμές και n στήλες, ο αλγόριθμος αρχικοποιεί τη μεταβλητή total στην οποία θα αποθηκευτεί το άθροισμα και σαρώνει μέσω δύο βρόχων επανάληψης (ένας για τις γραμμές και ένας για τις στήλες) τα στοιχεία του πίνακα αθροίζοντάς τα. 1: Αλγόριθμος Άθροισμα 2-διάστατου πίνακα 2: Δεδομένα // p // 3:! Ο πίνακας p έχει m γραμμές, n στήλες 4: total 0 5: Για i από 1 μέχρι m 6: Για j από 1 μέχρι n total p[i,j] 4

7: Τέλος_επανάληψης 8: Τέλος_επανάληψης 9: Αποτελέσματα // total // 10: Τέλος Άθροισμα 2-διάστατου πίνακα 4. Να σχεδιασθεί ο αλγόριθμος εισαγωγής στοιχείου σε στοίβα Δείτε τη σχετική ενότητα στις σημειώσεις (Ενότητα `δομές δεδομένων', υποενότητα 'στοίβα'). 5. Να σχεδιασθεί ο αλγόριθμος εξαγωγής στοιχείου από στοίβα Δείτε τη σχετική ενότητα στις σημειώσεις (Ενότητα `δομές δεδομένων', υποενότητα 'στοίβα'). 6. Να σχεδιασθεί ο αλγόριθμος εισαγωγής στοιχείου σε ουρά Δείτε τη σχετική ενότητα στις σημειώσεις (Ενότητα `δομές δεδομένων', υποενότητα 'ουρά'). 7. Να σχεδιασθεί ο αλγόριθμος εξαγωγής στοιχείου από ουρά Δείτε τη σχετική ενότητα στις σημειώσεις (Ενότητα `δομές δεδομένων', υποενότητα 'ουρά'). 8. Να σχεδιασθεί ο αλγόριθμος εισαγωγής στοιχείου σε λίστα Δείτε τη σχετική ενότητα στις σημειώσεις (Ενότητα `δομές δεδομένων', υποενότητα 'λίστες'). 9. Να σχεδιαθεί ο αλγόριθμος γραμμικής αναζήτησης Δείτε τη σχετική ενότητα στις σημειώσεις (Ενότητα `δομές δεδομένων', υποενότητα 'πίνακες'). 10. Να σχεδιασθεί ο αλγόριθμος αναζήτησης της φυσαλίδας Δεν υπάρχει αλγόριθμος αναζήτησης φυσαλίδας. Υπάρχει αλγόριθμος ταξινόμησης της φυσαλίδας. Δείτε τη σχετική ενότητα στις σημειώσεις (Ενότητα `δομές δεδομένων', υποενότητα 'πίνακες'). 11. Να γραφεί σε γλώσσα Pascal πρόγραμμα που θα διαβάζει αριθμούς μέχρις ότου το άθροισμά τους να γίνει μεγαλύτερο από ένα δεδομένο αριθμό από ένα δεδομένο αριθμό που θα εισάγεται από το πληκτρολόγιο 1 program pistob11; 2 var 3 total: integer; { To a8roisma } 4 limit: integer; { To orio pou 8a dwsei o xrnstns } 5 a: integer; 6 begin 7 write('dwse mou to orio: '); 8 readln(limit); 9 10 total := 0; 11 repeat 12 write(' Dwse evav ari8mo: '); 13 readln(a); 14 total := total + a; 5

15 writeln('to a8roisma eivai ', total); 16 until total > limit; 17 end. 12. Να γραφεί σε γλώσσα Pascal πρόγραμμα το οποίο να διαβάζει τα στοιχεία ενός μονοδιάστατου πίνακα (10 στοιχείων), να βρίσκει το μικρότερο και το μεγαλύτερο στοιχείο του πίνακα καθώς και τις θέσεις τους στον πίνακα και να τα τυπώνει στην οθόνη με το κατάλληλο μήνυμα 1 program pistob12; 2 var 3 p: array [1..10] of integer; { O pivakas } 4 mik, meg: integer; { To mikrotero kai megalytero } 5 mikindex, megindex: integer; { Oi 8eseis toys stov pivaka } 6 i: integer; 7 8 begin 9 for i := 1 to 10 do 10 begin 11 write(' Dwse to yp ari8mov ', i, ' stoixeio: '); 12 readln(p[i]); 13 end; 14 15 mik := p[1]; 16 meg := p[1]; 17 mikindex := 1; 18 megindex := 1; 19 20 for i := 2 to 10 do 21 begin 22 if p[i] < mik then 23 begin 24 mik := p[i]; 25 mikindex := i; 26 end 27 else if p[i] > meg then 28 begin 29 meg := p[i]; 30 megindex := i; 31 end; 32 end; 33 34 writeln('to mikrotero stoixeio eivai to ', mik, ' sth 8esn ', mikindex); 35 writeln('to megalytero stoixeio eivai to ', meg, ' sth 8esn ', megindex); 36 end. 6

13. Να γραφεί σε γλώσσα Pascal πρόγραμμα που να διαβάζει το επώνυμο και το βαθμό κάθε μαθητή, να ταξινομεί τους μαθητές κατά φθίνουσα σειρά βαθμολογίας και να τυπώνει τα επώνυμά τους κατά την ταξινόμηση που προέκυψε (οι βαθμολογίες είναι διαφορετικές) Το πρόγραμμα χρησιμοποιεί δύο πίνακες, έναν για την αποθήκευση των επώνυμων (eponyma) και έναν για τις βαθμολογίες (bathmoi). Στις γραμμές 12-20 πραγματοποιείται εισαγωγή των στοιχείων σε αυτούς τους πίνακες από το χρήστη. Στη συνέχεια (γραμμές 22-37) οι πίνακες ταξινομούνται με τη μέθοδο της φυσαλίδας. Στη γραμμή 26 γίνεται ο έλεγχος για το αν έναν βαθμός είναι μεγαλύτερος από τον προηγούμενό του. Σε αυτήν την περίπτωση πρέπει να γίνει ανταλλαγή μεταξύ τους (γραμμές 28-30). Επίσης όμως πρέπει να γίνει και ανταλλαγή των αντίστοιχων επωνύμων (γραμμές 32-34) έτσι ώστε η κάθε θέση του πίνακα βαθμών να αντιστοιχεί στο σωστό επώνυμο στον πίνακα επωνύμων. 1 program pistob13; 2 3 var 4 i, j: integer; 5 eponyma: array [1..10] of string; 6 bathmoi: array [1..10] of integer; 7 m: integer; 8 cstr: string; 9 cint: integer; 10 11 begin 12 write(' Posoi eivai oi ma8ntes?'); 13 readln(m); 14 for i := 1 to m do 15 begin 16 write('dwse to epwnymo toy ma8ntn No#', i, ': '); 17 readln( eponyma[i]); 18 write('dwse to ba8mo toy ma8ntn No#', i, ': '); 19 readln( bathmoi[i]); 20 end; 21 22 for i := 2 to m do 23 begin 24 for j := m downto i do 25 begin 26 if bathmoi[j] > bathmoi[j-1] then 27 begin 28 cint := bathmoi[j-1]; 29 bathmoi[j-1] := bathmoi[j]; 30 bathmoi[j] := cint; 31 32 cstr := eponyma[j-1]; 33 eponyma[j-1] := eponyma[j]; 34 eponyma[j] := cstr; 7

35 end; 36 end; 37 end; 38 39 for i := 1 to m do 40 writeln( eponyma[i]); 41 end. 14. Να γραφεί σε γλώσσα Pascal πρόγραμμα που θα διαβάζει τρεις αριθμούς και θα βρίσκει το μεγαλύτερο 1 program pistob14; 2 var 3 a, b, c: integer; 4 maxab: integer; 5 6 begin 7 write(' Dose ton proto arithmo: '); readln(a); 8 write(' Dose ton deutero arithmo: '); readln(b); 9 write(' Dose ton trito arithmo: '); readln(c); 10 11 { Bres tov megalytero apo toys a kai b } 12 if a > b then 13 maxab := a 14 else 15 maxab := b; 16 17 { Kai meta sygkrive ton me ton c } 18 if maxab > c then 19 writeln(' Megalyteros eivai o ', maxab) 20 else 21 writeln(' Megalyteros eivai o ', c); 22 end. 15. Να γραφεί σε γλώσσα Pascal πρόγραμμα που θα διαβάζει αριθμούς μέχρις ότου να διαβαστεί ο αριθμός 0 (μηδέν) και θα εμφανίζει το σύνολο και το μέσο όρο των εισαχθέντων αριθμών 1 program pistob15; 2 var 3 total: integer; { To a8roisma twv arithmon } 4 plithos: integer; { To plithos toys } 5 a: integer; 6 8

7 begin 8 total := 0; 9 plithos := 0; 10 11 repeat 12 write(' Dose evav arithmo: '); 13 readln(a); 14 if a <> 0 then 15 begin 16 total := total + a; 17 plithos := plithos + 1; 18 end; 19 until a = 0; 20 21 if total <> 0 then 22 begin 23 writeln(' Edoses ', plithos, ' arithmous'); 24 writeln('o mesos oros toys eivai ', ( total / plithos ):2:2); 25 end; 26 end. 16. Να γραφεί σε γλώσσα Pascal πρόγραμμα το οποίο θα υπολογίζει το άθροισμα των περιττών αριθμών από 1-99 (s=1+3+...+99) 1 program pistob16; 2 var 3 total: integer; { To athroisma } 4 i: integer; 5 begin 6 total := 0; 7 for i := 1 to 99 step 2 do 8 total := total + i; 9 writeln('to a8roisma eivai ', total); 10 end. 17. Να γραφεί σε γλώσσα Pascal πρόγραμμα που θα διαβάζει δύο αριθμούς από το πληκτρολόγιο και θα υπολογίζει το άθροισμα όλων των αριθμών από τον μικρότερο εκ των δύο έως και τον μεγαλύτερο εκ των δύο (π.χ. για τους αριθμούς 5,3 το αποτέλεσμα είναι 3 + 4 + 5 = 12) 1 program pistob17; 2 var 3 a, b, c : integer; { Oi dyo arithmoi } 4 total: integer; { To athroisma } 9

5 6 begin 7 write(' Dose ton proto arithmo: '); readln(a); 8 write(' Dose ton deutero arithmo: '); readln(b); 9 10 { An o protos eivai megalyteros, allakse tn seira } 11 if a > b then 12 begin 13 c := a; 14 a := b; 15 b := c; 16 end; 17 18 while a <= b do 19 begin 20 total := total + a; 21 a := a + 1; 22 end; 23 writeln('to athroisma einai ', total); 24 end. 18. Να γραφεί σε γλώσσα Pascal πρόγραμμα που θα διαβάζει 20 αριθμούς από το πληκτρολόγιο και θα εμφανίζει χωριστά το άθροισμα και το πλήθος των αρνητικών και το άθροισμα και το πλήθος των θετικών (ο μηδέν να θεωρηθεί θετικός) 1 program pistob18; 2 var 3 negtotal, postotal: integer; { Arvntiko kai thetiko athroisma } 4 negnum, posnum: integer; { Plithos arvntikwv kai thetikwv } 5 i, a: integer; 6 7 begin 8 for i := 1 to 20 do 9 begin 10 write('dose ton No#', i, ' arithmo: '); readln(a); 11 if a >= 0 then 12 begin 13 posnum := posnum + 1; 14 postotal := postotal + a; 15 end 16 else 17 begin 18 negnum := negnum + 1; 19 negtotal := negtotal + a; 20 end; 10

21 end; 22 23 writeln(' Edoses ', posnum, ' thetikous me athroisma ', postotal); 24 writeln(' Edoses ', negnum, ' arvntikous me athroisma ', negtotal); 25 end. 19. Να γραφεί σε γλώσσα Pascal συνάρτηση που θα δέχεται ως όρισμα ακέραια αριθμητική τιμή που θα αντιπροσωπεύει έτος και θα επιστρέφει 1 αν το έτος είναι δίσεκτο ή διαφορετικά 0. (Δίσεκτο θεωρείται α. όταν εκφράζει αιώνα και διαιρείται ακριβώς με το 400 β. αν δεν εκφράζει αιώνα και διαιρείται ακριβώς με το 4). 1 program pistob19; 2 3 function disekto(year: integer): integer; 4 begin 5 if year mod 100 = 0 then 6 begin 7 if year mod 400 = 0 then 8 disekto := 1 9 else 10 disekto := 0; 11 end 12 else 13 begin 14 if year mod 4 = 0 then 15 disekto := 1 16 else 17 disekto := 0; 18 end; 19 end; 20. Να γραφεί σε γλώσσα Pascal πρόγραμμα που θα διαβάζει απ το πληκτρολόγιο το μισθό ενός υπαλλήλου (π.χ. 1753 ευρώ) και θα εμφανίζει την ανάλυση στα υπάρχοντα νομίσματα (π.χ. 1763: 3 των 500, 2 των εκατό, ένα των 50, ένα των 10 και 3 του ενός 1 program pistob20; 2 const 3 numall = 9; 4 var 5 {-- Ta nomismata poy yparxoyn stnv agora --} 6 banknotes: array[1.. numall] of integer = 7 (1, 2, 5, 10, 20, 50, 100, 200, 500); 8 {-- Posa nomismata apo tnv ka8e katngoria 8a parei --} 9 pay: array[1.. numall] of integer; 11

10 current: integer; 11 misthos, ypoloipo: integer; 12 13 i: integer; 14 begin 15 writeln(' Dose to mistho: '); 16 readln( misthos); 17 18 for i := 1 to numall do 19 pay[i] := 0; 20 21 ypoloipo := misthos; 22 {-- 3 ekivame apo to megalytero dynato nomisma --} 23 current := numall; 24 while ( current > 0) and ( ypoloipo > 0) do 25 begin 26 if banknotes[ current] <= ypoloipo then 27 begin 28 pay[ current] := pay[ current] + 1; 29 ypoloipo := ypoloipo - banknotes[ current]; 30 end 31 else 32 current := current - 1; 33 end; 34 35 {-- Ektyposi apotelesmatos --} 36 writeln('8a parei:'); 37 for current := numall downto 1 do 38 begin 39 if pay[ current] > 0 then 40 writeln(pay[ current], ' nomismata twv ', banknotes[ current], ' eurw'); 41 end; 42 end. 21. Ποιοι είναι οι τύποι δεδομένων της Pascal; Να αναφέρετε παραδείγματα. Οι βασικοί τύποι της standard Pascal είναι οι integer, real, boolean, char. Υπάρχουν και οι λεγόμενοι δομημένοι τύποι που χρησιμοποιούν τους βασικούς για να φτιάξουν άλλους πιο σύνθετους. Οι δομημένοι τύποι είναι οι πίνακες (array), εγγραφές (record), σύνολα (set), αρχεία (file) και δείκτες (pointers). Μερικά παραδείγματα βασικών τύπων: integer a := 5;, b := 5 mod 2;. real a := 5.2;, b := 1e-2;, c := a / b; boolean a := true;, b := false, a := (5 > 2); char c := 'a';, c := char(97); 12

22. Ποια είναι η δομή ενός γενικού προγράμματος Pascal; Η δομή ενός προγράμματος είναι γενικά η παρακάτω: 1 program program_name( files); 2 label 3 { labels }; 4 const 5 { constants } 6 type 7 { types } 8 var 9 { variables } 10 11 { procedures and functions } 12 13 begin 14 { statements } 15 end. Η δήλωση program δηλώνει το όνομα του προγράμματος και προαιρετικά μέσα σε παρενθέσεις τα αρχεία που αυτό χρησιμοποιεί. Ακολουθούν τα τμήματα για τις δηλώσεις των labels (ετικέτες), constants (σταθερές), types (τύποι) και variables (μεταβλητές). Ακολουθούν τα υποπρογράμματα (functions και procedures) και τέλος το κύριο μπλοκ του προγράμματος. label Στις ετικέτες μπορούμε να δηλώσουμε ονόματα χωρισμένα με κόμματα. Τα ονόματα αυτά μπορούμε να τα βάλουμε ακολουθούμενα από μία άνω-κάτω τελεία σε οποιαδήποτε γραμμή του προγράμματος και να κατευθύνουμε τη ροή του προγράμματος προς τα εκεί με μία ενοτλή goto. Η εντολή goto είναι περιτή στον προγραμματισμό και καλό είναι να αποφεύγεται γιατί οδηγεί σε δυσνόητα, μη-δομημένα και επιρρεπή σε λάθη προγράμματα. const Σε αυτό το τμήμα δηλώνονται οι σταθερές του προγράμματος σε μορφή name = value;, που έχει ως αποτέλεσμα η σταθερά name να έχει την τιμη value. Παραδείγματα σταθερών είναι τα pi = 3.14592;, array\_size = 20;, alpha = 'a';. type Σε αυτό το τμήμα δηλώνονται από τον προγραμματιστή νέοι τύποι με το συντακτικό newtype = existingtype; που έχουν ως αποτέλεσμα να ορισθεί ένα νέο όνομα τύπου newtype το οποίο να σημαίνει existingtype. Π.χ. smallarray = array[1..10] of integer;, int = integer;, bigarray = array[1..10000];. Τα νέα ονόματα τύπων που δηλώνονται από το χρήστη με αυτόν τον τρόπο μπορούν να χρησιμοποιηθούν όπως και οι ενσωματωμένοι τύποι της Pascal σε δηλώσεις μεταβλητών. var Σε αυτό το τμήμα δηλώνονται οι μεταβλητές του προγράμματος και οι αντίστοιχοι τύποι τους σε μορφή name: type1; με αποτέλεσμα τη δέσμευση μνήμης για μία μεταβλητή με όνομα name και τύπου type1 ή name1, name2,..., namen: type2 με αποτέλεσμα τη δέσμευση μνήμης για τις μεταβλητές name1, name2 κτλ και τύπο type2. Ως όνομα τύπου μπορεί να δηλωθεί είτε ένας ενσωματωμένος τύπος της Pascal είτε κάποιος τύπος δηλωμένος από τον προγραμματιστή στο τμήμα type του προγράμματος. 13

23. Να αναφέρετε τι είναι η συνάρτηση (function) και τι διαδικασία (procedure) στην Pascal. Ποιες οι διαφορές τους; Οι συναρτήσεις (functions) και οι διαδικασίες (prodedures) είναι υποπρογράμματα στην Pascal. Πρόκειται δηλαδή για ομάδες εντολών που αντιστοιχίζονται σε ένα όνομα. Η συμπεριφορά τους είναι παραμετρική, δηλαδή υπάρχει η δυνατότητα να δέχονται παραμέτρους η τιμή των οποίων επηρεάζει τον ακριβή τρόπο εκτέλεσης των εντολών. Οι παράμετροι στον ορισμό ενός υποπρογράμματος ονομάζονται τυπικά ορίσματα. Τα υποπρογράμματα μπορούν να κληθούν από άλλα τμήματα του προγράμματος με απλή αναφόρα του ονόματός τους και με τις κατάλληλες παραμέτρους που σε αυτήν την περίπτωση ονομάζονται πραγματικά ορίσματα. Τα ορίσματα μπορεί να δίνονται κατ' αξία (by value) ή κατ' όρισμα (by reference). Στη δεύτερη περίπτωση, το όνομα του αντίστοιχου τυπικού ορίσματος δηλώνεται ως var παράμετρος. H διαφορά είναι ότι οι κατ' αξία παράμετροι είναι τοπικές μεταβλητές του υποπρογράμματος οι οποίες αρχικοποιούνται ως αντίγραφα της πραγματικής παραμέτρου ενώ οι κατ' όρισμα παράμετροι είναι αναφορές στις πραγματικές παραμέτρους. Ως συνέπεια, ένα υποπρόγραμμα μπορεί να μεταβάλλει τις πραγματικές παραμέτρους εκείνου που το καλεί αν αυτές δίνονται κατ' όρισμα ενώ δεν μπορεί όταν δίνονται κατ' αξία. Σε κάθε υποπρόγραμμα μπορούν να δηλώνονται τοπικές μεταβλητές. Ένα παράδειγμα ορισμού διαδικασίας και της αντίστοιχης κλήσης φαίνεται παρακάτω. Στη γραμμή 1 δηλώνουμε μία procedure με όνομα p και δύο τυπικές παραμέτρους a και b. Η a είναι τύπου integer και η τιμή της μεταβιβάζεται κατ' αξία (by value) ενώ η b είναι τύπου real και μεταβιβάζεται κατ' όρισμα. Επίσης δηλώνεται και η τοπική μεταβλητή x στη γραμμή 3. Στη γραμμή 5 μπορούν να τοποθετηθούν οι όποιες εντολές περιλαμβάνει το υποπρόγραμμα. Στη γραμμή 6 φαίνεται μία κλήση του υποπρογράμματος p. Τα πραγματικά ορίσματα c και d πρέπει να συμφωνούν σε πλήθος και τύπο με τα τυπικά ορίσματα. Το υποπρόγραμμα p μπορεί να μεταβάλλει την τιμή της d γιατί αυτή αντιστοιχεί στη var παράμετρο b υποπρογράμματος αλλά όχι την a. 1 procedure p(a: integer; var b: real); 2 var 3 x: integer; 4 begin 5 {-- Edo einai oi entoles toy ypoprogrammatos --} 6 end; 7 p(c, d); Όλα τα παραπάνω ισχύουν και για τις functions στην Pascal μόνο που αυτές μπορούν και επιστρέφουν κάποια τιμή. Μία function φαίνεται παρακάτω. Στη γραμμή 1, μετά τη λίστα ορισμάτων πρέπει να δηλωθεί ο τύπος της επιστρεφόμενης τιμής. Προκειμένου να επιστραφεί κάποια τιμή του ανάλογου τύπου, πρέπει να αποδοθεί στο όνομα της συνάρτησης όπως στη γραμμή 6. Η κλήση της συνάρτησης πραγματοποιείται στη γραμμή 8 όπως και στην περίπτωση των procedure μόνο που εφόσον υπάρχει επιστρεφόμενη τιμή, αυτή μπορεί να χρησιμοποιηθεί σε οποιαδήποτε επιτρεπτή για αυτόν τον τύπο λειτουργία όπως π.χ. να αποδοθεί σε μία μεταβλητή αντίστοιχου τύπου. 1 function f(a: integer; var b: real): integer; 2 var 14

3 x: integer; 4 begin 5 {-- Edo einai oi entoles toy ypoprogrammatos --} 6 f := kapoia integer timi; 7 end; 8 e := f(c, d); 24. Να γραφεί σε Pascal πρόγραμμα που θα εξάγει το ΜΚΔ μεταξύ δύο θετικών ακεραίων. Στις γραμμές 6-9 το πρόγραμμα ζητάει από το χρήστη να δώσει τους δύο αριθμούς στο πληκτρολόγιο. Το πρόγραμμα για να δουλέψει πρέπει ο πρώτος να είναι μεγαλύτερος από το δεύτερο οπότε αν ο χρήστης τους δώσει ανάποδα, το πρόγραμμα τους αντάλλαζει (γραμμές 11-16). Στη συνέχεια, στις γραμμές 18-22 εφαρμόζει τον αλγόριθμο του Ευκλείδη για να βρει το ΜΚΔ το οποίο και τυπώνει στη γραμμή 24. 1 program pistob24; 2 var 3 a, b, c: integer; 4 5 begin 6 write(' Dose ton proto arithmo: '); 7 readln(a); 8 write(' Dose ton deutero arithmo: '); 9 readln(b); 10 11 if a > b then 12 begin 13 c := a; 14 a := b; 15 b := c; 16 end; 17 18 repeat 19 c := a mod b; 20 a := b; 21 b := c; 22 until c = 0; 23 24 writeln('o MKD eivai o ', a); 25 end. 25. Να γραφεί σε Pascal πρόγραμμα που θα προσθέτει δύο κλάσματα. Θα πρέπει να γίνει ο έλεγχος των παρονομαστών ώστε να είναι διάφοροι του 0. Το πρόγραμμα αρχικά ζητάει τον αριθμητή και τον παρονομαστή του πρώτου και του δεύτερου κλάσματος (γραμμές 52-55). Για το σκοπό αυτό καλείται η procedure inputfrac (γραμμές 8-18) η οποία ελέγχει ώστε οι παρονομαστές να μην είναι μηδέν. Οι αριθμητές του 15

πρώτου και του δεύτερου κλάσματος αποθηκεύονται στις μεταβλητές ar1 και ar2 αντίστοιχα. Ανάλογα και οι παρονομαστές στις μεταβλητές par1 και par2. Από την άλγεβρα γνωρίζουμε ότι για να προσθέσουμε δύο κλάσματα αρχικά πρέπει να τα κάνουμε ομώνυμα. Για να γίνει αυτό πολλαπλασιάζουμε τους όρους κάθε κλάσματος με έναν κατάλληλο πολλαπλασιαστή. Ο πολλαπλασιαστής για το πρώτο κλάσμα είναι ίσος με το πηλίκο του ΜΚΔ των παρονομαστών προς τον παρονομαστή του δεύτερου κλάσματος. Αντίστοιχα ο πολλαπλασιαστής για το δεύτερο κλάσμα είναι ίσος με το πηλίκο του ΜΚΔ των παρονομαστών προς το παρονομαστή του πρώτου κλάσματος. Το αποτέλεσμα θα είναι τα δύο κλάσματα να έχουν τον ίδιο παρονομαστή (ίσο με το ΕΚΠ των παρονομαστών). Το άθροισμα είναι το κλάσμα που έχει αριθμητή, το άθροισμα των αριθμητών και παρονομαστή το νέο κοινό παρονομαστή των δύο κλασμάτων. Στις γραμμές 24-42 ορίζεται η συνάρτηση υπολογισμού του ΜΚΔ. Στις γραμμές 58-59 υπολογίζονται οι πολλαπλασιαστές mult1 και mult2 για τα δύο κλάσματα. Στις γραμμές 61-65 οι όροι των κλασμάτων πολλαπλασιάζονται με τους αντίστοιχους πολλαπλασιαστές προκειμένου να γίνουν ομώνυμα. Στις γραμμές 67, 68 υπολογίζονται ο αριθμητής και ο παρονομαστής του αθροίσματος και τέλος το αποτέλεσμα τυπώνεται στη γραμμή 70 ¹. 1 program pistob25; 2 3 {---------------------------------------------------------------------------- 4 Eisagwgi toy arithmiti kai toy parovomasti evos klasmatos apo to 5 plnktrologio. H diadikasia gia tov parovomastn syvexizetai mexri 6 va dw8ei mn mndevikos. 7 ----------------------------------------------------------------------------} 8 procedure inputfrac(var ar, par: integer); 9 begin 10 write(' Dose ton arithmiti: '); 11 readln(ar); 12 repeat 13 write(' Dose ton paronomasti: '); 14 readln(par); 15 if par = 0 then 16 writeln('o parovomastns dev mporei va eivai 0. 3 avaprospathise.'); 17 until par <> 0; 18 end; 19 20 {---------------------------------------------------------------------------- 21 Epistrefei to MKD dyo akeraiwv 22 ----------------------------------------------------------------------------} 23 24 function mkd(a, b: integer): integer; 25 var 26 c: integer; ¹Το πρόγραμμα μπορεί να γίνει αρκετά πιο σύντομο υπολογίζοντας απευθείας τον αριθμητή και παρονομαστή του αποτελέσματος χωρίς να πραγματοποιηθεί ρητά η αναγωγή των δύο κλασμάτων. Οι γραμμές 61-68 μπορούν να γίνουν κάπως έτσι ar := ar1 * mult1 + ar2 * mult2; par := par1 * mult1; 16

27 begin 28 if a > b then 29 begin 30 c := a; 31 a := b; 32 b := c; 33 end; 34 35 repeat 36 c := a mod b; 37 a := b; 38 b := c; 39 until c = 0; 40 41 mkd := a; 42 end; 43 44 var 45 { Arithmites kai parovomastes twv klasmatwv 1 kai 2 } 46 ar1, par1, ar2, par2: integer; 47 { Arithmitis kai parovomastis toy apotelesmatos } 48 ar, par: integer; 49 m: integer; { MKD } 50 mult1, mult2: integer; { Pollaplasiastes } 51 begin 52 writeln(' Dose to proto klasma'); 53 inputfrac(ar1, par1); 54 writeln(' Dose to deutero klasma'); 55 inputfrac(ar2, par2); 56 57 m := mkd( par1, par2); 58 mult1 := par2 div m; 59 mult2 := par1 div m; 60 61 ar1 := ar1 * mult1; 62 par1 := par1 * mult1; 63 64 ar2 := ar2 * mult2; 65 par2 := par2 * mult2; 66 67 ar := ar1 + ar2; 68 par := par2; 69 70 writeln('to athroisma eivai ', ar, '/', par); 71 end. 17

26. Να γραφεί σε Pascal πρόγραμμα που θα κάνει τις βασικές πράξεις μεταξύ δύο κλασμάτων Το πρόγραμμα χρησιμοποιεί τις συναρτήσεις και τεχνικές που αναφέρθηκαν και στα προγούμενα προγράμματα. Παραλείπουμε την περιγραφή τους για συντομία. Το πρόγραμμα ζητάει όπως και στα προηγούμενα ερωτήματα τους όρους δύο κλασμάτων από το πληκτρολόγιο. Στη συνέχεια (γραμμές 71-81) τυπώνει ένα μενού και ζητάει από το χρήστη να δώσει ποια πράξη θέλει να γίνει στα κλάσματα. Στη συνέχεια σε μία case (γραμμές 83-88) καλεί την κατάλληλη συνάρτηση ανάλογα με τι ζήτησε ο χρήστης. Χρειάζονται μόνο δύο συναρτήσεις, πρόσθεσης και πολλαπλασιασμού, και όχι τέσσερις γιατί η αφαίρεση είναι πρόσθεση του αντιθέτου και η διαίρεση πολλαπλασιασμός με τον αντίστροφο. 1 program pistob26; 2 3 {---------------------------------------------------------------------------- 4 Eisagwgi toy arithmiti kai toy parovomasti evos klasmatos apo to 5 plnktrologio. H diadikasia gia tov parovomastn syvexizetai mexri 6 va dw8ei mn mndevikos. 7 ----------------------------------------------------------------------------} 8 procedure inputfrac(var ar, par: integer); 9 begin 10 write(' Dose ton arithmiti: '); readln( ar); 11 repeat 12 write(' Dose ton paronomasti: '); readln( par); 13 if par = 0 then 14 writeln('o parovomastns dev mporei va eivai 0. 3 avaprospathise.'); 15 until par <> 0; 16 end; 17 18 {---------------------------------------------------------------------------- 19 Epistrefei to MKD dyo akeraiwv 20 ----------------------------------------------------------------------------} 21 22 function mkd(a, b: integer): integer; 23 var 24 c: integer; 25 begin 26 if a > b then 27 begin c := a; a := b; b := c; end; 28 29 repeat 30 c := a mod b; a := b; b := c; 31 until c = 0; 32 33 mkd := a; 34 end; 35 36 {---------------------------------------------------------------------------- 18

37 Prosthesi klasmatwv 38 ---------------------------------------------------------------------------} 39 procedure addfrac(ar1, par1, ar2, par2: integer; var ar, par: integer); 40 var 41 m: integer; 42 mult1, mult2: integer; 43 begin 44 m := mkd( par1, par2); 45 mult1 := par2 div m; 46 mult2 := par1 div m; 47 48 ar := ar1 * mult1 + ar2 * mult2; 49 par := par1 * mult1; 50 end; 51 52 procedure multfrac(ar1, par1, ar2, par2: integer; var ar, par: integer); 53 begin 54 ar := ar1 * ar2; 55 par := par1 * par2; 56 end; 57 58 var 59 { Arithmites kai parovomastes twv klasmatwv 1 kai 2 } 60 ar1, par1, ar2, par2: integer; 61 { Arithmitis kai parovomastis toy apotelesmatos } 62 ar, par: integer; 63 choice: integer; { epilogn sto mevou } 64 begin 65 writeln(' Dose to proto klasma'); 66 inputfrac(ar1, par1); 67 writeln(' Dose to deutero klasma'); 68 inputfrac(ar2, par2); 69 70 {---- MENU ----} 71 repeat 72 writeln(' Diale3e pra3n'); 73 writeln('1. Prosthesi'); 74 writeln('2. Afairesn'); 75 writeln('3. Pollaplasiasmos'); 76 writeln('4. Diairesn'); 77 write(' Dwse tnv epilogn sou: '); 78 readln( choice); 79 if ( choice < 1) or ( choice > 4) then 80 writeln('apo 1 ews 4. 3 avaprospa8nse.'); 81 until ( choice >= 1) and ( choice <= 4); 82 19

83 case choice of 84 1: addfrac(ar1, par1, ar2, par2, ar, par); 85 2: addfrac(ar1, par1, -ar2, par2, ar, par); 86 3: multfrac(ar1, par1, ar2, par2, ar, par); 87 4: multfrac(ar1, par1, par2, ar2, ar, par); 88 end; 89 90 writeln('to athroisma eivai ', ar, '/', par); 91 end. 27. Να γραφεί σε Pascal πρόγραμμα που θα κάνει απλοποίηση ενός κλάσματος. Η διαδικασία απλοπλοίησης ενός κλάσματος συνίσταται στον υπολογισμό του ΜΚΔ του αριθμητή και του παρονομαστή και στη διαίρεση και των δύο με αυτό. Το παρακάτω πρόγραμμα ζητάει από το χρήστη τον αριθμητή και τον παρονομαστή ενός κλάσματος. Η procedure inputfrac υλοποιεί τη διαδικασία μεριμνώντας για να μη δοθεί το μηδέν ως παρονομαστής. Στις γραμμές 48-51 καλούνται αυτά τα υποπρογράμματα και στη συνέχεια αριθμητής και παρονομαστής διαιρούνται με το ΜΚΔ. Στη γραμμή 53 τυπώνεται το αποτέλεσμα. function mkd υπολογίζει το ΜΚΔ αριθμητή και παρονομαστή. 1 program pistob28; 2 3 {---------------------------------------------------------------------------- 4 Eisagwgi toy arithmiti kai toy parovomasti evos klasmatos apo to 5 plnktrologio. H diadikasia gia tov parovomastn syvexizetai mexri 6 va dw8ei mn mndevikos. 7 ----------------------------------------------------------------------------} 8 procedure inputfrac(var ar, par: integer); 9 begin 10 write(' Dose ton arithmiti: '); 11 readln(ar); 12 repeat 13 write(' Dose ton paronomasti: '); 14 readln(par); 15 if par = 0 then 16 writeln('o parovomastns dev mporei va eivai 0. 3 avaprospathise.'); 17 until par <> 0; 18 end; 19 20 {---------------------------------------------------------------------------- 21 Epistrefei to MKD dyo akeraiwv 22 ----------------------------------------------------------------------------} 23 24 function mkd(a, b: integer): integer; 25 var 26 c: integer; 27 begin 20

28 if a > b then 29 begin 30 c := a; 31 a := b; 32 b := c; 33 end; 34 35 repeat 36 c := a mod b; 37 a := b; 38 b := c; 39 until c = 0; 40 41 mkd := a; 42 end; 43 44 var 45 ar, par: integer; 46 m: integer; 47 begin 48 inputfrac(ar, par); 49 m := mkd(ar, par); 50 ar := ar div m; 51 par := par div m; 52 53 writeln('to aplopoinmevo klasma eivai ', ar, '/', par); 54 end. 28. Αναπτύξτε ένα πρόγραμμα σε γλώσσα Pascal με το οποίο μια συνδεδεμένη λίστα ακεραίων θα διασπάται σε δύο λίστες: Η πρώτη θα περιλαμβάνει τους θετικούς αριθμούς της αρχικής λίστας και η δεύτερη τους αρνητικούς. Η αρχική λίστα θα εισάγεται από το πληκτρολόγιο. Μία σωστή λύση είναι η παρακάτω. Θεωρώ ότι είναι νωρίς για εσάς να ασχοληθείτε με τα εργαλεία που χρησιμοποιούνται σε αυτήν (records, δυναμική δέσμευση μνήμης). Καλύτερα αφήστε την για το επόμενο εξάμηνο. 1 program pistob28; 2 3 type 4 nodeptr = ^node; 5 node = record 6 n: integer; 7 next: nodeptr; 8 end; 9 10 procedure print_list(node: nodeptr); 11 begin 21

12 while node <> nil do 13 begin 14 write(node^.n, ' '); 15 node := node ^. next; 16 end; 17 writeln; 18 end; 19 20 procedure insert_list(a: integer; var h: nodeptr); 21 var 22 newnode: nodeptr; 23 begin 24 new( newnode); 25 newnode ^. n := a; 26 newnode ^. next := h; 27 h := newnode; 28 end; 29 30 var 31 head: nodeptr; 32 headthetikoi: nodeptr; 33 headarnitikoi: nodeptr; 34 np: nodeptr; 35 a: integer; 36 begin 37 head := nil; 38 writeln(' Dose mou toys ari8mous (0 gia telos)'); 39 repeat 40 write('->' ); 41 readln(a); 42 if a <> 0 then 43 insert_list(a, head); 44 until a = 0; 45 46 headthetikoi := nil; 47 headarnitikoi := nil; 48 49 np := head; 50 while node <> nil do 51 begin 52 a := np ^. n; 53 if a < 0 then 54 insert_list(a, headarnitikoi) 55 else 56 insert_list(a, headthetikoi); 57 np := np ^. next; 22

58 end; 59 60 writeln(' Oloi oi ari8moi'); 61 print_list(head); 62 writeln('oi arvntikoi ari8moi'); 63 print_list( headarnitikoi); 64 writeln('oi thetikoi ari8moi'); 65 print_list( headthetikoi); 66 end. 29. Να γραφεί πρόγραμμα σε Pascal που θα ταξινομεί κατ αύξουσα σειρά ένα μονοδιάστατο πίνακα 10 ακεραίων. Πρόκειται για απλή εφαρμογή της ταξινόμησης της φυσαλίδας. Για λόγους ευκολίας τα στοιχεία του πίνακα δίνονται τυχαία (γραμμή 8). Θα μπορούσαν να ζητηθούν και από το πληκτρολόγιο με μία εντολή readln(p[i]);. 1 program pistob29; 2 var 3 p: array [1..10] of integer; 4 i, j, c: integer; 5 6 begin 7 for i := 1 to 10 do 8 p[i] := random (100); 9 10 for i := 2 to 10 do 11 for j := 10 downto i do 12 if p[j] < p[j-1] then 13 begin 14 c := p[j]; 15 p[j] := p[j-1]; 16 p[j-1] := c; 17 end; 18 19 for i := 1 to 10 do 20 write(p[i], ' '); 21 writeln; 22 end. 30. Να γραφεί πρόγραμμα σε Pascal που θα διαβάζει τα στοιχεία δισδιάστατου πίνακα 5Χ5 και θα υπολογίζει και τυπώνει τα αθροίσματα των στοιχείων κάθε γραμμής του. Είναι γνωστό το πώς αθροίζουμε τα στοιχεία ενός πίνακα. Αρχικά μηδενίζουμε τη μεταβλητή στην οποία θα αποθηκευθεί το άθροισμα και στη συνέχεια διατρέχουμε με ένα βρόχο for τα στοιχεία τα πίνακα ένα προς ένα προσθέτοντας κάθε ένα από αυτά στη μεταβλητή του αθροίσματος. Αυτό γίνεται στο παρακάτω πρόγραμμα στις γραμμές 17 έως 20 για τη γραμμή 23

i. Προκειμένου να γίνει αυτό για κάθε μία γραμμή του πίνακα οι εντολές περικλείονται μέσα σε ένα βρόχο for (γραμμή 15) ο οποίος διατρέχει τις γραμμές του πίνακα δίνοντας στη μεταβλητή i τις τιμές από το ένα έως το 5. Στις γραμμές 8-13 ζητούνται τα στοιχεία του πίνακα από το πληκτρολόγιο. 1 program pistob30; 2 var 3 p: array[1..5, 1..5] of integer; 4 sum: integer; 5 i, j: integer; 6 7 begin 8 for i := 1 to 5 do 9 for j := 1 to 5 do 10 begin 11 write('dose to stoixeio [', i, ',', j, '] toy pinaka'); 12 readln(p[i,j]); 13 end; 14 15 for i := 1 to 5 do 16 begin 17 sum := 0; 18 for j := 1 to 5 do 19 sum := sum + p[i,j]; 20 writeln('to athroisma tns grammis ', i, ' eivai ', sum); 21 end; 22 end. 31. Να γραφεί πρόγραμμα σε Pascal που θα διαβάζει χαρακτήρα προς χαρακτήρα ένα ορισμένο κείμενο και θα υπολογίζει και τυπώνει τη συχνότητα εμφάνισης κάθε γράμματος. Το πρόγραμμα αποθηκεύει το πλήθος των εμφανίσεων κάθε γράμματος σε δύο πίνακες έναν για τα πεζά και έναν για τα κεφαλαία (γραμμές 3-4). Η Pascal επιτρέπει τη χρησιμοποιήση οποιουδήποτε βαθμωτού τύπου δεδομένων ως δείκτη σε έναν πινακα και έτσι στους πίνακες αυτούς αντί για ακέραιοι δείκτες χρησιμοποιούνται οι ίδιοι οι χαρακτήρες που θέλουμε να μετρήσουμε, δηλαδή 'a'..'z' στον πρώτο και 'A'..'Z' στο δεύτερο. Η πρόθεση είναι το στοιχείο syxpeza['a'] να περιέχει το πλήθος των εμφανίσεων του χαρακτήρα 'a' κοκ. Στις γραμμές 8-11 γίνεται αρχικοποίηση στο μηδέν των μετρητών εμφανίσεων του κάθε γράμματος. Η ανάγνωση των χαρακτήρων γίνεται στις γραμμές 13-19 σε ένα repeat-until βρόχο ο οποίος επαναλαμβάνεται μέχρι να ισχύσει η συνάρτηση eof (τέλος αρχείου). Σε περιβάλλοντα Windows ο χρήστης πρέπει να πατήσει Ctrl+Z ενώ σε UNIX Ctrl+D για να δηλώσει το τέλος του κειμένου. Στις γραμμές 15-18 γίνεται η αύξηση του κατάλληλου μετρητή. Αν ο χαρακτήρας είναι πεζός ισχύει η συνθήκη της γραμμής 15 και αυξάνεται ο αντίστοιχος μετρητής του πίνακα syxpeza και αντίστοιχα γίνεται για τα κεφαλαία στις γραμμές 17-18. Τέλος γίνεται η εμφάνιση των αποτελεσμάτων στην οθόνη. Στις γραμμές 21-27 εμφανίζονται τα αποτελέσματα για τους πεζούς χαρακτήρες. Επειδή τα αποτελέσματα και για τους 26 χαρακτήρες του αλφαβήτου δεν 24

χωράνε σε μία γραμμή, το if της γραμμής 24 αλλάζει γραμμή στην οθόνη μετά το 'k' και το 'u'. Αντίστοιχα τυπώνονται οι μετρήσεις για τους κεφαλαίους στις γραμμές 29-35. 1 program pistob31; 2 var 3 syxpeza: array['a'..'z'] of integer; 4 syxkefalaia: array['a'..'z'] of integer; 5 c: char; 6 7 begin 8 for c := 'a' to 'z' do 9 syxpeza[c] := 0; 10 for c := 'A' to 'Z' do 11 syxkefalaia[c] := 0; 12 13 repeat 14 read(c); 15 if (c >= 'a') and (c <= 'z') then 16 syxpeza[c] := syxpeza[c] + 1 17 else if (c >= 'A') and (c <= 'Z') then 18 syxkefalaia[c] := syxkefalaia[c] + 1; 19 until eof; 20 21 for c := 'a' to 'z' do 22 begin 23 write(c, ':', syxpeza[c]:3, ' '); 24 if (c = 'k') or (c = 'u') then 25 writeln; 26 end; 27 writeln; 28 29 for c := 'A' to 'Z' do 30 begin 31 write(c, ':', syxkefalaia[c]:3, ' '); 32 if (c = 'K') or (c = 'U') then 33 writeln; 34 end; 35 writeln; 36 end. 32. Να γραφεί πρόγραμμα σε Pascal που με τη χρήση της αναδρομής υπολογίζει το παραγοντικό των 10 πρώτων ακεραίων αριθμών. (Υπόδειξη: το παραγοντικό ενός αριθμού είναι το γινόμενο του αριθμού επί όλων των αριθμών μέχρι τον αριθμό αυτό, όπου k! = k (k 1)! και 0! = 1). Το πρόγραμμα είναι απλώς μια μετατροπή του αλγορίθμου που δίνεται στη σελίδα 69 του 25

βιβλίου. Η διαφορά του έγκειται στο ότι τυπώνει το παραγοντικό για κάθε αριθμό². 1 program pistob32; 2 3 function factorial(n: integer): LongInt; 4 begin 5 if n = 0 then 6 begin 7 factorial := 1; 8 writeln(' Paragovtiko(', n, ') = ', factorial); 9 end 10 else 11 begin 12 factorial := n * factorial(n-1); 13 writeln(' Paragovtiko(', n, ') = ', factorial); 14 end; 15 end; 16 17 var 18 number: integer; 19 begin 20 factorial (10); 21 end. ²Σημειώστε ότι η συνάρτηση factorial δεν επιστρέφει integer αλλά LongInt. Ο λόγος είναι ότι στη standard Pascal ο τύπος integer δεν επαρκεί για να αποθηκεύσει την τιμή 10! καθώς έχει εύρος μέχρι την τιμή 32768 και το 10! είναι αρκετά μεγαλύτερο. Υποθέτω ότι στην πιστοποίηση δε θα υπάρχει πρόβλημα να γράψει κανείς απλώς integer 26