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

Σχετικά έγγραφα
ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΙΟΙΚΗΣΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα.

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

επιµέλεια Θοδωρής Πιερράτος

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

Επαναληπτικές δοµές. µτ α.τ. Όχι. ! απαγορεύεται µέσα σε µία ΓΙΑ να µεταβάλλουµε τον µετρητή! διότι δεν θα ξέρουµε µετά πόσες επαναλήψεις θα γίνουν

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Ορισµοί κεφαλαίου. Σηµαντικά σηµεία κεφαλαίου

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη

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

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

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

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

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

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

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ ΓΛΩΣΣΟΜΑΘΕΙΑ

Στην εντολή while η επανάληψη συνεχίζεται όσο η λογική έκφραση έχει τιμή false.

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal

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

Κεφάλαιο 5ο: Εντολές Επανάληψης

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

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

ΚΕΦΑΛΑΙΟ 2 Βασικές έννοιες αλγορίθµων

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

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

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

Α1. (α). ώστε τον ορισµό του προβλήµατος (Μονάδες 3)

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

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

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

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

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

for for for for( . */

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

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

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

Επιµέλεια Θοδωρής Πιερράτος

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

Μονάδες 12 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

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

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

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

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

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

4.4 Μετατροπή από μία μορφή δομής επανάληψης σε μία άλλη.

Κεφάλαιο 12 : ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

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

Α3. Ποια είναι τα πλεονεκτήματα του Δομημένου προγραμματισμού; (Μονάδες 10)

Γ ε ν ι κ ό Λ ύ κ ε ι ο Ε λ ε υ θ ε ρ ο ύ π ο λ η ς. Α λ γ ό ρ ι θ μ ο ι

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

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

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ )

Ανάπτυξη Εφαρμογών. (Μονάδες 8) Α2. α. να αναφέρετε ονομαστικά τα κριτήρια που πρέπει απαραίτητα να ικανοποιεί ένας αλγόριθμος.

2.2.3 Η εντολή Εκτύπωσε

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

ΦΡΟΝΤΙΣΤΗΡΙΟ ΦΑΣΜΑ 12/10/2014

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

οµές Επανάληψης Π1. Να αναπτύξετε αλγόριθµο που θα εκτυπώνει τους αριθµούς από το 1 ως το 10.

7. Βασικά στοιχεία προγραµµατισµού.

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

ΚΕΦΑΛΑΙΟ 10 ΕΝΤΟΛΕΣ ΕΠΙΛΟΓΗΣ (ή εντολές Ελέγχου και Επιλογής ή εντολές Επιλογής και Απόφασης)

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 2 ο

Ο αλγόριθμος πρέπει να τηρεί κάποια κριτήρια

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

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

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

Α.Ε.Π.Π. Προετοιμασία Γ Λυκείου

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

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

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

ΙΑΓΩΝΙΣΜΑ ΑΝΑΠΤΥΞΗΣ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ (ΑΠΟΦΟΙΤΟΙ) Κυριακή

Η Δομή Επανάληψης. Εισαγωγή στην δομή επανάληψης Χρονική διάρκεια: 3 διδακτικές ώρες

Κεφάλαιο 4ο: Εντολές επιλογής

ΑΣΚΗΣΗ 3: ΠΡΟΤΑΣΕΙΣ, ΕΚΦΡΑΣΕΙΣ ΚΑΙ ΤΕΛΕΣΤΕΣ

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 18/02/2013 ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑ Α

ΓΕΝΙΚΟ ΛΥΚΕΙΟ ΚΑΡΠΕΝΗΣΙΟΥ ΙΩΡΟ ΕΠΑΝΑΛΗΠΤΙΚΟ ΙΑΓΩΝΙΣΜΑ ΣΤΗΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ 16/12/2008. Τµήµα ΓΤ2 Όνοµα:...

18/ 07/ Σελίδα 1 6

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

Άσκηση 1. Ποια από τα κάτω αλφαριθμητικά είναι αποδεκτά ως ονόματα μεταβλητών σε έναν αλγόριθμο i. Τιμή

οµή Επιλογής Α. Κατηγορία προβληµάτων Β. Κριτήριο Αλγορίθµου Γ. Τρόπος αναπαράστασης αλγορίθµων . Είδος σταθεράς Ε. Λογική τιµή

ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2013 ΕΚΦΩΝΗΣΕΙΣ

2. β. Συνθήκη ή επιλογή. 4. δ. Υποπρόγραμμα. 5. ε. ιαδικασία εισόδου ή εξόδου

ΜΑΘΗΜΑ / ΤΑΞΗ : ΑΕΠΠ / Γ ΛΥΚΕΙΟΥ-ΘΕΡΙΝΑ ΣΕΙΡΑ: 1 η ΗΜΕΡΟΜΗΝΙΑ: 09/09/2012

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

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

2. β. Συνθήκη ή επιλογή. 4. δ. Υποπρόγραμμα. 5. ε. ιαδικασία εισόδου ή εξόδου

3. Να γραφεί πρόγραμμα που θα διαβάζει 100 ακεραίους αριθμούς από το πληκτρολόγιο και θα υπολογίζει το άθροισμά τους.


ΟΜΟΣΠΟΝ ΙΑ ΕΚΠΑΙ ΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑ ΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2013 ÅÐÉËÏÃÇ

Εντολή ΓΡΑΨΕ. Εντολή ιάβασε

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

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΙΟΙΚΗΣΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΙΑΧΕΙΡΙΣΗ Ε ΟΜΕΝΩΝ ΚΑΙ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ (Β ΕΞΑΜΗΝΟ) ιδάσκων: Επ. Καθηγητής Γρηγόρης Χονδροκούκης ΣΗΜΕΙΩΣΕΙΣ ΜΑΘΗΜΑΤΟΣ Η ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL (ΤΕΥΧΟΣ 1) Περιέχει: Εισαγωγικές Έννοιες Η οµή Ακολουθίας (Θεωρία & Ασκήσεις) Η οµή Επιλογής (Θεωρία & Ασκήσεις) Η οµή For...to... do... (Θεωρία & Ασκήσεις) ΠΕΙΡΑΙΑΣ ΑΠΡΙΛΙΟΣ 2003

Αντί προλόγου Ερώτηση 1: «εν έχω και τις καλύτερες σχέσεις» µε τους υπολογιστές. Μήπως θα δυσκολευτώ αρκετά στο συγκεκριµένο µάθηµα; Απάντηση: Φυσικά και όχι. Το συγκεκριµένο µάθηµα δεν έχει κανένα τέτοιο προαπαιτούµενο. Το µόνο που χρειάζεται είναι ΛΟΓΙΚΗ και εφαρµογή του «δόγµατος»: Think First, Code Later. Κοινώς, πρώτα σκέφτοµαι και έπειτα ξεκινώ να γράφω εντολές. Υπάρχουν πάρα πολλές περιπτώσεις όπου φοιτητές «ξεκίνησαν από το µηδέν» και κατάφεραν να ανταποκριθούν (αφού «κατέβαλλαν φιλότιµες και ειλικρινείς προσπάθειες»!!!) στις απαιτήσεις του µαθήµατος. Ερώτηση 2: Άκουσα ότι η Pascal είναι πεπαλαιωµένη γλώσσα κι ότι σήµερα χρησιµοποιούνται πιο σύγχρονες γλώσσες προγραµµατισµού. Γιατί λοιπόν διδασκόµαστε κάτι τέτοιο; Απάντηση: Όντως η Pascal είναι µια αρκετά παλιά γλώσσα. Και σίγουρα υπάρχουν πολύ πιο σύγχρονες γλώσσες σήµερα. Όµως η Pascal, και γενικά ο δοµηµένος τρόπος προσέγγισης και επίλυσης προβληµάτων που κάποιος µπορεί να αποκτήσει µέσα από αυτό το µάθηµα, αποτελούν ισχυρό γνωστικό υπόβαθρο για την εκµάθηση σύγχρονων γλωσσών προγραµµατισµού (όπως είναι η Visual Basic, η Delphi και άλλες). 2

ΕΝΟΤΗΤΑ 1: ΕΙΣΑΓΩΓΙΚΕΣ ΕΝΝΟΙΕΣ Μέρη ενός προγράµµατος Κάθε πρόγραµµα (απλό ή σύνθετο) αποτελείται από 3 µέρη: Μέρος 1: Επικεφαλίδα Προγράµµατος (Heading) Το πρώτο µέρος (το οποίο είναι και το πιο απλό) περιλαµβάνει την επικεφαλίδα του προγράµµατος. Απλώς χρησιµοποιούµε την δεσµευµένη λέξη program και στη συνέχεια ακολουθεί (στην ίδια γραµµή) το όνοµα του προγράµµατος. Μετά το τέλος του ονόµατος (στην ίδια γραµµή) ακολουθεί το ελληνικό ερωτηµατικό. Π.χ. program DIAVASMA_1; Μέρος 2: ήλωση Μεταβλητών (Declaration Part) Το δεύτερο µέρος είναι το τµήµα δήλωσης των µεταβλητών του προγράµµατος. Σε αυτό γράφουµε όλες τις µεταβλητές εισόδου (κοινώς δεδοµένα) που πρόκειται να χρησιµοποιηθούν όπως επίσης όλες τις µεταβλητές εξόδου (κοινώς αποτελέσµατα) αλλά και τις λοιπές µεταβλητές (βοηθητικές) οι οποίες θα χρησιµοποιηθούν. Σηµειώνεται ότι µε τον όρο δεδοµένα ενός προγράµµατος εννοούµε τις τιµές των µεταβλητών που θα χρειαστεί να πληκτρολογήσει ο χρήστης του προγράµµατος. Με τον όρο αποτελέσµατα εννοούµε τις τιµές των µεταβλητών που θα πρέπει να υπολογίσει και να εµφανίσει ή να εκτυπώσει το πρόγραµµα. Με τον όρο βοηθητικές εννοούµε εκείνες τις µεταβλητές οι οποίες δεν είναι ούτε δεδοµένα αλλά ούτε και αποτελέσµατα. Είναι όµως απαραίτητες διότι συµµετέχουν στην εξαγωγή των αποτελεσµάτων. Ο όρος βοηθητικές και η τεράστια χρησιµότητα τους κατά την ανάπτυξη αλγορίθµων παρουσιάζεται αναλυτικά σε επόµενες ενότητες. Το τµήµα δήλωσης µεταβλητών ξεκινά µε την δεσµευµένη λέξη Var. Στην επόµενη γραµµή µετά τη λέξη var δηλώνονται οι µεταβλητές. Πιο συγκεκριµένα, κάθε µία από τις µεταβλητές θα πρέπει να αποτελείται από 2 στοιχεία: α) ο τύπος της για όσες µεταβλητές λαµβάνουν (ή πρέπει να λαµβάνουν) τιµές στο σύνολο των πραγµατικών αριθµών, χρησιµοποιείται η δεσµευµένη λέξη real για όσες µεταβλητές λαµβάνουν (ή πρέπει να λαµβάνουν) τιµές στο σύνολο των ακέραιων αριθµών, χρησιµοποιείται η δεσµευµένη λέξη integer για όσες µεταβλητές λαµβάνουν (ή πρέπει να λαµβάνουν) ως τιµές γράµµατα, φράσεις, λέξεις, γράµµατα και αριθµοί µαζί, χρησιµοποιείται η δεσµευµένη λέξη char Σηµειώνεται ότι µια µεταβλητή µε τύπο char (δηλαδή χαρακτήρες) ονοµάζεται επίσης και αλφαριθµητική ή συµβολοσειρά. Για όσες µεταβλητές λαµβάνουν (ή πρέπει να λαµβάνουν) µόνο δυαδικές τιµές όπως πχ το φύλο ενός ατόµου (άνδρας ή γυναίκα), η οικογενειακή κατάσταση ενός ατόµου (παντρεµένος, ανύπαντρος, διαζευγµένος), κλπ χρησιµοποιείται η δεσµευµένη λέξη boolean 3

β) το όνοµα της Η ονοµασία των µεταβλητών δεν είναι «δεσµευτική» (δεν είµαστε υποχρεωµένοι να χρησιµοποιούµε κάποια συγκεκριµένα ονόµατα). Ο προγραµµατιστής µπορεί να δώσει όποιο όνοµα θέλει σε κάθε µία από τις µεταβλητές που πρόκειται να χρησιµοποιήσει όµως συνίσταται (για λόγους κατανοησιµότητας και εποπτικότητας) να δίνονται ονόµατα στις µεταβλητές σχετικά µε τις απαιτήσεις του εκάστοτε προβλήµατος. Στον παρακάτω πίνακα παρουσιάζεται ο συνδυασµός των 2 προηγούµενων στοιχείων που πρέπει να περιλαµβάνει η δήλωση µιας µεταβλητής στο προγραµµατιστικό περιβάλλον της Pascal. Σηµειώνεται ότι στα ονόµατα των µεταβλητών ΕΝ επιτρέπεται να χρησιµοποιηθεί το κενό µεταξύ των λέξεων, το σύµβολο της «άνω παύλας» (σύµβολο) και η τελεία. Μπορείτε είτε να χρησιµοποιείτε την κάτω παύλα είτε να γράφετε ολόκληρο το όνοµα. ήλωση µεταβλητών στην PASCAL Φυσική σηµασία µεταβλητής Τύπος και όνοµα µεταβλητής το χρηµατικό ποσό που καταθέτει κάποιος σε µία Poso_katathesis: real; τράπεζα. η ηλικία ενός ατόµου. Hlikia: real; ο συνολικός αριθµός σελίδων που αναπαράγονται Pages: integer; κατά την εκτύπωση ενός κειµένου. το πλήθος των οδηγών CD-ROM που περιέχει ένας Cd_Rom_Drives: integer; προσωπικός ηλεκτρονικός υπολογιστής. το πλήθος των επιβατών ενός λεωφορείου. Passengers: integer; η οικογενειακή κατάσταση ενός ανθρώπου Marital_Status: Char; (παντρεµένος ή ανύπαντρος ή χωρισµένος, κλπ). το φύλο ενός ατόµου (άνδρας ή γυναίκα). Sex: Boolean; Παρατηρήστε τα ονόµατα των µεταβλητών. Σε µερικές από αυτές ο διαχωρισµός λέξεων στο όνοµά τους έγινε χρησιµοποιώντας το σύµβολο της «κάτω παύλας» (σύµβολο _ ) και ΟΧΙ µε το κενό. Ο επόµενος πίνακας περιέχει εσφαλµένους τρόπους δήλωσης (τύπου και ονόµατος) µεταβλητών. Εσφαλµένη δήλωση µεταβλητών στην PASCAL Φυσική σηµασία µεταβλητής Τύπος και όνοµα µεταβλητής το χρηµατικό ποσό που καταθέτει κάποιος σε µία Poso katathesis: real; τράπεζα. το πλήθος των οδηγών CD-ROM που περιέχει ένας Cd-Rom_Drives: integer; προσωπικός ηλεκτρονικός υπολογιστής (Personal Computer PC). η οικογενειακή κατάσταση ενός ανθρώπου Marital.Status: Char; (παντρεµένος ή ανύπαντρος ή χωρισµένος, κλπ). Στο µέρος 2, ο τύπος και το όνοµα δεν είναι τα µοναδικά στοιχεία τα οποία γράφονται για κάθε µία µεταβλητή που χρησιµοποιούµε. Γράφουµε και τον «τρόπο δήλωσης» κάθε µίας µεταβλητής (βλέπε Ενότητα 2: «Βασικές Αλγοριθµικές οµές», παρακάτω). 4

Μέρος 3: (Κυρίως) Σώµα Προγράµµατος (Body or Main Body) Το 3ο µέρος αποτελεί και το «ουσιαστικό» κοµµάτι ενός προγράµµατος. Με την λέξη «ουσιαστικό» εννοούµε ότι σε αυτό το µέρος χρησιµοποιούµε εντολές και δοµές (περισσότερες λεπτοµέρειες για τις δοµές µπορείτε να βρείτε στην ενότητα «Βασικές Αλγοριθµικές οµές») οι οποίες µας βοηθούν να φτάσουµε στο τελικό αποτέλεσµα (δηλαδή στην επιτυχή αντιµετώπιση του προβλήµατος). Το 1ο και το 2ο µέρος είναι και αυτά πολύ σηµαντικά όµως περιλαµβάνουν την «προεργασία» που κάνουµε πριν από την έναρξη της ουσιαστικής αντιµετώπισης του προβλήµατος. Το σώµα του προγράµµατος ξεκινά µε την δεσµευµένη λέξη BEGIN και ολοκληρώνεται µε την δεσµευµένη λέξη END. Σηµειώνεται ότι στη γλώσσα Pascal οι δεσµευµένες λέξεις begin και end είναι πιθανόν να χρησιµοποιηθούν αρκετές φορές στο σώµα ενός προγράµµατος (βλέπε επόµενες παραγράφους). Για διευκόλυνση του αναγνώστη, σε όλα τα τεύχη αυτών των σηµειώσεων, για την έναρξη του σώµατος για οποιοδήποτε πρόγραµµα Pascal η λέξη begin θα γράφεται µε κεφαλαία γράµµατα. Επίσης, σηµειώνεται ότι η ύπαρξη τελείας µετά τη δεσµευµένη λέξη end θα σηµαίνει και το τέλος του προγράµµατος. Η λέξη begin και η λέξη end χαρακτηρίζονται ως δεσµευµένες διότι επιτρέπεται να τοποθετούνται µόνο σε πολύ συγκεκριµένα σηµεία ενός προγράµµατος και σε κανένα άλλο σηµείο του (πχ δεν επιτρέπεται να χρησιµοποιηθούν στην επικεφαλίδα του προγράµµατος). 5

ΕΝΟΤΗΤΑ 2: ΒΑΣΙΚΕΣ ΑΛΓΟΡΙΘΜΙΚΕΣ ΟΜΕΣ Μετά τη συνοπτική παρουσίαση των βασικών µερών που πρέπει να περιέχει ένα πρόγραµµα ανεπτυγµένο σε Pascal, στην παρούσα ενότητα περιγράφονται οι βασικές δοµές που χρησιµοποιούνται σε ένα δοµηµένο πρόγραµµα. Η ανάλυσή τους ξεκινά µε την ακολουθία η οποία πάντα υπάρχει στο (κυρίως) σώµα ενός προγράµµατος. Επιπλέον περιγράφονται και βασικές βοηθητικές λέξεις (εντολές) οι οποίες χρησιµοποιούνται τόσο για την εισαγωγή δεδοµένων σε ένα πρόγραµµα όσο και για την εµφάνιση των αποτελεσµάτων του. Α. Ακολουθία (Sequence) Παράδειγµα 1: Να γραφεί πρόγραµµα Pascal το οποίο να διαβάζει από το πληκτρολόγιο το ποσό κατάθεσης ενός προσώπου στην τράπεζα και στη συνέχεια να το εµφανίζει στην οθόνη ενός προσωπικού υπολογιστή. Για να µπορέσουµε να αναπτύξουµε το πρόγραµµα του συγκεκριµένου παραδείγµατος, θα πρέπει να λάβουµε υπόψη µας τις απαιτήσεις της εκφώνησης. ύο είναι οι απαιτήσεις: 1. ανάγνωση (ή διάβασµα) από το πληκτρολόγιο του ποσού κατάθεσης και 2. εµφάνιση του ποσού κατάθεσης στην οθόνη ενός PC. Κάθε πρόγραµµα (απλό ή σύνθετο) έχει δεδοµένα και αποτελέσµατα. Η εύρεση του πλήθους των δεδοµένων και του πλήθους των αποτελεσµάτων θα µας βοηθήσει στην εύρεση του πλήθους των µεταβλητών εισόδου και των µεταβλητών εξόδου αντίστοιχα που θα δηλώσουµε στο πρόγραµµα. Στο συγκεκριµένο παράδειγµα έχουµε ότι τα δεδοµένα είναι το ποσό κατάθεσης (δηλαδή ο χρήστης του προγράµµατος θα χρειαστεί να πληκτρολογήσει το ποσό κατάθεσης) και τα αποτελέσµατα είναι πάλι το ποσό κατάθεσης (ο δηµιουργός του προγράµµατος πρέπει να µεριµνήσει ώστε αυτό να εµφανιστεί στην οθόνη). Γνωρίζοντας λοιπόν πόσα είναι τα δεδοµένα και πόσα είναι τα αποτελέσµατα, θα πρέπει στη συνέχεια να τα δηλώσουµε στο πρόγραµµά µας. Η δήλωση κάθε µεταβλητής σε ένα πρόγραµµα πραγµατοποιείται απαντώντας τα ακόλουθα ερωτήµατα: Ερώτηµα 1: ποίος θα είναι ο τύπος της µεταβλητής Τρεις είναι οι απαντήσεις: Απάντηση 1α: η µεταβλητή λαµβάνει (ή πρέπει να λαµβάνει) τιµές στο σύνολο των πραγµατικών αριθµών. Αν η ισχύει η απάντηση 1α, τότε η µεταβλητή ανήκει στις πραγµατικές µεταβλητές. Απάντηση 1β: η µεταβλητή λαµβάνει (ή πρέπει να λαµβάνει) τιµές στο σύνολο των ακεραίων αριθµών. Αν η ισχύει η απάντηση 1β, τότε η µεταβλητή ανήκει στις ακέραιες µεταβλητές. 6

Απάντηση 1γ: η µεταβλητή λαµβάνει (ή πρέπει να λαµβάνει) δυαδικές τιµές (δηλαδή ΝΑΙ ή ΟΧΙ, ΑΛΗΘΗΣ ή ΨΕΥ ΗΣ, κλπ). Αν η ισχύει η απάντηση 1γ, τότε η µεταβλητή ανήκει στις λογικές µεταβλητές. Απάντηση 1δ: η µεταβλητή λαµβάνει (ή πρέπει να λαµβάνει) ως τιµές γράµµατα, χαρακτήρες ή/ και ολόκληρες φράσεις. Αν η ισχύει η απάντηση 1δ, τότε η µεταβλητή ανήκει στους χαρακτήρες. Εκτός από τους παραπάνω τύπους µεταβλητών υπάρχουν και άλλοι ειδικοί τύποι µεταβλητών όπως είναι ο πίνακας, ο χαρακτήρας, οι τύποι οριζόµενοι από τον χρήστη, κλπ. Οι ειδικοί αυτοί τύποι παρουσιάζονται σε ενότητες που υπάρχουν σε επόµενα τεύχη αυτών των σηµειώσεων. Ερώτηµα 2: ποίο θα είναι το όνοµα της µεταβλητής Η απάντηση σε αυτό το ερώτηµα είναι απλή. Οποιοδήποτε επιθυµεί ο προγραµµατιστής, αρκεί να ακολουθούνται οι κανόνες ονοµατολογίας µεταβλητών που ορίζει η Pascal (βλέπε Ενότητα 1). Μετά την απάντηση των ανωτέρω ερωτηµάτων, προχωράµε στην οµάδα εντολών (η πιο απλά εντολές) που θα περιέχεται στο σώµα του προγράµµατος. Για να µπορέσουµε να προσδιορίσουµε τις εντολές αλλά και την σειρά µε την οποία αυτές θα γραφούν, θα πρέπει να σκεφτούµε τις ενέργειες που πρέπει να γίνουν ώστε να επιτύχουµε το τελικό αποτέλεσµα. Ενέργεια 1: το πρόγραµµα πρέπει να διαβάσει το ποσό κατάθεσης. Εποµένως θα πρέπει να χρησιµοποιήσουµε µία εντολή η οποία θα επιτρέπει στον χρήστη να δώσει το ποσό κατάθεσης. Η σύνταξη της εντολής είναι απλή και είναι η εξής: όπου: Read(όρισµα); read, είναι µια βοηθητική λέξη η οποία χρησιµοποιείται για την ανάγνωση δεδοµένων από κάποιο µέσο (πληκτρολόγιο ή αρχείο). όρισµα, είναι το όνοµα της µεταβλητής ή των µεταβλητών (η οποία πρέπει προηγουµένως να έχει δηλωθεί στο µέρος 2) για την οποία επιθυµούµε να δώσουµε τιµή. Σηµειώνεται ότι για την ανάγνωση δεδοµένων χρησιµοποιείται και η εντολή Readlnρισµα); Η διαφορά της εντολής read και της readln είναι οπτική. ηλαδή στη readln µετά την εκτέλεση της η αµέσως επόµενη εντολή εκτελείται στην αµέσως επόµενη γραµµή της οθόνης. Αντιθέτως, στη read µετά την εκτέλεση της, η εκτέλεση της αµέσως επόµενης εντολής πραγµατοποιείται στην ίδια γραµµή. Ενέργεια 2: το πρόγραµµα πρέπει να εµφανίσει το ποσό κατάθεσης. Εποµένως θα πρέπει να χρησιµοποιήσουµε µία εντολή η οποία θα επιτρέπει στο πρόγραµµα να εµφανίσει το ποσό κατάθεσης. Η σύνταξη της εντολής είναι απλή και είναι η εξής: 7

όπου: Write(όρισµα); write, είναι µια βοηθητική λέξη η οποία χρησιµοποιείται για την εµφάνιση αποτελεσµάτων στην οθόνη ενός υπολογιστή. όρισµα, είναι το όνοµα της µεταβλητής ή των µεταβλητών (η οποία πρέπει προηγουµένως να έχει δηλωθεί στο µέρος 2) της οποίας την τιµή επιθυµούµε να εµφανίσουµε. Επίσης, το όρισµα µπορεί να περιέχει µόνο µήνυµα. Τέλος, µπορεί να περιέχει συνδυασµό µηνύµατος και τιµής (βλέπε προγράµµατα παρακάτω). Οµοίως µε τη readln υπάρχει και η writeln. Λαµβάνοντας υπ όψιν την παραπάνω ανάλυση, το πρόγραµµα του παραδείγµατος 1 είναι το ακόλουθο: Program PARADEIGMA_1; Var Poso_katathesis: real; BEGIN Write( ώστε ποσό κατάθεσης: ); Read(Poso_katathesis); Write( Το ποσό κατάθεσης είναι:, Poso_katathesis) END. Παρατηρήστε την οµάδα εντολών του σώµατος του προγράµµατος. Αποτελείται από 3 εντολές οι οποίες έχουν γραφεί σε ξεχωριστές γραµµές αλλά η µία είναι αµέσως µετά την άλλη. ηλαδή οι εντολές εκτελούνται διαδοχικά. Αυτή είναι η δοµή ακολουθίας. Η ακολουθία (ή αλλιώς διαδοχή) υπάρχει ΠΑΝΤΑ σε ένα πρόγραµµα. Παράδειγµα 2: Να αναπτυχθεί πρόγραµµα σε Pascal το οποίο να διαβάζει από το πληκτρολόγιο τον αριθµό των σελίδων που αναπαράγονται κατά την εκτύπωση ενός κειµένου και στη συνέχεια να εµφανίζει τον αριθµό αυτό. Πριν γράψουµε το πρόγραµµα, θα πρέπει πρώτα να δώσουµε απαντήσεις στα ερωτήµατα 1 µέχρι 3 (βλέπε παράδειγµα 1) και στη συνέχεια βάσει των απαντήσεων να προχωρήσουµε στην ανάπτυξη του προγράµµατος. Παρατηρούµε ότι σχέση µε το προηγούµενο παράδειγµα, υπάρχουν η εξής διαφορά: η µεταβλητή εξόδου έχει διαφορετικό τύπο (και φυσικά διαφορετικό όνοµα). Πιο συγκεκριµένα, σε αυτό το παράδειγµα ο τύπος της µοναδικής µεταβλητής εισόδου (η οποία είναι και µεταβλητή εξόδου) είναι integer. Το πρόγραµµα του παραδείγµατος 2 είναι το ακόλουθο: 8

Program PARADEIGMA_2; Var Pages: real; BEGIN Write( ώστε τον αριθµό των σελίδων εκτύπωσης: ); Read(Pages); Write( Ο αριθµός των σελίδων εκτύπωσης είναι:, Pages) END. Παράδειγµα 3: Ένας ιδιώτης επισκέφτηκε ένα κατάστηµα πώλησης ειδών ηλεκτρονικού υπολογιστή και αγόρασε ένα πληκτρολόγιο, ένα ποντίκι και ένα κουτί µε δισκέτες. Να γραφεί πρόγραµµα Pascal το οποίο να δέχεται την τιµή αγοράς για κάθε ένα από τα παραπάνω είδη και στη συνέχεια να εµφανίζει το συνολικό ποσό πληρωµής που κατέβαλλε ο συγκεκριµένος ιδιώτης. (το κατάστηµα εφαρµόζει τιµολογιακή πολιτική βάσει της οποίας ο συντελεστής Φ.Π.Α. 18% περιέχεται στην τιµή αγοράς κάθε είδους) Το συγκεκριµένο παράδειγµα είναι λίγο διαφορετικό από τα 2 προηγούµενα. Εδώ η µεταβλητή εξόδου είναι δεν είναι ίδια µε τις µεταβλητές εξόδου. Πιο συγκεκριµένα: Θα χρειαστεί να δηλώσουµε 2 µεταβλητές οι οποίες θα συµβολίζουν την τιµή αγοράς κάθε είδους. Ο χρήστης του προγράµµατος θα πρέπει να πληκτρολογήσει τιµή για κάθε µία από αυτές. Επίσης θα πρέπει να δηλωθεί και µία µεταβλητή η οποία θα συµβολίζει το συνολικό ποσό πληρωµής. Ο δηµιουργός του προγράµµατος θα πρέπει να χρησιµοποιήσει εντολές (στο σώµα του προγράµµατος) οι οποίες θα υπολογίζουν και θα εµφανίζουν το συνολικό ποσό πληρωµής. Εποµένως, θα πρέπει να δηλωθούν 3 µεταβλητές όλες ως real. Εκτός όµως από την δήλωση των µεταβλητών (και την επικεφαλίδα του προγράµµατος) υπάρχει και το σώµα του προγράµµατος. Θα πρέπει να βρούµε και την οµάδα εντολών του. Η οµάδα εντολών του είναι αρκετά απλή διότι µας βοηθά πολύ η εκφώνηση του παραδείγµατος. Το πρόγραµµα θα πρέπει να διαβάσει µία µετά την άλλη την τιµή αγοράς κάθε είδους, στην συνέχεια να υπολογίσει το συνολικό ποσό πληρωµής και τέλος να εµφανίσει αυτό. Το πρόγραµµα του παραδείγµατος 3 είναι το ακόλουθο: Program PARADEIGMA_3 ; Var ΤΙΜΗ1, ΤΙΜΗ2, ΤΙΜΗ3, S: real; BEGIN Write( ώστε τιµή αγοράς πληκτρολογίου: ); Readln(TIMH1); Write( ώστε τιµή αγοράς ποντικιού: ); Readln(TIMH2); Write( ώστε τιµή αγοράς κουτιού µε δισκέτες: ); Readln(TIMH3); S := TIMH1 + TIMH2 + TIMH3; Write( Το ποσό πληρωµής είναι:, S) END. Όπου: 9

ΤΙΜΗ1, είναι η τιµή αγοράς του πληκτρολογίου, ΤΙΜΗ2, είναι η τιµή αγοράς του ποντικιού, ΤΙΜΗ3, είµαι η τιµή αγοράς του κουτιού µε τις δισκέτες, S, είναι το συνολικό ποσό πληρωµής, :=, είναι ένα ειδικό σύµβολο το οποίο χρησιµοποιείται για την εκχώρηση τιµών σε µεταβλητές. Όταν χρησιµοποιείται το σύµβολο εκχώρησηςτιµής στα αριστερά του βρίσκεται πάντα η µεταβλητή ενώ στα δεξιά του βρίσκεται πάντα η τιµή που της εκχωρείται. Η παραπάνω πρόταση συνοψίζεται στο εξής: Όνοµα_µεταβλητής := τιµή_που_εκχωρείται Πρέπει να υπογραµµίσουµε το γεγονός ότι στο συγκεκριµένο παράδειγµα, το κατάστηµα ενσωµάτωνε τον Φ.Π.Α. στην τιµή αγοράς. Εάν όµως στην τιµή αγοράς δεν ήταν ενσωµατωµένος ο Φ.Π.Α., τότε αυτός θα έπρεπε να συνυπολογιστεί στο τελικό ποσό πληρωµής. Η περίπτωση αυτή εµφανίζεται στο παράδειγµα 4. Παράδειγµα 4: Ένας ιδιώτης επισκέφτηκε ένα κατάστηµα πώλησης ειδών ηλεκτρονικού υπολογιστή και αγόρασε ένα πληκτρολόγιο, ένα ποντίκι και ένα κουτί µε δισκέτες. Να γραφεί πρόγραµµα Pascal το οποίο να διαβάζει την τιµή αγοράς για κάθε ένα από τα παραπάνω είδη και στη συνέχεια να εµφανίζει το συνολικό ποσό πληρωµής που κατέβαλλε ο συγκεκριµένος ιδιώτης. (να ληφθεί υπόψη ότι κάθε είδος επιβαρύνεται µε συντελεστή Φ.Π.Α. 18%) Στο συγκεκριµένο παράδειγµα στην τελική τιµή της S θα πρέπει να συνυπολογιστεί και η επιβάρυνση 18%. Το πρόγραµµα του παραδείγµατος 4 είναι το ακόλουθο: Program PARADEIGMA_4 ; Var ΤΙΜΗ1, ΤΙΜΗ2, ΤΙΜΗ3, S: real; BEGIN Write( ώστε τιµή αγοράς πληκτρολογίου: ); Readln(TIMH1); Write( ώστε τιµή αγοράς ποντικιού: ); Readln(TIMH2); Write( ώστε τιµή αγοράς κουτιού µε δισκέτες: ); Readln(TIMH3); S := (TIMH1 + TIMH2 + TIMH3) + 0.18 * (ΤΙΜΗ1 + ΤΙΜΗ2 + ΤΙΜΗ3); Write( Το ποσό πληρωµής είναι:, S) END. Όπου: *, είναι ένας τελεστής (operator) ο οποίος χρησιµοποιείται ως σύµβολο του πολλαπλασιασµού. 0.18, είναι ο Φ.Π.Α. 18%. 10

Προσέξτε ότι δεν γράφηκε ως 0,18 διότι στο προγραµµατιστικό περιβάλλον (αλλά και γενικότερα στους αριθµητικούς υπολογισµούς που πραγµατοποιούνται σε υπολογιστικά συστήµατα) της Pascal η τελεία είναι αντίστοιχη της υποδιαστολής, ενώ το κόµµα χρησιµοποιείται για τον διαχωρισµό χιλιάδων. Παράδειγµα 5: Ένας ιδιώτης επισκέφτηκε ένα κατάστηµα πώλησης ειδών ηλεκτρονικού υπολογιστή και αφού ενηµερώθηκε για τις τιµές αγοράς κάποιων ειδών, αποφάσισε να αγοράσει ένα πληκτρολόγιο, ένα ποντίκι και ένα κουτί µε δισκέτες. Εάν γνωρίζετε ότι στην τιµή αγοράς κάθε είδους που πουλά το συγκεκριµένο κατάστηµα δεν συµπεριλαµβάνεται Φ.Π.Α. 18%, να γραφεί πρόγραµµα Pascal το οποίο: 1. να διαβάζει την τιµή αγοράς για κάθε ένα από τα παραπάνω είδη. 2. να υπολογίζει και να εµφανίζει την συνολική επιβάρυνση λόγω Φ.Π.Α του συνολικού ποσού πληρωµής. 3. να υπολογίζει και να εµφανίζει το συνολικό ποσό πληρωµής που θα καταβάλλει ο ιδιώτης. Σε όρους προγραµµατισµού έχουµε ότι: ο χρήστης του προγράµµατος θα πρέπει να πληκτρολογήσει τιµή για 3 µεταβλητές, οι οποίες συµβολίζουν τις τιµές αγοράς των 3 ειδών (έστω ΤΙΜΗ1, ΤΙΜΗ2, ΤΙΜΗ3). Ο δηµιουργός του προγράµµατος θα πρέπει να µεριµνήσει ώστε στο σώµα του προγράµµατος να υπάρχουν εντολές υπολογισµού και εµφάνισης της συνολικής επιβάρυνσης και του συνολικού ποσού πληρωµής. Θα πρέπει να δηλωθούν 5 µεταβλητές (3 για τις τιµές, 1 για την συνολική επιβάρυνση και 1 για το συνολικό ποσό πληρωµής). Όλες οι µεταβλητές θα είναι αριθµητικές (δηλαδή οι τιµές τους θα είναι αριθµοί) και όλες θα δηλωθούν ως real. Το πρόγραµµα του παραδείγµατος 5 είναι το ακόλουθο: Program PARADEIGMA_5 ; Var ΤΙΜΗ1, ΤΙΜΗ2, ΤΙΜΗ3, S, Ε: real; BEGIN Write( ώστε τιµή αγοράς πληκτρολογίου: ); Readln(TIMH1); Write( ώστε τιµή αγοράς ποντικιού: ); Readln(TIMH2); Write( ώστε τιµή αγοράς κουτιού µε δισκέτες: ); Readln(TIMH3); S := ΤΙΜΗ1 + ΤΙΜΗ2 + ΤΙΜΗ3 ; Ε:= S * 0.18 Writeln( Η επιβάρυνση είναι:, Ε); S := S + Ε ; Write( Το συνολικό ποσό πληρωµής είναι:, S) END. Αφού διαβαστούν οι τιµές και των τριών ειδών, υπολογίζεται το άθροισµα των τιµών οι οποίες όµως δεν έχουν ακόµη επιβαρυνθεί µε τον Φ.Π.Α. (βλέπε εντολή S := TIMH1 + TIMH2 + TIMH3). Στη συνέχεια υπολογίζεται η επιβάρυνση και συνυπολογίζεται στην αµέσως προηγούµενη τιµή της S (βλέπε S := S + Ε). 11

Παράδειγµα 6: Nα γραφεί πρόγραµµα Pascal το οποίο: 1. να διαβάζει από το πληκτρολόγιο 3 ακέραιους αριθµούς. 2. να υπολογίζει και να εµφανίζει τον µέσο όρο τους. Program PARADEIGMA_6; Var Ν1, Ν2, Ν3, S: integer; ΜΟ: real; BEGIN Write( ώστε τον 1ο ακέραιο αριθµό: ); Readln(Ν1); Write( ώστε τον 2ο ακέραιο αριθµό: ); Readln(Ν2); Write( ώστε τον 3ο ακέραιο αριθµό: ); Readln(Ν3); S := Ν1 + Ν2 + Ν3 ΜΟ := S/3 ; Write( Ο µέσος όρος είναι:, MO); END. Μετά την σύντοµη παρουσίαση της δοµής ακολουθίας αλλά και βασικών απλών εντολών που χρησιµοποιούνται στο σώµα ενός προγράµµατος, θα προχωρήσουµε στην σύντοµη παρουσίαση της δοµής επιλογής και των περιπτώσεων της. Η παρουσίαση και αυτής της δοµής θα γίνει µε χρήση παραδειγµάτων και µε σχολιασµό αυτών των παραδειγµάτων. 12

Β. Επιλογή (Selection) Η δοµή της επιλογής χρησιµοποιείται όταν σε ένα πρόβληµα θα πρέπει να αποφασιστεί ποια θα είναι η επόµενη ενέργεια που θα κάνουµε. Η απόφαση αυτή λαµβάνεται βασιζόµενη σε κάποια συνθήκη. ιακρίνουµε τις ακόλουθες 3 περιπτώσεις επιλογής: οµή Απλής Επιλογής (Single If) If Συνθήκη then begin Οµάδα_Εντολών_της_If ; end Αν ισχύει η Συνθήκη, δηλαδή είναι αληθής (true), τότε εκτελείται η οµάδα εντολών της δοµής. Μετά το πέρας της εκτέλεσης της οµάδας εντολών, η δοµή τερµατίζεται και ο έλεγχος του προγράµµατος µεταβαίνει στις εντολές που υπάρχουν µετά τη δοµή. Αν δεν ισχύει η Συνθήκη, δηλαδή είναι ψευδής (false), τότε δεν εκτελείται η οµάδα εντολών της δοµής και ο έλεγχος του προγράµµατος µεταβαίνει στις εντολές που υπάρχουν µετά τη δοµή. Σηµειώνεται ότι όταν η Οµάδα_Εντολών περιλαµβάνει µία µόνο εντολή, τότε η δοµή απλής επιλογής µπορεί να γραφεί ως εξής: If Συνθήκη then Εντολή, δηλαδή µπορεί να γραφεί χωρίς τη χρήση των δεσµευµένων λέξεων begin και end. Παράδειγµα 7: Να γραφεί πρόγραµµα Pascal το οποίο να διαβάζει από το πληκτρολόγιο έναν πραγµατικό αριθµό και στη συνέχεια να εµφανίζει το µήνυµα µεγαλύτερος του 10 αν ο αριθµός είναι µεγαλύτερος του 10. Στο συγκεκριµένο παράδειγµα το τελικό αποτέλεσµα του προγράµµατος δεν είναι γνωστό. ηλαδή υπάρχει περίπτωση ο αριθµός να µην είναι µεγαλύτερος του 10. Στην περίπτωση αυτή ο αλγόριθµος θα πρέπει να τερµατίζεται. Αν όµως είναι µεγαλύτερος του 10, τότε θα πρέπει να εµφανίζεται ένα συγκεκριµένο µήνυµα στην οθόνη. Είναι λοιπόν προφανές ότι πρέπει να χρησιµοποιηθεί η δοµή απλής επιλογής. Program PARADEIGMA_7; Var A: real ; Μ: char ; BEGIN Write( ώστε έναν πραγµατικό αριθµό: ); Readln(Α); If Α > 10 then Μ := Μεγαλύτερος του 10 ; Write(Μ); END. Παρατηρήστε ότι δηλώθηκε µία µεταβλητή µε το όνοµα Μ. Η µεταβλητή αυτή δηλώθηκε ως char, δηλαδή η τιµή της θα είναι µία ακολουθία χαρακτήρων (στην συγκεκριµένη περίπτωση µια φράση) και ΟΧΙ αριθµητική τιµή. 13

Όταν εκχωρούµε τιµές σε αλφαριθµητικές µεταβλητές, γράφουµε την τιµή εντός εισαγωγικών για να δείξουµε ότι η τιµή που εκχωρείται είναι µια συµβολοσειρά και ΟΧΙ κάποιος συγκεκριµένος αριθµός. Αν η συνθήκη είναι αληθής, τότε εκτελείται η οµάδα εντολών της δοµής. ηλαδή εκχωρείται συγκεκριµένη τιµή στην µεταβλητή Μ και στη συνέχεια εκτελείται η εντολή εµφάνισης της τιµής της µεταβλητής Μ. Μόλις εµφανιστεί η τιµή, ο έλεγχος του προγράµµατος µεταφέρεται στην αµέσως επόµενη γραµµή µετά τη λέξη end, όπου υπάρχει η λέξη END., δηλαδή µε απλά λόγια, το πρόγραµµα τερµατίζεται. Σηµειώνεται ότι το πρόγραµµα που παρουσιάστηκε στις προηγούµενες παραγράφους δεν είναι και το µοναδικό. ηλαδή, υπάρχει και απλούστερος τρόπος ο οποίος είναι ο ακόλουθος: Program PARADEIGMA_7b; Var A: real ; BEGIN Write( ώστε έναν πραγµατικό αριθµό: ); Readln(Α); If Α > 10 then write( Μεγαλύτερος του 10 ) END. οµή Σύνθετης Επιλογής (Complex if) If Συνθήκη then Οµάδα_Εντολών1_της_If ; Else Οµάδα_Εντολών2_της_If; Αν ισχύει η συνθήκη (δηλαδή είναι αληθής), τότε εκτελείται µόνο η Οµάδα_Εντολών1 της δοµής και στη συνέχεια η δοµή τερµατίζεται. Αν δεν ισχύει η συνθήκη (δηλαδή είναι ψευδής), τότε εκτελείται µόνο η Οµάδα_Εντολών2 της δοµής και στη συνέχεια η δοµή τερµατίζεται. Παράδειγµα 8: Να γραφεί πρόγραµµα το οποίο να διαβάζει από το πληκτρολόγιο έναν πραγµατικό αριθµό και στη συνέχεια να εµφανίζει το µήνυµα µεγαλύτερος του 10 αν ο αριθµός είναι µεγαλύτερος του 10 διαφορετικά να εµφανίζει το µήνυµα µικρότερος/ίσος του 10. 14

Program PARADEIGMA_8; Var Α:real; BEGIN Write( ώστε έναν πραγµατικό αριθµό: ); Readln(Α); If Α > 10 then Writeln( µεγαλύτερος του 10 ); Else Writeln( µικρότερος/ίσος του 10 ); END. οµή Εµφωλευµένης Επιλογής (Nested If) If Συνθήκη1 then Οµάδα_Εντολών1; Else If Συνθήκη2 then Οµάδα_Εντολών2; Else If Συνθήκη3 then Οµάδα_Εντολών3; Else Οµάδα εντολώνn; Αν ισχύει η Συνθήκη1 (δηλαδή είναι αληθής), τότε εκτελείται µόνο η Οµάδα_Εντολών1 της δοµής και στη συνέχεια ο έλεγχος του προγράµµατος µεταφέρεται στην αµέσως επόµενη γραµµή µετά το τελευταίο (δηλαδή η δοµή τερµατίζεται). Αν δεν ισχύει η Συνθήκη1 (δηλαδή είναι ψευδής), τότε ο το πρόγραµµα ελέγχει αν η Συνθήκη2 είναι αληθής. Αν η Συνθήκη2 είναι αληθής, τότε εκτελείται η Οµάδα_Εντολών2 της δοµής και στη συνέχεια ο έλεγχος του προγράµµατος µεταφέρεται στην αµέσως επόµενη γραµµή µετά το τελευταίο (δηλαδή η δοµή τερµατίζεται). Σε περίπτωση όπου δεν ισχύει καµία από τις Συνθήκες αυτές, το πρόγραµµα εκτελεί την Οµάδα_ΕντολώνΝ (δηλαδή την τελευταία οµάδα) και στη συνέχεια ο έλεγχος του προγράµµατος µεταφέρεται στην αµέσως επόµενη γραµµή µετά το τελευταίο (δηλαδή η δοµή τερµατίζεται). 15

Η χρήση αυτής της δοµής συνίσταται σε προβλήµατα όπου υπάρχουν διάφορες συνθήκες που αφορούν την τιµή µιας µεταβλητής η ικανοποίηση των οποίων έχει ως αποτέλεσµα την εκτέλεση διαφορετικών οµάδων εντολών Παράδειγµα 9: Οι υπάλληλοι µιας εταιρείας συµφώνησαν για το µήνα Απρίλιο να κρατηθούν από το µισθό τους δυο ποσά, ένα για την ενίσχυση του µη κερδοσκοπικού Σωµατείου «ΧΧΧ» και ένα για την ενίσχυση των σκοπών του µη κερδοσκοπικού Σωµατείου «ΥΥΥ». Ο υπολογισµός του ποσού των εισφορών εξαρτάται από τον αρχικό µισθό του κάθε υπαλλήλου και υπολογίζεται µε βάση τα παρακάτω όρια µισθών: Μισθός (σε ) Εισφορά1 Εισφορά2 Μέχρι 440 5% 4% 441-734 7,5% 6% 735-1174 9,5% 8% > 1174 12% 11% Να γραφεί πρόγραµµα Pascal που να δέχεται ως είσοδο το µισθό ενός τυχαίου υπαλλήλου και στη συνέχεια να υπολογίζει και να εµφανίζει το ποσό των δυο εισφορών καθώς και το καθαρό ποσό που θα πάρει ο υπάλληλος. Σε αυτό το πρόβληµα θα χρησιµοποιηθεί η δοµή εµφωλευµένης επιλογής If.. Else If Else.. Πιο συγκεκριµένα: Στο ανωτέρω πρόβληµα, η µεταβλητή που εξετάζεται είναι η Μ. Ανάλογα µε την τιµή που αυτή λαµβάνει ισχύουν και διαφορετικές συνθήκες. Στη πραγµατικότητα στην στήλη µε τη επικεφαλίδα "µισθός" περιέχονται 4 διαστήµατα τιµών (4 µισθολογικές κλίµακες). Ανάλογα µε την µισθολογική κλίµακα του εργαζοµένου υπάρχει και αντίστοιχος συντελεστής για κάθε ποσό εισφοράς. Για την αποφυγή υπολογισµού λανθασµένου ποσού εισφοράς και κατ επέκταση καθαρού µισθού, οι συνθήκες που χρησιµοποιούνται στο παρακάτω πρόγραµµα είναι (ουσιαστικά) τα διαστήµατα τιµών της µεταβλητής Μ. Το διάστηµα τιµών [441, 734) ορίζεται ενοποιώντας τις εξής δυο συνθήκες: If Μ > 150,000, If Μ < 250,000. Η ενοποίηση αυτή συντελείται χρησιµοποιώντας τον τελεστή (operator) and. Γενικά, στον προγραµµατισµό η ενοποίηση συνθηκών ονοµάζεται σύζευξη. Αξίζει να σηµειωθεί ότι η λέξη and, όπου αυτή χρησιµοποιήθηκε, αφέθηκε σκόπιµα έντονα τονισµένη (bold) για να υποδείξει την ύπαρξη σύζευξης λογικών συνθηκών (περί λογικών συνθηκών, βλέπε υποενότητα Λογικές Συνθήκες ). 16

Program PARADEIGMA_9; Var ΚΜ, Μ, Ε1, Ε2: real; BEGIN Write( ώστε τον µισθό του υπαλλήλου: ); Readln(Μ); If (Μ > 0) and (Μ < 440) then Ε1 := (5 * Μ)/100; Ε2 := (4 * Μ)/100; Else If (Μ >= 441) and (Μ < 734) then Ε1 := (7.5 * Μ)/100; Ε2 := (6 * Μ)/100; Else If (Μ >= 735) and (Μ <= 1174) then Ε1 := (9.5 * Μ)/100; Ε2 := (8 * Μ)/100; Else Ε := (12 * Μ)/100; Ε := (11 * Μ)/100; Writeln( Η εισφορά για το Σωµατείο ΧΧΧ είναι:, Ε1); Writeln( Η εισφορά για το Σωµατείο είναι:, Ε2); ΚΜ := Μ (Ε1 + Ε2); Writeln( Ο καθαρός µισθός είναι:, ΚΜ); END. Προτού συνεχίσουµε µε την αλγοριθµική δοµή της επανάληψης, θα πραγµατοποιηθεί µια σύντοµη και περιεκτική αναφορά σε ορισµένους όρους η γνώση των οποίων είναι απαραίτητη κατά την ανάπτυξη προγραµµάτων. 17

Λογικές Εκφράσεις Με τον όρο λογική έκφραση, ονοµάζεται κάθε έκφραση η οποία: 1. χρησιµοποιεί έναν ή/και περισσότερους από τους ακόλουθους τελεστές: και, ή, όχι (λογικοί τελεστές), =, >, >=, <, <=, <> (αριθµητικοί τελεστές). 2. το αποτέλεσµα της είναι: YES, NO, TRUE, FALSE. Έστω ότι έχουµε τα ακόλουθο τµήµα προγράµµατος Pascal: Α := 5; If Α > 0 then Β := 2 * Α; Write(Β); Θα εµφανισθεί ο αριθµός 10 (= 2 * 5) διότι η συνθήκη Α > 0 είναι TRUE. ηλαδή ΙΣΧΥΕΙ. Παρατηρήστε ότι το αποτέλεσµα της συνθήκης ΕΝ ήταν κάποιος αριθµός. Έστω ότι δίνεται ένα άλλο τµήµα προγράµµατος Pascal: Α := 5; C := (-1) * 2; If (Α > 0) and C <= -4) then Β := 2 * Α; Else Β := 2 * (-Α); Writeln(Β); Θα εµφανισθεί ο αριθµός 10 διότι συνθήκη Α > 0 and C <= -4 (εδώ έχουµε σύζευξη συνθηκών) είναι FALSE. ηλαδή ΕΝ ΙΣΧΥΕΙ. Πιο συγκεκριµένα, η µεταβλητή Α (δηλαδή ο αριθµός 5) είναι µεγαλύτερος του µηδενός. Εποµένως, το ένα µέρος της σύζευξης δίνει το αποτέλεσµα TRUE. Όµως η µεταβλητή C (δηλαδή ο αριθµός 2) δεν είναι µικρότερος του 4. Εποµένως, το άλλο µέρος της σύζευξης δίνει το αποτέλεσµα FALSE. Είναι προφανές ότι το αποτέλεσµα της λογικής πράξης (TRUE) and (FALSE) είναι FALSE. Ακολουθεί ο παρακάτω πίνακας που αφορά τις λογικές συνθήκες: Πίνακας Λογικών Συνθηκών Συνθήκη Σύζευξη ιάζευξη Άρνηση Α Β (Α and Β) (Α or Β) (not Α) False False False False True True False True False True True False True False False True False True True True True True False False Συνθήκη Α Άρνηση Β (not Β) Ο επόµενος πίνακας περιέχει τους τελεστές που χρησιµοποιούνται (εκτός από τις λογικές εκφράσεις) σε αριθµητικές εκφράσεις. 18

Σ Υ Μ Β Ο Λ Α Τ Ε Λ Ε Σ Τ Ω Ν ΣΗΜΑΣΙΑ ΤΕΛΕΣΤΗ ΧΡΗΣΙΜΟΠΟΙΟΥΜΕΝΟ ΣΥΜΒΟΛΟ Στην Άλγεβρα Στην PASCAL Πρόσθεση + + Αφαίρεση - - Πολλαπλασιασµός x * ιαίρεση : ή / / Μικρότερο < < Μικρότερο ή Ίσο <= Μεγαλύτερο > > Μεγαλύτερο ή Ίσο >= ιάφορο <> Οι έτοιµες συναρτήσεις div και mod Είναι γνωστό (βλέπε πρώτες τάξεις του ηµοτικού!!!!) ότι στη διαίρεση ακεραίων ισχύουν τα ακόλουθα: Υ δ Π Όπου: = διαιρετέος δ = διαιρέτης Π = πηλίκο της διαίρεσης Υ = υπόλοιπο της διαίρεσης Επιπλέον για κάθε Π, Υ θα πρέπει να ισχύει ότι: Πδ + Υ = Για παράδειγµα, η διαίρεση 5:2 δίνει ως πηλίκο τον αριθµό 2 (διότι 2 * 2 = 4) και ως υπόλοιπο τον αριθµό 1 (διότι 5 4 = 1). Η συνάρτηση mod δίνει το υπόλοιπο της διαίρεσης της τιµής κάποιας ακέραιης µεταβλητής (ή κάποιου ακέραιου αριθµού) µε κάποια ακέραια µεταβλητή (ή µε κάποιο ακέραιο αριθµό). Η συνάρτηση div δίνει το πηλίκο της διαίρεσης της τιµής κάποιας ακέραιης µεταβλητής (ή κάποιου ακέραιου αριθµού) µε κάποια ακέραια µεταβλητή (ή µε κάποιον ακέραιο αριθµό). Πιο παραστατικά έχουµε ότι: Π div δ Y mod δ Και ισχύει ότι: = ( div δ) * δ + ( mod δ) 19

Γ. Επανάληψη (Iteration) Η τρίτη βασική αλγοριθµική δοµή είναι η επανάληψη. Αυτή χρησιµοποιείται στο µεγαλύτερο µέρος των προβληµάτων του δοµηµένου προγραµµατισµού. ιακρίνεται µε µια από τις ακόλουθες µορφές: Γ1. Η οµή Επανάληψης For to do Χρησιµοποιείται όταν το πλήθος των επαναλήψεων είναι εκ των προτέρων γνωστό. Συντάσσεται ως εξής: For µτ := ατ to ττ do Οµάδα_Εντολών_της_For; Όπου: µτ είναι το όνοµα του µετρητή (δηλώνεται ως µεταβλητή). ατ είναι η αρχική τιµή του µετρητή. ττ είναι η τελική τιµή του µετρητή. Η δοµή επανάληψης For to do συναντάται σε ένα µεγάλο εύρος δοµηµένων προβληµάτων και η χρήση της είναι απαραίτητη σε προβλήµατα που απαιτούν χρήση πινάκων (περί πινάκων βλέπε επόµενες ενότητες σηµειώσεων). Επιπλέον η δοµή for µπορεί να συνταχθεί και ως εξής: For µτ := ττ downto ατ do Οµάδα_Εντολών_της_For; Όπου: µτ είναι το όνοµα του µετρητή (δηλώνεται ως µεταβλητή). ατ είναι η αρχική τιµή του µετρητή. ττ είναι η τελική τιµή του µετρητή. Και για τις 2 συντάξεις το βήµα µεταβολής του µετρητή είναι ίσο µε 1. Ο τρόπος µε τον οποίο λειτουργεί η συγκεκριµένη δοµή αλλά και η αναγκαιότητα χρήσης της κατά την ανάπτυξη δοµηµένων προγραµµάτων παρουσιάζεται στα επόµενα παραδείγµατα. 20

Παράδειγµα 10: Να γραφεί πρόγραµµα σε Pascal το οποίο να διαβάζει από το πληκτρολόγιο 10 πραγµατικούς αριθµούς και στη συνέχεια να τους εµφανίζει στην οθόνη. Όπως έχει ήδη αναφερθεί, κάθε πρόγραµµα αποτελείται από 3 µέρη (επικεφαλίδα, δήλωση µεταβλητών και κυρίως σώµα). Η επικεφαλίδα είναι το πιο απλό και συνάµα το πιο εύκολο τµήµα του (δεν πρέπει όµως να ξεχνάµε τους κανόνες ονοµατολογίας που ισχύουν για αυτήν), έτσι θα προχωρήσουµε την ανάλυση µας στα άλλα 2 µέρη. Εάν υποθέσουµε ότι αγνοούµε την ύπαρξη της δοµής επανάληψης, τότε για την ανάπτυξη του συγκεκριµένου προγράµµατος, θα πρέπει να δηλώσουµε 10 πραγµατικές µεταβλητές κάθε µία από τις οποίες θα συµβολίζει και από έναν πραγµατικό αριθµό. Σκεφτείτε όµως τώρα την περίπτωση να επιχειρήσουµε να αναπτύξουµε ένα πρόγραµµα για την ανάγνωση και εµφάνιση 100 πραγµατικών αριθµών (!). Αυτό θα σήµαινε ότι εµείς θα έπρεπε να δηλώσουµε 100 µεταβλητές τύπου real (!!!). Από την προηγούµενη παράγραφο γίνεται εύκολα κατανοητό ότι η χρήση µόνο της δοµής ακολουθίας δεν είναι δυνατή. Θα πρέπει λοιπόν να χρησιµοποιηθεί κάποια άλλη δοµή η οποία θα µας επιτρέψει να αναπτύξουµε ένα πρόγραµµα ο κώδικας του οποίου θα περιέχει λιγότερες γραµµές. Η δοµή που θα χρησιµοποιήσουµε θα είναι η δοµή επανάληψης for διότι το πλήθος των επαναλήψεων είναι εκ των προτέρων γνωστό. Πιο συγκεκριµένα: Το πρόγραµµα θα πρέπει να διαβάζει και να εµφανίζει 10 πραγµατικούς αριθµούς. Οι ενέργειες στις οποίες πρέπει να προβούµε είναι συγκεκριµένες και παραµένουν κάθε φορά ίδιες. ηλαδή πρώτα θα δίνει ο χρήστης του προγράµµατος έναν πραγµατικό αριθµό και στη συνέχεια αυτό θα πρέπει να τον εµφανίζει. Μόλις τελειώσει η εµφάνιση του πρώτου πραγµατικού αριθµού, ο χρήστης θα πρέπει να δώσει πάλι έναν πραγµατικό αριθµό και στη συνέχεια το πρόγραµµα θα πρέπει να τον εµφανίσει στην οθόνη. Οι ενέργειες αυτές παύουν µε την εµφάνιση του δέκατου (και τελευταίου) πραγµατικού αριθµού. Αντί λοιπόν να δηλώσουµε 10 πραγµατικές µεταβλητές, µπορούµε να δηλώσουµε µία µόνο µεταβλητή, η οποία µε την βοήθεια κατάλληλων εντολών (στο σώµα του προγράµµατος), θα λάβει 10 πραγµατικές τιµές. Program PARADEIGMA_10; Var Ι: integer; Α: real; BEGIN For Ι:=1 to 10 do Write( ώστε τον, Ι, ο πραγµατικό αριθµό: ); Readln(Α); Writeln( Ο, I, ος αριθµός ήταν ο:, Α) END. Παρατηρήστε ότι στο τµήµα δήλωσης µεταβλητών του παραπάνω προγράµµατος υπάρχει (ως βοηθητική) η µεταβλητή Ι. Η συγκεκριµένη µεταβλητή είναι ο µετρητής ο οποίος λαµβάνει ως αρχική τιµή το 1 και τελική τιµή το 10 µε βήµα µεταβολής των τιµών του το 1. ηλαδή όταν ο µετρητής Ι λάβει την τιµή 1, θα εκτελεστεί η Οµάδα_Εντολών της δοµής. ηλαδή, το πρόγραµµα θα διαβάσει (για πρώτη φορά) την µεταβλητή Α και στη συνέχεια θα εµφανίσει την τιµή της στην οθόνη. 21

Στη συνέχεια ο µετρητής Ι θα αλλάξει τιµή και θα λάβει την τιµή 1 + 1 = 2. Το πρόγραµµα θα ελέγχει ότι η τρέχουσα τιµή του µετρητή Ι είναι µικρότερη της τελικής τιµής και έτσι επιτρέπει την εκτέλεση της οµάδας εντολών της δοµής. ηλαδή ο χρήστης του προγράµµατος (για δεύτερη φορά) θα δώσει τιµή στην µεταβλητή Α και στη συνέχεια το πρόγραµµα θα εµφανίσει αυτή την τιµή στην οθόνη. Η ανωτέρω διαδικασία συνεχίζεται µέχρι ο µετρητής Ι λάβει και την τιµή 10. Μετά την εκτέλεση της οµάδας εντολών, η δοµή for τερµατίζεται. Παράδειγµα 11: Να γραφεί πρόγραµµα Pascal το οποίο να διαβάζει από το πληκτρολόγιο τον χρόνο προσπέλασης για 11 διαφορετικές µάρκες οδηγών CD-ROM και στη συνέχεια να υπολογίζει και να εµφανίζει το µέσο όρο των χρόνων προσπέλασης τους. Program PARADEIGMA_11; Var X, ΜΟ, S: real; Ι: integer; BEGIN S:= 0; For Ι:= 1 to 11 do Write( ώστε χρόνο προσπέλασης του, Ι, ου CD-ROM: ); Readln(X); S:= S + Χ; ΜΟ:= S / 11 ; Writeln( Ο µέσος χρόνος προσπέλασης είναι:, ΜΟ) END. Π Α Ρ Α Τ Η Ρ Η Σ Ε Ι Σ Η εκφώνηση του παραδείγµατος ζητά την εύρεση και εµφάνιση του µέσου όρου των χρόνων προσπέλασης 11 συσκευών CD-ROM. Εποµένως τα αποτελέσµατα του προβλήµατος θα περιέχουν µια και µόνο µεταβλητή. Όµως για να µπορέσουµε να υπολογίσουµε και να εµφανίσουµε το ζητούµενο θα πρέπει να έχουν προηγηθεί οι εξής ενέργειες: 1. Ανάγνωση των χρόνων προσπέλασης και των 11 συσκευών. 2. Υπολογισµός του συνολικού χρόνου προσπέλασης των συγκεκριµένων συσκευών. 3. Υπολογισµός του µέσου χρόνου προσπέλασης των συγκεκριµένων συσκευών. 4. Εµφάνιση του µέσου χρόνου προσπέλασης των συγκεκριµένων συσκευών. Η ενέργεια 2 περιέχει απλώς τον υπολογισµό ενός αθροίσµατος το οποίο αποτελείται από 11 όρους (11 χρόνοι προσπέλασης). Σε αυτό το παράδειγµα, µια εκ των βοηθητικών µεταβλητών θα είναι και ο αθροιστής. Η ενέργεια 3 είναι απλώς το πηλίκο µιας διαίρεσης: συνολικός χρόνος προσπέλασης / πλήθος συσκευών. Σηµειώνεται ότι το άθροισµα (µεταβλητή S) αποτελεί βοηθητική µεταβλητή, δηλαδή ο υπολογισµός της τιµής της είναι απαραίτητος για να φτάσουµε στο τελικό αποτέλεσµα. Η µεταβλητή S αρχικοποιείται, δηλαδή εκχωρείται σε αυτήν η τιµή µηδέν (βλέπε εντολή S:= 0). Αυτό συµβαίνει διότι µέχρι ο αλγόριθµος να διαβάσει τον χρόνο προσπέλασης της 1ης συσκευής ο συνολικός χρόνος προσπέλασης είναι ίσος µε το µηδέν. 22

Γενικά, µε τον όρο αρχικοποίηση (initialization) µεταβλητής εννοούµε ότι για αυτή την µεταβλητή αναµένουµε να αλλάξει τουλάχιστον µια φορά τιµή κατά την διάρκεια εκτέλεσης ενός αλγορίθµου. ηλαδή αναµένουµε ότι η µεταβλητή αυτή θα λάβει µια τιµή πέρατος η οποία θα είναι διαφορετική από την τιµή έναρξης. Μια µεταβλητή χρειάζεται να αρχικοποιηθεί όταν ισχύει µία ή/ και περισσότερες από τις ακόλουθες περιπτώσεις: η τελική τιµή της θα προέλθει από γνωστό ή άγνωστο πλήθος επαναλήψεων χρησιµοποιώντας µια εντολή εκχώρησης (χρήση του συµβόλου := ). Η τελική τιµή της θα προέλθει από γνωστό ή άγνωστο πλήθος επαναλήψεων µε τη βοήθεια ενός τύπου ο οποίος θα έχει γραφεί κατά τρόπο τέτοιο ώστε να "θυµάται" την αµέσως προηγούµενη τιµή της µεταβλητής. Αξίζει να σηµειωθεί ότι για λόγους διευκόλυνσης του προγραµµατιστή συνίσταται η αρχικοποίηση των µεταβλητών να γίνεται στην αµέσως επόµενη γραµµή µετά την λέξη αρχή, δηλαδή στην πρώτη γραµµή του σώµατος του προγράµµατος (δεν ισχύει για όλα τα προβλήµατα δοµηµένου προγραµµατισµού). Έτσι µειώνονται οι πιθανότητες εξαγωγής λανθασµένης τιµής για κάποια από τις µεταβλητές που αρχικοποιούνται. Μετά την αρχικοποίηση της µεταβλητής S, πρέπει να αποφασιστεί εάν θα χρειαστεί να χρησιµοποιηθεί κάποια δοµή επανάληψης ή επιλογής (διότι ακολουθία πάντα υπάρχει σε ένα πρόγραµµα) µέσα από την οποία θα υπολογίζονται οι τιµές βοηθητικών ή/ και κύριων µεταβλητών του προγράµµατος. Στο συγκεκριµένο παράδειγµα επειδή το πλήθος των επαναλήψεων είναι εκ των προτέρων γνωστό, θα χρησιµοποιηθεί η δοµή επανάληψης για από µέχρι, δηλαδή γνωρίζουµε πόσες φορές θα εκτελεστεί η οµάδα εντολών της συγκεκριµένης δοµής. Η οµάδα εντολών της δοµής περιλαµβάνει τα εξής: Εντολή για την εµφάνιση ενός µηνύµατος το οποίο ενηµερώνει τον χρήστη ότι καλείται να δώσει τιµή για κάποιο µέγεθος (εδώ για τον χρόνο προσπέλασης), Εντολή για την ανάγνωση των χρόνων προσπέλασης των 11 οδηγών CD-ROM. Με την χρήση αυτής της εντολής επιτρέπουµε στο χρήστη να δώσει τιµές από το πληκτρολόγιο (αφού προηγουµένως γνωρίζει ότι θα πρέπει να δώσει χρόνους προσπέλασης, Εντολή για τον υπολογισµό του συνολικού χρόνου προσπέλασης. Παρατηρούµε ότι για τον υπολογισµό της τελικής τιµής της S θα πρέπει στην αµέσως προηγούµενη τιµή της S να προστίθεται η τιµή της µεταβλητής Χ (αναµένουµε διαφορετική τιµή ανά συσκευή). ηλαδή κάθε µία από τις 11 τιµές της µεταβλητής Χ συνυπολογίζεται στον τύπο υπολογισµού της S. Όπως έχει ήδη αναφερθεί σε προηγούµενη παράγραφο, ο υπολογισµός της τελικής τιµής της S είναι ουσιαστικά ο υπολογισµός ενός αθροίσµατος 11 όρων. ηλαδή είναι απλός υπολογισµός µερικών αθροισµάτων. Απλώς το τελευταίο µερικό άθροισµα αποτελεί και την τελική τιµή της µεταβλητής S. Αφού ολοκληρωθεί η εκτέλεση της οµάδας εντολών της δοµής για από µέχρι ακολουθεί ο υπολογισµός του µέσου όρου του χρόνου προσπέλασης των 11 συσκευών (βλέπε εντολή ΜΟ S / 23

11). Η τιµή της S η οποία χρησιµοποιείται σε αυτό τον τύπο είναι εκείνη η οποία υπολογίστηκε εντός της δοµής. ηλαδή µετά το τέλος της εκτέλεσης της οµάδας εντολών της δοµής επανάληψης, είµαστε σίγουροι ότι: το πρόγραµµα έχει διαβάσει τους χρόνους προσπέλασης όλων των συσκευών, το πρόγραµµα έχει υπολογίσει το άθροισµα και των 11 συσκευών. Τέλος, θα πρέπει να αναφερθεί η αναγκαιότητα δήλωσης της βοηθητικής µεταβλητής Ι. Η µεταβλητή Ι αποτελεί τον µετρητή (counter) ο οποίος είναι υπεύθυνος για την µέτρηση του πλήθους των επαναλήψεων της δοµής. Στη συγκεκριµένη άσκηση ο µετρητής Ι θα έχει ως αρχική τιµή (ατ) το 1 και ως τελική τιµή (ττ) το 11 (αφού 11 είναι και οι συσκευές για τις οποίες ο χρήστης του προγράµµατος καλείται να δώσει τιµές). Εµφωλευµένη Επανάληψη Με τον όρο εµφωλευµένη επανάληψη εννοούµε ότι εντός µίας δοµής επανάληψης είναι δυνατόν να υπάρχει µία ή και περισσότερες δοµές. Με απλά λόγια µπορούµε να έχουµε επανάληψη µέσα σε επανάληψη ή επιλογή µέσα σε επανάληψη. Παράδειγµα 12: Να αναπτυχθεί πρόγραµµα Pascal το οποίο να δέχεται από το πληκτρολόγιο 20 ακέραιους αριθµούς και στη συνέχεια να βρίσκει και να εµφανίζει πόσοι από αυτούς ήταν άρτιοι και πόσοι από αυτούς ήταν περιττοί. Program PARADEIGMA_12; Var Α, ΑRT, PER, Ι: integer; BEGIN ΑRT:= 0; PER:= 0; For Ι:= 1 to 20 do Write( ώστε τον, Ι, ο ακέραιο αριθµό: ); Readln(A); If (Α mod 2 = 0) then ART := ART + 1 ; Else PER := PER + 1 ; ; Writeln( Πλήθος άρτιων ακέραιων αριθµών:, ΑRT); Writeln( Πλήθος περιττών ακέραιων αριθµών:, PER) END. 24

Π Α Ρ Α Τ Η Ρ Η Σ Ε Ι Σ Η πρώτη απαίτηση της εκφώνησης είναι η ανάγνωση 20 ακέραιων αριθµών. Εποµένως το πλήθος των επαναλήψεων είναι εκ των προτέρων γνωστό. Άρα θα χρησιµοποιήσουµε την δοµή επανάληψης for. Η δεύτερη απαίτηση της εκφώνησης είναι η εύρεση και η εµφάνιση του πλήθους των άρτιων και του πλήθους των περιττών αριθµών. Όµως για να µπορέσουµε να βρούµε τα πλήθη, θα πρέπει να χρησιµοποιήσουµε κάποια συνθήκη βάσει της οποίας το πρόγραµµ θα αναγνωρίζει πότε ένας αριθµός είναι άρτιος και πότε περιττός. Ένας ακέραιος αριθµός είναι άρτιος όταν το υπόλοιπο της διαίρεσης του µε τον αριθµό 2 είναι ίσο µε το µηδέν. ηλαδή όταν έχουµε τέλεια διαίρεση. Τυπικό παράδειγµα είναι ο αριθµός 8 ο οποίος διαιρούµενος µε το 2 έχει πηλίκο 4 και υπόλοιπο 0. Ένας ακέραιος αριθµός είναι περιττός όταν το υπόλοιπο της διαίρεσης του µε τον αριθµό 2 είναι διάφορο του µηδενός. ηλαδή όταν δεν έχουµε τέλεια διαίρεση. Τυπικό παράδειγµα είναι ο αριθµός 7 ο οποίος διαιρούµενος µε το 2 έχει πηλίκο 3 και υπόλοιπο 1. Αυτή η αναγνώριση επιτυγχάνεται µε τη χρήση της έτοιµης συνάρτησης mod. Για την εύρεση του πλήθους των άρτιων και των περιττών αριθµών, δηλώθηκαν 2 µεταβλητές. Η πρώτη µεταβλητή είναι η ART και η δεύτερη είναι η PER. Η αρχική τιµή αυτών είναι το µηδέν. Με αυτόν τον τρόπο διασφαλίζουµε ότι µετά το τέλος της εκτέλεσης του προγράµµατος ουδεµία από αυτές θα είναι απροσδιόριστη. 25

Α Σ Κ Η Σ Ε Ι Σ 1. Να γραφεί πρόγραµµα Pascal το οποίο να διαβάζει το όνοµα, επώνυµο και το ύψος πώλησης για έναν πωλητή µίας επιχείρησης και στη συνέχεια να υπολογίζει και να εµφανίζει την προµήθεια του ως εξής: Για πώληση µέχρι και 300, η προµήθεια είναι 8%. Για πώληση µέχρι και 880, η προµήθεια είναι 14%. Για πώληση άνω των 880, η προµήθεια είναι 20% + 73.75 2. Για τον υπολογισµό του φόρου µεταβίβασης ακινήτων οι αγοραστές καταβάλλουν φόρο ανάλογα µε την αξία αγοράς του ακινήτου. Έτσι, για αξία µέχρι και 8804 ουδείς φόρος καταβάλλεται, από 8805 µέχρι και 17608 ο φόρος είναι 5% επί της αξίας αγοράς, από 17609 έως 35217 είναι 10%, ενώ για αξία άνω των 35217 είναι 12%. Να γραφεί πρόγραµµα Pascal το οποίο να υπολογίζει και να εµφανίζει τον παραπάνω φόρο για έναν τυχαίο αγοραστή. 3. Σε µία επιχείρηση, το ποσοστό των κρατήσεων για κάθε υπάλληλο είναι: 10% για τους υπαλλήλους µε µισθό µέχρι 176. 14% για τους υπαλλήλους µε µισθό µέχρι 300. 18% για τους υπαλλήλους µε µισθό άνω των 300. Να γραφεί πρόγραµµα Pascal το οποίο: Α. να διαβάζει τον µισθό ενός υπαλλήλου. Β. να υπολογίζει και να εµφανίζει τις κρατήσεις και το καθαρό πληρωτέο ποσό του υπαλλήλου αυτού. 4. Υπολογίστε το αποτέλεσµα των ακόλουθων αριθµητικών εκφράσεων: α) (6 div 2) (6 mod 5) β) (14 mod 2) * 6 + 3 γ) 3 + 14 mod (2*3) δ) (5 mod 8) + (8 mod 5) ε) (7 mod 2) + (13 div 3) - 2 26

5. Να γραφεί πρόγραµµα σε Pascal το οποίο: Α) να διαβάζει από το πληκτρολόγιο 2 πραγµατικούς αριθµούς, Β) να υπολογίζει το άθροισµά τους, τη διαφορά τους και το γινόµενο τους, Γ) να εµφανίζει τους αριθµούς, το άθροισµα, τη διαφορά και το γινόµενο τους. Εάν η διαφορά είναι ένας αρνητικός αριθµός, να εµφανίζεται το µήνυµα αρνητική διαφορά. 6. ίνεται το ακόλουθο τµήµα προγράµµατος Pascal: If (vathmos >=18) or (vathmos < 12) then Writeln( Άριστα ); Else Writeln( Καλώς ); α) τι θα εµφανιστεί στην οθόνη αν η µεταβλητή vathmos ισούται µε 18 ; β) τι θα εµφανιστεί στην οθόνη αν η µεταβλητή vathmos ισούται µε 0 ; γ) τι θα εµφανιστεί στην οθόνη αν η µεταβλητή vathmos ισούται µε 13 ; 7. Ένας ιδιώτης αγόρασε πρόσφατα έναν ασπρόµαυρο εκτυπωτή τύπου Laser. Το συγκεκριµένο µοντέλο έχει ονοµαστική ταχύτητα εκτύπωσης ίση µε 0,2 σελίδες / δευτερόλεπτο. Λαµβάνοντας υπόψη τις παραπάνω πληροφορίες, Να γραφεί πρόγραµµα Pascal το οποίο: Α) να διαβάζει το πλήθος των σελίδων εκτύπωσης, Β) να υπολογίζει και να εµφανίζει τον χρόνο (σε λεπτά) για την εκτύπωση τους. 8. Να γραφεί πρόγραµµα Pascal το οποίο να διαβάζει 2 ακέραιους αριθµούς και στη συνέχεια να υπολογίζει και να εµφανίζει τον µέσο όρο τους αν και οι 2 είναι άρτιοι ή αν και οι 2 είναι περιττοί. Σε αντίθετη περίπτωση, να εµφανίζεται το γινόµενο τους. 9. Να γραφεί πρόγραµµα Pascal το οποίο να διαβάζει έναν ακέραιο αριθµό και στη συνέχεια να εµφανίζει το µήνυµα ΠΟΛΛΑΠΛΑΣΙΟ ΤΟΥ 7 αν ο αριθµός είναι πολλαπλάσιο του 7, διαφορετικά να εµφανίζει το µήνυµα ΕΝ ΕΙΝΑΙ ΠΟΛΛΑΠΛΑΣΙΟ ΤΟΥ 7. 10. Να γραφεί πρόγραµµα Pascal το οποίο να διαβάζει 2 αριθµούς και στη συνέχεια να υπολογίζει και να εµφανίζει το άθροισµα των τετραγώνων τους αν και οι 2 ήταν θετικοί, διαφορετικά να υπολογίζει και να εµφανίζει τη διπλάσια τιµή του αθροίσµατος τους. 27

11. Να γραφεί πρόγραµµα Pascal το οποίο: Α. Να διαβάζει τον χρόνο εργασίας (σε δευτερόλεπτα) ενός προγραµµατιστή για µια τυχαία ηµέρα. Β. Να βρίσκει και να εµφανίζει τις ώρες, λεπτά και δευτερόλεπτα που αντιστοιχούν στον χρόνο αυτό. Πχ, αν εργάστηκε 3.600 δευτερόλεπτα, τότε πρέπει να εµφανιστούν στην οθόνη τα ακόλουθα: 1 ώρα, 0 λεπτά και 0 δευτερόλεπτα. 12. Να γραφεί πρόγραµµα Pascal δηµιουργίας και εµφάνισης στην οθόνη των ακόλουθων αριθµών: 9, 18, 9, 18, 9, 18, 9, 18, 9, 18. 13. Να γραφεί πρόγραµµα Pascal το οποίο να διαβάζει τα ηλικία 5000 δηµοσίων υπαλλήλων και στη συνέχεια να βρίσκει και να εµφανίζει πόσοι υπάλληλοι έχουν το πολύ 5 έτη εργασίας προτού συνταξιοδοτηθούν (ως όριο για τη συνταξιοδότηση να θεωρηθεί το 35 ο έτος εργασίας). 14. Να γραφεί πρόγραµµα Pascal το οποίο: Α) να διαβάζει 200 ακέραιους αριθµούς, Β) να υπολογίζει και να εµφανίζει το γινόµενο τους, Γ) να υπολογίζει και να εµφανίζει το πλήθος και το άθροισµα εκείνων των αριθµών που ήταν µεγαλύτεροι του 155. 15. Σε ένα εργαστήριο αξιολόγησης υλικού προσωπικών υπολογιστών πραγµατοποιούνται δοκιµές σε ένα µοντέλο εκτυπωτή. Στις δοκιµές χρησιµοποιούνται 25 έγγραφα Χ σελίδων έκαστο. Η ονοµαστική ταχύτητα εκτύπωσης του συγκεκριµένου µοντέλου είναι ίση µε 12 σελίδες/λεπτό. Όµως στη περίπτωση που ο αριθµός των σελίδων υπερβαίνει τις 50, τότε αυτή µειώνεται στις 10 σελίδες/λεπτό. Να γραφεί πρόγραµµα Pascal το οποίο: Α) να διαβάζει τις Χ σελίδες για κάθε ένα από τα παραπάνω έγγραφα, Β) να υπολογίζει και εµφανίζει τον χρόνο εκτύπωσης (σε λεπτά) κάθε εγγράφου. 16. Να γραφεί πρόγραµµα Pascal το οποίο να εµφανίζει στην οθόνη τους ακόλουθους ακέραιους αριθµούς: 21, 22,..., 51. 17. Ο σηµερινός αριθµός των αυτοκινήτων που κυκλοφορούν σε µία πόλη είναι ίσος µε 150000. Άν αυτός αυξάνεται κατά 8% το χρόνο, να γραφεί πρόγραµµα Pascal το οποίο να υπολογίζει και να εµφανίζει τον αριθµό των αυτοκινήτων τα οποία θα κυκλοφορούν στην ίδια πόλη µετά την πάροδο 10 ετών. 28

18. ίνεται το ακόλουθο τµήµα προγράµµατος: Χ:= 20; For I:= 1 to 3 do For J:= 10 downto 1 do Χ := X + (Ι 1); Writeln(Χ); If Χ > 95 then Υ := Χ + 5 ; Else Υ := 2 * Χ ; Writeln(Υ); Ι) Πόσες φορές θα εκτελεστεί η εντολή writeln(χ) ; ΙΙ) Ποία θα είναι η τιµή της Υ που θα εµφανισθεί ; 19. Να γραφεί πρόγραµµα Pascal δηµιουργίας και εµφάνισης στην οθόνη των ακόλουθων αριθµών: 2, 4, 2, 4, 2, 4, 2, 4, 2, 4. 20. Να γραφεί πρόγραµµα Pascal υπολογισµού και εµφάνισης του αθροίσµατος των θετικών περιττών ακέραιων αριθµών που είναι µικρότεροι από το 100. 21. Να γραφεί πρόγραµµα Pascal το οποίο να διαβάζει από το πληκτρολόγιο τις µηνιαίες πωλήσεις οι οποίες πραγµατοποιήθηκαν κατά την διάρκεια του έτους 1999 σε ένα κατάστηµα πώλησης ηλεκτρονικών ειδών και στη συνέχεια να υπολογίζει και να εµφανίζει το σύνολο αλλά και το πλήθος των µηνιαίων πωλήσεων οι οποίες υπερέβησαν το ποσό των 7337. 22. Να γραφεί πρόγραµµα Pascal το οποίο: Α. να διαβάζει τα ονόµατα και τις ετήσιες εισπράξεις για κάθε µία από 30 εταιρίες κατασκευής προϊόντων υψηλής τεχνολογίας, Β. να βρίσκει και να εµφανίζει τα ονόµατα των εταιριών οι οποίες είχαν ετήσιες εισπράξεις µεγαλύτερες των 1467352. 29

23. Να γραφεί πρόγραµµα Pascal το οποίο: Α. να διαβάζει τα µηνιαία έξοδα και τα µηνιαία έσοδα µιας επιχείρησης κατά τη διάρκεια ενός έτους, Β. να υπολογίζει και να εµφανίζει τον µέσο όρο των κερδών της. 24. Να γραφεί πρόγραµµα Pascal το οποίο: Α. να διαβάζει από το πληκτρολόγιο 100 ακέραιους αριθµούς, Β. να βρίσκει και να εµφανίζει πόσοι από αυτούς ήταν άρτιοι και πόσοι από αυτούς ήταν περιττοί, Γ. να υπολογίζει και να εµφανίζει τον µέσο όρο των άρτιων και τον µέσο όρο των περιττών αριθµών. 25. Να γραφεί πρόγραµµα Pascal υπολογισµού και εµφάνισης του αθροίσµατος των άρτιων θετικών αριθµών που είναι µικρότεροι /ίσοι από το 200. 26. ίνεται η ακόλουθη συνάρτηση: Υ = 2Χ + 5, αν 0 Χ 25 2Χ - 7, αν Χ > 25 Να γραφεί πρόγραµµα Pascal το οποίο: Α. να διαβάζει από το πληκτρολόγιο 15 πραγµατικές τιµές της Χ, Β. να υπολογίζει και να εµφανίζει (για κάθε τιµή της Χ) την αντίστοιχη τιµή της Υ. 27. Ένας ιδιώτης αγόρασε πρόσφατα έναν ασπρόµαυρο εκτυπωτή τύπου Laser. Το συγκεκριµένο µοντέλο έχει ονοµαστική ταχύτητα εκτύπωσης ίση µε 12 σελίδες / λεπτό. Έστω ότι ο εν λόγω ιδιώτης επιθυµεί να εκτυπώσει 10 έγγραφα. Λαµβάνοντας υπ όψιν τις παραπάνω πληροφορίες, Να γραφεί πρόγραµµα Pascal το οποίο να διαβάζει το πλήθος των σελίδων για κάθε ένα από τα παραπάνω έγγραφα και στη συνέχεια να υπολογίζει και να εµφανίζει τον συνολικό χρόνο που απαιτείται για την εκτύπωσή τους. 30