You are on page 1of 235

Ελληνική Δημοκρατία

Τεχνολογικό Εκπαιδευτικό
Ίδρυμα Ηπείρου

Προγραμματισμός Ι
Pascal

Αλέξανδρος Τζάλλας

Ενότητα 1 : Εισαγωγικά Στοιχεία της Pascal


Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σκοποί ενότητας
• Να γίνει μια εισαγωγή στις έννοιες του δομημένου
προγραμματισμού
• Να αναλυθούν οι βασικές δομικές μονάδες της γλώσσας
Pascal

5
5

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Περιεχόμενα ενότητας
• Αρχές Ανάπτυξης Προγραμμάτων
• Είδη Προγραμματισμού
• Είδη Προγραμματισμού
• Διαγράμματα ροής
• Σύνολο χαρακτήρων της Pascal
• Λεξιλόγιο-Τελεστές
• Δηλώσεις Μεταβλητών
• Εκφράσεις/Συναρτήσεις στην Pascal
6
6
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Πως να μάθουμε να προγραμματίζουμε;


• Δυστυχώς ο προγραμματισμός δεν διδάσκεται
• Δεν μπορούμε να μάθουμε να προγραμματίζουμε διαβάζοντας βιβλία για
προγραμματισμό
• Δεν μπορούμε να μάθουμε να προγραμματίζουμε γράφοντας προγράμματα στο
χαρτί
• Ο μόνος τρόπος να μάθουμε να προγραμματίζουμε είναι να γράφουμε
προγράμματα στον υπολογιστή, να τα εκτελούμε, να βρίσκουμε τα λάθη που
σίγουρα έχουμε κάνει, να τα διορθώνουμε, να εκτελούμε πάλι τα προγράμματα,
να ξαναβρίσκουμε λάθη, να τα διορθώνουμε πάλι, μέχρι να καταφέρουμε να
κάνουμε τα προγράμματά μας να επιλύουν τα προβλήματά μας όπως πρέπει
• Επικουρικά́, η ανάγνωση και κατανόηση καλογραμμένων, τεκμηριωμένων και
ορθών προγραμμάτων είναι πάντοτε χρήσιμη, αλλά́ από́ μονή της δεν αρκεί́
7
7

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Προγραμματισμός
• Ο Η/Υ χρησιμοποιείται για την επεξεργασία
δεδομένων
• Για να γίνει η επεξεργασία αυτή πρέπει να του
δοθούν συγκεκριμένες οδηγίες από τον άνθρωπο
• Το σύνολο των οδηγιών προς τον υπολογιστή για την
επίλυση ενός προβλήματος αποτελεί το πρόγραμμα

8
8
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αλγόριθμος
 Πριν δημιουργήσουμε ένα πρόγραμμα για να λύσουμε ένα
πρόβλημα πρέπει να σχεδιάσουμε έναν αλγόριθμο για αυτό́
το πρόβλημα
 Μια σαφώς καθορισμένη ακολουθία εντολών ή κανόνων που
οδηγεί́ σε ένα προκαθορισμένο αποτέλεσμα (λύση ενός
προβλήματος) μεσώ ενός πεπερασμένου πλήθους βημάτων
 ΄Εάν πρόγραμμα είναι η διατύπωση ενός αλγορίθμου σε μια
συγκεκριμένη γλώσσα προγραμματισμού́
 Το πρόγραμμα είναι η υλοποίηση του αλγορίθμου

9
9

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα
Μέγιστος Κοινός Διαιρέτης
Να βρεθεί ο ΜΚΔ δύο αριθμών
(Αλγόριθμος Ευκλείδη)
Αν Α=25 & Β=20 έχουμε:
Βήμα 1 : Δώσε δύο αριθμούς Α & Β 1. Αν Α=25, Β=20
Βήμα 2: Βρες το μεγαλύτερο & 2. Α=5, Β=20 (Αντικατάσταση
αντικατέστησε τον με το Α με το υπόλοιπο της
υπόλοιπο της διαίρεσης διαίρεσης 25:20)
αυτού με τον άλλο αριθμό
3. Α=5, B=0 (Αντικατάσταση
Βήμα 3: Αν το υπόλοιπο είναι μηδέν τότε του Β με το υπόλοιπο της
πήγαινε στο Βήμα 4, αλλιώς στο
Βήμα 2 διαίρεσης 20:5)
4. ΜΚΔ=5
Βήμα 4: Τύπωσε ΜΚΔ
5. Τέλος
Βήμα 5: Τέλος

10
1
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αρχές Ανάπτυξης Προγραμμάτων1/2


• Αλγόριθμος
 Ο προγραμματιστής πρέπει να διατυπώσει τη λύση του προβλήματος
σε γενικές γραμμές
• Ψευδοκώδικας / Διάγραμμα ροής
 Η περιγραφή́ γίνεται χρησιμοποιώντας ψευδοκώδικα ή διαγράμματα
ροής
 Έλεγχος της λογικής της προτεινομένης λύσης χρησιμοποιώντας
καταλληλά δεδομένα
• Κωδικοποίηση σε γλώσσα υψηλού́ επιπέδου
 Η ακολουθία των λειτουργιών του ψευδοκώδικα ή του διαγράμματος
ροής κωδικοποιείται σε γλώσσα προγραμματισμού
11
1

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αρχές Ανάπτυξης Προγραμμάτων2/2


• Μεταγλώττιση - Σύνδεση
 Ο μεταφραστής ελέγχει το πηγαίο πρόγραμμα για γραμματικά́ λάθη
(ορθογραφία εντολών) και συντακτικά́ λάθη (εντολές που λείπουν)
 Το πηγαίο πρόγραμμα μετατρέπεται σε γλώσσα μηχανής
• Διορθώσεις
 Τα γραμματικά́ και συντακτικά́ λάθη διορθώνονται από́ τον
προγραμματιστή́ και επαναλαμβάνεται η μεταγλώττιση
 Διαδοχική́ απομάκρυνση των σφαλμάτων (debugging)
• Δοκιμή́
 Λάθη λογικής που παραμένουν στο πρόγραμμα μπορούν να βρεθούν
εξετάζοντας την έξοδο
 Εκτός από́ συνηθισμένα δεδομένα, δίνονται σκόπιμα λάθη για να
διαπιστωθεί́ αν θα εντοπιστούν 12
1
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Υλοποίηση Προγραμμάτων
Ολοκληρωμένο
(γραφικό́)
περιβάλλον για την
γραφή́ –
μεταγλώττιση –
σύνδεση και
εκτέλεση ενός
προγράμματος

13
1

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Περιγραφή Αλγορίθμων
• Ως εργαλείο επικοινωνίας, ένας αλγόριθμος πρέπει:
 να έχει συγκεκριμένη δομή́
 να εκφράζεται σε μορφή́ κατανοητή́ από́ ούλους
 να εκφράζεται με καθορισμένη σύνταξη ώστε να μην είναι
διφορούμενη η ερμηνεία του
• Διακρίνουμε δυο μεγάλές κατηγορίες εργαλείων
περιγραφής αλγορίθμων:
 εργαλεία που βασίζονται στη γλώσσα (ψευδοκώδικας)
 εργαλεία που βασίζονται σε σχήματα (διαγράμματα ροής)
14
1
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ψευδοκώδικας
• Ο ψευδοκώδικας είναι κάτι που μοιάζει με κώδικα
προγραμματισμού, αλλά́ δεν είναι.
• Ο ψευδοκώδικας είναι μια δομημένη γλώσσα που
χρησιμοποιεί́:
 στοιχειά (συντακτικές δομές) από́ τις γλώσσες
προγραμματισμού
 συμβολισμούς (σημασιολογικά́ στοιχειά) από́ τα
Μαθηματικά́ και τη Μαθηματική́ Λογική́
 στοιχειά (λεκτικές περίγραφες) από́ τη φυσική́ γλώσσα

15
1

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Χαρακτηριστικά Ψευτοκώδικα
• Ο ψευδοκώδικας χρησιμοποιείται για την ανάπτυξη ενός
εργαλείου περιγραφής αλγορίθμων.
• Να συνδυάζει ταυτόχρονα την αυστηρότητα και την ακρίβεια που
έχουν οι γλώσσες προγραμματισμού με την εκφραστική́ δύναμη
της φυσικής γλώσσα.
• Ο ψευδοκώδικας είναι ανεξάρτητος από́ οποιαδήποτε γλώσσα
προγραμματισμού.
• Ένας αλγόριθμος που περιγράφεται με ψευδοκώδικας μπορεί́
άμεσα να «μεταφραστεί́» σε ένα πρόγραμμα.
• Γίνεται κατανοητός τόσο από́ προγραμματιστές όσο και από́ μη
προγραμματιστές.

16
1
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δομές Ελέγχου
• Μια απλή δομημένη γλώσσα μπορεί́ να
περιέχει τρεις δομές ελέγχου:
 ακολουθία
 απόφαση
 επανάληψη

17
1

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Γλώσσα Ψευδοκώδικα1/3

18
1
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Γλώσσα Ψευδοκώδικα2/3

19
1

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Γλώσσα Ψευδοκώδικα3/3

20
2
Παράδειγμα
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 1

21
2

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα Παράδειγμα 2

22
2
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα
Παράδειγμα 3

23
2

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Διαγράμματα Ροής (Law Chat)1/2


• Επιδεικνύουν την ακολουθία των βημάτων που περιγράφει ο
αλγόριθμος με ένα διαγραμματικό τρόπο
• Δείχνει την γενική ακολουθία των γεγονότων με την οποία μπορεί
να λυθεί το πρόβλημα
• Δίνουν μια πολύ καλή προσέγγιση για το σχεδιασμό
προγραμμάτων
 Απευθύνονται στους προγραμματιστές
• Δεν θεωρούνται ο καλύτερος τρόπος για την τεκμηρίωση των
προγραμμάτων
 Δεν απευθύνονται στους χρήστες 24
2
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Διαγράμματα Ροής (Law Chat)2/2


• Χρησιμοποιούνται διάφορα γεωμετρικά σχήματα με
ορισμένη σημασία
• Τα σχήματα συνδέονται με συνεχείς γραμμές και
χρησιμοποιούνται τόξα για να δείξουν την ροή των
γεγονότων
• Ένα διάγραμμα ροής δεν είναι ένα συμπληρωμένο
πρόγραμμα, αλλά αποτελεί μια βοήθεια για τον
προγραμματιστή

25
2

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σύμβολα Διαγραμμάτων Ροής

26
2
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα
Παραδείγματα
Παραδείγματα

27
2

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Γλώσσες Προγραμματισμού
• Γλώσσες μηχανής
 Άμεση επικοινωνία με το υλικό́ του υπολογιστή́
• Συμβολικές γλώσσες
 Χρήση συμβολικών ονομάτων για τις βασικές εντολές
• Υψηλού́ επιπέδου
 Προσανατολισμένες στο πρόβλημα και ουχί στον
υπολογιστή́

28
2
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Γλώσσες Μηχανής (Machine Language)


• Η μόνη γλώσσα που «καταλαβαίνει» άμεσα ο υπολογιστής
• Κάθε υπολογιστής έχει τη δική του διαφορετική γλώσσα
μηχανής
• Κάθε κωδικός της γλώσσας μηχανής συμβολίζει μία
συγκεκριμένη λειτουργιά, π.χ. Πολλαπλασιασμός = 1001
• Ο προγραμματισμός σε γλώσσα μηχανής είναι εξαιρετικά
επίπονη διαδικασία
• Ξένη προς τον τρόπο που σκέφτεται ο άνθρωπος
• Μεγάλη ταχύτητα εκτέλεσης των προγραμμάτων
29
2

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συμβολικές Γλώσσες (Assembly)


• Για την καλύτερη απομνημόνευση των κωδίκων μηχανής
χρησιμοποιούνται μνημονικοί́ κωδικοί́ (συντομεύσεις των
Αγγλικών)
 Πολλαπλασιασμός = MULT = 1001
 ADD32 6,1,2
• Η μετάφραση από́ τα συμβολικά́ ονόματα στους
αριθμητικούς κωδικούς της γλώσσα μηχανής γίνεται μεσώ
του συμβολομεταφραστή (assembler)

30
3
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Γλώσσες Υψηλού́ Επιπέδου


• Δεν εξαρτώνται από́ την μηχανή́ αλλά́ από́ το
πρόβλημα
• Επιτρέπουν στον προγραμματιστή́ να γράψει εντολές
χρησιμοποιώντας κώδικες λέξεις και συμβατικούς
μαθηματικούς συμβολισμούς
• Οι εντολές μοιάζουν σχεδόν όπως τα Αγγλικά́ και
περιέχουν τα συνηθισμένα μαθηματικά́ σύμβολα
 If A then B
 D=A*B+C

31
3

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Μεταγλώττιση (Compilation)
• Ο υπολογιστής δεν «καταλαβαίνει» άμεσα μια γλώσσα
υψηλού́ επιπέδου
• Η μετάφραση από́ μια γλώσσα υψηλού́ επιπέδου στη γλώσσα
μηχανής γίνεται μεσώ των μεταγλωττιστών (compilers)
 Οδηγίες του προγραμματιστή́: αποθηκευμένες στο πηγαίο
πρόγραμμα (source program)
 Αντίστοιχες οδηγίες επιπέδου μηχανής: αποθηκευμένες στο
αντικειμενικό́ ή τελικό́ πρόγραμμα (object program)
 Σε ορισμένα μικρά́ υπολογιστικά́ συστήματα (π.χ. PC) το αντικειμενικό́
πρόγραμμα πρέπει να προετοιμαστεί́ για εκτέλεση από́ άλλο ειδικό́
πρόγραμμα, τον συνετή (linker) 32
3
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Μεταγλωττιστές
• Μεταφράζουν μια συγκεκριμένη γλώσσα υψηλού́
επιπέδου στη γλώσσα μηχανής ενός συγκεκριμένου
είδους
• Μεγάλά προγράμματα που τοποθετούνται μονιμά στη
δευτερεύουσα μνήμη και όταν χρειαστεί́ μεταφέρονται
στην κυρία μνήμη
• Όταν τελειώσει η διαδικασία μεταγλώττισης είναι
διαθέσιμο το εκτελέσιμο πρόγραμμα για τον χειρισμό
των δεδομένων που δίνει τα αποτελέσματα στην έξοδο
33
3

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Είδη Προγραμματισμού
• Διαδικαστικός προγραμματισμός
 Pascal, Basic, C
• Δηλωτικός προγραμματισμός
 Prolog
• Αντικειμενοστρεφής προγραμματισμός
 C++, Java
• Οπτικός προγραμματισμός
 Visual Basic, Visual C++, Visual Prolog
34
3
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Διαδικαστικός Προγραμματισμός
Procedural Programming
• Κάθε πρόγραμμα είναι μία διαδικασία ή ένα σύνολο
εργασιών που δίνονται με προκαθορισμένο τρόπο και
σειρά στο πρόγραμμα
• Οι περισσότερες γλώσσες προγραμματισμού είναι
διαδικαστικές
• Ευνοείται άμεσα η δημιουργία και εκτεταμένη χρήση
βιβλιοθηκών προγραμμάτων που περιέχουν υπορουτίνες
σχετικές με κοινά θέματα (π.χ. βιβλιοθήκη γραφικών)

35
3

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δηλωτικός Προγραμματισμός
Declarative Programming
• Ένα πρόβλημα αποτελείται από σχέσεις που περιγράφουν τα
συστατικά του προβλήματος και τους συσχετισμούς μεταξύ
τους
• Η λύση του προβλήματος προκύπτει από την εφαρμογή του
μηχανισμού συμπερασμού της γλώσσας
• Το πρόγραμμα τερματίζεται όταν βρεθούν όλες οι δυνατές
λύσεις του προβλήματος
• Παραλληλισμός: χάρτης ↔ σαφείς οδηγίες για την εύρεση
της πορείας
36
3
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αντικειμενοστρεφής Προγραμματισμός
Object Oriented Programming
• Βασίζεται σε αντικείμενα (objects) διαφόρων
κατηγοριών (classes), τα οποία αλληλεπιδρούν
μεταξύ τους
• Πρώτα ορίζονται τα κατάλληλα για το πρόβλημα
αντικείμενα και στη συνέχεια χρησιμοποιούνται για
να περιγραφεί βήμα προς βήμα η εξεύρεση της
λύσης

37
3

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Οπτικός Προγραμματισμός
Visual Programming
• Παρέχεται ευκολία ανάπτυξης ολοκληρωμένων
εφαρμογών
• Έτοιμες βιβλιοθήκες γραφικών που μπορούν να
χρησιμοποιηθούν σε διαφορετικές εφαρμογές
• Περισσότερο οικείος στους προγραμματιστές

38
3
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εξέλιξη Γλωσσών Προγραμματισμού1/4


• Ο ψευδοκώδικας είναι κάτι που μοιάζει με κώδικα
προγραμματισμού, αλλά δεν είναι.
• Ο ψευδοκώδικας είναι μια δομημένη γλώσσα που
χρησιμοποιεί:
 στοιχεία (συντακτικές δομές) από τις γλώσσες
προγραμματισμού
 συμβολισμούς (σημασιολογικά στοιχεία) από τα
Μαθηματικά και τη Μαθηματική Λογική
 στοιχεία (λεκτικές περιγραφές) από τη φυσική γλώσσα
39
3

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εξέλιξη Γλωσσών Προγραμματισμού2/4


 BASIC (Beginners All-purpose Symbolic Instruction Code)
 J. Kemmeny, T. Kurtz, 1961
 Ιδιαίτερα διαδεδομένη σε αρχάριους και απλούς χρήστες
υπολογιστών
 Quick Basic, Visual Basic: οι πιο πετυχημένες εκδόσεις
 PASCAL
 K. Jensen, N. Wirth, 1971
 Γενικής χρήσης
 Ακολουθεί τις αρχές του δομημένου προγραμματισμού
40
4
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εξέλιξη Γλωσσών Προγραμματισμού3/4


• PROLOG (PROgramming in LOGic)
 1970
 Λογικός προγραμματισμός, χειρισμός συμβόλων
 Βασίζεται στην μαθηματική λογική (κατηγορηματικός λογισμός
πρώτης τάξης)
 Χρησιμοποιείται σε εφαρμογές τεχνητής νοημοσύνης

41
4

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εξέλιξη Γλωσσών Προγραμματισμού4/4


• C
 D. Ritchie, 1972
 Υποστήριξη πολύ εξειδικευμένων τελεστών
 Προσεγγίζει την ταχύτητα της γλώσσας Assembly
 Χρησιμοποιήθηκε για την κατασκευή του λειτουργικού συστήματος
Unix
 C++: προγραμματισμός προσανατολισμένος σε αντικείμενα

42
4
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Γενεαλογικό Δένδρο Γλωσσών Προγραμματισμού

43
4

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Γιατί Pascal?
• Απλή και εύκολη στην εκμάθηση
• Περιλαμβάνει ικανοποιητικό σύνολο εντολών ελέγχου
• Διαχειρίζεται πολλούς τύπους δεδομένων
• Είναι γλώσσα γενικού σκοπού
• Υπάρχουν μεταφραστές της Pascal για τα περισσότερα
υπολογιστικά συστήματα
• Ιδανική για διδασκαλία βασικών αρχών προγραμματισμού

44
4
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Βασικά στοιχεία ενός προγράμματος Pascal


• Ένα πρόγραμμα για Η/Υ απαρτίζεται από μια ακολουθία
συμβόλων ή χαρακτήρων που σχηματίζουν το κείμενο του
προγράμματος
• Οι κανόνες της γλώσσας αποτελούνται από 2 τμήματα που
ονομάζονται:
 Σύνταξη: ορίζουν τον τρόπο με τον οποίο το σύνολο των
λέξεων μιας γλώσσας (λεξιλόγιο) μπορεί να συνδυαστεί
ώστε να σχηματιστούν προτάσεις
 Σημασιολογία: δίνουν έννοια σ’ αυτούς τους
συνδυασμούς των λέξεων 45
4

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σύνολο χαρακτήρων της Pascal1/2


• Για να κωδικοποιήσουμε στον ΗΥ ένα πρόγραμμα χρησιμοποιούμε:
 το αλφάβητο της γλώσσας
 τους συντακτικούς της κανόνες
• Το σύνολο χαρακτήρων καθορίζει το ποιους χαρακτήρες μπορούμε
να χρησιμοποιήσουμε όταν γράφουμε τα προγράμματά μας
• Η Pascal χρησιμοποιεί́:
 Τα γράμματα του λατινικού αλφάβητου, κεφαλαία: A B C D E F
GHIJKLMNOPQRSTUVWXYZ
 και μικρά: a b c d e f g h I j k l m n o p q r s t u v w x y z
46
4
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σύνολο χαρακτήρων της Pascal1/2


 Τα ψηφία του δεκαδικού συστήματος: 0 1 2 3 4 5 6 7 8 9
 Το κενό (blank)
 ορισμένους ειδικούς χαρακτήρες: + - * / = < > [ ] . , : ; ^ ( )

47
4

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο
• Το λεξιλόγιο της Pascal περιλαμβάνει 8 κατηγορίες:
• Ονόματα
• Αριθμούς
• Χαρακτήρες
• Αλυσίδες χαρακτήρων
• Τελεστές
• Διαχωριστές
• Λέξεις κλειδιά
• Σχόλια
48
4
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο-Ονόματα1/2
• Ονόματα ορίζονται από τον προγραμματιστή και χρησιμοποιούνται για
τον προσδιορισμό των διαφόρων ποσοτήτων μέσα σε έναι πρόγραμμα
• Για κάθε όνομα ισχύουν τα εξής:
 Αποτελούνται από ένα γράμμα που ακολουθείται από έναν οποιαδήποτε
αριθμό γραμμάτων και ψηφίων, π.χ. Value1,result, mkd, κ.τ.λ.
 Επιτρέπεται η χρήση του χαρακτήρα “_”, π.χ. Value_1, value_of_x, κλπ.
 Θεωρητικά το μήκος τους είναι απεριόριστο (εξαρτάται από τον
μεταφραστή), π.χ. Θεωρούνται ίδια τα ονόματα Logariasmos_No1
Logariasmos_No2 LOGARIASMOS_No3
 Δεν επιτρέπεται η χρήση ονομάτων που έχουν ειδική σημασία για την Pascal

49
4

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο-Ονόματα2/2

50
5
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο-Αριθμούς1/4
• Ακέραιοι (integers): Ακολουθίες ψηφίων που μπορεί
να προηγείται το πρόσημο + (προαιρετικό) ή -
• Οι τιμές έχουν εύρος:
 [ -MAXINT,..-1,0,+1,..,+MAXINT ], όπου
MAXINT=32767

51
5

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο-Αριθμούς2/4

52
5
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο-Αριθμούς3/4
• Πραγματικοί (reals): Αριθμοί αρνητικοί ή θετικοί
που μπορεί να περιέχουν και δεκαδικά ψηφία
• Περιέχουν υποδιαστολή ή είναι
• εκφρασμένοι σε εκθετική μορφή:
 38Ε27  8x1027
 -0,092Ε-19  -0,092x10-19

53
5

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο-Αριθμούς4/4

54
5
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο-Χαρακτήρες
• Είναι χαρακτήρες από το σύνολο των χαρακτήρων
που υποστηρίζει το υπολογιστικό σύστημα μέσα σε
αποστρόφους. Π.χ. ‘α’, ‘Α’, ‘&’, ‘4’
 ‘5’ διαφέρει από το 5
 ‘Α’ διαφέρει από το ‘α’
 ‘ ‘ ο κενός χαρακτήρας

55
5

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο-Αλυσίδες Χαρακτήρων
• Αλυσίδα χαρακτήρων (string) είναι μια ακολουθία
χαρακτήρων μεταξύ αποστρόφων.
 ’algorithm’
 ‘Pascal Vers’
 ‘5’
 ‘236’
 ‘5+2’

56
5
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο-Τελεστές1/4
• Είναι σύμβολα που δηλώνουν μια αριθμητική ή
λογική πράξη μεταξύ αριθμητικών ή
αλφαριθμητικών δεδομένων:
 Αριθμητικοί
 Σύγκρισης
 Λογικοί

57
5

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο-Τελεστές2/4

58
5
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο-Τελεστές3/4

59
5

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο-Τελεστές4/4
+ Λογικοί τελεστές

60
6
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο-Διαχωριστές
• Είναι χαρακτήρες με συγκεκριμένη λειτουργία
 := καταχώρηση
 () παρενθέσεις
 [] αγκύλες για τους πίνακες και τα σύνολα
 ,.;: σημεία στίξης

61
6

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο-Λέξεις Κλειδιά
 And end  Nil set
 Array file  not then
 Begin for
 of to
 case function
 or type
 const goto
 packed until
 div if
 procedure var
 Do in
 program while
 Downto label

 else mod  record with

 repeat 62
6
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λεξιλόγιο-Σχόλια
• Σχόλιο είναι ένα κείμενο μέσα σε αγκύλες, το οποίο
μπορεί να τοποθετηθεί οπουδήποτε μέσα στο
πρόγραμμα για επεξήγηση τμημάτων του προγράμματος
• Αντί για αγκύλες μπουρούμε να χρησιμοποιούμς και
τους χαρακτήρες (* και *).
 Για παράδειγμα: {This is a remark} {Κείμενο και στα
Ελληνικά}
(* Σχόλιο *)
63
6

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δεδομένα
• Τα δεδομένα παριστάνουν πληροφορίες που πρέπει να
δοθούν σε ένα πρόγραμμα. Το πρόγραμμα επεξεργάζεται τα
δεδομένα για να παράγει αποτελέσματα
• Τα δεδομένα προέρχονται από το εξωτερικό περιβάλλον
(συσκευές εισόδου) ή τη βοηθητική μνήμη του υπολογιστή
(συσκευές μαγνητικών δίσκων)
• Αντιπροσωπεύουν γεγονότα, παρατηρήσεις, μετρήσεις, ιδέες
για τον κόσμο κ.α.

64
6
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δεδομένα
• Τα δεδομένα που χρειάζεται ένα πρόγραμμα είναι δύο ειδών:
 Σταθερές (constants)
 Μεταβλητές (variables)

65
6

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δεδομένα-Σταθερές
• Μερικά από τα δεδομένα που χρησιμοποιούνται σε ένα
πρόγραμμα δεν αλλάζουν ποτέ
• Τα δεδομένα αυτά μπορούν να παρασταθούν με σταθερές
(constants)
• Οι ορισμοί των σταθερών ενός προγράμματος ακολουθούν
την επικεφαλίδα του και αρχίζουν με την ειδική λέξη const
const meresergasias = 5;
const asteriskos = ‘*’;
const nai = true, pi = 3.14159265368;
66
6
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δεδομένα-Μεταβλητές
• Μεταβλητές (variables): δεδομένα τα οποία υπόκεινται σε
αλλαγή
 τρέχον άθροισμα σ’ ένα υπολογιστή τσέπης
• Οι μεταβλητές παριστάνουν θέσεις της κύριας μνήμης του
υπολογιστή
• Η «τιμή» μιας μεταβλητής αναφέρεται στο περιεχόμενο της
θέσης μνήμης που αντιστοιχεί στη μεταβλητή αυτή
• Μπορούμε να χρησιμοποιήσουμε όσες μεταβλητές
χρειαζόμαστε και να τις ονομάσουμε όπως μας βολεύει
67
6

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δηλώσεις Μεταβλητών1/3
• Οι δηλώσεις των μεταβλητών ακολουθούν τους ορισμούς των
σταθερών (αν αυτοί υπάρχουν)
var merokamato: integer;
aktina, periferia, emvadon: real;
• Η δήλωση μιας μεταβλητής αντιστοιχίζει απλά το
αναγνωριστικό της με τη διεύθυνση μιας θέσης της μνήμης
του υπολογιστή και περιγράφει τον τύπο των τιμών που
μπορούν να αποθηκευτούν στη θέση αυτή
• Κατά τη δημιουργία της, η τιμή μιας μεταβλητής είναι
αόριστη 68
6
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δηλώσεις Μεταβλητών2/3
• Τα δεδομένα έχουν κάποιο τύπο (type) που ορίζει τη σημασία
τους, το σύνολο των τιμών (values) που μπορούν να πάρουν
και περιορίζει τι μπορεί να γίνει με αυτές.
• Η Pascal υποστηρίζει 5 βασικούς απλούς τύπους (simple
types) δεδομένων:
 integer : τα δεδομένα παίρνουν ακέραιες τιμές
 real : τα δεδομένα παίρνουν πραγματικές τιμές
 boolean : παίρνουν μόνο από τις δύο λογικές τιμές TRUE ή FALSE
 char : δέχονται σαν τιμές ένα χαρακτήρα, π.χ. ‘a’ , ‘G’ , ‘4’ , ‘&’
 string : αλυσίδα χαρακτήρων, π.χ. ‘Monday’, ‘Στέφανος’
69
6

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δηλώσεις Μεταβλητών3/3
• Η Pascal εφαρμόζει αυστηρό έλεγχο τύπων, δεν
επιτρέπει την ανάμειξη δεδομένων διαφόρων τύπων
 π.χ. δεν μπορεί να γίνει πολλαπλασιασμός ενός
δεδομένου τύπου integer με ένα δεδομένου
τύπου char

70
7
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εκφράσεις στην Pascal

Σειρά προτεραιότητας
 NOT
 * / DIV MOD AND
 + - OR
 = <> > < >= <=

71
7

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αριθμητικές Συναρτήσεις
 ABS(num)  abs(-2.54)=2.54
 COS(num)
 EXP(num)
 FRAC(num)  frac(3.78)=0.78
 INT(num)  int(3.78)=3.0
 SQR(num)  sqr(2)=4
 SQRT(num)  sqrt(9)=3
72
7
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Βαθμωτές Συναρτήσεις
• PRED(num)  Pred(10)=9
• ODD(num) – περιττός Odd(7)=true
• SUCC(num) Succ(10)=11

73
7

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συναρτήσεις Μετατροπής
• ORD(num)  (A,B,C,D,E,F), Ord(C)=2
• ROUND(num)  Round(3.78)=4
• TRUNC(num)  Trunc(3.78)=3

74
7
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 1

75
7

Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 2

76
7
Προγραμματισμός Ι – Εισαγωγικά Στοιχεία της Pascal, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Βιβλιογραφία
Βλαχάβας Ι. (1994). Η γλώσσα προγραμματισμού Pascal. Εκδόσεις Γαρταγάνης Διονύσιος.
Κάβουρας Ι.Κ. (1999). Δομημένος Προγραμματισμός με Pascal. Εκδόσεις Κλειδάριθμος.
Αλεβίζου Θ., & Καμπουρέλης Α. (1995). Μαθήματα Προγραμματισμού: Εισαγωγή με τη Γλώσσα Pascal.
Εκδόσεις Παπασωτηρίου.
Cooper D. (1993). Oh! Pascal!, An Introduction to Computing, του. Εκδόσεις Norton.
Larry R.N. (1998). Advanced Programming in Pascal with Data Structures. Εκδόσεις Macmillan USA.
Τσελίκης Γ.Σ., Τσελίκας Ν.Δ. (2012). C: από τη Θεωρία στην Εφαρμογή (B' Έκδοση). Εκδόσεις Παπασωτηρίου.

Aho A.V., Hopcroft J.E., & Ullman J.D. (1974). The design and analysis of computer algorithms. Εκδόσεις
Addison Wesley.

Abelson Η., Sussman G.J., Sussman J. (1985). Structure and Interpretation of Computer Programs, MIT Press,
McGraw Hill Book Company.

Ενότητα 2 : Βασική σύνταξη προγράμματος pascal -


Εντολές συνθήκης
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Σκοποί ενότητας
• Να αναλυθεί/περιγραφεί πλήρως η δομή του τμήματος δηλώσεων
• Να αναλυθεί πλήρως η συντακτική δομή και ο τρόπος χρήσης της εντολής
ανάθεσης στην pascal
• Να αναλυθεί πλήρως η συντακτική δομή και ο τρόπος χρήσης των
εντολών εισόδου/εξόδου Read/Readln και Write, Writeln
• Να περιγραφούν αναλυτικά οι δυνατότητες των εντολών συνθήκης.
• Να αναλυθεί με ακρίβεια η χρησιμότητα/σκοπός των εντολών συνθήκης.
• Να περιγραφούν οι συντακτικοί κανόνες των εντολών συνθήκης if,
φωλιασμένων εντολών if και case.

5
5

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Περιεχόμενα ενότητας
• Επικεφαλίδα Προγράμματος
• Τμήμα Δηλώσεων
• Τελεστές Ανάθεσης
• Τελεστές Εισόδου Read, Readln
• Τελεστές Ανάθεσης Write, Writeln
• Χρησιμότητα/Σκοπός Εντολών Συνθήκης
• Εντολή if
• Φωλιασμένες Εντολές if
• Εντολή Case
6
6
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Δομή Προγράμματος Pascal


• Ένα Pascal πρόγραμμα αποτελείται:

• Eπικεφαλίδα του προγράμματος


1

• Tμήμα των δηλώσεων (declaration part)


2

• Tμήμα των προτάσεων (statement part)


3

7
7

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Επικεφαλίδα Προγράμματος1/2
• Η επικεφαλίδα του προγράμματος είναι μια πρόταση που
αρχίζει με τη λέξη κλειδί program ή PROGRAM, η οποία
ακολουθείται από ένα όνομα που χαρακτηρίζει όλο το
πρόγραμμα και μια λίστα ονομάτων που σχετίζονται με τις
συσκευές που θα χρησιμοποιηθούν από το πρόγραμμα για
είσοδο και έξοδο δεδομένων
• Η επικεφαλίδα έχει την εξής σύνταξη:
PROGRAM Ονομα(Αρχείο 1, Αρχείο 2, …, Αρχείο Ν)

8
8
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Επικεφαλίδα Προγράμματος2/2
• Εξηγήσεις: “Ονομα” είναι το όνομα του προγράμματος και “Αρχείο 1,
Αρχείο 2, …, Αρχείο Ν” είναι το όνομα των εξωτερικών αρχείων που θα
χρησιμοποιήσει το πρόγραμμα
• Η σύνταξη των ονομάτων των αρχείων διέπεται από κανόνες του
συγκεκριμένου υπολογιστικού συστήματος
• Τα δύο βασικά (standard) ονόματα αρχείων input και output στην λίστα
των ονομάτων των εξωτερικών αρχείων αναφέρονται στις εξ’ ορισμού
περιφερειακές μονάδες εισόδου και εξόδου δεδομένων (όπως τερματικό,
εκτυπωτής, αναγνώστης κλπ)
 program Factorial (input, output);
 program Second_Example (input, output, data, numbers);
9
9

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τμήμα Δηλώσεων
• Το τμήμα δηλώσεων περιέχει (δηλώνει) όλα τα στοιχεία που
πρόκειται να χρησιμοποιηθούν στο πρόγραμμα, όπως μεταβλητές,
σταθερές κλπ
• Το τμήμα αποτελείται από πέντε περιοχές:

1. Περιοχή 2. Περιοχή 3.Περιοχή 4. Περιοχή 5. Περιοχή


επιγραφών σταθερών τύπων μεταβλητών υποπρογραμμάτων

• Ισχύουν δύο κανόνες για το τμήμα των δηλώσεων:


 Μοναδικότητα (κάθε δήλωση είναι μοναδική)
 Ορισμός πριν την χρήση (κάθε δήλωση πρέπει να ορισθεί πριν
χρησιμοποιηθεί για πρώτη φορά) 10
1
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τμήμα Δηλώσεων-Περιοχή Επιγραφών


• Η περιοχή επιγραφών δηλώνεται με τη λέξη κλειδί LABEL και
περιέχει τις επιγραφές (labels) που πρόκειται να
χρησιμοποιηθούν από τις εντολές GOTO του προγράμματος

LABEL Επιγραφή 1, Επιγραφή 2, …, Επιγραφή Ν)

• Σαν επιγραφή μπορεί να χρησιμοποιηθεί ένας οποιοσδήποτε


ακέραιος, χωρίς πρόσημο, έως τέσσερα ψηφία.
 label 10, 9999, 80;

11
1

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τμήμα Δηλώσεων-Περιοχή Σταθερών1/3


• Αν σε ένα πρόγραμμα χρησιμοποιήσουμε συχνά κάποια τιμή (π.χ.
π=3,1415…) αντί να γράφουμε την τιμή αυτή κάθε φορά που
χρειάζεται μπορούμε να της δώσουμε ένα συμβολικό όνομα (π.χ.
pi) και να χρησιμοποιήσουμε αυτό το συμβολικό όνομα αντί της
πραγματικής τιμής
• Αυτό προσφέρει:
 Ευκολία στην ανάπτυξη αλλά και διόρθωση των προγραμμάτων
 Αποφυγή λαθών, ειδικά στην περίπτωση που η τιμή που
αντικαθιστούμε περιέχει πολλά ψηφία
 Ευκολία αλλαγής της τιμής της, γιατί αρκεί τη τιμή του συμβολικού
ονόματος και όχι κάθε εμφάνιση της τιμής στο πρόγραμμα 12
1
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τμήμα Δηλώσεων-Περιοχή Σταθερών2/3


• Η περιοχή σταθερών δηλώνεται με τη λέξη CONST και περιέχει σταθερές
που πρόκειται να χρησιμοποιηθούν στο πρόγραμμα
• Οι σταθερές δηλώνονται με το όνομά τους, το σύμβολο της ισότητας (=)
και την τιμή τους
CONST Ονομα = Τιμή;
: = :
: = :
• Για τα ονόματα των σταθερών ισχύει ότι ισχύει γενικά για τα ονόματα της
Pascal, δηλαδή είναι μοναδικά, δεν πρέπει να είναι κάποια λέξη-κλειδί
της Pascal, δε μπορεί να χρησιμοποιηθεί για άλλο σκοπό
• Η τιμή της σταθερά καθορίζει τον τύπο της
13
1

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τμήμα Δηλώσεων-Περιοχή Σταθερών3/3


• Π.χ. const meres=5;  Η πρώτη σταθερά είναι τύπου
integer, η δεύτερη και η τρίτη
pi=3.14159; τύπου real, η τέταρτη τύπου
boolean, και η πέμπτη τύπου
light=300000.0; char
 Υπάρχουν 3 σταθερές οι οποίες
Flag=true; είναι προδηλωμένες στην Pascal
και μπορούν να
Aster=‘*’; χρησιμοποιούνται χωρίς να
δηλώνονται (είναι οι δύο
boolean τιμές false και true και η
τιμή του μεγαλύτερου ακεραίου,
maxint)
14
1
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τμήμα Δηλώσεων-Περιοχή Τύπων1/3


• Εκτός από τους 4 στοιχειώδεις τύπους της Pascal (integer,
real, boolean και char) που είναι προδηλωμένοι στην Pascal,
ο προγραμματιστής μπορεί να ορίσει και νέους τύπους
δεδομένων
• Η περιοχή τύπων δηλώνεται με τη λέξη κλειδί Type και
περιέχει τους τύπους δεδομένων, που ορίζει ο
προγραμματιστής
• Ένας τύπος δεδομένων ορίζεται με ένα όνομα, το σύμβολο
της ισότητας (=) και τον προσδιορισμό του τύπου

15
1

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τμήμα Δηλώσεων-Περιοχή Τύπων2/3


TYPE Ονομα = Τύπος Δεδομένων;
: = :
: = :

• Για τα ονόματα των τύπων ισχύει ότι ισχύει για τα


ονόματα της Pascal
• Οι τύποι δεδομένων που ορίζει ο χρήστης μπορούν να
χρησιμοποιηθούν όπως ακριβώς χρησιμοποιούνται και οι
στοιχειώδεις τύποι δεδομένων της Pascal, και μπορεί να
είναι απαριθμητή, υποπεριοχής, δομημένοι, ή δείκτη

16
1
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τμήμα Δηλώσεων-Περιοχή Τύπων3/3

• Π.χ. type Day=(Mon,Tues,Wed,Thur,Fri,Sat,Sun);


DayNum=1…31;
pin = array[1…10] of integer;
num = record
x: integer; y:real;

17
1

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τμήμα Δηλώσεων-Περιοχή Μεταβλητών1/3


• Η περιοχή μεταβλητών δηλώνεται με τη λέξη κλειδί VAR και
περιέχει τις μεταβλητές που πρόκειται να χρησιμοποιηθούν στο
πρόγραμμα
• Μια μεταβλητή δηλώνεται με το όνομά της, το σύμβολο (:) και
δίπλα τον τύπο των τιμών της
VAR Ονομα = Τύπος Δεδομένων;
: = :
: = :
• Για τα ονόματα των μεταβλητών ισχύει ότι ισχύει γενικά για τα
ονόματα της Pascal

18
1
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τμήμα Δηλώσεων-Περιοχή Μεταβλητών2/3


• Θεωρώντας ότι ισχύουν οι τύποι δεδομένων που
ορίστηκαν προηγουμένως μπορούμε να γράψουμε:
var letter: char;
ok: boolean;
aktina: real;
mikos: integer;
Weekday: Day;
Date: DayNum;
19
1

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τμήμα Δηλώσεων-Περιοχή Μεταβλητών3/3


• Σημείωση: όταν περισσότερες από μια μεταβλητές
είναι του ίδιου τύπου μπορούν να δηλωθούν μαζί:
var x: integer;
y: integer;
z: integer;
• Μπορούμε να γράψουμε:
var x,y,z: integer;

20
2
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ

Τμήμα Δηλώσεων
Ηπείρου

Περιοχή Υποπρογραμματων
• Στην περιοχή αυτή ορίζονται 2 είδη
υποπρογραμματων:
 οι διαδικασίες (procedures)
 οι συναρτήσεις (functions)

21
2

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τμήμα Δηλώσεων-Περιοχή Προτάσεων1/2


• Το τμήμα προτάσεων περιέχει τις εκτελέσιμες εντολές του
προγράμματος
• Αρχίζει με τη λέξη-κλειδί begin και τελειώνει με τη λέξη-
κλειδί end.
• Οι εκτελέσιμες προτάσεις ορίζουν τις λειτουργίες που
πρόκειται να εκτελεστούν πάνω στα στοιχεία, που
δηλώνονται στο τμήμα των δηλώσεων και περιέχουν εντολές
της Pascal, κλήσεις ενσωματωμένων συναρτήσεων και
διαδικασιών της Pascal, κλήσεις συναρτήσεων και
διαδικασιών του χρήστη, κλπ
22
2
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τμήμα Δηλώσεων-Περιοχή Προτάσεων2/2


• Η Pascal είναι σειριακή γλώσσα προγραμματισμού
• Αυτό σημαίνει ότι οι προτάσεις του προγράμματος εκτελούνται σειριακά,
η μία μετά την άλλη με τη σειρά που είναι δηλωμένες στο πρόγραμμα
και όχι ταυτόχρονα
• Ισχύουν τα ακόλουθα:
 Το τέλος των δηλώσεων και των προτάσεων δηλώνεται με το
διαχωριστικό χαρακτήρα (;)
 O διαχωριστικό χαρακτήρας (;) πριν από τη λέξη-κλειδί end είναι
προαιρετικός
 Στο τέλος του προγράμματος, δηλαδή μετά το end βάζουμε την
τελεία (.)
23
2

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Δομή Προγράμματος Pascal


program όνομα_προγράμματος(αρχείο 1,αρχείο2,…,αρχείοΝ;
label επιγραφή1,επιγραφή2,…,επιγραφήΝ ;
const δήλωση σταθεράς;
: :
δήλωση σταθεράς;
type δήλωση τύπου;
: :
δήλωση τύπου;
var δήλωση μεταβλητής;
: :
δήλωση μεταβλητής;
begin
εκτελέσιμη πρόταση;
: :
: :
εκτελέσιμη πρόταση;
end.
24
2
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Παράδειγμα
• Να γραφεί Program sum_diff(input,output);
var x,y,sum,dif: integer;
πρόγραμμα το begin
οποίο να read(x,y);
διαβάζει δύο sum:=x+y;
αριθμούς και να dif:=x-y;
τυπώνει το writeln(‘Athroisma=‘, sum);
writeln(‘Diafora=‘, dif);
άθροισμα και τη end.
διαφορά τους

25
2

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ

Τελεστής Ανάθεσης
Ηπείρου

Εντολές Εισόδου/Εξόδου1/2
• Σκοπός κάθε προγράμματος είναι να διαχειρίζεται δεδομένα που
τα παρέχει ο χρήστης και να παράγει τα ζητούμενα αποτελέσματα
• Κάθε γλώσσα προγραμματισμού παρέχει τα μέσα επικοινωνίας
των προγραμμάτων με το χρήστη
• Στην Pascal για την είσοδο και την έξοδο δεδομένων δε θεωρείται
κάποια συγκεκριμένη συσκευή όπως πληκτρολόγιο, εκτυπωτής
κ.α. αλλά το πρόγραμμα αντιμετωπίζεται σαν μια διαδικασία που
παίρνει πληροφορίες (δεδομένα) από μια μονάδα εισόδου και
μεταφέρει πληροφορίες (αποτελέσματα) σε μια μονάδα εξόδου
26
2
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ

Τελεστής Ανάθεσης
Ηπείρου

Εντολές Εισόδου/Εξόδου2/2
• Στην επικεφαλίδα του προγράμματος γίνεται αναφορά στις
μονάδες εισόδου/εξόδου με τη μορφή program first(input,
output) που δηλώνει το πρόγραμμα που κάνει χρήση των
βασικών μονάδων εισόδου και εξόδου, όπως αυτές
καθορίζονται από το συγκεκριμένο υπολογιστικό σύστημα
στο οποίο εκτελείται το Pascal πρόγραμμα

27
2

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τελεστής Ανάθεσης1/3
• Σκοπός: Ανάθεσης της τιμής μια έκφρασης σε μια
μεταβλητή
Ονομα Μεταβλητής := Έκφραση

• Εξηγήσεις: Υπολογίζεται η τιμή της έκφρασης και


ανατίθεται (καταχωρείται) στη μεταβλητή
a:=5+2; Έχει σαν αποτέλεσμα την ανάθεση της τιμής 7 στη μεταβλητή a
b:=4.1*2; Θέτει στη μεταβλητή b την τιμή 8.2;
c:=‘F’; Θέτει στη μεταβλητή c το χαρακτήρα ‘F΄;
x:=3>1; Θέτει στη μεταβλητή x την τιμή true; 28
2
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τελεστής Ανάθεσης2/3
• Κανόνες:
 Ο τύπος της τιμής της έκφρασης πρέπει να είναι ίδιος με τον τύπο της
μεταβλητής, πχ var a : integer, b: real, c : char, x : boolean;
 Εξαίρεση στον προηγούμενο κανόνα η δυνατότητα να θέτουμε
ακέραιες τιμές (integer) σε μεταβλητές τύπου real, πχ αν a : real τότε
είναι αποδεκτές: a:=4; a:=5+4*2;
 Μπορούμε να χρησιμοποιήσουμε την ίδια μεταβλητή ταυτόχρονα στο
αριστερό μέρος του τελεστή ανάθεσης και μέσα στην έκφραση, στο
δεξιό μέρος του τελεστή, πχ αν a είναι 5 τότε η εκτέλεση της
πρότασης: a:= a +1; έχει σαν αποτέλεσμα την ανάθεση στην a της
τιμής 6
29
2

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Τελεστής Ανάθεσης3/3
• Παράδειγμα: program example;
var a,b: integer;
flag: boolean;
res:real;
begin
a:=234;
b:=a*5-a div 2;
flag:=(a>100) and (b>1000);
res:=a/b;
end.
30
3
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Read (Εντολή Εισόδου)1/9


• Σκοπός: Εισαγωγή (ανάγνωση) τιμών από τη μονάδα
εισόδου και ανάθεση σε μεταβλητές του προγράμματος
READ(INPUT,V1,V2,…Vn) ή READ(V1,V2,…Vn)

• Εξηγήσεις: Με την εντολή αυτή εισάγονται τιμές από τη


μονάδα εισόδου και αποθηκεύονται στις μεταβλητές V1…Vn
του προγράμματος με τη σειρά που είναι διατεταγμένες
 Αν η μονάδα εισόδου είναι το πληκτρολόγιο, τότε μόλις
εκτελεστεί η εντολή, η εκτέλεση του προγράμματος σταματά
και περιμένει δεδομένα από το πληκτρολόγιο για να τα
τοποθετήσει στις μεταβλητές και να συνεχίσει την εκτέλεση
του υπόλοιπου προγράμματος 31
3

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Read (Εντολή Εισόδου)2/9


Παράδειγμα:
 read(x); Με δεδομένο 3, αναθέτει στη μεταβλητή x την τιμή 3
 read(a,b,c); Με δεδομένα από το πληκτρολόγιο: 5 7 83 έχει ως
αποτέλεσμα την ανάθεση των τιμών 5 7 83 στις μεταβλητές a, b και c
αντίστοιχα
Παρατηρήσεις:
 Η εντολή read(v1, v2, …, vn) είναι ισοδύναμη με την ακολουθία εντολών:
read(v1) ; read(v2); …;read(vn);
 Τα δεδομένα εισόδου ενός προγράμματος αντιμετωπίζονται σα μια
συνεχόμενη ροη π.χ. οι εντολές: read(a) ; read(b,c,d); read(x); με δεδομένα 2
5 8 1 9 έχουν σαν αποτέλεσμα την ανάθεση των τιμών 2 5 8 1 και 9 στις
μεταβλητές a, b, c, και x αντίστοιχα 32
3
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Read (Εντολή Εισόδου)3/9


• Τα δεδομένα που παρέχει μια μονάδα εισόδου στο πρόγραμμα
είναι συνήθως πεπερασμένου μήκους
• Το τέλος των δεδομένων δηλώνεται με ένα ειδικό χαρακτήρα
ελέγχου: end-of-file character και συμβολίζεται <eof>
• Για την ανίχνευση αυτού του χαρακτήρα από τα προγράμματα, η
Pascal παρέχει μια λογική (τύπου boolean) συνάρτηση:
EOF(INPUT) ή EOF της οποίας η τιμή είναι αληθής στο τέλος των
δεδομένων και ψευδής σε οποιαδήποτε άλλη περίπτωση
• Τα δεδομένα εισόδου να είναι οργανωμένα σε σειρές [end-of-line
character, EOLN(INPUT) ή EOLN]
33
3

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Read (Εντολή Εισόδου)4/9


• Κανόνες:
 Ο τύπος των δεδομένων πρέπει να συμφωνεί με τον τύπων
των μεταβλητών και μπορεί να είναι μόνο τύπου integer, real ή
char ή ενός τύπου που είναι υποπεριοχή των τύπων integer ή
char
 Αν τα δεδομένα στη τρέχουσα σειρά εισόδου είναι λιγότερα
από τις μεταβλητές που αναφέρονται στην εντολή read τότε η
ανάγνωση δεδομένων συνεχίζει στην επομένη σειρά
 Λάθος εκδηλώνεται, όταν διαβαστεί το τελευταίο δεδομένο
εισόδου και υπάρχουν μεταβλητές στην εντολή read που δεν
έχουν πάρει τιμή 34
3
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Read (Εντολή Εισόδου)5/9


• Κανόνες:
 Ανάγνωση αριθμητικών δεδομένων:
 Τα αριθμητικά δεδομένα πρέπει να χωρίζονται μεταξύ τους
με έναν τουλάχιστον κενό χαρακτήρα
 Κατά την ανάγνωση αριθμητικών δεδομένων (ακέραιων ή
πραγματικών), οι κενοί χαρακτήρες που προηγούνται ή
βρίσκονται μεταξύ των αριθμών αγνοούνται
 Ο χαρακτήρας ελέγχου <eoln> κατά την ανάγνωση
αριθμητικών αγνοείται και η ανάγνωση συνεχίζει στην
επόμενη σειρά
35
3

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Read (Εντολή Εισόδου)6/9


• Κανόνες:
 Ανάγνωση χαρακτήρων:
 Κατά την ανάγνωση χαρακτήρων λαμβάνονται υπόψη
τόσο οι κενοί χαρακτήρες όσο και οι χαρακτήρες ελέγχου
<eoln>
 O χαρακτήρας ελέγχου <eoln> κατά την ανάγνωση
χαρακτήρων, διαβάζεται, ανατίθεται στην αντίστοιχη
μεταβλητή της εντολής read και η ανάγνωση συνεχίζει
στην επόμενη σειρά
36
3
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Read (Εντολή Εισόδου)6/9


• Κανόνες:
• Ανάγνωση αριθμών και χαρακτήρων
• Ιδιαίτερη προσοχή απαιτείται όταν η σειρά εισόδου
περιέχει αριθμητικά δεδομένα και χαρακτήρες
π.χ. var r:real; a) 34.1r@w89 r=34.1 a=‘f’ b=‘@’ c=‘w’ x=89
a, b, c:char; b) 1E10EH 897K r=2E10 a=‘E’ b=‘H’ c=‘ ‘ x=897
c) +23E-3D5634 r=23E-3 a=‘D’ b=‘5’ c=‘6’ x=34
x:integer; d) 45F.1 r=45.0 a=‘F’ b=‘.’ c=‘1’ x=62
η εντολή read(r,a,b,c,x) 62

37
3

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Read (Εντολή Εισόδου)7/9


• Σημείωση:
• σε πολλές υλοποιήσεις της Pascal το τέλος ενός
αριθμητικού δεδομένου δηλώνεται με ένα κενό
χαρακτήρα
• Οποιοσδήποτε άλλος χαρακτήρας προκαλεί
λάθος
• Πρόβλημα δημιουργείται όταν υπάρχει εναλλαγή
αριθμητικών και μη δεδομένων
38
3
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Read (Εντολή Εισόδου)8/9


• Σημείωση:
 Το πρόβλημα λύνεται γράφοντας ένα κενό χαρακτήρα μετά από κάθε
αριθμητικό δεδομένο και διαβάζοντας τις μεταβλητές τύπο
χαρακτήρα δύο φορές, μία για να διαβαστεί το κενό και μία για να
διαβαστεί το πραγματικό δεδομένο, π.χ. 34 7 67 διαβάζοντας την
εντολή read(x,a,a,y) με x,y,:integer και a:char
– Αρχικά η μεταβλητή a παίρνει τιμή ‘ ’ και στην συνέχεια την τιμή ‘f’
– Παρατηρούμε ότι για τα ίδια δεδομένα η εντολή read(x,a,y) προκαλεί
λάθος γιατί προσπαθεί να διαβάσει την τιμή της ακεραίας μεταβλητής
y αρχίζοντας από το χαρακτήρα ‘f’

39
3

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Read (Εντολή Εισόδου)9/9


• Παράδειγμα: program reading(input);
var x,y: integer;
a,b,c:real;
begin
read(x);
y:=x mod 2;
read(a,b);
c:=a/b;
end.

40
4
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Readln1/2
• Σκοπός: Η εντολή readln (read until end of line) αποτελεί μια
εδική μορφή της εντολής read που επιτρέπει περισσότερο
έλεγχο στα δεδομένα που είναι οργανωμένες σε σειρές
READLN(INPUT) ή READLN
READLN(INPUT,V1,V2,…Vn) ή READ(V1,V2,…Vn)

• Εξηγήσεις: η εντολή αυτή προκαλεί παράλειψη όλων των


δεδομένων που έμειναν αχρησιμοποίητα στη τρέχουσα σειρά
δεδομένων συμπεριλαμβανομένου και του χαρακτήρα
<eoln>. Αυτό σημαίνει ότι η επόμενη εισαγωγή δεδομένου
θα γίνει από την αρχή της επόμενης σειράς των δεδομένων 41
4

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Readln2/2
• Παράδειγμα: Έστω τα δεδομένα:
23 4 5
10 8 79 6
84 91 30
και οι εντολές:
readln(a,b);readln(c);readln(d,e) αποθηκεύουν a=23,
b=4, c=10, d=84, e=91’

42
4
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Write (Εντολή Εξόδου)1/7


• Σκοπός: Μεταφορά (εγγραφή) δεδομένων στη μονάδα
εξόδου
WRITE(OUTPUT,V1,V2,…Vn) ή WRITE(V1,V2,…Vn)

• Εξηγήσεις: η εντολή αυτή μεταφέρει τις τιμές των


παραμέτρων της, στη βασική μονάδα εξόδου (π.χ.
οθόνη) με την ίδια διάταξη που αναφέρονται στην
εντολή

43
4

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Write (Εντολή Εξόδου)2/7


• Παράδειγμα: var c:char;
a, b:integer;
k:boolean;
με τιμές c:=‘M’;a:=4;,b:=15;k:=false;
Τότε:
write(a,b,c,k);  4 15 M FALSE
write(a,b,a+b,2*b-a,a<b);  4 15 19 26 TRUE
write(‘a=’, a, ‘b=’,b, ‘Sum=’,a+b,’Letter=c’);  a=4 b=15, Sum=19
44
Letter=M 4
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Write (Εντολή Εξόδου)3/7


• Παράδειγμα: program print2(input,output);
var x,y: integer;
a,b,c,d,e:real;
begin
read(x);
y:=x mod 2;
write(y)
read(a,b);
c:=a+b;
d:=a/b;
e:=a*b;
write(a,b,c,d,e);
end.
45
4

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Write (Εντολή Εξόδου)4/7


• Παράδειγμα:
program print1(input,output);
var x: integer;
a,b:real;
begin
read(x);
write(x mod 2); -> or write(‘apotelesma=‘, x mod 2);
read(a,b);
write(a,b,a+b,a/b,a*b);-> or write(a,b,’sum=‘,a+b,’div=‘,a/b,’mul=‘,a*b)
end.

46
4
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Write (Εντολή Εξόδου)5/7


• Παρατηρήσεις:
 Μπροστά από τους αριθμούς (στη μονάδα εξόδου) το (-) αν είναι αρνητικοί ή ο κενός
χαρακτήρας αν είναι θετικοί. Τα δεδομένα τύπου real τυπώνονται σαν αριθμοί κινητής
υποδιαστολής (δηλ. x.xx Exx)
αν r=-324.586 τότε το αποτέλεσμα της εντολής write(r) είναι - 3.2158600000Ε+02
 Μπορούμε να δηλώσουμε το μήκος (σε χαρακτήρες) της τιμής που τυπώνεται βάζοντας
δίπλα από κάθε παράμετρο δύο τελείς (:) και μια ακέραια τιμή που δηλώνει το
επιθυμητό μήκος
αν a=-5, b=true και r=-324.586 τότε:
write(a,b) ;  -5 TRUE
write(a:3,b:6);  -5 TRUE
write(r: 10);  -3.246E+02

47
4

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Write (Εντολή Εξόδου)6/7


• Παρατηρήσεις:
 Επίσης μπορούμε να δηλώσουμε και τον αριθμό των
δεκαδικών ψηφίων που θέλουμε να τυπωθούν μετά από
το δεκαδικό σημείο, θέτοντα πάλι (:) και μια δεύτερη
ακέραια τιμή που δηλώνει τον επιθυμητό αριθμό των
δεκαδικών
π.χ. αν r=-324.586, τότε: write(r:6:1); -> -324.6

48
4
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Write (Εντολή Εξόδου)7/7


• Παράδειγμα: program circle(input,output); ->circle;
 Να γραφεί πρόγραμμα το οποίο
const pi=3.1459265;
να διαβάζει την ακτίνα ενός var r,per,emb:real;
κύκλου (πραγματικός αριθμός) και begin
να τυπώνει την ακτίνα, την
περιφέρεια και το εμβαδόν του read(r);
κύκλου per:=2*pi*r;
 Για δεδομένο 3 τότε: emb:=pi*r*r;  or emb:=pi*sqr(r);
3.0000000000Ε+00 writeln(r,per,emb);
1.884955590οΕ+01 end.
2.8274333850Ε+01
 write(r:8,perif:10,emb:10) τότε:
3.0Ε+00
1.885Ε+01
2.827Ε+01 49
4

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Writeln1/2
• Σκοπός: writeln (write until line) αποτελεί μια ειδική μορφή
της εντολής write που επιτρέπει την οργάνωση των
δεδομένων εξόδου (αποτελεσμάτων) σε σειρές
WRITELN(OUTPUT) ή WRITELN
WRITELN(INPUT,V1,V2,…Vn) ή WRITE(V1,V2,…Vn)
• Εξηγήσεις: H εντολή αυτή μεταφέρει ένα χαρακτήρα ελέγχου
<eoln> στη συσκευή εξόδου προκαλώντας έτσι τη δημιουργία
μιας νέας (κενής) σειράς
• Παράδειγμα: write(5+2,5-2,5*2)  7 3 10
write(5 DIV 2,5 MOD 2);  2 1
50
5
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Writeln2/2
• Παράδειγμα: program ektiposi(input,output);
var x,y,d,m:integer;
Ποια είναι η εκτύπωση του begin
ακόλουθου προγράμματος, readln(x);
όταν τα δεδομένα έχουν την readln(y);
d:=x div y;
μορφή:
writeln(‘Div=’,d);
976 writeln;
z:=x mod y;
45
write(‘Mod=’,m);
end.

51
5

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Ασκήσεις1/5
Ποιες αντικαταστάσεις program askisi1(input,output);
Const mark=‘@’

είναι σωστές και ποιες var


price=456.89;
x,y,z:integer;

όχι; a,b:real;
k,m:char;
flag:boolean;
begin
Σωστό
x:=245;
Σωστό
y:=x+45+56*6;
Σωστό
z:=x div y+5*(x mod y);
Λάθος
z:=z+a div b;
a:=x+y+z; Σωστό
b:=x/y; Σωστό
z:=x/y; Λάθος
y:=23*x*180; Σωστό
b:=23*x*180; Σωστό
k:=‘1’; Σωστό
x:=x+k; Λάθος
m:=‘ab’; Λάθος
flag:=(x>y) and (a<b) or (k<>m); Σωστό
end.
52
5
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Ασκήσεις2/5
Να γραφεί ένα πρόγραμμα το
program pelatis(input,output);
οποίο να διαβάζει το κόστος
var cost,amount,change:real;
ενός είδους, το ποσό που
begin
έδωσε ο πελάτη και να
write(‘cost=’); readln(cost);
τυπώνει το κόστος, το ποσό
write(‘amount=’); readln(amount);
και τα ρέστα με την εξής
writeln(‘cost $’,cost:6:2);
μορφή:
writeln(‘amount $’,amount:6:2);
cost $xxx.xx writeln(‘change $’,(amount-cost):6:2);
end.
amount $xxx.xx
change $xxx.xx

53
5

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Ασκήσεις3/5
Να γραφεί πρόγραμμα program seconds(input,output);
που να διαβάζει τις var h,m,s:integer;
ώρες, τα λεπτά και τα total:real;
δευτερόλεπτα και να begin
write(‘hours=’); readln(h);
τυπώνει το συνολικό write(‘minutes=’); readln(m);
αριθμό δευτερολέπτων write(‘seconds=’); readln(s);
total:=h*3600+m*60+s;
writeln(‘total=’,total:8:2);
end.

54
5
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Ασκήσεις4/5
Να γραφεί πρόγραμμα το program askisi4;
οποίο διαβάζει 5 var a,b,c,d,e,sum:integer;
mo:real;
αριθμούς και να τυπώνει begin
το άθροισμα και τον μέσο write(‘dwse arithmo 1=’); readln(a);
write(‘dwse arithmo 2 =’); readln(b);
όρο write(‘dwse arithmo 3 =’); readln(c);
write(‘dwse arithmo 4 =’); readln(d);
write(‘dwse arithmo 5 =’); readln(e);
sum:=(a+b+c+d+e);
mo:=sum/5;
writeln(‘to athroisma einai’,sum);
writeln(‘o mesos oros einai’,mo);
end.
55
5

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Ασκήσεις5/5
Να γραφεί πρόγραμμα που program embado;
να υπολογίζει το εμβαδόν var a,b,c,s,e:real;
ενός τριγώνου με πλευρές begin
write(‘dwse tis pleyres:’);
a,b,c. Tο εμβαδόν δίνεται
readln(a,b,c);
από τον τύπο: s:=(a+b+c)/2;
Εμβαδόν= S ( S  A)( S  B )( S  C ) e:=sqrt(s*(s-a)*(s-b)*(s-c));
writeln(‘embadon=’,e);
όπου: 2S  A  B  C end.

56
5
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολές συνθήκης
• Οι προτάσεις ενός προγράμματος εκτελούνται σειριακά, αρχίζοντας
από την πρόταση του κύριου προγράμματος και συνεχίζοντας με τις
επόμενες προτάσεις έως ότου εκτελεστεί και η τελευταία
• Υπάρχουν περιπτώσεις όπου απαιτείται η εκτέλεση μια πρότασης
ανάλογα με την ισχύ ή όχι κάποιας συνθήκης ή η επιλογή και η
εκτέλεση μιας πρότασης ανάμεσα από πολλές άλλες προτάσεις
ανάλογα με την τιμή μιας έκφρασης
• Η Pascal υποστηρίζει για το σκοπό αυτό δύο εντολές συνθήκης, την if
και την case
Εντολή Συνθήκης = Εντολή if
Εντολή case

57
5

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Σύνθετες Προτάσεις
• Υπάρχουν περιπτώσεις που απαιτείται η BEGIN
ισχύς μια εντολής να μην αναφέρεται σε
μια μόνο πρόταση αλλά σε μια ακολουθία Πρόταση 1
προτάσεων που πρέπει να εκτελεστούν
• Σύνθετη πρόταση ονομάζεται μια Πρόταση 2
ακολουθία προτάσεων που περικλείεται .
.
μεταξύ των λέξεων-κλειδιών begin, end και .

χωρίζονται με το διαχωριστικό (;)


• Εκτέλεση μιας σύνθετης πρότασης σημαίνει Πρόταση Ν
εκτέλεση των περιεχομένων προτάσεων με
τη σειρά που είναι γραμμένες END

58
5
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή if1/3
• Σκοπός: Εκτέλεση μια πρότασης αν ισχύει κάποια συνθήκη ή επιλογή
ανάμεσα από δύο προτάσεις
IF Λογική ΈκφρασηTHEN Πρόταση 1
[ELSE Πρόταση 2]

• Εξηγήσεις: Στην πλήρη μορφή της εντολής (δηλαδή όταν υπάρχει τμήμα then
και τμήμα else) αρχικά υπολογίζεται η τιμή της λογικής έκφρασης και αν
είναι αληθής (true) τότε (then) εκτελείται η Πρόταση 1, αλλιώς (else)
εκτελείται η Πρόταση 2
• Αν δεν υπάρχει else στην εντολή, τότε αν η τιμή της λογικής έκφρασης είναι
true εκτελείται η πρόταση του τμήματος then ενώ αν είναι false η εκτέλεση
συνεχίζεται με τις προτάσεις που υπάρχουν μετά την εντολή if
59
5

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή if2/3
Αν e μια Λογική Έκφραση και S, S1, S2 IF e THEN S1
είναι εκτελέσιμες προτάσεις τότε η ροή
εκτέλεσης των προτάσεων: if e then s1
else s2
IF e THEN S1 ELSE S2
e False
?

True False True


e
? S1

S1 S2

Υπόλοιπες προτάσεις
προγράμματος
Υπόλοιπες προτάσεις
60
προγράμματος 6
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή if3/3
• Παράδειγμα: program min_max1;
var k,m:real;
Να γραφεί πρόγραμμα το
begin
οποίο να διαβάζει δύο write(‘give 2 numbers:’);
αριθμούς και να τυπώνει readln(k,m);
το μεγαλύτερο και το If k>m then
μικρότερο writeln(‘max=’,k,‘min=’,m)
else
writeln(‘max=’,m,‘min=’,k)
end.

61
6

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Φωλιασμένες Εντολές if1/5


• Οι προτάσεις που υπάρχουν στο τμήμα then ή στο τμήμα else μιας
εντολής if μπορούν να περιέχουν επίσης μια άλλη εντολή if, κοκ.
Για παράδειγμα:
if x>0 then writeln(‘positive’)
else if x<0 then writeln(‘negative’)
else writeln(‘zero’)
 O γενικός κανόνας που ισχύει είναι ότι κάθε else αντιστοιχεί στο
πιο πρόσφατο if. Για παράδειγμα:
if (1) x>0 then (1) writeln(‘positive’)
else (1) if (2) x<0 then (2) writeln(‘negative’)
else (2) writeln(‘zero’)

62
6
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Φωλιασμένες Εντολές if2/5


• Σε περιπτώσεις όπου λείπουν κάποια τμήματα else ή υπάρχουν πολλές
φωλιασμένες εντολές if ή γενικότερα όταν υπάρχει ασάφεια
αντιστοίχισης, σχηματίζουμε σύνθετες προτάσεις χρησιμοποιώντας
begin, end. Για παράδειγμα:
if e1 then if e2 then S1 else S2

• Σύμφωνα με το γενικό κανόνα το else S2 αντιστοιχεί στο if με τη λογική


έκφραση e2. Η πρόταση γράφεται ισοδύναμα:

if e1 then begin

if e2 then S1 else S2

end 63
6

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Φωλιασμένες Εντολές if3/5


• Αν θέλαμε το else S2 να αντιστοιχεί στο πρώτο if με τη
λογική έκφραση e1 θα έπρεπε να γράψουμε την
πρόταση ως εξής:

if e1 then begin

if e2 then S1

end

else S2
64
6
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Φωλιασμένες Εντολές if4/5


• Παράδειγμα: program min_max2;
var k,m:real;
Να γραφεί πρόγραμμα το
begin
οποίο να διαβάζει δύο write(‘give 2 numbers:’);
αριθμούς και να τυπώνει readln(k,m);
το μεγαλύτερο και το If k>m then
μικρότερο ή ότι είναι ίσοι writeln(‘max=’,k,‘min=’,m)
else if k<m then
writeln(‘max=’,m,‘min=’,k)
else writeln(k,m,‘equal’)
end.

65
6

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Φωλιασμένες Εντολές if5/5


• Παράδειγμα: program exisosi;
var a,b,x:real;
Λύση (με διερεύνηση) begin
της πρωτοβάθμιας write(‘a=’); readln(a);
write(‘b=’); readln(b);
εξίσωσης: ax+b=0
If a=o then if b=0 then writeln(‘AORISTH’)
else writeln(‘ADYNATH’)
else begin
x:=-b/a;
writeln(‘x=’,x)
end
end.

66
6
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Case1/4
• Σκοπός: Η επιλογή μιας πρότασης, ανάμεσα από μια ομάδα
προτάσεων, σύμφωνα με την τιμή μιας έκφρασης
CASE Eκφραση OF
Τιμή1: Πρόταση1;
Τιμή2: Πρόταση2;
: :
ΤιμήN: Πρόταση2;
END

• Εξηγήσεις: Αρχικά υπολογίζεται η τιμή της έκφρασης


(ονομάζεται και επιλογέας) και στην συνέχεια η τιμή αυτή
συγκρίνεται με τις τιμές του case
67
6

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Case2/4
• Όταν βρεθεί μια τιμή ίση με την τιμή της έκφρασης,
τότε η αντίστοιχη πρόταση εκτελείται
• Η τιμή της έκφρασης μπορεί να είναι οποιουδήποτε
διατεταγμένου τύπου, δηλαδή στοιχειώδη τύπου
εκτός από real ή απαριθμητού τύπου ή τύπου
υποπεριοχής

68
6
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Case3/4
• Αν e είναι μια έκφραση και Si είναι εκτελέσιμες προτάσεις
τότε η ροή εκτέλεσης της εντολή case. Δίνεται:
e?

Τιμή 1 Τιμή 2 Τιμή 3 Τιμή 4

S1 S2 S3 S4

end

69
6

Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Εντολή Case4/4
• Παράδειγμα: program alex;
var ch:char;
Nα γραφεί πρόγραμμα το begin
οποίο να διαβάζει ένα read(ch);
χαρακτήρα Α..F και να case ch of
τυπώνει τα μηνύματα ‘A’: writeln(‘Excellent’);
¨Excellent”, “Very good”, ‘B’: writeln(‘Very good’);
‘C’: writeln(‘Good’);
“Good”, “Fair”, “Poor” και
‘D’: writeln(‘Fair’);
“Bad” αντίστοιχα για τις ‘E’: writeln(‘Poor’);
τιμές A,B,C,D,E και F ‘F’: writeln(‘End’);
end
end.
70
7
Προγραμματισμός Ι – Βασική δομή pascal, Εντολές συνθήκης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ
Ηπείρου

Ασκήση
program exisosi;
var a,b,c,D,x,x1,x2:real;
• Παράδειγμα: begin
write( ‘Dose ta a,b,c:’)
readln(a,b,c);
Nα γραφεί πρόγραμμα If a=0 then if b=o then if c=0 then writeln(‘Aoristh’)
για την επίλυση της else writeln(‘Adynath’)
else begin {b=0}
δευτεροβάθμιας x:=-c/b;
writeln(‘1 lysh x=’,x);
εξίσωσης ax2+bx+c end

όπου a, b και c
else begin
D:=sqr(b)-4*a*c;
πραγματικοί αριθμοί if D<0 then writeln(‘2 rizes migadikes’)
else if D=0 then writeln(‘diplh riza x=’, -b/(2*a))
else begin
x1=(-b+sqr(D))/(2*a);
x2=(-b-sqr(D))/(2*a);
writeln(‘2 rizes:’,x1,x2)
end
end 71
end. 7

Ενότητα 3 : Εντολές Επανάληψης


Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σκοποί ενότητας
• Να περιγραφούν αναλυτικά οι δυνατότητες των
εντολών επανάληψης.
• Να αναλυθεί με ακρίβεια η χρησιμότητα/σκοπός
των εντολών επανάληψης.
• Να περιγραφούν οι συντακτικοί κανόνες των
εντολών επανάληψης, while, repeat και for.
• Να αναλυθεί με ακρίβεια η χρησιμότητα/σκοπός
των φωλιασμένων Εντολών Επανάληψης
5
5

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Περιεχόμενα ενότητας
• Χρησιμότητα/Σκοπός Εντολών Επανάληψης
• Εντολή while
• Εντολή repeat
• Εντολή for
• Φωλιασμένες Εντολές Επανάληψης
• Παραδείγματα

6
6
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εντολές Επανάληψης
• Σε ένα πρόγραμμα υπάρχουν περιπτώσεις που
απαιτείται η επαναληπτική εκτέλεση μίας ή
περισσοτέρων προτάσεων
• Ο αριθμός των επαναλήψεων καθορίζεται από μια
συνθήκη τερματισμού
• Η Pascal υποστηρίζει τρείς εντολές επανάληψης:
 While
 Repeat
 For 7
7

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή While1/7
• Σκοπός: Επαναληπτική εκτέλεση μια πρότασης, όσο ισχύει μια
δεδομένη συνθήκη
WHILE Λογική Έκφραση DO Πρόταση

• Εξηγήσεις: Αρχικά υπολογίζεται η τιμή της λογικής και αν είναι


αληθής (true) εκτελείται η πρόταση
• Η διαδικασία επαναλαμβάνεται όσο (while) η τιμής της λογικής
έκφρασης είναι αληθής (true) και σταματά μόλις γίνει ψευδής
(false)
while abs(x=a/x)> 1E-6 do x:=0.5*(x+a/x);
while c=‘ ’ do read(c); 8
8
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή While2/7
while e do S
Η ροή
εκτέλεσης της
πρότασης: e False
?
while e do S
True
S

Υπόλοιπες προτάσεις
προγράμματος
9
9

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή While3/7
• Παρατηρήσεις: Αν η λογική έκφραση είναι αρχική ψευδής, η πρόταση
μετά το do δεν εκτελείται
Π.χ. η επόμενη πρόταση δεν θα εκτελεστεί καμία φορά :
x:=-3;
while x>0 do x:=x-1;
• Πρέπει να φροντίζουμε ώστε οι μεταβλητές που καθορίζουν την τιμής
λογικής έκφρασης να έχουν την κατάλληλη τιμή πριν την εκτέλεση της
εντολής while
• Όταν θέλουμε να διαβάσουμε μια ακολουθία στοιχείων των οποίων δε
γνωρίζουμε το πλήθος, χρησιμοποιούμε μια ειδική τιμή που δηλώνει
το τέλος της ακολουθίας (ονομάζεται σκοπός: sentinel)
10
1
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή While4/7
• Κανόνες: Αν απαιτείται η επαναληπτική εκτέλεση μια ακολουθίας
προτάσεων τότε σχηματίζουμε μια σύνθετη πρόταση (begin, end)
Δηλαδή:
while Λογική Έκφραση do begin While c<> ‘ ’ begin
count: =count+1;
: Ομάδα read(c)
: Προτάσεων end;

end;

• To πότε θα σταματήσει η επαναληπτική εκτέλεση πρέπει να καθορίζεται


μέσα στην πρόταση ή την ακολουθά προτάσεων της εντολής
11
1

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή While5/7
• Παράδειγμα 1 program repetition;
var x: integer; Αποτέλεσμα:
begin 0
x:=0; 1
while x<4 do begin 2
writeln(x); 3
x :=x+1;
end
end.

12
1
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή While6/7
• Παράδειγμα 2: program repetition;
Να γραφεί πρόγραμμα var x, sum: real;
που διαβάζει ένα begin
σύνολο αριθμών και να sum:=0;
υπολογίζει το άθροισμα readln(x);
των τετραγώνων τους. while x<>-999 do begin
Το τέλος του συνόλου sum:=sum+sqr(x);
των αριθμών θα readln(x);
δηλώνεται με κάποιο end;
συγκεκριμένο αριθμό writeln(‘square sum =’, sum);
(π.χ. -999) end.

13
1

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή While7/7
• Παράδειγμα 3: program calculator;
var result, number: real;
telestis: char;
Να γραφεί πρόγραμμα που begin
να προσομοιώνει τις read(result);
λειτουργίες ενός read(telestis);
while telestis <> ‘=’ do
υπολογιστή τσέπης.
begin
Δηλαδή να διαβάζει μια read(number);
ακολουθία από case telestis of
αριθμητικές τιμές και ‘+’: result:=result+number;
‘-’: result:=result-number;
αριθμητικούς τελεστές (+,- ‘*’: result:=result*number;
,*,/), να υπολογίζει την ‘/’: result:=result/number;
έκφραση και να τυπώνει το end;
αποτέλεσμα όταν διαβάζει read(telestis);
end;
το χαρακτήρα ‘=’ writeln(result);
end.
14
1
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή Repeat1/5
• Σκοπός: Επαναληπτική εκτέλεση μιας ή περισσοτέρων προτάσεων, έως
ότου ικανοποιηθεί μια συνθήκη
REPEAT
: Ομάδα
: Προτάσεων
UNTIL Λογική Έκφραση

• Εξηγήσεις: Η εκτέλεση της εντολής ακολουθεί τα εξής βήματα:


1. Εκτελούνται οι προτάσεις μεταξύ του repeat…until
2. Υπολογίζεται η τιμή της λογικής έκφρασης
3. Αν η τιμή της είναι false επαναλαμβάνεται το βήμα 1 (Αν είναι true σταματά
η επαναληπτική εκτέλεση των προτάσεων και η εκτέλεση συνεχίζει με τις
υπόλοιπες προτάσεις του προγράμματος 15
1

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή Repeat2/5
• Η ροή εκτέλεσης της εντολής repeat

S1
(a) (b)
S2
repeat .
repeat
.

x:=0.5*(x+a/x);
.
count:=count+1;
until abs(x-a/x); <=1E-6 SΝ read(c)
Until c=‘ ’;
e False
?

True
Υπόλοιπες προτάσεις
προγράμματος

16
1
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή Repeat4/5
• Παράδειγμα 1 program again; program repetition;
var x: integer; var x: integer;
begin begin
x:=0; x:=0; Αποτέλεσμα:
Αποτέλεσμα:
repeat 0
while x<4 do begin 0
writeln(x); 1
writeln(x); 1
x:=x+1; 2
x:=x+1; 2
until x=4; end3 3
write(‘Telos’); end. Telos
end.

17
1

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή Repeat3/5
• Παράδειγμα 2: program sumN;
Υπολογισμός του var s,n,k: real;
αθροίσματος begin
S=1+3+5+…+N write(‘N='); readln(n);
s:=0;
k:=1;
repeat
s:=s+k;
k:=k+2;
until k>n;
writeln('S=', s);
end.

18
1
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή Repeat5/5
• Παράδειγμα 3: program calculator; program calculator;
var result, number: real; var result, number: real;
Να γραφεί το begin
telestis: char;
begin
telestis: char;

πρόγραμμα read(result); read(result);


read(telestis); read(telestis);
προσομοίωσης ενός while telestis <> ‘=’ do repeat

υπολογιστή τσέπης begin read(number);


read(number); case telestis of
χρησιμοποιώντας case telestis of
‘+’: result:=result+number;
‘+’: result:=result+number;
‘-’: result:=result-number;
την εντολή repeat ‘-’: result:=result-number;
‘*’: result:=result*number;
‘*’: result:=result*number;
‘/’: result:=result/number;
‘/’: result:=result/number; end;
end; read(telestis);
read(telestis); until telestis =‘=’;
end; writeln(result);
writeln(result); end.
end.
19
1

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

While vs Repeat1/3
• H εντολή while εκτελείται όσο η τιμής της λογικής έκφρασης είναι true ενώ
η εντολή repeat εκτελείται όσο η τιμής της λογικής έκφρασης είναι false
• Έτσι αν μια επαναληπτική ακολουθία προτάσεων είναι εκφρασμένη με την
εντολή while και θέλουμε να την εκφράσουμε με την εντολή repeat
αντιστρέφουμε την λογική έκφραση
• Για παράδειγμα οι ακόλουθες προτάσεις, στις οποίες διαβάζονται θετικοί
αριθμοί από την μονάδα εισόδου, υπολογίζεται η τιμής της έκφρασης και
τυπώνεται το αποτέλεσμα: repeat
read(x);
while x>0 do read(x);
begin If x>0 then begin
y:=2*sqrt(x)+1; y:=2*sqrt(x)+1;
writeln(y); writeln(y);
read(x); end
end; until x<=o; 20
2
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

While vs Repeat2/3
• H βασική διαφορά των εντολών while και repeat είναι ότι η
ακολουθία προτάσεων της εντολής repeat εκτελείται
τουλάχιστον μια φορά (έτσι η εντολή repeat ενδείκνυται στις
περιπτώσεις όπου απαιτείται μια τουλάχιστον εκτέλεση μιας
ακολουθίας προτάσεων για παράδειγμα ένα μενού)
• Η εντολή while υπολογίζει πρώτα την τιμή της λογικής
έκφρασης και στη συνέχεια εκτελεί την ακολουθία των
προτάσεων (υπάρχουν όμως περιπτώσεις όπου οι τιμές των
μεταβλητών που καθορίζουν την τιμής της λογικής έκφρασης
είτε είναι απροσδιόριστες ή δεν έχουν τη σωστή τιμή πριν την
πρώτης εκτέλεση της ακολουθία προτάσεων
21
2

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

While vs Repeat3/3
• Για την υλοποίηση μια τέτοιας περίπτωσης με την εντολή
while, θα πρέπει ο προγραμματιστής να θέσει αρχικές τιμές
στις μεταβλητές έτσι ώστε η λογική έκφραση να έχει αρχική
τιμή
π.χ. repeat read(ch) until ch=‘.’;
• Αν θέλουμε να εκφράσουμε την πρόταση χρησιμοποιώντας
την εντολή while θα έπρεπε να δώσουμε κάποια αρχική τιμή
στη μεταβλητή ch
π.χ. ch:=‘I’;
while ch <> ‘.’ do read(ch); 22
2
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή For1/6
• Σκοπός: Επαναληπτική εκτέλεση μιας πρότασης ή
περισσοτέρων προτάσεων για δεδομένο αριθμό
επαναλήψεων
FOR Μεταβλητή Ελέγχου :=Αρχική Εκφραση
ΤΟ Τελική Εκφραση DO Πρόταση;

FOR Μεταβλητή Ελέγχου :=Αρχική Εκφραση


DOWNΤΟ Τελική Εκφραση DO Πρόταση;

23
2

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή For2/6
• Εξηγήσεις: Μεταβλητή ελέγχου είναι μια οποιαδήποτε μεταβλητή που
χρησιμοποιείται σα μετρητής των επαναλήψεων
• Η μεταβλητή ελέγχου μπορεί να είναι οποιουδήποτε τύπου εκτός από real
• Αρχική έκφραση είναι μια έκφραση ίδιου τύπου με τη μεταβλητή ελέγχου και
προσδιορίζει την αρχική τιμή του μετρητή
• Τελική έκφραση είναι μια έκφραση ίδιου τύπου με τη μεταβλητή ελέγχου και
προσδιορίζει την τελική τιμη του μετρητή
for x:=1 to 10 do writeln(x);
for j:=m downto k do n:=n+2;
for x:=1 to 10 do writeln(x);
for day:=monday to Friday do begin
for c:=‘a’ to ‘e’ do writeln(c);
read(money);
for x:=3 to 1 do writeln(x);
total:=total+money;
end;
24 2
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή For3/6
• Η ροή εκτέλεσης της εντολής For

Μετρητής:=Αρχική Τιμή

Μετρητής: True Αύξηση


=Τελική S
Τιμή Μετρητή

False
Υπόλοιπες προτάσεις
προγράμματος

25
2

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή For4/6
• Εξηγήσεις: Στη δεύτερη σύνταξη της εντολής downto η τιμή του μετρητή
ελαττώνεται από την τιμή της αρχικής έκφρασης έως την τιμή της τελικής
έκφρασης:
for x:=10 downto 1 do writeln(x);
for c:=‘e’ to ‘a’ do writeln(c);
for x:=1 to 3 do writeln(x);

• Aν η τιμή της αρχικής έκφρασης είναι ίση με την τιμή της τελικής έκφρασης
και στους δύο τρόπου σύνταξης της εντολής, η πρόταση εκτελείται μια
φορά:

for x:=6 to 6 do writeln(x);


for x:=6 downto 6 do writeln(x);

26
2
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή For5/6
• Παρατηρήσεις: Η εντολή for χρησιμοποιείται όταν ο αριθμός των
επαναλήψεων είναι προκαθορισμένος σε αντίθεση με τις άλλες εντολές
επανάληψη while και repeat
• Mε την εκτέλεση της εντολής αρχικά υπολογίζονται οι τιμές των
εκφράσεων και καθορίζεται ο αριθμός των επαναλήψεων (έτσι μεταβολή
των εκφράσεων δεν προκαλεί διαφοροποίηση του αριθμού των
επαναλήψεων)

Επαναλήψεις=Τελική Εκφραση-Αρχική Εκφραση+1 (ένδειξη:to)


Επαναλήψεις=Αρχική Εκφραση-Τελική Εκφραση+1 (ένδειξη:downtoto)

27
2

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Η εντολή For6/6
• Παράδειγμα: program total;
Υπολογισμός του var N,i,x,sum,dyn: integer;
αθροίσματος begin
11+22+33+…Νn readln(N);
sum:=0;
for x:=1 to N do begin
dyn:=1;
for i:=1 to x do dyn:=dyn*x;
sum:=sum+dyn;
end;
writeln(‘Athroisma=', sum);
end.

28
2
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ανακεφαλαίωση Εντολών Επανάληψης1/2


• Οποιαδήποτε επαναληπτική εκτέλεση προτάσεων μπορεί να υλοποιηθεί
και τις τρεις εντολές που προσφέρει για αυτό το σκοπό η Pascal
• H εντολή for χρησιμοποιείται όταν ο αριθμός των επαναλήψεων είναι
δεδομένος και δεν καθορίζεται από κάποια συνθήκη
• Η εντολή while χρησιμοποιείται όταν απαιτείται ο έλεγχος μια συνθήκης
πριν την εκτέλεση της πρότασης (αντίθετα η εντολή repeat
χρησιμοποιείται στις περιπτώσεις όπου απαιτείται η εκτέλεση μια
πρότασης πριν το έλεγχο μια συνθήκης
• Η εντολή repeat ενδείκνυται στις περιπτώσεις όπου οι τιμές των
μεταβλητών που καθορίζουν την τιμή της λογικής έκφρασης είτε είναι
απροσδιόριστες ή δεν έχουν τη σωστή τιμή πριν την πρώτη εκτέλεσή της
πρότασης 29
2

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ανακεφαλαίωση Εντολών Επανάληψης2/2


• Παράδειγμα: Να γραφεί πρόγραμμα που να διαβάζει Ν αριθμούς και να
υπολογίζει το άθροισμά τους. Να γίνει και με τις τρεις εντολές
program athr1; program athr2; program athr2;
var N,num,counter,sum: var N,num,counter,sum: var N,num,counter,sum: integer;
integer; integer; begin
begin begin read(N);
read(N); read(N); sum:=0;
sum:=0; sum:=0; counter:=1;
counter:=1; counter:=1; while counter<=N do
for counter:=1 to N do begin repeat begin
read(num); read(num); read(num);
sum:=sum+ sum:=sum+num; sum:=sum+num;
num; counter:=counter+1; Counter:=counter+1
end; until counter>M end;
writeln(‘Athroisma=', sum); writeln(‘Athroisma=', sum); writeln(‘Athroisma=', sum);
end. end. end.

30
3
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Έλεγχος Επανάληψης με Μεταβλητές1/2


• Όταν η συνθήκη τερματισμού μια εντολής
επανάληψης while ή repeat είναι πολύπλοκη,
μπορούμε να αντικαταστήσουμε με μια
μεταβλητή τύπου boolean
• Oι μεταβλητές αυτές συχνά ονομάζονται
‘σημαίες’ (flags)

31
3

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Έλεγχος Επανάληψης με Μεταβλητές2/2


• Παράδειγμα: program first_divisor;
var num,divisor: integer;
Να γραφεί το flag: boolean;
πρόγραμμα το οποίο begin
να διαβάζει ένα read(num);
θετικό ακέραιο divisor:=2;
flag:=false;
αριθμό και να while not flag do begin
τυπώνει (αν υπάρχει) flag:=num mod divisor=0;
ένα διαιρέτη του divisor:=divisor+1;
end;
write(‘o arithmos’, num);
if flag then write(‘exei ena diaireth ton:’, divisor-1)
else write(‘den exei kanena diaireth’);
end.

32
3
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Φωλιασμένες Εντολές Επανάληψης1/2


• Η πρόταση που εκτελείται επαναληπτικά από
μια εντολή επανάληψης μπορεί να είναι μια
οποιαδήποτε πρόταση αποδεκτή από την
Pascal
• Συνεπώς μπορεί να είναι μια άλλη εντολή
επανάληψης δημιουργώντας έτσι
φωλιασμένες εντολές επανάληψης
33
3

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Φωλιασμένες Εντολές Επανάληψης2/2


• Παραδείγματα φωλιασμένων εντολών επανάληψης
αποτελούν οι ακόλουθες 4 προτάσεις, οι οποίες ας
σημειωθεί εκτελούνται 12 φορές και παράγουν το ίδιο
αποτέλεσμα:
1) x:=1; 2) x:=1; 3) x:=1; 4) for x:=1 to 3 do
while x<=3 do begin repeat while x<=3 do begin for y:=2 to 5 do;
y:=2; y:=2; y:=2; writeln(x,y);
while y<=5 do begin repeat repeat
writeln(x,y); writeln(x,y); writeln(x,y);
y:=y+1; y:=y+1; y:=y+1;
end; until y>5; until y>5;
x:=x+1; x:=x+1; x:=x+1;
end; until x>3; end;

34
3
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις1/6
• Παράδειγμα: program example1;
Να γραφεί πρόγραμμα που var count :integer;
να τυπώνει κάθετα τους begin
αριθμούς από το 1 ως το 10 for count := 1 to 10 do begin
(for) writeln(count);
end;
Εδώ έχουμε την μεταβλητή count readln;
(τύπου integer) της όποιας δίνουμε
αρχική τιμή 1 και τελική τιμή 10 end.
(άρα ο βρόγχος μας θα εκτελεστεί
10 φορές), αυτό που γίνετε μέσα
στον βρόγχο είναι ότι τυπώνεται η
τιμή που παίρνει κάθε φορά η
μεταβλητή count δηλαδή
1,2,3,4,5,6,7,8,9,10.
35
3

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις2/6
• Παράδειγμα: program example2;
Να γραφεί πρόγραμμα που var count :integer;
να τυπώνει κάθετα τους begin
αριθμούς από το 10 ως το 1 for count := 10 downto
(for) 1 do
begin
Κάνει το ίδιο με το example1 αλλά
αυτή την φορά ο μετρητής count writeln(count);
μετρά ανάποδα (downto) Άρα η end;
μεταβλητή count παίρνει τις τιμές: readln;
10,9,8,7,6,5,4,3,2,1.
end.

36
3
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις3/6
• Παράδειγμα:
program example3;
Να γραφεί πρόγραμμα που var a :integer;
να τυπώνει κάθετα τους begin
αριθμούς από το 0 ως το 9 a := 0;
(while) while a < 10 do begin
Καταρχάς δίνουμε αρχική τιμή στη writeln (a);
μεταβλητή a:=0;. Όσο το a είναι a := a + 1;
μικρότερο του 10 τυπώνει το a και
end;
στη συνέχεια προσθέτει 1 … Άρα το
a θα παίρνει τις τιμές readln;
0,1,2,3,4,5,6,7,8,9. Στο a<10 (δηλαδή end.
το 9) θα τερματιστεί ο βρόγχος για
τον λόγω ότι ΔΕΝ θα ισχύει η
συνθήκη και στην συνέχεια θα
τερματιστεί το πρόγραμμα. 37
3

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις4/6
• Παράδειγμα:
program example4;
Να γραφεί πρόγραμμα που var a :integer;
να τυπώνει κάθετα τους begin
αριθμούς από το 0 ως το 9 a := 0;
(repeat) repeat
Όπως και στο example3 δίνουμε writeln(a);
αρχική τιμή στη μεταβλητή a :=0;. a := a + 1;
Θα προσθέτει 1 στο a μέχρι το a να
πάρει τιμή μεγαλύτερη του 9 Άρα το
until (a > 9);
a θα παίρνει τις τιμές readln;
0,1,2,3,4,5,6,7,8,9. Μόλις το a πάρει end.
την τιμή 10 (a >9) θα τερματιστεί ο
βρόγχος για τον λόγω ότι ΔΕΝ θα
ισχύει η συνθήκη και στην συνέχεια
θα τερματιστεί το πρόγραμμα 38
3
Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις5/6
• Παράδειγμα: program min_max;
var x, min, max: integer;
Να γραφεί πρόγραμμα που begin
να διαβάζει ένα σύνολο write('x');readln(x);
αριθμών και να τυπώνει το min:=x; max:=x;
μικρότερο και το while x<>-999 do begin
if x<min then min:=x else
μεγαλύτερο. Το τέλος του if x>max then max:=x;
συνόλου των αριθμών θα write('x=');readln(x)
δηλώνεται με κάποιον end;
συγκεκριμένο αριθμό (π.χ. - writeln('min=',min,'max=', max)
999). end.

39
3

Προγραμματισμός Ι – Εντολές Επανάληψης, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις6/6
• Παράδειγμα: program Ηsum;
Υπολογισμός του var k,N: integer;
αθροίσματος: h:real;
H(N)=1+1/2+1/3+…+1/N begin
write('N=');readln(N);
h:=0;
for k:=1 to N do h:=h+1/k;
writeln('H=',h)
end.

40
4
Ενότητα 4 : Υποπρογράμματα I

Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σκοποί ενότητας
• Να αναλυθεί με ακρίβεια η χρησιμότητα/σκοπός των
υποπρογραμμάτων στην pascal.
• Να περιγραφούν οι συντακτικοί κανόνες των
διαδικασιών.
• Να γίνει κατανοητός ο ρόλος, τρόπος σύνταξης και οι
διαφορές τοπικών & καθολικών δεδομένων.
• Να γίνει κατανοητός ο ρόλος, τρόπος σύνταξης και οι
διαφορές παραμέτρων τιμής & παραμέτρων
μεταβλητής.
5
5
Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Περιεχόμενα ενότητας
• Υποπρογράμματα
• Διαδικασίες
• Δομή Διαδικασιών
• Τοπικά & καθολικά δεδομένα
• Παράμετροι τιμής
• Παράμετροι μεταβλητής

6
6

Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εισαγωγή
• Ένας τρόπος επίλυσης πολύπλοκων προβλημάτων είναι ο χωρισμός
τους σε μικρότερα και απλούστερα και στην συνέχεια η επίλυση
αυτών των μικρότερων και απλούστερων προβλημάτων
• Τα μικρότερα μπορούν επίσης να χωρισθούν σε ακόμη μικρότερα
και απλούστερα μέχρι του σημείου να είναι απλή η επίλυση τους
• Η μέθοδος αυτή επίλυσης προβλημάτων ονομάζεται «από πάνω
προς τα κάτω» (top down).
• Τα υποπρογράμματα είναι ο μηχανισμός που προσφέρει η Pascal
για την υλοποίηση αυτή της μεθόδου επίλυσης σύνθετων
προβλημάτων
7
7
Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Υποπρογράμματα
• Η Pascal διαθέτει δύο τύπους υποπρογραμμάτων:
 Τις διαδικασίες (procedures)
 Τις συναρτήσεις (functions)

8
8

Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Διαδικασίες1/3
• Παράδειγμα program paradeigma;

procedure minima; {Διαδικασία με όνομα minima}


begin
write(‘Μήνυμα της διαδικασίας’);
end;

begin {Κύριο πρόγραμμα}


write(‘Μήνυμα του κυρίως προγράμματος’);
minima; {Kλήση τις διαδικασίας}
end.

9
9
Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Διαδικασίες2/3
• Παράδειγμα: Yπολογισμού εμβαδού ορθογωνίου
program Emvado_orthogwniou; program Emvado_orthogwniou;
var
a, b, emvado : integer; var
{--------------------------------------} a,b,emvado: integer;
procedure Eisagwgi_dedomenwn;
begin begin
write(‘Δώσε μήκη πλευρών’); write(‘Δώσε μήκη πλευρών’);
write(‘a=‘); readln(a);
write(‘b=‘); readln(b); write(‘a=‘); readln(a);
end; write(‘b=‘); readln(b);
{--------------------------------------}
procedure Ypologismos_emvadou; emvado:= a * b;
begin writeln(‘Το εμβαδόν είναι: ‘,emvado);
emvado := a * b;
end; end.
{--------------------------------------}
procedure Emfanisi_apotelesmatos;
begin
writeln(‘Το εμβαδόν είναι: ‘,emvado);
end;
{--------------------------------------}
begin
Eisagwgi_dedomenwn;
Ypologismos_emvadou;
Emfanisi_apotelesmatos;
end. 10
1

Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Διαδικασίες3/3
• Διαδικασία (procedure) είναι ένας από τους δύο τύπους
υποπρογραμμάτων που υποστηρίζει η Pascal.
• Μια διαδικασία μπορεί να σχεδιαστεί έτσι ώστε να αποτελεί
ένα ανεξάρτητο και αυτοδύναμο πρόγραμμα, το οποίο
 παίρνει ένα ή περισσότερα δεδομένα εισόδου
 παράγει ένα ή περισσότερα αποτελέσματα εξόδου
• Η σχεδίαση ανεξάρτητων διαδικασιών επιτρέπει την
ανάπτυξη και τη δοκιμή της κάθε μιας χωριστά

11
1
Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δομή Διαδικασιών1/2
• Έχουν ίδια δομή με τα program paradeigma;
προγράμματα της Pascal var
a, b, c : integer;
begin
• Αποτελούνται από τρία τμήματα a:=5 ;
b:=10;
• Την επικεφαλίδα της διαδικασίας c:=a+b;
write(c);
• Το τμήμα δηλώσεων end.
• Το σώμα της διαδικασίας procedure paradeigma;
var
Επικεφαλίδα Διαδικασίας; a, b, c : integer;
begin
Τμήμα δηλώσεων; a:=5 ;
b:=10;
begin c:=a+b;
Σώμα κυρίως προγράμματος; end.
write(c);

end 12
1

Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δομή Διαδικασιών2/2
• Η επικεφαλίδα της διαδικασίας αποτελείται από:
 την λέξη procedure
 ένα όνομα
 μία λίστα παραμέτρων
• Όνομα Διαδικασίας
Όνομα Διαδικασίας
PROCEDURE
PROCEDURE (Λίστα Παραμέτρων)
(Λίστα παραμέτρων)
• Το όνομα χαρακτηρίζει την διαδικασία και χρησιμοποιείται για την κλήση /
εκτέλεση της από το υπόλοιπο πρόγραμμα
• Η λίστα παραμέτρων είναι μια λίστα μεταβλητών που χρησιμοποιείται για
ανταλλαγή δεδομένων μεταξύ της διαδικασίας και του κυρίως προγράμματος

13
1
Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Κλήση διαδικασιών
Πως λειτουργεί ο μεταφραστής
begin Κυρίως
 Η κλήση μιας διαδικασίας (από το πρόγραμμα
κυρίως πρόγραμμα ή από άλλη
διαδικασία) γίνεται με την Εντολή-1
εκτέλεση μιας πρότασης που procedure A;
περιέχει το όνομα της. Κλήση διαδικασίας
begin
Εντολές της
 Μετά την κλήση (και εκτέλεση) Α
διαδικασίας Α
μιας διαδικασίας, το πρόγραμμα end;
συνεχίζει με τις υπόλοιπες εντολές
του προγράμματος
Εντολή-2

end.

14
1

Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Τοπικά & καθολικά δεδομένα


• Τα δεδομένα που περιέχει το τμήμα δηλώσεων του κύριου
προγράμματος λέγονται καθολικά (global), γιατί μπορούν να
χρησιμοποιηθούν σε όλο το πρόγραμμα και στις διαδικασίες που
υπάρχουν μέσα σε αυτό
• Αντίθετα τα δεδομένα που περιέχει το τμήμα δηλώσεων μιας
διαδικασίας (σταθερές, μεταβλητές, κλπ) λέγονται τοπικά (local),
γιατί αναγνωρίζονται μόνο μέσα στη διαδικασία όπου ορίζονται
και δεν επηρεάζουν ή επηρεάζονται από τις δηλώσεις του κύριου
προγράμματος ή άλλων διαδικασιών ακόμη και αν έχουν το ίδιο
όνομα

15
1
Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα
program paradeigma;
const a = 10;
var b, c, d : integer; Οι μεταβλητές
{ ------------------------- } b, c, d
procedure prosthesi;
var ισχύουν για όλο το πρόγραμμα.
x, y : integer; Ακόμη και μέσα στο υποπρόγραμμα
begin
write(‘Δώσε δύο αριθμούς’); prosthesi
read(x, y);
c := x + y; Οι μεταβλητές
write(c);
b := c; x, y
write(a); ισχύουν μόνο μέσα στο
end;
{ ------------------------- } υποπρόγραμμα prosthesi.
begin Στο υπόλοιπο πρόγραμμα δεν
write(b);
prosthesi; αναγνωρίζονται από τον μεταφραστή
write(b);
write(c);
d := x + y;{Λάθος γιατί οι x και y
είναι άγνωστες στο κυρίως πρόγραμμα}
write(a); end.

16
1

Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράμετροι
• Μια διαδικασία όπως και ένα πρόγραμμα σχεδιάζεται για να εκτελεί κάποιες
δουλειές / επεξεργασίες πάνω σε κάποια δεδομένα
• Μια διαδικασία λοιπόν απαιτεί έναν τρόπο επικοινωνίας τόσο με το κύριο
πρόγραμμα όσο και με τις άλλες διαδικασίες
• Ένας τρόπος επικοινωνίας είναι οι καθολικές μεταβλητές
• Ο τρόπος αυτός παρουσιάζει σημαντικά μειονεκτήματα.
• Ένας άλλος τρόπος (ο συνηθέστερος) είναι οι παράμετροι (parameters)
Είσοδος Έξοδος
τιμών
Πρόγραμμα αποτελεσμάτων

Είσοδος Έξοδος
τιμών Διαδικασία αποτελεσμάτων
17
1
Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράμετροι1/4
• Η επικεφαλίδα μιας διαδικασίας
περιέχει (προαιρετικά) εκτός από το Κυρίως πρόγραμμα
όνομα της και μια λίστα μεταβλητών και άλλα υποπρογράμματα
και τους τύπους δεδομένων τους.
Δ εδ ο μ έ ν α
• Οι μεταβλητές αυτές αναγνωρίζονται
μόνο μέσα στη διαδικασία όπου procedure prosthesi(x,y: integer; z:real ; c: char)
δηλώνονται (τοπικές) begin
...
• Ονομάζονται τυπικές παράμετροι ...
(formal parameters) γιατί οι ...
πραγματικές τους τιμές δεν είναι end;
γνωστές μέχρι την κλήση της
διαδικασίας
18
1

Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράμετροι2/4
program asterakia_oxi_perasma_timwn; program asterakia_perasma_timwn;
var asterakia:integer;
procedure emfanise_stars;
var procedure emfanise_stars(a: integer);
i : integer; var
begin Τυπική
i : integer;
for i:=1 to 10 do παράμετρος
begin
(τιμής)
write('*'); for i:=1 to a do
end; write('*');
{--------------------------} end;
{--------------------------}
begin Πραγματική
emfanise_stars; begin παράμετρος
end. emfanise_stars(10);
Eκδοχή στην οποία ο end.
αριθμός των αστεριών begin
εισάγεται από τον write(‘Posa asterakia na emfanisw?’);
χρήστη read(asterakia); 19
emfanise_stars(asterakia);
end. 1
Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράμετροι3/4
• Παράμετροι τιμής (value parameters)
 χρησιμοποιούνται μόνο για να διοχετεύσουμε τιμές μέσα
στη διαδικασία και για τον λόγο αυτό ονομάζονται και
παράμετροι εισόδου
• Παράμετροι μεταβλητής (variable parameters)
 χρησιμοποιούνται επιπλέον για καταχώρηση
αποτελεσμάτων και διοχέτευση τους έξω από τη διαδικασία
και για το λόγο αυτό ονομάζονται και παράμετροι εξόδου
 Οι παράμετροι μεταβλητής δηλώνονται με τη λέξη κλειδί
var πριν από το όνομα τους
2

Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράμετροι4/4
Κυρίως πρόγραμμα
και άλλα υποπρογράμματα

Δεδομένα

procedure parad2e (a,b: integer; var c:real; var e: char)


begin
...
...
...
end;

Παράμετροι Παράμετροι
Παράμετροι
μεταβλητής μεταβλητής
τιμής
λόγω του var λόγω του var 21
2
Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Πραγματικοί Παράμετροι1/2
• Για να καλέσουμε μια διαδικασία με
παραμέτρους, δίπλα στο όνομα της
διαδικασίας βάζουμε μέσα σε
παρένθεση μια λίστα τιμών, τόσες program paradrp; Παράμετροι Παράμετροι
var τιμής μεταβλητής
όσες είναι και οι τυπικές παράμετροι x, y : integer; (χωρίς var) (με var)
της διαδικασίας procedure parad2e(a,b: real ; var c: integer ; var e:char)


begin
Οι τιμές αυτές ονομάζονται write(a, b, c, e)
πραγματικές παράμετροι (actual end;

parameters) begin Τυπικές


parad2e (5.2 , 10.4 , 12 , ‘A’); παράμετροι
• Οι τιμές των πραγματικών end.
παραμέτρων τοποθετούνται στις Πραγματικές
τυπικές παραμέτρους της παράμετροι

διαδικασίας κατά την κλήση της


22
2

Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Πραγματικοί Παράμετροι2/2
• Οι πραγματικές παράμετροι αντιστοιχούν μία προς μία
στις τυπικές παραμέτρους της διαδικασίας
• Ειδικότερα:
 Ο αριθμός των πραγματικών παραμέτρων πρέπει να είναι ίσος με
τον αριθμό των τυπικών παραμέτρων της αντίστοιχης διαδικασίας
 Κάθε πραγματική παράμετρος αντιστοιχεί στην τυπική παράμετρο
που κατέχει την ίδια θέση στη λίστα των τυπικών παραμέτρων
 Ο τύπος δεδομένων κάθε πραγματικής παραμέτρου πρέπει να
συμφωνεί με τον τύπο της αντίστοιχης τυπικής παραμέτρου

23
2
Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Προσοχή1/2
Πραγματικές παράμετροι → Τυπικές παράμετροι τιμής
program parametroi_timis;
Οι πραγματικές παράμετροι που var
αντιστοιχούν σε τυπικές x, y, athroisma : integer;
παραμέτρους τιμής, κατά την {---------------------------------}
procedure prosthesi( a, b, c : integer);
κλήση της διαδικασίας begin
αντικαθιστούν μόνο την τιμή τους c := a + b;
στις παραμέτρους της διαδικασίας write(‘To athroisma einai’, c)
end;
Αυτές οι πραγματικές παράμετροι {---------------------------------}
μπορεί να είναι σταθερές, begin
x := 5;
μεταβλητές ή εκφράσεις y := 10;
prosthesi(x, y, athroisma);
Στην περίπτωση των μεταβλητών write(‘To athroisma einai’, athroisma);
η τιμή τους παραμένει ίδια μετά end.
την κλήση της διαδικασίας
To athroisma einai 15
To athroisma einai 0 24
2

Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Προσοχή2/2
Πραγματικές παράμετροι → Τυπικές παράμετροι τιμής
 Οι πραγματικές παράμετροι που program parametroi_metavlitis;
αντιστοιχούν σε τυπικές παραμέτρους var
μεταβλητής, κατά την κλήση της διαδικασίας x,y,athroisma: integer;
αντικαθιστούν την διεύθυνση τους στις {---------------------------------}
παραμέτρους της διαδικασίας procedure prosthesi(a,b:integer; var c:integer);
begin
 Αυτό έχει σαν αποτέλεσμα ότι οποιαδήποτε c := a + b;
αλλαγή στις παραμέτρους μεταβλητής μέσα writeln('To athroisma einai', c);
στην διαδικασία, προκαλεί και αλλαγή των end;
πραγματικών παραμέτρων που αντιστοιχούν {---------------------------------}
σε αυτές. begin
x := 5;
 Για τον λόγο αυτό οι πραγματικές y := 10;
παράμετροι μπορεί να είναι μόνο prosthesi(x, y, athroisma);
μεταβλητές writeln('To athroisma einai', athroisma);
end.
 Έτσι εξηγείται πως οι παράμετροι
To athroisma einai 15
μεταβλητής χρησιμοποιούνται και για To athroisma einai 15?
εξαγωγή δεδομένων από ένα υποπρόγραμμα 25
2
Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συμπεράσματα - Aνακεφαλαίωση
• Υπάρχουν δύο τρόποι επικοινωνίας μιας
διαδικασίας με το κύριο πρόγραμμα και
τα άλλα υποπρογράμματα: Καθολικές Καθολικές
μεταβλητές μεταβλητές

 οι καθολικές μεταβλητές Είσοδος


Διαδικασία
Έξοδος
τιμών αποτελεσμάτων

 οι παράμετροι Παράμετροι τιμής


Παράμετροι
Παράμετροι
μεταβλητής
μεταβλητής
• Υπάρχουν δύο είδη τυπικών
παραμέτρων:
 Οι παράμετροι τιμής (μόνο
εισάγουν δεδομένα στη διαδικασία)
 Οι παράμετροι μεταβλητής (και
εισάγουν και εξάγουν δεδομένα
στην / από την διαδικασία) 26
2

Προγραμματισμός Ι – Υποπρογράμματα I, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Τυπικές παράμετροι
Παράμετροι τιμής vs. Παράμετροι μεταβλητής

program byreference; program byvalue;


var var
katholiki: integer; katholiki: integer;

procedure proc(topiki :integer); procedure proc(var topiki :integer);


begin begin
writeln('Τοπική = ', topiki); writeln('Τοπική = ', topiki);
topiki := 333; topiki := 333;
writeln('Τοπική = ', topiki); writeln('Τοπική = ', topiki);
end; end;

begin begin
katholiki := 5; katholiki := 5;
proc(katholiki); proc(katholiki);
writeln('Καθολική = ', katholiki); writeln('Καθολική = ', katholiki);
end. end.

27
2
Ενότητα 5 : Υποπρογράμματα II

Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σκοποί ενότητας
• Να περιγραφούν οι συντακτικοί κανόνες των συναρτήσεων.
• Να γίνει κατανοητή η αναγκαιότητα χρήσης των
συναρτήσεων.

5
5
Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Περιεχόμενα ενότητας
• Συναρτήσεις
• Σύνταξη των συναρτήσεων
• Κλήση συνάρτησης
• Αναγκαιότητα χρήσης των συναρτήσεων

6
6

Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συναρτήσεις - Functions1/3
• Οι συναρτήσεις (functions) είναι ο δεύτερος
τύπος υποπρογραμμάτων που υποστηρίζει η
Pascal
• Είναι υποπρογράμματα που παράγουν σαν
αποτέλεσμα μία μόνο τιμή
• Η Pascal διαθέτει μια σειρά ενσωματωμένων
(standard) συναρτήσεων όπως η sqr, η round κλπ
που μπορούν να χρησιμοποιηθούν χωρίς να
δηλωθούν
7
7
Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συναρτήσεις - Functions2/3
• Εκτός από τις παραπάνω η Pascal παρέχει την
δυνατότητα ορισμού νέων συναρτήσεων
• Οι συναρτήσεις δηλώνονται στο τμήμα
δηλώσεων του προγράμματος
• Η σειρά με την οποία δηλώνονται έχει σημασία
μόνο όταν μία συνάρτηση καλεί μία άλλη
• Σε αυτή τη περίπτωση η καλούμενη πρέπει να
προηγείται

8
8

Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συναρτήσεις - Functions3/3
• Μια συνάρτηση (function) μπορεί να θεωρηθεί σαν μια ειδική
μορφή διαδικασίας (procedure) που
 παίρνει έναν αριθμό δεδομένων εισόδου
 εκτελεί μια λειτουργία ή ακολουθία λειτουργιών
 παράγει ένα αποτέλεσμα
• Οι συναρτήσεις συντάσσονται όπως και οι διαδικασίες:
 στην επικεφαλίδα αντί για procedure ξεκινάμε με την λέξη function
 επειδή η συνάρτηση δίνει ένα αποτέλεσμα, στον ορισμό της, εκτός από το όνομα και
τις παραμέτρους δίνεται και ό τύπος δεδομένων του αποτελέσματος (integer, real, char,
boolean)
 το τμήμα δηλώσεων και το τμήμα προτάσεων ορίζονται όπως αυτά των προγραμμάτων
της Pascal

9
9
Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σύνταξη1/2
• Η λίστα παραμέτρων είναι
προαιρετική όπως και στις function Όνομα Συνάρτησης(Παράμετροι) :
διαδικασίες. Τύπος Δεδομένων;
var
Mεταβλητές : τύποι μεταβλητών
• Περιλαμβάνει δύο τύπους begin
παραμέτρων: εντολές συνάρτησης
end.
 τις παραμέτρους τιμής
 τις παραμέτρους μεταβλητής Παράδειγμα

• Ο τύπος δεδομένων του function exam(x : integer ; y : real) : boolean;


αποτελέσματος μπορεί να είναι function test(x : real ; var k : char ; m :
οποιοσδήποτε απλός τύπος integer) : char;

10
1

Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σύνταξη2/2
• Η συνάρτηση πρέπει να
περιλαμβάνει τουλάχιστον
μία πρόταση που να Τυπικές παράμετροι Τύπος δεδομένων
τιμής του αποτελέσματος
αναθέτει μία τιμή στο
όνομα της συνάρτησης, function megas(x, y : real):real;
διαφορετικά η κλήση της begin Ανάθεση τιμής στην
if x > y then
προκαλεί λάθος megas := x
συνάρτηση

Ανάθεση τιμής στην


• Σε κάθε κλήση και εκτέλεση else
megas := y; συνάρτηση
της συνάρτησης, η end;
τελευταία τιμή που
ανατίθεται στο όνομα της
συνάρτησης είναι και το
αποτέλεσμα της
11
1
Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Κλήση Συνάρτησης
• Η κλήση μιας συνάρτησης program evresi_megaliterou_apo_duo;
διαφέρει από την κλήση μιας var a, b, c : real;
διαδικασίας {----------------------------------}
function max(x,y:real):real;
• Μία διαδικασία (procedure) begin
καλείται από μια πρόταση If x > y then max := x
στην οποία περιέχεται το else max := y;
όνομα της end;
{----------------------------------}
• Μια συνάρτηση (function) begin
καλείται μέσα από μία writeln('Dwse duo arithmous');
έκφραση στην οποία την τιμή readln(a,b);
συνεισφέρει και το c := max(a,b); Κλήση Συνάρτησης

αποτέλεσμα της συνάρτησης writeln('O megaliteros einai: ',c:5:2);


end.

12
1

Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παρατηρήσεις
• Αν ένα υποπρόγραμμα υπολογίζει περισσότερα από ένα
αποτελέσματα τότε είναι προτιμότερο να υλοποιηθεί με
διαδικασία, αλλιώς (αν υπολογίζει μόνο ένα αποτέλεσμα)
είναι προτιμότερο να υλοποιηθεί με συνάρτηση
• Δεν συνηθίζεται η χρήση τυπικών παραμέτρων
μεταβλητής (με τη χρήση var) σε ορισμούς συναρτήσεων
• Αφού η συνάρτηση επιστρέφει μία τιμή στο σημείο όπου
καλείται, μπορεί να χρησιμοποιηθεί & σαν πραγματική
παράμετρος σε μιας κλήση υποπρογράμματος
(διαδικασίας ή συνάρτησης)

13
1
Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Πότε χρησιμοποιούμε συναρτήσεις1/2


• Αν το τμήμα του προγράμματος επιστρέφει
περισσότερες από μία τιμές ή αλλάζει τιμές
πραγματικών παραμέτρων τότε δεν χρησιμοποιούμε
συνάρτηση
• Αν το τμήμα προγράμματος εκτελεί είσοδο δεδομένων
ή έξοδο αποτελεσμάτων τότε δε χρησιμοποιούμε
συνάρτηση
• Αν το τμήμα προγράμματος επιστρέφει μια τιμή και η
τιμή αυτή είναι λογική (boolean) τότε χρησιμοποιούμε
τη συνάρτηση
14
1

Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Πότε χρησιμοποιούμε συναρτήσεις2/2


• Αν υπάρχει αμφιβολία είναι προτιμότερο να
χρησιμοποιήσουμε μια διαδικασία (στη
διαδικασία το ρόλο του ονόματος της
συνάρτησης παίζει η μία παράμετρος
μεταβλητής)
• Αν είναι δυνατόν να χρησιμοποιήσουμε και τις
δύο δηλαδή διαδικασία ή συνάρτηση
χρησιμοποιούμε αυτή με την οποία
αισθανόμαστε πιο άνετα στην υλοποίηση

15
1
Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 1
program athroisma_gwniwn_trigwnou;
• Πρόγραμμα που var
ελέγχει αν το g1, g2, g3 : real;
άθροισμα των function trigwno(gwnia1, gwnia2, gwnia3 : real):boolean;
γωνιών ενός begin
trigwno := (gwnia1 + gwnia2 + gwnia3 - 180.0) = 0;
τριγώνου είναι 180ο end;
και αν είναι {-------------------------------------------------------}
επιστρέφει την τιμή begin
writeln(‘Δώσε τις τρεις γωνίες σε μοίρες');
true. readln(g1, g2, g3);
Πότε τρεις γωνίες είναι if trigwno(g1, g2, g3) then Κλήση Συνάρτησης
writeln(‘Οι τρεις γωνίες σχηματίζουν τρίγωνο')
γωνίες του ίδιου else
τριγώνου; Όταν writeln(‘Οι τρεις γωνίες δεν σχηματίζουν
αθροίζουν σε 180ο τρίγωνο');
μοίρες. end.

16
1

Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 2
program ipologismos_dynamis;
var
b, apotelesma : real;
Πρόγραμμα που e : integer;

υπολογίζει την function dynami(basi:real ; ekthetis:integer):real;


var i: integer; d:real;
ακέραια δύναμη begin
d:=1;
ενός πραγματικού for i:=1 to ekthetis do
d:=d*basi;
αριθμού με την end;
dynami := d;

χρήση συνάρτησης begin


write(‘Δώσε τη βάση');
read(b);
write(‘Δώσε τον εκθέτη');
read(e);
apotelesma := dynami(b, e); Κλήση Συνάρτησης
write(‘Η δύναμη είναι: ',apotelesma:5:2);
end.

17
1
Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 3
program tetragwno_arith;
var

Nα γραφεί πρόγραμμα που n: integer;


function square(x: integer):integer;

να χρησιμοποιεί μια begin


square:=x*x;

συνάρτηση η οποία να δίνει end;


begin

το τετράγωνο ενός αριθμού n:=square(4);


writeln(‘4 squared is’, n);
end.
program tetragwno_arith;
var
n,d: integer;
function square(x: integer):integer;
begin
square:=x*x;
end;
begin
writeln('dose arithmo ');
readln(n);
d:=0;
d:=square(n);
writeln('O ', n, ' arithmos squared is: ', d);
end.
18
1

Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 4
program megaliteros;
Πρόγραμμα που var
ar1, ar2, ar3, z : integer;
βρίσκει τον function max(a, b, c : integer):integer;
μεγαλύτερο μεταξύ begin
if a>b
τριών αριθμών then if c > a
then max := c
else max := a
else if c > b then max := c
else max := b;
end;
begin
writeln(‘Δώσε τρεις αριθμούς’);
readln(ar1, ar2, ar3);
z := max(ar1, ar2, ar3); Κλήση Συνάρτησης
writeln(‘Μεγαλύτερος είναι ο ‘,z)
end.

19
1
Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 5
• H Pascal δεν έχει program synartisi1;
ενσωματωμένη var
συνάρτηση για τον x,n:real;
υπολογισμό της function power(x,n:real):real;
δύναμης. begin
xn: power:=exp(n*ln(x));
end;
Αυτό μπορεί να γίνει begin
με τη χρήση της πιο write('Dose dyo arithmous…x, n: ');
κάτω ιδιότητας των
λογαρίθμων. readln(x,n);
Αν x=αν writeln('x=',x:2:1,'n=',n:2:1);
τότε x=e(ln(ν ln(α))) writeln(x:2:1,'^',n:2:1,' = ',power(x,n):2:1);
end. Κλήση Συνάρτησης

20
2

Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 61/2
Να γραφεί πρόγραμμα το program diadikasia_synartisi;
οποίο να διαβάζει τις τιμές var
των συντελεστών α,β και γ, a,b,c,x1,x2:real;
μιας δευτεροβάθμιας d:real;
εξίσωσης. Το πρόγραμμα να function determinant(a,b,c:real):real;
υπολογίζει και να ελέγχει begin
την διακρίνουσα αν είναι determinant:=b*b-4*a*c;
θετική ή όχι. Αν είναι θετική, end;
Δ>=0 να υπολογίζει τις procedure roots(a,b,c,d:real; var x1,x2:real);
πραγματικές τιμές x1 και x2. begin
Διαφορετικά, να τυπώνει το x1:=(-b+sqrt(d))/(2*a);
μήνυμα, “Μιγαδικές ρίζες”. x2:=(-b-sqrt(d))/(2*a);
end;
begin

21
2
Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 62/2
Να γραφεί πρόγραμμα το …
οποίο να διαβάζει τις τιμές writeln(' Rizes tis deuterovathmias eksisosis');
των συντελεστών α,β και γ, write('Dose tous treis syntelestes tis eksisosis, a,b
μιας δευτεροβάθμιας kai c: ');
εξίσωσης. Το πρόγραμμα να readln(a,b,c);
υπολογίζει και να ελέγχει If determinant(a,b,c)>=0 then
την διακρίνουσα αν είναι begin
θετική ή όχι. Αν είναι θετική, roots(a,b,c,determinant(a,b,c),x1,x2);
Δ>=0 να υπολογίζει τις writeln(' Oi Rizes einai ');
πραγματικές τιμές x1 και x2. writeln('x1= ',x1:2:2);
Διαφορετικά, να τυπώνει το writeln('x2= ',x2:2:2);
μήνυμα, “Μιγαδικές ρίζες”. end
else
writeln(' Oi Rizes einai Migadiges ');
end.

22
2

Προγραμματισμός Ι – Υποπρογράμματα ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 7
program synartiseis2;
Ένας καθηγητής υπολογίζει τους const

βαθμούς του τριμήνου βάσει


w1=0.6;w2=0.2;w3=0.2;
var
τριών διαγωνισμάτων. Η test1,test2,test3:Real;
βαρύτητα του πρώτου function finalgrade(test1,test2,test3:real):real;
διαγωνίσματος είναι 60% και των begin

υπολοίπων δυο 20%. Το κάθε


finalgrade:=w1*test1+w2*test2+w3*test3;
end;
διαγώνισμα βαθμολογείται με
μέγιστο βαθμό το 20. Να begin
γράψετε πρόγραμμα που να writeln('Dose tous vathmous twn triwn diagonismatwn');
Writeln;
διαβάζει τα αποτελέσματα των write('Vathmos 1ou diagonismatos…');readln(test1);
τριών διαγωνισμάτων και να write('Vathmos 2ou diagonismatos…');readln(test2);
υπολογίζει τον τελικό βαθμό του write('Vathmos 3ou diagonismatos…');readln(test3);
τριμήνου. write('O telikos vathmos tou triminou einai
',finalgrade(test1,test2,test3):1:1);
end.

23
2
Ενότητα 6 : Υποπρογράμματα III

Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σκοποί ενότητας
• Να γίνει κατανοητή η έννοια των αναδρομικών
υποπρογραμμάτων.
• Να περιγραφούν οι συντακτικοί κανόνες των
αναδρομικών υποπρογραμμάτων.
• Να περιγραφούν οι συντακτικοί κανόνες των
φωλιασμένων υποπρογραμμάτων.
• Να γίνει σαφές πως μπορούμε να χρησιμοποιήσουμε τα
υποπρογράμματα σαν παραμέτρους.
5
5
Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Περιεχόμενα ενότητας
• Αναδρομικά Υποπρογράμματα.
• Αναδρομή & Επανάληψη
• Φωλιασμένα Υποπρογράμματα
• Διαδικασίες & Συναρτήσεις σαν Παράμετροι

6
6

Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αναδρομικά Υποπρογράμματα1/6
• Ένας ορισμός είναι αναδρομικός (recursive) όταν ορίζεται σαν
συνάρτηση του εαυτού του
• Για παράδειγμα οι ακόλουθοι ορισμοί είναι αναδρομικοί
 Ο N είναι φυσικός αριθμός αν ο Ν-1 είναι φυσικός αριθμός
 Παραγοντικό: O!=1 για n>0, n!=n.(n-1)!
 Δύναμη: α1=α για n>0, αn=α.αn-1
 Μερικό άθροισμα: S(1)=1 για n>1, S(n)=S(n-1)+n

7
7
Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αναδρομικά Υποπρογράμματα2/6
• Στην Pascal μια διαδικασία ή συνάρτηση
μπορεί να καλέσει όχι μόνο μια άλλη
διαδικασία ή συνάρτηση αλλά και τον εαυτό
της
• Ένα τέτοιο υποπρόγραμμα (διαδικασία ή
συνάρτηση) που καλεί τον εαυτό του, λέγεται
αναδρομικό
8
8

Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αναδρομικά Υποπρογράμματα3/6
function dyn(basi: real; ekthetis: integer):real;
Να δοθεί ο begin
αναδρομικός ορισμός if ekthetis=1 then dyn:=basi else
της συνάρτησης που dyn:=basi*dyn(basi,ethetis-1);
υπολογίζει τη δύναμη (1) (2)
με ακέραιο εκθέτη. Ο end;
αναδρομικός
αλγόριθμος για τον  Σημειώνουμε τη διαφορά της αναφοράς της συνάρτησης στο
υπολογισμό του an αριστερό (σημείο 1) και δεξιό (σημείο 2) της πρότασης
είναι: Αν n=1 τότε an=a  Στο αριστερό μέρος αναφέρεται μόνο το όνομα της
αλλιώς an=a*an-1 συνάρτησης γιατί απλά δηλώνεται που θα γίνει ανάθεση της
τιμής, η οποία θα υπολογισθεί στο δεξιό μέρος της πρότασης

 Στο δεξιό μέρος της πρότασης γίνεται κλήση της συνάρτησης,


συνεπώς το όνομα να συνοδεύεται από μια λίστα
πραγματικών παραμέτρων
9
9
Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αναδρομικά Υποπρογράμματα4/6
• Όταν ένα υποπρόγραμμα (διαδικασία ή συνάρτηση)
‘Α’ καλεί ένα άλλο υποπρόγραμμα ‘Β’ ή τον εαυτό του,
οι τιμές των τοπικών του δηλώσεων και παραμέτρων
του αποθηκεύονται σε μια περιοχή της μνήμης που
ονομάζεται στοίβα (stack)
• Όταν η εκτέλεση του υποπρογράμματος που κλήθηκε
τελειώσει, ανασύρονται από τη στοίβα οι τιμές των
δηλώσεων και παραμέτρων του αρχικού
υποπρογράμματος ‘Α’ και η εκτέλεση συνεχίζει από το
σημείο που σταμάτησε

10
1

Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αναδρομικά Υποπρογράμματα5/6
program power;
var apot:real;

function dyn(b:real;e:integer):real;
begin
b=5 if e:=1 then dyn:=b
e=4
else dyn:=b*dyn(b,e-1); b=5
write(b,e); e=3
end; function dyn(b:real;e:integer):real;
begin
if e:=1 then dyn:=b

else dyn:=b*dyn(b,e-1); b=5


write(b,e); e=2
end; function dyn(b:real;e:integer):real;
begin
if e:=1 then dyn:=b

else dyn:=b*dyn(b,e-1); b=5


begin write(b,e); e=1
apot:=dyn(5,4); end; function dyn(b:real;e:integer):real;
writeln(apot); begin
Κλήση Συνάρτησης if e:=1 then dyn:=b
end.
else dyn:=b*dyn(b,e-1);
write(b,e);
end;

11
1
Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αναδρομικά Υποπρογράμματα6/6
Να ορισθεί αναδρομική συνάρτηση function mkd(a,b:integer):integer;
για τον υπολογισμό του ΜΚΔ δύο begin
αριθμών. Ο αναδρομικός ορισμός του if a=b then mkd:=a;
else if a>b then mkd:=mkd(a-b,b)
ΜΚΔ είναι: ΜΚΔ(α,β)=ΜΚΔ(α-β,β) αν else mkd:=mkd(a,b-a)
α>β ή ΜΚΔ(α,β-α) ανβ>α end;

12
1

Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αναδρομή & Επανάληψη1/3


Ένας αναδρομικός αλγόριθμος μπορεί να
υλοποιηθεί εξίσου αποδοτικά και με ένα μη
αναδρομικό υποπρόγραμμα χρησιμοποιώντας
εντολές επανάληψης
Ο δεύτερος αυτός τρόπος ονομάζεται
επαναληπτικός (iterative)

13
1
Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αναδρομή & Επανάληψη2/3


• Να ορισθεί συνάρτηση για τον ορισμός του
αθροίσματος Ν ακεραίων αριθμών
function sum(N:integer):integer;
begin
if N=0 then sum:=0;
function sum(N:integer):integer;
else sum:=N+sum(N-1);
var i,s:integer
end;
begin
s:=0;
Αναδρομική Μέθοδος
for i:=1 to N do s:=s+i;
sum:=s;
end;

Επαναληπτική Μέθοδος
14
1

Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αναδρομή & Επανάληψη3/3


• Όταν μια εφαρμογή μπορεί να υλοποιηθεί και με τις
δύο μεθόδους, η επιλογή μας στηρίζεται στις δύο
ακόλουθες παρατηρήσεις:
• Τα αναδρομικά υποπρογράμματα έχουν σημαντικά
μικρότερο μέγεθος και είναι περισσότερο
ευανάγνωστα από τα αντίστοιχα επαναληπτικά
• Τα αναδρομικά υποπρογράμματα έχουν μεγάλες
απαιτήσεις μνήμης
15
1
Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Φωλιασμένα Υποπρογράμματα1/2
• Κάθε υποπρόγραμμα (διαδικασία ή συνάρτηση)
μπορεί να περιέχει οποιαδήποτε αριθμό άλλων
υποπρογραμμάτων
• Τα υποπρογράμματα που περιέχονται μέσα στα
άλλα λέγονται φωλιασμένα

16
1

Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Φωλιασμένα Υποπρογράμματα2/2
Να ορισθεί συνάρτηση για τον begin {Σώμα της συνάρτησης sum}
υπολογισμό της σειράς:
program athroisma;
var N,apot:integer; ath:=1;
{…………………………………………………………… for x:=1 to k do ath:=ath+meriko(x);
N i ………………………} sum:=ath;

 j
j function sum(k:integer):integer; end;
var x,ath:integer; {……………………………………………………………
i 1 j 1 {…………………………………………………………… ………………………}
………………………} begin {Κύριο Πρόγραμμα}
δηλαδή του αθροίσματος: function dyn(basi,ekth:integer):integer; write(‘Dwse to N:’);
var t,d:integer; readln(N);
1  (1  2 )  (1  2  3 )  ...
1 1 2 1 2 3
begin apot:=sum(N);
d:=1; writeln(‘Athroisma seiras=’,apot);
 (1  2  ...  N )
1 2 N
for t:=1 to ekth do d:=d*basi; end.
dyn:=d;
*Υπόδειξη: Να ορισθούν συνολικά end;
{………………………………………}
τρείς συναρτήσεις. Για τη δύναμη, function meriko(m:integer):integer;
το μερικό άθροισμα και για το var x,s:integer;
συνολικό άθροισμα begin
s:=0;
for x:=1 to m do s:=s+dyn(x,x);
meriko:=s;
end; {……………………}
17
1
Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Διαδικασίες & Συναρτήσεις


σαν Παράμετροι1/4
• Μια παράμετρος τύπου προγράμματος, στην τυπική
λίστα παραμέτρων ενός υποπρογράμματος, έχει ίδια
σύνταξη με την επικεφαλίδα του υποπρογράμματος:
• procedure A(x:integer; procedure P);
Η διαδικασία Α έχει δύο παραμέτρους, την x
τύπου integer και την διαδικαστική παραμέτρου P
που δεν έχει επιπλέον παραμέτρους

19
1

Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Διαδικασίες & Συναρτήσεις


σαν Παράμετροι2/4
• procedure Q(function F(c:char):integer; y:real);
Η διαδικασία Q έχει δύο παραμέτρους, μια τύπου
real και μια συναρτησιακή παραμέτρου F, η οποία
επιπλέον έχει μια παράμετρο τύπου char

19
1
Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Διαδικασίες & Συναρτήσεις


σαν Παράμετροι3/4
• Κατά την κλήση ενός υποπρογράμματος με
διαδικαστική ή συναρτησιακή παράμετρο, πρέπει η
αντίστοιχη πραγματική παράμετρος να είναι το
όνομα μια διαδικασίας ή συνάρτησης με τη σωστή
αντιστοιχία παραμέτρων και τύπου αποτελέσματος
(αν πρόκειται για συνάρτηση)

20
2

Προγραμματισμός Ι – Υποπρογράμματα ΙΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Διαδικασίες & Συναρτήσεις


σαν Παράμετροι4/4
Να ορισθεί μια διαδικασία που να
υπολογίζει τις τιμές μιας procedure eval(function
f(x:real):real,lower,upper,step:real);
οποιαδήποτε συνάρτησης var x,value:real;
πραγματικών τιμών, με δεδομένα begin
x:=lower;
τα όρια και το βήμα μεταβολής while x<=upper do begin
της παραμέτρου της συνάρτησης value:=f(x);
writeln(x:value);
x:=x+step;
end
end;

21
2
Ενότητα 7 : Πίνακες I

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σκοποί ενότητας
• Να αναλυθεί η έννοια των σύνθετων δομών δεδομένων
• Να γίνει κατανοητή η χρησιμότητα/συντακτικοί κανόνες
χρήσης των πινάκων στην pascal.
• Να γίνει κατανοητή η χρησιμότητα/συντακτικοί κανόνες
χρήσης των πινάκων μίας διάστασης.
• Να περιγραφεί αλγοριθμικά ο τρόπος συγχώνευσης πινάκων
στην pascal
• Να γίνει κατανοητή η χρησιμότητα/συντακτικοί κανόνες
χρήσης των πινάκων δύο διάστασης.
• Να γίνει επίλυση πολλαπλών παραδειγμάτων
5
5
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Περιεχόμενα ενότητας
• Τι είναι ο πίνακας
• Μονοδιάστατοι Πίνακες
• Παράδειγμα
• Συγχώνευση Πινάκων
• Δισδιάστατοι Πίνακες
• Παραδείγματα

6
6

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εισαγωγή
• Κατά την κατασκευή ενός προγράμματος
παρουσιάζεται πολλές φορές η ανάγκη της
δημιουργία δομών δεδομένων (data structures) οι
οποίες καθιστούν πιο ευέλικτο και πιο λειτουργικό
• Με τη χρήση των δομών δεδομένων γίνεται πιο
εύκολη η αποθήκευση, η πρόσβαση, η αναζήτηση
και η ομαδοποίηση δεδομένων σε ένα πρόγραμμα
• Οι πιο απλές δομές δεδομένων είναι οι πίνακες

7
7
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Τι είναι ο πίνακας1/4
• Ο πίνακας είναι μία δομή δεδομένων που
αποτελείται από στοιχεία του ίδιου τύπου
• Πρακτικά μοιάζει με έναν κατάλογο ομοειδών
στοιχείων (π.χ. ακεραίων)
• Οι πίνακες διακρίνονται σε μονοδιάστατούς και
πολυδιάστατούς

8
8

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Τι είναι ο πίνακας2/4
• Οι πίνακες χρειάζονται κυρίως σε προγράμματα με
τα οποία βρίσκουμε κάποια στατιστικά στοιχεία (π.χ.
μέσο όρο, ελάχιστο, μέγιστο) καθώς και όταν σε ένα
πρόγραμμα έχουμε πολλές μεταβλητές του ίδιον
τύπου
• Έτσι, όταν έχουμε ένα πρόγραμμα το οποίο περιέχει
είκοσι ακέραιες μεταβλητές είναι ευκολότερο να
ορίσουμε έναν πίνακα είκοσι ακεραίων από το να
ορίσουμε είκοσι μεμονωμένες ακέραιες μεταβλητές
9
9
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Τι είναι ο πίνακας3/4
• Τους πίνακες τους χρησιμοποιούμε πολλές φορές και για άλλες
εφαρμογές όπως για ταξινόμηση αριθμών ή επεξεργασία
αρχείων
• Το κυριότερο χαρακτηριστικό που κάνει τους πίνακες να
ξεχωρίζουν από τους υπόλοιπους τύπους δεδομένων είναι ότι
μπορούμε να εισάγουμε πολλές τιμές στο ίδιο όνομα μεταβλητής
και παράλληλα να αποθηκεύεται στη μνήμη τον υπολογιστή η
θέση της κάβε τιμής
• Αυτό έχει ως αποτέλεσμα ότι μπορούμε να αναφερόμαστε
οποτεδήποτε θελήσουμε σε κάποια από τις τιμές που έχει δώσει ο
χρήστης προηγουμένως, σε αντίθεση με τις μεταβλητές.
10
1

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Τι είναι ο πίνακας4/4
• Αν υποθέσουμε ότι η a είναι μία ακέραια μεταβλητή στην οποία ο
χρήστης εισάγει διαδοχικά τις τιμές 3, 6, 21, 16, 57 στη μνήμη του
υπολογιστή έχουμε την εξής κατάσταση:
3
6
21
16
57

• Δηλαδή κάθε φορά που δίνουμε μία τιμή για τη μεταβλητή α, η


προηγούμενη διαγράφεται

11
1
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Μονοδιάστατοι Πίνακες1/3
• Ένας μονοδιάστατος πίνακας είναι μία δομή με την
οποία μπορούμε να καταχωρήσουμε σε μια μεταβλητή
απεριόριστα στοιχεία του ίδιον τύπου και όχι μόνο ένα
όπως έχουμε δει μέχρι τώρα
• Η θέση κάθε στοιχείου του πίνακα προσδιορίζεται
μονοσήμαντα από έναν αριθμό
• Μπορούμε να φανταστούμε έναν πίνακα σαν μία
παράταξη η οποία αποτελείται από μεταβλητές του
ίδιον τύπον (π.χ. integer) καταχωρημένες σε
διαφορετικά κελιά μεταξύ τους

12
1

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Μονοδιάστατοι Πίνακες2/3
• Αν υποθέσουμε ότι έχουμε ορίσει και αρχικοποιήσει
έναν πίνακα ακεραίων με όνομα a, ο οποίος περιέχει
πέντε στοιχεία (π.χ. 3, 6, 21, 16, 57), στη μνήμη τον
υπολογιστή Θα έχουμε την εξής κατάσταση:
a[1] a[2] a[3] a[4] a[5]
3 6 21 16 57

• Εδώ το 3 είναι το πρώτο στοιχείο τον πίνακα (a[ 1 ]),


το 6 το δεύτερο (a[2] το 21 το τρίτο (a[3]), το 16 το
τέταρτο (a[4]) και το 57 το πέμπτο (a[5] )
13
1
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Μονοδιάστατοι Πίνακες3/3
• Γενικά ένας μονοδιάστατος πίνακας ορίζεται ως εξής:
var όνομα_πίνακα : array [a..b] οf τύπος_στοιχείων;
• Ενώ το i-στοιχείο τον πίνακα αρχικοποιείται ως εξής:
όνομα_πίνακα [i] := τιμή;
(το α[ 1] είναι το πρώτο στοιχείο του πίνακα, το α[2] είναι το δεύτερο κ.ο.κ.)
• Τον προηγούμενο πίνακα θα τον ορίζαμε στις δηλώσεις με την εντολή:
var a: array [1..5] of integer;
• Ενώ θα τον αρχικοποιούσαμε στο κυρίως πρόγραμμα με τις εντολές:
α[ 1 ]:= 3; α[2]:= 6; α[3]:= 21; α[4]:= 16; α[5]:= 57;
14
1

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παρατηρήσεις1/2
• Όταν δηλώνουμε έναν πίνακα δεν είναι υποχρεωτικό να
αρχικοποιήσουμε όλα τα στοιχεία του
Μπορούμε π.χ. να δηλώσουμε έναν πίνακα πέντε στοιχείων
και να αρχικοποιήσουμε μόνο το τρίτο και το τέταρτο
δηλαδή να είχαμε στο κυρίως πρόγραμμα τις εντολές
a[3]:=21; a[5]:=57; και όχι τα υπόλοιπα
• Tα στοιχεία ενός πίνακα μπορεί να είναι ακέραιοι,
πραγματικοί, χαρακτήρες ή λογικές μεταβλητές

15
1
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παρατηρήσεις2/2
• Η επεξεργασία ενός πίνακα πρέπει να αφορά κάθε στοιχείο
του ξεχωριστά και όχι ολόκληρο τον πίνακα
π.χ. αν Θέλουμε να αρχικοποιήσουμε όλα τα στοιχεία του προηγούμενού
πίνακα να είναι ίσα με 4 δεν επιτρέπεται η εντολή α:=4; αλλά θα γράφαμε:
a[1]:=4; a[2]:=4; a[3]:=4; a[4]:=4; a[5]:=4;
ή καλύτερα με την: for i:=1 to 5 dο a[i]:=4;
ενώ αν θέλαμε να εξισώσουμε όλα τα στοιχεία ενός άλλου πίνακα b πέντε
ακεραίων με αυτά τον a θα γράφαμε την εντολή:
for i:=1 to 5 do b[i]:=a[i]; και όχι b:=a;

16
1

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 1
• Να εκτελεστεί με το χέρι το παρακάτω τμήμα προγράμματος.
i:=1; j:=3; writeln( a[i+j], a[j-i],] ); a[2]:=8; a[1+2]:=9; writeln (a[i],
a[j]); j:=j+1; a[i]:=a[j]; writeln (a[1], a[4] );
Υποθέτουμε ότι ο a είναι ο εξής μονοδιάστατος πίνακας
τεσσάρων ακεραίων στοιχείων:
4 3 7 1

• Να γραφτούν οι εντολές για τη δημιουργία του εξής πίνακα:


5 4 3 2 1
17
1
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση1/3
• Λόγω του δεδομένου αρχικού πίνακα μπορούμε να υποθέσουμε ότι στο
πρόγραμμα υπάρχουν οι εντολές:
a[1]:=4; a[2]:=3; a[3]:=7; a[4]:=1;
• στη συνέχεια εκχωρούνται οι τιμές 1 και 3 στις μεταβλητέςi και j αντίστοιχα και
εκτυπώνονται στην οθόνη οι τιμές:
a[1+3]= a[4]=1, a[3-1]= a[2]=3
• Τώρα στο δεύτερο στοιχείο τον πίνακα εκχωρείται η τιμή 8 (από 3 πού ήταν πριν )
ενώ στο τρίτο ( i+2=1+2=3 ) εκχωρείται η τιμή 9 και εκτυπώνονται στην οθόνη οι
τιμές a[ 1 ]=4 και a[3]=9.Τέλος, το j αυξάνεται κατά 1 και γίνεται 4 ενώ το πρώτο
στοιχείο του πίνακα ( αφού i=1 ) γίνεται ίσο με 1 που είναι η τιμή του α[4] και
στην οθόνη εμφανίζονται οι τιμές α[1]=1 και α[4]=1. Το ζητούμενο tracetable είναι
το εξής:
18
1

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση2/3
• Το ζητούμενο tracetable είναι το εξής:

i j A
1 3 a[1]=4,a[2]=3,a[3]=7,a[4]=1
a[2]=8,a[3]=9
2 a[1]=1

Output
1 3
4 9
1 1
19
1
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση3/3
• Ο ζητούμενος πίνακας είναι ένας πίνακας πέντε ακεραίων επομένως στις
δηλώσεις θα έχουμε την εντολή:
var a:array [ 1..5] οf integer;
και στο κυρίως πρόγραμμα τις εντολές:
a[1]:=5; a[2]:=4; a[3]:=3; a[4]:=2; a[5]:=1;
• Αυτές οι πέντε εντολές θα μπορούσαν να συντομευτούν με την εξής
εντολή:
for i:= 5 do a[i]:=6-i;
γιατί a[ 1 ]=6-1=5, a[2]=6-2=4 κ.ο.κ.

20
2

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 2
Να γραφτεί πρόγραμμα το οποίο αρχικά να διαβάζει τα
στοιχεία ενός πίνακα a είκοσι πραγματικών αριθμών και να
τους τυπώνει στην οθόνη ανάποδα στη συνέχεια να διαβάζει τα
στοιχεία ενός πίνακα b τριάντα χαρακτήρων και να τυπώνει
στην οθόνη το πλήθος των εμφανίσεων χαρακτήρα a και μετά
να διαβάζει τα στοιχεία ενός πίνακα c δεκαπέντε λογικών
μεταβλητών και να τυπώνει στην οθόνη το πλήθος των true το
πλήθος των false

21
2
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση1/2
• Στο πρόγραμμα αυτό εκτός από τους τρεις πίνακες a,b,c
• Πρέπει να δηλώσουμε έναν μετρητή για την επεξεργασία των
τριών πινάκων με τη χρήση του for )
• Έναν μετρητή j για τις εμφανίσεις του a κι έναν μετρητή k για
τη μέτρηση των true στον τελευταίο πίνακα
• Δε χρειάζεται ξεχωριστή μεταβλητή για το πλήθος των false
αφού αυτό ισούται με 15-k

22
2

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση2/2
program epexergasia_pinakon(input,output);
var a: array [ 1..20] of real;
Όσον αφορά το δεύτερο πίνακα b b: array [ 1..30] of char;
ελέγχουμε αν κάθε στοιχείο του c:
i, j, k: integer;
array [ 1..15] of boolean;

είναι ίσο με a begin

και αν είναι τότε αυξάνεται ο


j:= 0;
k:= 0;
μετρητής j κατά 1. ‘Έτσι μόλις writeln ('Dwse 20 pragmatikous arithmous: ');
for i:= 1 to 20 do
τελειώσει αυτός ο readln (a[i]);
έλεγχος η τιμή του j θα ισούται με for i:= 1 to 20 do
writeln ( a[21-i]);
το πλήθος των a στον πίνακα b. writeln ('Dwse 30 Charakthres: ');
for i:= 1 to 30 do

Τέλος, στον τελευταίο πίνακα c


readln (b[i] );
for i:= 1 to 30 do
ελέγχουμε αν κάθε στοιχείο του if b[i]= 'a' then
j:=j+1;
είναι ίσο με true, αν είναι τότε writeln (' To plhthos twn a ston pinaka b eina: ', j);
αυξάνεται η τιμή τον k κατά 1 κι writeln (' Dwse 15 logikes metablhtes: ');
for i:=1 to 15 do
έτσι μόλις τελειώσει αυτή η readln(c[i]);

διεργασία η τιμή τον k Θα ισούται


for i:=1 to 15 do
if c[i]=true then k:=k+1;
με το πλήθος των true στον writeln(' To plhthos twn true einai: ', k,' kai to plhthos twn false einai: ', 15-k);
end.
πίνακα c.
23
2
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 3
Να γραφτεί πρόγραμμα το οποίο να δέχεται ως είσοδο του βαθμούς δεκαπέντε
μαθημάτων ενός μαθητή και να εμφανίζει το μέσο όρο τους και τον μέγιστο βαθμό
• Εδώ η εύρεση του μ.ο μπορεί να γίνει με τη διαδικασία που είχαμε αναπτύξει στο
κεφάλαιο της δομής επανάληψης δηλαδή θεωρώντας μεταβλητή sum στην οποία
προσθέτουμε κάθε φορά τον επόμενο βαθμό στη συνέχεια διαιρώντας την τελική
τιμή τον sum με 15.
• Ακολουθώντας τον τρόπο όμως είναι πολύ δύσκολο να βρούμε το μέγιστο
στοιχείο δεκαπέντε μαθημάτων γιατί στη μεταβλητή x κάθε φορά αποθηκεύει
τελευταίος βαθμός που δίνει ο χρήστης κι έτσι δεν είναι πρακτικός ο διαδοχικός
έλεγχος όλων των βαθμών με το γνωστό αλγόριθμο για την εύρεση μέγιστου
• Αυτό το πρόβλημα μπορεί να λυθεί είτε χρησιμοποιώντας δεκαπέντε
διαφορετικές μεταβλητές για την αποθήκευση των δεκαπέντε βαθμών είτε
χρησιμοποιώντας έναν πίνακα δεκαπέντε στοιχείων που είναι πολύ πιο εύκολο
24
2

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση
program grades(input,output);
var a: array [ 1..15] of real;
i: integer;
average, sum, max: real;
begin
sum:= 0.0;
writeln(' Dwse 15 bathmous twn mathimatwn: ');
for i:= 1 to 15 do
begin
readln(a[i]);
sum:= sum+ a[i];
end;
average:= sum/15.0;
max:= a[1];
for i:=2 to 15 do
if a[i] > max then max:= a[i];
writeln ('O m.o twn mathimatwn einai: ',average, ' o megistos
einai: ',max)
end.
25
2
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παρατηρήσεις1/2
• Η εισαγωγή των βαθμών του μαθητή και η εύρεση τον αθροίσματός τους είναι
δύο διεργασίες που Θα μπορούσαν να υλοποιη0ούν με δύο ξεχωριστά for:
fοr i:=1 tο 15 dο readln ( s[i] ); και στη συνέχεια
fοr i:=1 tο 15 do sum:= sum+ a[i];
• Η εύρεση τον μέγιστου βαθμού γίνεται με το γνωστό τρόπο με τη μόνη διαφορά
ότι εδώ έχουμε τους αριθμούς απο0ηκευμένους σε έναν πίνακα λόγω του
μεγάλου πλήθους τους
• Έτσι, υποθέτουμε ότι το πρώτο στοιχείο τον πίνακα είναι μέγιστο, αν βρούμε
κάποιο άλλο στοιχείο του πίνακα (π.χ. το τρίτο) ότι είναι μεγαλύτερο τον πρώτου
τότε υποθέτουμε ότι το τρίτο είναι μέγιστο κ.ο.κ. ώσπου να ολοκληρωθεί αυτός
ο έλεγχος και για τους δεκαπέντε βαθμούς
• Στο τέλος θα έχουμε βρει το μέγιστο των βαθμών
26
2

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παρατηρήσεις2/2
• Στο δεύτερο for του προγράμματος ο μετρητής i παίρνει τιμές από το 2
και όχι από το 1 γιατί τότε θα ήταν σα να ελέγχαμε αν α[1] > α[ 1 ] που
δεν ισχύει ποτέ ( δηλαδή αποφεύγουμε έναν περιττό έλεγχο )
• Για αυτό το λόγο πάντοτε όταν έχουμε προβλήματα με μέγιστο ή
ελάχιστο ο μετρητής του for πρέπει να ξεκινάει από το 2 και όχι από το 1

27
2
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συγχώνευση Πινάκων1/10
• Η συγχώνευση δύο ταξινομημένων πινάκων έχει ως
στόχο τη δημιουργία ενός τρίτου επίσης
ταξινομημένου πίνακα ο οποίος θα περιέχει όλα τα
στοιχεία των προηγούμενων πινάκων
• Για να συγχωνεύσουμε δύο ταξινομημένους πίνακες
a, b αρκεί να δημιουργήσουμε έναν τρίτο πίνακα c ο
οποίος θα περιέχει όλα τα στοιχεία των αρχικών
πινάκων και θα είναι και αυτός ταξινομημένος
28
2

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συγχώνευση Πινάκων2/10
• Η διαδικασία (αλγόριθμος) που ακολουθούμε είναι η εξής:
 Στην αρχή συγκρίνουμε τα πρώτα στοιχεία των δύο πινάκων a, b και το μικρότερο από αυτά το
εκχωρούμε στην πρώτη θέση του πίνακα c, μετά συγκρίνουμε το επόμενο στοιχείο από αυτό που
εκχωρήσαμε στον πίνακα c με το πρώτο του άλλου πίνακα και αυτό που είναι μικρότερο από αυτά τα
δύο το τοποθετούμε στη δεύτερη θέση του πίνακα c

 Συνεχίζοντας με αυτόν τον τρόπο συγκρίνουμε κάθε φορά το επόμενο στοιχείο του πίνακα a ή b που
εκχωρούμε στον πίνακα c με το στοιχείο του άλλον πίνακα στο οποίο βρισκόμαστε κάθε φορά και
καταχωρούμε το μικρότερο από αυτά στην αμέσως επόμενη θέση στον πίνακα c

 Αυτή η διαδικασία επαναλαμβάνεται μέχρι να αντιγραφούν όλα τα στοιχεία ενός εκ των δύο
πινάκων α, b στον πίνακα c

 Μετά απλώς αντιγράφονται τα υπόλοιπα στοιχεία του άλλου πίνακα στον c

 Έτσι ο c θα περιέχει όλα τα στοιχεία των πινάκων α, b σε αύξουσα σειρά

29
2
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συγχώνευση Πινάκων3/10
• Ας υποθέσουμε έχουμε τους εξής δυο πίνακες a, b τους οποίους θέλουμε να
συγχωνεύσουμε:
1 4 5 9 11 13 16
2 3 4 17 20
• Οι, πίνακες αυτοί έχουν μήκη m=7, n=5, ενώ ο καινούργιος πίνακας c Θα έχει
μήκος m+n=12
• Θα χρησιμοποιήσουμε τρεις δείκτες i, j, k, έναν για κάθε πίνακα, και θα τους
αρχικοποιήσουμε ίσους με 1 γιατί οι μεταβλητές i, j δείχνουν κάθε φορά το
πρώτο από τα στοιχεία των πινάκων α, b αντίστοιχα που δεν έχουν μεταφερθεί
στον πίνακα c ενώ η μεταβλητή k δείχνει κάθε φορά στην πρώτη κενή Θέση τον
πίνακα c στην οποία πρόκειται να εισαχθεί το επόμενο στοιχείο

30
3

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συγχώνευση Πινάκων4/10
• Πρώτο βήμα
i=1
1 4 5 9 11 13 16
j=1
2 3 4 17 20
k=1

Αρχικά όπως είπαμε εντοπίζουμε το μικρότερο από τα στοιχεία που


βρίσκονται στην πρώτη Θέση των a και b που εδώ είναι το 1 (1<2) και
μεταφέρουμε στην πρώτη Θέση τον πίνακα c

31
3
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συγχώνευση Πινάκων5/10
• Πρώτο βήμα
i=2
1 4 5 9 11 13 16
j=1
2 3 4 17 20
k=2
1
Την ίδια στιγμή ο δείκτης k του πίνακα c αυξάνεται κατά 1 για να δείχνει τη
θέση στην οποία θα καταχωρηθεί το επόμενο στοιχείο και ο δείκτης i του
πίνακα a αυξάνεται επίσης κατά 1 ώστε να δείχνει το πρώτο από τα στοιχεία
του που δεν έχουν μεταφερθεί ακόμη στον πίνακα c
32
3

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συγχώνευση Πινάκων6/10
• Δεύτερο βήμα
i=2
1 4 5 9 11 13 16
j=2
2 3 4 17 20
k=3
1 2
Στο επόμενο βήμα εντοπίζουμε το μικρότερο από τα στοιχεία στη δεύτερη
θέση του πίνακα a και στην πρώτη θέση του πίνακα b που είναι το 2 (2<4)
και το καταχωρούμε στον πίνακα c. Ομοίως με πριν τα j, k αυξάνουν κατά 1

33
3
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συγχώνευση Πινάκων7/10
• Τρίτο βήμα
i=2
1 4 5 9 11 13 16
j=3
2 3 4 17 20
k=4
1 2 3
Ακριβώς η ίδια διαδικασία επαναλαμβάνεται ώσπου όλα τα στοιχεία τον
πίνακα a ή τον πίνακα b να καταχωρηθούν στον πίνακα c (εδώ 3<4)

34
3

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συγχώνευση Πινάκων8/10
• Τέταρτο βήμα
i=3
1 4 5 9 11 13 16
j=3
2 3 4 17 20
k=5
1 2 3 4
Εδώ επειδή συγκρίνουμε το δεύτερο στοιχείο του πίνακα a που είναι το 4
και το τρίτο στοιχείο τoυ πίνακα b που είναι το 4 καταχωρούμε στον πίνακα
c όποιο θέλουμε π.χ. το πρώτο με τους τρεις δείκτες i, j, k να μεταβάλλονται
ανάλογα
35
3
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συγχώνευση Πινάκων8/10
• Δέκατο βήμα
i=3
1 4 5 9 11 13 16
j=4
2 3 4 17 20
k=11
1 2 3 4 4 5 9 11 13 16
Σε αυτό το σημείο όλα τα στοιχεία του πίνακα a έχουν μεταφερθεί στον
πίνακα c οπότε για να μην κάνουμε άσκοπες συγκρίσεις μεταφέρουμε απ’
ευθείας τα υπόλοιπα στοιχεία του πίνακα b στον πίνακα c

36
3

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Συγχώνευση Πινάκων9/10
• Ενδέκατο βήμα

1 4 5 9 11 13 16

2 3 4 17 20

1 2 3 4 4 5 9 11 13 16 17 20

37
3
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δισδιάστατοι Πίνακες1/4
• Ένας δισδιάστατος πίνακας είναι μία δομή δεδομένων με την
οποία μπορούμε να καταχωρήσουμε σε μία μεταβλητή
απεριόριστα στοιχεία του ίδιον τύπου
• Η Θέση κάθε στοιχείου στον πίνακα προσδιορίζεται
μονοσήμαντα από ένα ζεύγος αριθμών
• Μπορούμε, σε αντίθεση με τον μονοδιάστατο πίνακα, να
φανταστούμε το δισδιάστατο πίνακα σα μία παράταξη
διατεταγμένη σε δύο διαστάσεις η οποία αποτελείται από
μεταβλητές τον ίδιον τύπον καταχωρημένες σε διαφορετικά
κελιά μεταξύ τους
38
3

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δισδιάστατοι Πίνακες2/4
• Αν υποθέσουμε ότι έχουμε ορίσει έναν δισδιάστατο πίνακα
χαρακτήρων με δύο γραμμές και τρεις στήλες που έχει
όνομα a και τιμές τις `h' , '1', '1', '4', `s' , ` *' , στη μνήμη τον
υπολογιστή Θα έχουμε την εξής κατάσταση:
a[1,1] a[1,2] a[1,3]
‘h’ ‘i’ ‘/’
‘4’ ‘s’ ‘*’
a[1,1] a[1,2] a[1,3]

Εδώ ισχύει: a[1,1]='h', a[1,2]='i', a[1,3]='/’, a[2,1]='4', a[2,2]='s'

39
3
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δισδιάστατοι Πίνακες3/4
• Γενικά ένας δισδιάστατος πίνακας ορίζεται ως εξής:
var όνομα_πίνακα: array [α..b, c..d] οf τύπος_δεδομένων;
• Eνώ το (i, j) στοιχείο τον πίνακα ορίζεται ως εξής:
όνομα_πίνακα [i,j]:= τιμή
(π.χ. το α[1,1] είναι το στοιχείο στην πρώτη γραμμή και την πρώτη στήλη,
το α[1,2] είναι το στοιχείο στην πρώτη γραμμή και τη δεύτερη στήλη
κ.ο.κ. ). a[1,1] a[1,2] a[1,3]
• Τον προηγούμενο πίνακα Θα τον ορίζαμε στις ‘h’ ‘i’ ‘/’
δηλώσεις με την εντολή: ‘4’ ‘s’ ‘*’
a[1,1] a[1,2] a[1,3]
40
4

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δισδιάστατοι Πίνακες4/4
• Τον προηγούμενο πίνακα Θα τον ορίζαμε στις δηλώσεις με την εντολή:
a[1,1] a[1,2] a[1,3]
‘h’ ‘i’ ‘/’
‘4’ ‘s’ ‘*’
a[1,1] a[1,2] a[1,3]
var a: array [ 1..2,1..3] οf char;
• Eνώ θα αρχικοποιούσαμε τα στοιχεία τον στο κυρίως πρόγραμμα ως
εξής: a[1,1]:='h'; a[1,2]:='i'; a[1,3]:='/'; a[2,1]:='4'; a[2,2]:='s'; a[2,3]:=‘*';
• Ως προς την επεξεργασία των στοιχείων του δισδιάστατου πίνακα
ισχύουν ακριβώς οι ίδιες παρατηρήσεις με το μονοδιάστατο.

41
4
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 3
i. Να εκτελεστεί το παρακάτω τμήμα προγράμματος. Υποθέτουμε ότι ο α
είναι ο εξής δισδιάστατος πίνακας:
3 4 -6 9
8 7 -5 2
ii. i:=2; j:=2; write (a[i,j] ); ί:= — 1; j := + 1;
iii. write (a[ i+ 1,j]); write ( a[a[2,4],a[1,2]] );
ii. Να γραφτούν οι εντολές για τη δημιουργία τον εξής πίνακα:
1 1 1
2 2 2
5 5 5 42
4

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση1/3
i) i:=2; j:=2; write (a[i,j] ); ί:= - 1; j := + 1; write (a[ i+ 1,j]); write (a[a[2,4],a[1,2]] );
• Πρώτα αρχικοποιούμε τις μεταβλητές i και j να είναι ίσες με 2 και στην οθόνη
εκτυπώνεται το στοιχείο της δεύτερης γραμμής και της δεύτερης στήλης τον
πίνακα που είναι ίσο με 7
• Στη συνέχεια, το i μειώνεται κατά 1 και γίνεται 1, το j αυξάνεται κατά i=1 και
γίνεται ίσο με 3 ενώ στην οθόνη εκτυπώνεται το στοιχείο της δεύτερης γραμμής
και της τρίτης στήλης που είναι ίσο με -5.
• Τέλος, στην οθόνη εμφανίζεται το στοιχείο a[a[2,4], a[1,2]]
• Το a[2,4] ισούται με 2 ενώ το a[1,2] ισούται με 4 κι έτσι για να βρούμε το
a[a[2,4], a[1,2]] αρκεί να βρούμε το a[2,4] που ισούται με 2
Output: 7 -5 2
43
4
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση2/3
i) i:=2; j:=2; write (a[i,j] ); ί:= - 1; j := + 1; write (a[ i+ 1,j]); write (a[a[2,4],a[1,2]] );

i j a
2 2 a[2,2]=7
1 (=2-1) 3 (=2+1) a[2,3]=-5
a[2,4]=2

44
4

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση3/3
ii)
• O ζητούμενος πίνακας έχει τρεις γραμμές και τρείς στήλες άρα στις
δηλώσεις θα έχουμε την εντολή:
var b:array[1..3,1..3] of integer;
• Ενώ στο κυρίως πρόγραμμα θα έχουμε τις εντολές: b[1,1]:=1; b[1,2]:=1
b[1,3]:=1 ;b[2,1]:=2; b[2,2]:=2 ;b[2,3]:=2; b[3,1]:=5; b[3,2]:=5;b[3,3]:=2; ή
πιο απλά:
for i:=1 to 3 do b[1,i]:=1;
for i:=1 to 3 do b[2,i]:=2;
for i:=1 to 3 do b[3,i]:=5;
45
4
Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 4
i. Να εκτελεστεί το παρακάτω τμήμα προγράμματος:
for i:=1 to 3 do
for j:=1 to 3 do
a[i,j]:=a[a[i,j]], a[j,i]]; Όπου αρχικά ο a είναι ο πίνακας;

2 1 3
3 3 1
1 2 1

46
4

Προγραμματισμός Ι – Πίνακες Ι, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση
i) Με αυτές τις εντολές i j a[i,j]
τροποποιούμε τα 1 1 a[1,1]=a[a[1,1],a[1,1]]=a[2,2]=3
στοιχεία του πίνακα a. Οι
2 a[1,2]=a[a[1,2],a[2,1]]=a[1,3]=3
μεταβλητές i,j παίρνουν
διαδοχικά τις τιμές 1,2,3 3 a[1,3]=a[a[1,3],a[3,1]]=a[3,1]=1
όπως φαίνεται 2 1 a[2,1]=a[a[2,1],a[1,2]]=a[3,1]=1
αναλυτικά στο tracetable 2 a[2,2]=a[a[2,2],a[2,2]]=a[3,3]=1
που ακολουθεί:
3 a[2,3]=a[a[2,3],a[3,2]]=a[1,2]=1
3 1 a[3,1]=a[a[3,1],a[1,3]]=a[1,3]=3
2 a[3,2]=a[a[3,2],a[2,3]]=a[2,1]=3
3 a[3,3]=a[a[3,3],a[3,3]]=a[1,1]=2
47
4
Ενότητα 8 : Πίνακες IΙ

Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σκοποί ενότητας
• Να γίνουν κατανοητές οι έννοιες Ταξινόμηση &
Αναζήτηση
• Να γίνει κατανοητή η χρησιμότητα χρήσης αλγορίθμων
Ταξινόμησης & Αναζήτησης
• Να περιγραφεί ο αλγόριθμος ταξινόμησης bubblesort
• Να περιγραφεί ο αλγόριθμος ταξινόμησης selectionsort
• Να περιγραφεί ο αλγόριθμος Γραμμικής αναζήτηση
(linear search)
• Να περιγραφεί ο αλγόριθμος Δυαδικής αναζήτηση
(binary search)
5
5
Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Περιεχόμενα ενότητας
• Ταξινόμηση & Αναζήτηση
– Ταξινόμηση bubblesort
– Ταξινόμηση selectionsort
• Γραμμική αναζήτηση (linear search)
• Δυαδική αναζήτηση (binary search)

6
6

Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ταξινόμηση & Αναζήτηση


• Δύο βασικές διαδικασίες επεξεργασίας πινάκων είναι η ταξινόμηση των
στοιχείων ενός πίνακα και η αναζήτηση ενός συγκεκριμένου στοιχείου σε
έναν πίνακα
• Στην καθημερινή ζωή συναντούμε πολλά προβλήματα ταξινόμησης η
οποία γίνεται σύμφωνα με κάποιο κριτήριο (κατά αύξουσα τάξη,
αλφαβητικά κ.α.)
• Τέτοια είναι η αλφαβητική ταξινόμηση των λέξεων ενός λεξικού, η
ταξινόμηση των στοιχείων ενός πίνακα κατά αύξουσα σειρά, η
ταξινόμηση των βιβλίων μιας βιβλιοθήκης και άλλα
• Για να ταξινομήσουμε τα στοιχεία ενός πίνακα υπάρχουν πολλοί
αλγόριθμοι όπως η bubblesort, η mergesort. η quicksort, selectionsort και
η insertinnsort 7
7
Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ταξινόμηση bubblesort
• Για να κατανοήσουμε τη μέθοδο της φυσαλίδας ( bubblesort ) μπορούμε
να φανταστούμε τα στοιχεία τον υπό ταξινόμηση πίνακα σαν φυσαλίδες
η μία πάνω στην άλλη με τις τιμές του να αντιστοιχούν στα βάρη των
αντίστοιχων φυσαλίδων
• Έτσι, οι ελαφρύτερες φυσαλίδες θα έχουν την τάση να ανέρχονται στην
επιφάνεια ενώ οι βαρύτερες Θα έχουν την τάση να κατέρχονται προς το
βυθό
• Η διαδικασία που ακολουθούμε είναι να τοποθετήσουμε το μικρότερο
αριθμό στην πρώτη θέση, τον αμέσως μεγαλύτερο στη δεύτερη κ.ο.κ.
• Αυτό γίνεται μέσω διαδοχικών συγκρίσεων των στοιχείων τον πίνακα ανά
δύο και ξεκινώντας από το τελευταίο με αποτέλεσμα τα μικρότερα
στοιχεία να ανεβαίνουν προς τα πάνω σαν φυσαλίδες. 8
8

Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 1
• Να ταξινομηθούν τα στοιχεία τον παρακάτω πίνακα
χρησιμοποιώντας τη μέθοδο της φυσαλίδας:

3 6 21 16 57

Να παρουσιαστούν οι ενδιάμεσες τιμές και το


αποτέλεσμα)

9
9
Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση1/6
• Εφαρμόζοντας τη μέθοδο της φυσαλίδας ανασυντάσσουμε τα στοιχεία του
δοσμένου πίνακα με 5 (= 6 - 1) περάσματα
• Ας δούμε τα περάσματα αυτά ένα-ένα:
1. Ξεκινάμε με το τελευταίο στοιχείο του πίνακα και διαδοχικά ελέγχουμε γειτονικά
στοιχεία ανά δύο μέχρι να φτάσουμε στα πρώτα δύο στοιχεία
2. Μόλις εντοπίσουμε ένα ζεύγος στοιχείων στο οποίο η κάτω τιμή είναι μικρότερη από
την πάνω αντιμεταθέτουμε τις τιμές τον πίνακα ώστε η μικρότερη τιμή να ανέβει προς
τα πάνω
3. Για κάθε πέρασμα γίνονται 5 (=6 -1) έλεγχοι για πιθανές αντιμεταθέσεις
4. Στο πρώτο πέρασμα η μικρότερη τιμή θα είναι στην πρώτη θέση, στο δεύτερο πέρασμα
η δεύτερη πιο μικρή τιμή θα είναι στη δεύτερη θέση κ.ο.κ.
5. Τα πέντε περάσματα είναι τα εξής:
10
1

Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση2/6
Πρώτο Πέρασμα
4 4 4 4 4 2
7 7 7 7 2 4
12 12 12 2 7 7
2 2 2 12 12 12
5 3 3 3 3 3
3 5 5 5 5 5

11
1
Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση3/6
Δεύτερο Πέρασμα
2 2 2 2 2
4 4 4 4 3
7 7 7 3 4
12 12 3 7 7
3 3 12 12 12
5 5 5 5 5

12
1

Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση4/6
Τρίτο Πέρασμα
2 2 2 2
3 3 3 3
4 4 4 4
7 7 5 5
12 5 7 7
5 12 12 12

13
1
Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση5/6
Τέταρτο Πέρασμα
2 2 2
3 3 3
4 4 4
5 5 5
7 7 7
12 12 12

14
1

Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση6/6
Πέμπτο Πέρασμα
2 2
3 3
4 4
5 5
7 7
12 12
Άρα ο ταξινομημένος πίνακας είναι: 2 3 4 5 7 12
15
1
Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 2
• Να γραφεί πρόγραμμα, για την ταξινόμηση σε
αύξουσα σειρά των στοιχείων ενός πίνακα Ν
στοιχείων. Να γίνει εφαρμογή για έναν πίνακα
ακέραιων αριθμών.

16
1

Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση
program anazitisi2(input,output);
var a: array [ 1..50] of real;
x: real;
i: integer;
k: boolean;
begin
writeln ('dwse to stoixeio pou thes na exetaseis ' );
readln(x);
writeln ('dwse 50 stoixeia: ');
for i:= 1 to 50 do
begin
write('a[',i,']=');
readln(a[i]);
end;
k:=false;
for i:=1 to 50 do
if a[i]=x then
begin
k:=true;
writeln(' To stoixeio brethike sth thesi: ', i);
end;
if k=false then
writeln(' To stoixeio de brethike ')
end. 17
1
Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ταξινόμηση selectionsort1/5
• Ας υποθέσουμε ότι έχουμε τον εξής πίνακα τον οποίο θέλουμε να ταξινομήσουμε
με τη μέθοδο της selectionsort:
50 9 28 42 15 62 30 5
• i=1: Στην πρώτη επανάληψη εκτέλεσης αυτό που πρέπει να κάνουμε είναι να
θεωρήσουμε ότι η ροή τον ελέγχου βρίσκεται στο πρώτο στοιχείο ενώ το όριο (η
περιοχή ) στο οποίο θα αναζητήσουμε το ελάχιστο είναι ολόκληρος ο πίνακας
• Εδώ το ελάχιστο στοιχείο του πίνακα είναι το 5 το οποίο το εναλλάσσουμε με το
πρώτο στοιχείο τον πίνακα στο οποίο βρίσκεται ο έλεγχος
• Έτσι προκύπτει ένας νέος πίνακας ο οποίος στη θέση του 50 έχει το 5 και
αντίστροφα, ενώ όλα τα υπόλοιπα στοιχεία είναι τα ίδια. Ο νέος πίνακας είναι ο
εξής:
5 9 28 42 15 62 30 50
18
1

Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ταξινόμηση selectionsort2/5
• i=2: Στη δεύτερη επανάληψη θεωρούμε ότι η ροή του ελέγχου βρίσκεται
στο δεύτερο στοιχείο ενώ το όριο στο οποίο θα αναζητήσουμε το
ελάχιστο είναι ολόκληρος ο πίνακας εκτός από το πρώτο στοιχείο που
είναι πλέον ήδη ταξινομημένο.
• Το ελάχιστο στοιχείο του υπόλοιπου πίνακα είναι το 9 το οποίο δεν
εναλλάσσουμε με κάποιο άλλο στοιχείο αφού είναι ήδη το ελάχιστο τον
αντίστοιχου υποπίνακα ( δηλαδή όλον τον πίνακα εκτός από το 5 ). Έτσι ο
πίνακας παραμένει ο ίδιος:

5 9 28 42 15 62 30 50

19
1
Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ταξινόμηση selectionsort3/5
• i=3: Στην τρίτη επανάληψη θεωρούμε ότι η ροή ελέγχου βρίσκεται στο
τρίτο στοιχείο ενώ το όριο στο οποίο Θα αναζητήσουμε το ελάχιστο είναι
ολόκληρος ο πίνακας εκτός από τα δύο πρώτα στοιχεία που είναι ήδη
ταξινομημένα
• Το ελάχιστο στοιχείο του υπόλοιπου πίνακα είναι το 15 το οποίο
εναλλάσσουμε με το 28. ‘Eτσι ο νέος πίνακας είναι ο εξής:

5 9 15 28 42 62 30 50

20
2

Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ταξινόμηση selectionsort4/5
• i=4: Ομοίως με πριν αντιμεταθέτουμε το 42 με το 28 και έχουμε:

5 9 15 28 42 62 30 50

• i=5: Ομοίως με πριν αντιμεταθέτουμε το 42 με το 30 και έχουμε:

5 9 15 28 30 62 42 50

• i=6: Ομοίως με πριν αντιμεταθέτουμε το 62 με το 42 και έχουμε:

5 9 15 28 30 42 62 50
21
2
Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ταξινόμηση selectionsort5/5
• i=7: Ομοίως με πριν αντιμεταθέτουμε το 62 με το 50 και έχουμε:

5 9 15 28 30 42 50 62

• Επειδή σε αυτό το σημείο ο πίνακας θα είναι πάντοτε ταξινομημένος, δε


χρειάζεται να ελέγξουμε και το τελευταίο στοιχείο (π.χ. σε αυτό το σημείο
το 62 βρίσκεται ήδη στη σωστή του θέση). Επομένως ο τελικός πίνακας
είναι ο εξής:

5 9 15 28 30 42 50 62

Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αναζήτηση στοιχείου σε πίνακα


• 'Ενα πολύ συνηθισμένο πρόβλημα κατά τη χρήση
πινάκων είναι να διαπιστώσουμε αν υπάρχει μία
συγκεκριμένη τιμή σε κάποιον πίνακα, και εφόσον
υπάρχει, τη θέση της στον πίνακα
• Για την αντιμετώπιση του προβλήματος αυτού
μπορούμε να χρησιμοποιήσουμε κάποιον από τους
αλγορίθμους αναζήτησης
• Οι κυριότεροι από αυτούς είναι η γραμμική
(σειριακή) αναζήτηση και η δυαδική αναζήτηση 23
2
Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Γραμμική αναζήτηση (linear search)1/3


• Υπάρχουν τρεις βασικές περιπτώσεις για τη γραμμική αναζήτηση:
• Γραμμική αναζήτηση σε πίνακα μη ταξινομημένο στον οποίο κάθε
στοιχείο να είναι διαφορετικό από όλα τα υπόλοιπα
 Σε αυτή την περίπτωση εξετάζουμε ένα-ένα όλα τα στοιχεία τον πίνακα
ξεκινώντας από την αρχή μέχρι να βρεθεί το ζητούμενο στοιχείο
 Για να σταματάει ο έλεγχος όταν βρεθεί η ζητούμενη τιμή θεωρούμε μία
λογική μεταβλητή η οποία τότε γίνεται true
 Στην αρχή αυτή η μεταβλητή υποθέτουμε ότι έχει τιμή false και αν η τιμή της
παραμείνει false μέχρι το τέλος του ελέγχου τότε αυτό σημαίνει ότι δεν
υπάρχει αυτή η τιμή στον πίνακα, αλλιώς αν είναι true τότε η τιμή έχει βρεθεί

24
2

Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 3
• Αν υποθέσουμε ότι έχουμε ένα πίνακα 50
πραγματικών στοιχείων, τότε το πρόγραμμα με το
οποίο αναζητούμε ένα στοιχείο στον πίνακα το
οποίο το δίνει ο χρήστης είναι το εξής:

25
2
Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση
program anazitisi1(input,output);
var a: array [ 1..50] of real;
x: real;
i,j: integer;
k: boolean;
begin
writeln ('dwse to stoixeio pou thes na anazhthseis ' );
readln(x);
writeln ('dwse 50 stoixeia: ');
for i:= 1 to 50 do
readln(a[i]);
k:=false;j:=0;i:=1;
while (i <= 50) and (k = false) do
begin
if a[i] =x then
begin
j:= i;
k:= true;
end;
i:= i+1;
end;
if k = true then
writeln ('to stoixeio brethike ston pinaka sth thesi: ', j)
else
writeln ('to stoixeio de brethike ston pinaka')
end.
26
2

Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Γραμμική αναζήτηση (linear search)2/3


• Γραμμική αναζήτηση σε πίνακα μη ταξινομημένο για τον οποίο δε
γνωρίζουμε αν κάθε στοιχείο τον υπάρχει και άλλες φορές στον πίνακα
• Με αυτή τη μέθοδο εξετάζονται όλα τα στοιχεία τον πίνακα από το πρώτο
μέχρι το τελευταίο σε αντίθεση με την προηγούμενη περίπτωση που ο
έλεγχος τελείωνε μόλις βρίσκαμε το ζητούμενο στοιχείο
• Ομοίως με πριν και εδώ κατά την αναζήτηση του ζητούμενου στοιχείου
μόλις βρεθεί κάποιο στοιχείο που έχει τη ζητούμενη τιμή το πρόγραμμα
εμφανίζει τη Θέση τον στην οθόνη
• Ο έλεγχος όμως συνεχίζεται για την περίπτωση που υπάρχει η ίδια τιμή
και σε άλλες θέσεις τον πίνακα οπότε αυτές εμφανίζονται. Το πρόγραμμα
για την εύρεση ενός αριθμού που εισάγει ο χρήστης από έναν πίνακα
πενήντα πραγματικών αριθμών είναι το εξής… 27
2
Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 4
• Το πρόγραμμα για την εύρεση ενός αριθμού που
εισάγει ο χρήστης από έναν πίνακα πενήντα
πραγματικών αριθμών είναι το εξής:

28
2

Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση
program anazitisi1(input,output);
var a: array [ 1..50] of real;
x: real;
i,j: integer;
k: boolean;
begin
writeln ('dwse to stoixeio pou thes na anazhthseis ' );
readln(x);
writeln ('dwse 50 stoixeia: ');
for i:= 1 to 50 do
readln(a[i]);
k:=false;j:=0;i:=1;
while (i <= 50) and (k = false) do
begin
if a[i] =x then
begin
j:= i;
k:= true;
end;
i:= i+1;
end;
if k = true then
writeln ('to stoixeio brethike ston pinaka sth thesi: ', j)
else
writeln ('to stoixeio de brethike ston pinaka')
end. 29
2
Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Γραμμική αναζήτηση (linear search)3/3


• Γραμμική αναζήτηση σε πίνακα με τα στοιχεία τον ταξινομημένα σε
αύξουσα σειρά
 Σε αυτήν την περίπτωση ξεκινώντας από το στοιχείο στην πρώτη θέση ελέγχουμε αν
κάποιο από τα στοιχεία τον πίνακα συμπίπτει με το στοιχείο που αναζητάμε
 Όμως εδώ ο έλεγχος σταματά μόλις βρεθεί στοιχείο με τιμή μεγαλύτερη από την τιμή
αναζήτησης.
 Αν η τιμή ενός στοιχείου κατά τη διάρκεια της αναζήτησης είναι ίση με την τιμή
αναζήτησης τότε στην οθόνη εμφανίζεται η θέση τον και εξετάζεται το επόμενο
στοιχείο τον πίνακα
 Αν αυτό είναι μεγαλύτερο τότε η αναζήτηση τελειώνει.
 Αν η ζητούμενη τιμή δεν υπάρχει στον πίνακα, τότε πάλι η αναζήτηση θα τελειώσει
μόλις βρεθεί το αμέσως μεγαλύτερο στοιχείο τον πίνακα από το ζητούμενο και στην
οθόνη θα εμφανιστεί αντίστοιχο μήνυμα.
30
3

Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 5
• Το πρόγραμμα για την αναζήτηση ενός πραγματικού
αριθμού από έναν πίνακα πενήντα στοιχείων είναι
το εξής:

31
3
Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Λύση
program anazitisi3(input,output);
var a: array [ 1..50] of real;
x: real;
i,j: integer;
k: boolean;
begin
writeln ('dwse to stoixeio pou thes na exetaseis ' );
readln(x);
writeln ('dwse 50 stoixeia: ');
for i:= 1 to 50 do
begin
write('a[',i,']=');
readln(a[i]);
end;
k:=false;j:=0;i:=1;
while (i<=100) and (x<=a[i]) do
begin
if a[i]=x then
begin
j:=i;
k:=true;
writeln(' H thesi toy stoixeioy ston pinaka einai: ', j);
end;
i:=i+1;
end;
if k=false then
writeln(' To stoixeio de brethike ')
end.
32
3

Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δυαδική αναζήτηση (binary search)1/2


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

33
3
Προγραμματισμός Ι – Πίνακες ΙΙ, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Δυαδική αναζήτηση (binary search)2/2


• Επειδή ο πίνακας είναι ταξινομημένος κατ' αύξουσα σειρά, αν το
ζητούμενο στοιχείο είναι μεγαλύτερο από το μεσαίο, μπορούμε
μπορούμε με βεβαιότητα να αποκλείσουμε την περίπτωση να βρίσκεται
στο πρώτο μισό τμήμα του πίνακα, ενώ αν είναι μικρότερο από το μεσαίο
μπορούμε ομοίως να αποκλείσουμε την περίπτωση να βρίσκεται στο
δεύτερο μισό του πίνακα
• Συγκεκριμένα, εδώ εξετάζουμε το μεσαίο στοιχείο αυτού του τμήματος
και ελέγχουμε ομοίως με πριν αν το ζητούμενο στοιχείο είναι μικρότερο ή
μεγαλύτερο από το μεσαίο περιορίζοντας πάλι το τμήμα του πίνακα που
ελέγχουμε στο μισό
• Αυτή η διαδικασία συνεχίζεται μέχρι να εντοπίσουμε το ζητούμενο
στοιχείο ή μέχρι να αποκλείσουμε ολόκληρο τον πίνακα
34
3

Ενότητα 9 : Εγγραφές, Σύνολα


Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σκοποί ενότητας
• Να γίνει σαφής η αναγκαιότητα ορισμού των εγγραφών και
συνόλων.
• Να περιγραφεί ο τρόπος ορισμού μια εγγραφής/συνόλου.
• Να αναλυθεί ο σκοπός/χρησιμότητα των εγγραφών και
συνόλων στην pascal.

5
5

Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Περιεχόμενα ενότητας
• Εγγραφές – Records
• Σύνολα
• Ορισμός Τύπων Συνόλων
• Εκχώρηση Στοιχείων Συνόλων σε Μεταβλητές

6
6
Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εγγραφές - Records
• Η εγγραφή (record) είναι ένα σύνολο στοιχείων, τα
οποία δεν είναι (υποχρεωτικά) του ίδιου τύπου
μεταξύ τους. Τα στοιχεία του record λέγονται πεδία
(fields). Η δήλωση ενός record είναι η ακόλουθη:
TYPE <ΟΝΟΜΑ ΤΥΠΟΥ> = RECORD
<ΟΝΟΜΑ ΠΕΔΙΟΥ 1>: <ΤΥΠΟΣ ΠΕΔΙΟΥ 1>;
<ΟΝΟΜΑ ΠΕΔΙΟΥ 2>: <ΤΥΠΟΣ ΠΕΔΙΟΥ 2>;
...
<ΟΝΟΜΑ ΠΕΔΙΟΥ N>: <ΤΥΠΟΣ ΠΕΔΙΟΥ N>;
END; 7
7

Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εγγραφές - Records
• Παράδειγμα 1
Ας υποθέσουμε ότι θέλουμε να επεξεργαστούμε τα στοιχεία των
σπουδαστών του Τμήματος Τεχνολογίας Πληροφορικής και
Τηλεπικοινωνιών. Τα στοιχεία που θέλουμε να έχουμε είναι:
Επώνυμο, Όνομα, Αριθμός Μητρώου, Χρονολογία Γέννησης,
Φύλο και Βαθμολογία ενός Μαθήματος.
SURNAME NAME AM BIRTHDAY SEX GRADE
ΣΩΤΗΡΙΟΥ ΓΕΩΡΓΙΟΣ 145 1982 ΑΓΟΡΙ 7,5
ΓΕΩΡΓΙΟΥ ΜΑΡΙΑ 210 1981 ΚΟΡΙΤΣΙ 8,2

ΣΤΑΜΑΤΙΟΥ ΝΙΚΟΛΑΟΣ 172 1982 ΑΓΟΡΙ 6,7


8
8
Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εγγραφές - Records
Στη παραπάνω δήλωση τύπου (type) ορίζουμε τον Type student = record
τύπο STUDENT με στοιχεία: Sur,name:string[20];
Το επώνυμο(SUR) και το όνομα (NAME) του Am,birth:integer;
σπουδαστή ως συμβολοσειρές μήκους 20 Sex:char;
χαρακτήρων, τον αριθμό μητρώου (ΑΜ) και την Grade:real;
χρονολογία γέννησης (BIRTH) ως ακέραιους End;
αριθμούς, το φύλο (SEX) ως χαρακτήρα και τη Var stud:student;
βαθμολογία (GRADE) ως πραγματικό αριθμό.

9
9

Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εγγραφές - Records
Στη VAR δηλώνουμε μια μεταβλητή STUD η TYPE STUDENT = RECORD
οποία είναι τύπου STUDENT. Το όνομα SUR,NAME:STRING[20];
STUDENT δεν μπορεί να χρησιμοποιηθεί στις AM,BIRTH:INTEGER;
εντολές του προγράμματος, αφού έχει SEX:CHAR;
δηλωθεί ως τύπος δεδομένων και όχι ως GRADE:REAL;
μεταβλητή. Η αναφορά των πεδίων ενός END;
RECORD γίνεται με τον τελεστή. VAR STUD:STUDENT;

10
1
Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εγγραφές - Records
Η εντολή STUD.SUR := 'ΣΩΤΗΡΙΟΥ'; δίνει στο πεδίο SUR TYPE STUDENT = RECORD
του RECORD STUD την τιμή ΣΩΤΗΡΙΟΥ.
SUR,NAME:STRING[20];
Η εντολή STUD.NAME := 'ΓΕΩΡΓΙΟΣ'; δίνει στο πεδίο AM,BIRTH:INTEGER;
NAME του RECORD STUD την τιμή ΓΕΩΡΓΙΟΣ. SEX:CHAR;
Η εντολή STUD.ΑΜ := 145; δίνει στο πεδίο ΑΜ του GRADE:REAL;
RECORD STUD την τιμή 145. END;
VAR STUD:STUDENT;
Η εντολή STUD.BIRTH := 1982; δίνει στο πεδίο BIRTH του
RECORD STUD την τιμή 1982.
Η εντολή STUD.SEX := 'M'; δίνει στο πεδίο SEX του
RECORD STUD την τιμή M (Male -> Αγόρι).
Η εντολή STUD.GRADE := 7.5; δίνει στο πεδίο GRADE του
RECORD STUD την τιμή 7.5.
11
1

Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εγγραφές - Records
Πεδία του RECORD μπορεί να TYPE STUDENT = RECORD
είναι και πίνακες. SUR,NAME:STRING[20];
AM,BIRTH:INTEGER;
Στο πιο πάνω παράδειγμα θα SEX:CHAR;
μπορούσαμε να είχαμε τους GRADE:ARRAY[1..5] OF REAL;
βαθμούς (GRADE) 5 μαθημάτων END;
οπότε η δήλωση του RECORD VAR STUD:STUDENT;
θα γινόταν ως εξής: Η εντολή STUD.GRADE[1] := 7,5 δίνει στο
πεδίο GRADE[1] του RECORD STUD την
τιμή 7.5. (Βαθμό για το 1ο μάθημα).

12
1
Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εγγραφές - Records
Επίσης στοιχεία ενός πίνακα TYPE STUDENT = RECORD
μπορεί να είναι RECORDS. SUR,NAME:STRING[20];
AM,BIRTH:INTEGER;
Στο πρώτο παράδειγμα που SEX:CHAR;
χρησιμοποιήσαμε θα GRADE:REAL;
μπορούσαμε να είχαμε τα END;
στοιχεία για 50 μαθητές οπότε VAR STUD:ARRAY[1..50] OF STUDENT;
η δήλωση του RECORD θα
γινόταν ως εξής:

13
1

Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εγγραφές - Records
Η εντολή STUD[1].SUR := 'ΣΩΤΗΡΙΟΥ'; δίνει TYPE STUDENT = RECORD
στο πεδίο SUR του RECORD STUD[1] την
SUR,NAME:STRING[20];
τιμή ΣΩΤΗΡΙΟΥ. (Για το 1ο Σπουδαστή)
AM,BIRTH:INTEGER;
Η εντολή STUD[1].NAME := 'ΓΕΩΡΓΙΟΣ'; SEX:CHAR;
δίνει στο πεδίο NAME του RECORD GRADE:REAL;
STUD[1] την τιμή ΓΕΩΡΓΙΟΣ. (Για το 1ο END;
Σπουδαστή)
VAR STUD:ARRAY[1..50] OF STUDENT;
Η εντολή STUD[1].ΑΜ := 145; δίνει στο
πεδίο ΑΜ του RECORD STUD[1] την τιμή
145. (Για το 1ο Σπουδαστή)
Η εντολή STUD.BIRTH := 1982; δίνει στο
πεδίο BIRTH του RECORD STUD[1] την τιμή
1982. (Για το 1ο Σπουδαστή)
14
1
Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εγγραφές - Records
Η εντολή STUD[1].GRADE := 7.5; δίνει TYPE STUDENT = RECORD
στο πεδίο GRADE του RECORD SUR,NAME:STRING[20];
STUD[1] την τιμή 7.5. (Για το 1ο AM,BIRTH:INTEGER;
Σπουδαστή) SEX:CHAR;
Επίσης θα μπορούσαμε να είχαμε GRADE:ARRAY[1..5] OF REAL;
συνδυασμό ή συνδυασμούς των πιο END;
πάνω περιπτώσεων. π.χ. να είχαμε τα VAR STUD:ARRAY[1..50] OF STUDENT;
στοιχεία για 50 μαθητές και τους
βαθμούς (GRADE) 5 μαθημάτων
οπότε η δήλωση του RECORD θα
γινόταν ως εξής:

15
1

Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εγγραφές - Records
Η εντολή STUD[1].GRADE := 7.5; δίνει TYPE STUDENT = RECORD
στο πεδίο GRADE του RECORD SUR,NAME:STRING[20];
STUD[1] την τιμή 7.5. (Για το 1ο AM,BIRTH:INTEGER;
Σπουδαστή) SEX:CHAR;
Επίσης θα μπορούσαμε να είχαμε GRADE:ARRAY[1..5] OF REAL;
συνδυασμό ή συνδυασμούς των πιο πάνω END;
περιπτώσεων. π.χ. να είχαμε τα στοιχεία VAR STUD:ARRAY[1..50] OF STUDENT;
για 50 μαθητές και τους βαθμούς (GRADE)
5 μαθημάτων οπότε η δήλωση του
RECORD θα γινόταν ως εξής:
Η εντολή STUD[1].GRADE[1] := 7.5; δίνει
στο πεδίο GRADE[1] του RECORD STUD[1]
την τιμή 7.5. (Το πρώτο μάθημα για το 1ο
Σπουδαστή) 16
1
Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εγγραφές - Records
• Παράδειγμα 2
Να γραφεί πρόγραμμα σε γλώσσα Pascal το οποίο να διαβάζει
τα στοιχεία 5 σπουδαστών (επώνυμο, αριθμό μητρώου,
χρονολογία γέννησης και βαθμό στο μάθημα Προγραμματισμός)
του Τμήματος Τεχνολογίας Πληροφορικής και Τηλεπικοινωνιών.
Να υπολογίζει το μέσο όρο στο μάθημα Δομές Δεδομένων και
να τυπώνει τα στοιχεία των σπουδαστών που έχουν βαθμό
μεγαλύτερο από το μέσο όρο.

17
1

Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Program paradeigma_21;

Εγγραφές
Uses crt;
Type student=record
Sur:string[20];
Am,birth:integer;
Dd:real;

- Records End;
Var stud:array[1..5] of student;
I:integer;sum,mo:real;
Begin
Clrscr;
Sum:=0;
For i:=1 to 5 do
Begin
Write('dose eponymo ',i,' ou spoudasth : ');
Readln(stud[i].sur);
Write('dose ar. Mhtroou ',i,' ou spoudasth : ');
Readln(stud[i].am);
Write('dose hm. Gennhshs ',i,' ou spoudasth : ');
Readln(stud[i].birth);
Write('dose bathmo ',i,' ou spoudasth : ');
Readln(stud[i].dd);
Sum := sum + stud[i].dd;
End;
Writeln;
Mo := sum / 5;
Writeln('o mesos oros einai : ',mo:0:2);
Writeln;
For i:=1 to 5 do
If stud[i].dd > mo then
Writeln('eponymo:',stud[i].sur,'a.m.:',stud[i].am,'
Hm.gennhshs:',stud[i].birth,'bathmos:',stud[i].dd:0:2);
End.
18
1
Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σύνολα
• Τα σύνολα είναι τύποι δεδομένων που ορίζονται από τον χρήστη και οι
οποίοι έχουν κάποιο βαθμό δόμησης.
• Όπως και στα μαθηματικά, έτσι και στην Pascal, ένα σύνολο (set) είναι μια
διατεταγμένη συλλογή στοιχείων. Ένα σύνολο αποτελείται από μια
πεπερασμένη συλλογή (μοναδικών) στοιχείων τα οποία βρίσκονται στον
ίδιο προκαθορισμένο τύπο, ο οποίος καλείται βασικός.
• Η γενική μορφή δήλωσης ενός συνόλου είναι η εξής :
Type 'Ονομα_Συνόλου = Set of Τακτικός_Τύπος
• Ο Τακτικός_Τύπος είναι ένα διατεταγμένο σύνολο τιμών, τα στοιχεία του
πρέπει να είναι όλα του ίδιου τύπου και πρέπει να αποτελεί ένα απλό
στοιχείο ή ένα υποδιάστημα. Ο Τακτικός_Τύπος δεν μπορεί να έχει πάνω
από 256 πιθανές τιμές 19
1

Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σύνολα
• Παράδειγμα
Const
vowels = ['A', 'E', 'I', 'O', 'U'];
upper_case = Set of 'A'..'Z' = ['A'..'Z'];
 Αφού οριστεί κάποιο σύνολο, ο τελεστής in χρησιμεύει για να εξετάσει
την παρουσία ή την απουσία κάποιου συγκεκριμένου στοιχείου από το
σύνολο, ως εξής
If ch In upper_case Then ...
If ch In vowels Then ...
 Στα παραπάνω παραδείγματα, το In επιστρέφει την τιμή true αν το ch 20
2
είναι στοιχείο του αντίστοιχου συνόλου και false αν δεν είναι.
Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ορισμός Τύπων Συνόλων


• Τα σύνολα μπορούν να οριστούν με πολλούς τρόπους :
 Προκαθορισμένοι τακτικοί τύποι :
Type
boolean_set = Set of Boolean;
char_set = Set of Char;
byte_set = Set of Byte;

21
2

Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ορισμός Τύπων Συνόλων


 Υποδιαστήματα προκαθορισμένων τύπων :
Type
bits = 1..7;
byte_bitrs = Set of bits;
up_case = Set of 'A'..'Z';
lo_case = Set of 'a'..'z';
 Απαριθμητοί τύποι :
Type
transportation = (bicycle, motorcycle, car, truck, bus);
four_wheels = car..bus;
trans_set = Set of transportation;
four_wheel_set = Set of four_wheels;
22
2
Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ορισμός Τύπων Συνόλων


• Μεταβλητές :
Var
fast_trans : four_wheels;
lower_letters : lo_case;
num1, num2 : byte_bits;
• Σταθερές :
Const
vowels : Set of Char = ['A', 'E', 'I', 'O', 'U'];
up_chars : Set of Char = ['A'..'Z'];
lo_chars : Set of Char = ['a'..'z'];

23
2

Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εκχώρηση Στοιχείων Συνόλων


σε Μεταβλητές
• Για την εκχώρηση στοιχείων συνόλων σε μεταβλητές χρησιμοποιούνται οι
αγκύλες, ως εξής :
Μεταβλητή_Συνόλου := [Στοιχείο_Συνόλου]
• Το κενό σύνολο είναι το [ ] και με τη βοήθειά του μπορούμε να
μηδενίσουμε μεταβλητές συνόλων. Ένα σύνολο μπορεί να αποτελείται
από μια σειρά στοιχείων, ένα υποδιάστημα ή από τον συνδυασμό και των
δύο, ως εξής :
set1 := [1, 3, 5, 7, 9]
set2 := [0..7];
set3 := [0..7, 14, 15, 16];
char_list := ['A'..'Z', 'a'..'z', '0'..'9'];

24
2
Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εκχώρηση Στοιχείων Συνόλων


σε Μεταβλητές
• Οι Τελεστές Συνόλων
Οι τελεστές συνόλων προσφέρουν τρόπους για την δημιουργία
νέων συνόλων με στοιχεία από ήδη υπάρχοντα σύνολα. Οι
τελεστές συνόλων που υποστηρίζει η Pascal είναι οι εξής :
• Οι Σχεσιακοί Τελεστές
Οι σχεσιακοί τελεστές έχουν ως σκοπό την εύρεση της σχέσης
δύο ή περισσοτέρων συνόλων. Βασισμένος στις πιθανές
καταστάσεις κάποιας σχέσης, ο τελεστής επιστρέφει την τιμή
True ή False.
25
2

Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εκχώρηση Στοιχείων Συνόλων


σε Μεταβλητές
Ο παρακάτω πίνακας παρουσιάζει τους σχεσιακούς τελεστές
που χρησιμοποιούνται στα σύνολα :
ΤΕΛΕΣΤΗΣ ΣΥΝΤΑΞΗ ΕΠΙΣΤΡΕΦΕΙ TRUE ΑΝ
= Σύνολο Α = Σύνολο Β Τα Α και Β είναι ταυτόσημα.
<> Σύνολο Α <> Σύνολο Β Ένα από τα σύνολα περιέχει
τουλάχιστον ένα στοιχείο που δεν
βρίσκεται στο άλλο.
<= Σύνολο Α <= Σύνολο Β Κάθε στοιχείο του Α είναι και στο Β.
< Σύνολο Α < Σύνολο Β Κάθε στοιχείο του Α είναι και στο Β
και επιπλέον στο Β υπάρχει
τουλάχιστον ένα στοιχείο που δεν
βρίσκεται στο Α.
>= Σύνολο Α >= Σύνολο Β Κάθε στοιχείο του Β είναι και στο Α.
> Σύνολο Α > Σύνολο Β Κάθε στοιχείο του Β είναι και στο Α
και επιπλέον στο Α υπάρχει
τουλάχιστον ένα στοιχείο που δεν
βρίσκεται στο Β.
ΙΝ Στοιχείο στο Σύνολο Α Το στοιχείο υπάρχει στο σύνολο Α.
26
2
Προγραμματισμός Ι – Εγγραφές, Σύνολα, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εκχώρηση Στοιχείων Συνόλων


σε Μεταβλητές
• Ο Τελεστής Ιn
Ο τελεστής Ιn εξετάζει την σχέση δύο ή περισσοτέρων συνόλων. Επιστρέφει
ένα αποτέλεσμα τύπου Boolean, ανάλογα με το αν κάποιο στοιχείο είναι
μέρος του συνόλου. Το εξεταζόμενο στοιχείο θα πρέπει να είναι του ιδίου
τύπου ή συμβατού με τον βασικό τύπο του συνόλου.
Η σύνταξή του είναι η εξής : Όνομα_Στοιχείου Ιn Όνομα_Συνόλου
Ακολουθούν παραδείγματα :
ch In vowels
'i' In consonants
operator In ['+', '-', '/', '*']

27
2

Ενότητα 10 : Αρχεία
Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σκοποί ενότητας
• Να γίνει σαφής ο τρόπος χειρισμού των αρχείων.
• Να περιγραφεί ο τρόπος ανοίγματος ή κλεισίματος,
επεξεργασίας και χειρισμού αρχείων κειμένου.
• Να περιγραφεί ο τρόπος χειρισμού αρχείων με τύπο.

5
5

Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Περιεχόμενα ενότητας
• Εισαγωγικές έννοιες
• Αρχεία Κειμένου.
• Άνοιγμα ή κλείσιμο αρχείων
• Επεξεργασία αρχείων
• Χειρισμός αρχείων
• Αρχεία Με Τύπο

6
6
Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Εισαγωγικά
• Aρχείο: Σύνθετος τύπος δεδομένων με δόμηση.
• Όπως στα σύνολα και στις εγγραφές έτσι και στο αρχείο
δίνεται ένα όνομα, η προσπέλαση όμως σε κάθε συνιστώσα
γίνεται ξεχωριστά.
• H προσπέλαση σε μία συνιστώσα γίνεται με το όνομά της
ανεξάρτητα από τη θέση της, ενώ σε τύπους με δόμηση η
προσπέλαση γίνεται σύμφωνα με τη θέση της στη συλλογή
και όχι με το όνομά της.
• Επιτρεπτές πράξεις: Eκχώρηση τιμών, αποθήκευση, ανάκτηση
μεμονωμένων συνιστωσών. 7
7

Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αρχεία Κειμένου1/2
• Αποτελούνται από χαρακτήρες και χωρίζονται σε γραμμές οι
οποίες τελειώνουν με το χαρακτήρα μεταφοράς στην
επόμενη γραμμή (CR/LF).
• Για να χρησιμοποιήσουμε ένα αρχείο κειμένου, πρέπει να
του δώσουμε ένα όνομα και να δηλώσουμε τον τύπο του με
τη λέξη Text.
• Για να χρησιμοποιήσουμε ένα αρχείο για είσοδο ή έξοδο
πρέπει να δώσουμε και το πραγματικό όνομα του αρχείου
του δίσκου στο οποίο αναφέρεται  διαδικασία assign.

8
8
Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αρχεία Κειμένου2/2
var mathites: text;

begin

assign (mathites,’C:/students.dat’);…
• Το όνομα του αρχείου στο δίσκο (c:students.dat), στο οποίο αναφέρεται
το αρχείο με τη χρήση της διαδικασίας assign, χρησιμοποιείται μόνο μία
φορά.
• Όλες οι άλλες αναφορές του αρχείου στο πρόγραμμα γίνονται με το
όνομά του, όπως αυτό δηλώθηκε στην περιοχή δήλωσης των μεταβλητών
(mathites).

9
9

Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Άνοιγμα/κλείσιμο αρχείων1/3
• reset (F1): Όπου F1 είναι μεταβλητή τύπου αρχείου,
όπως έχει καθοριστεί από την εντολή assign.
• Ενέργεια: Η εντολή αυτή ανοίγει ένα αρχείο που
υπάρχει, με δυνατότητα ανάγνωσης ή εγγραφής σε
αυτό.
• Αν το αρχείο είναι τύπου text, τότε το αρχείο μπορεί
να χρησιμοποιηθεί μόνο για ανάγνωση.

10
1
Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Άνοιγμα/κλείσιμο αρχείων2/3
• rewrite (F1): Όπου F1 είναι μεταβλητή τύπου
αρχείου, όπως έχει καθοριστεί από την εντολή
assign.
• Ενέργεια: Η εντολή αυτή δημιουργεί ένα αρχείο για
εγγραφή.
• Αν το αρχείο αυτό τότε τα δεδομένα που είναι
αποθηκευμένα στο αρχείο καταστρέφονται.

11
1

Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Άνοιγμα/κλείσιμο αρχείων3/3
• close (F1): Όπου F1 είναι μεταβλητή τύπου αρχείου, όπως
έχει καθοριστεί από την εντολή assign.
• Ενέργεια: Η εντολή αυτή κλείνει το αρχείο F1 και ενημερώνει
τον κατάλογο (directory).
• Μετά τη χρήση του αρχείου και πριν τελειώσει το
πρόγραμμα, χρησιμοποιείται η εντολή close για το κλείσιμο
του αρχείου.
• Εάν δε χρησιμοποιηθεί και έχουμε ανοίξει αρχείο για
εγγραφή, τότε είναι πιθανό να χάσουμε ορισμένα από τα
τελευταία δεδομένα που γράφτηκαν. 12
1
Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Άνοιγμα/κλείσιμο αρχείων4/4
• append (F1):Όπου F1 είναι μεταβλητή τύπου αρχείου, όπως
έχει καθοριστεί από την εντολή assign.
• Ενέργεια: Ανοίγει ένα αρχείο τύπου κειμένου για εγγραφή
και συγκεκριμένα για πρόσθεση νέωνδεδομένων στο τέλος
του αρχείου και τα νέα δεδομένα δε σβήνουν τα παλιά.

13
1

Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Επεξεργασία αρχείων1/5
• read/ readln (F1, M1, M2, …, Mn): Όπου F1 είναι μεταβλητή
τύπου αρχείου, όπως έχει καθοριστεί από την εντολή assign
και M1, M2,…,Mn είναι τα ονόματα των μεταβλητών.
• Ενέργεια: Η εντολή read διαβάζει δεδομένα από το αρχείο F1
και τα αποθηκεύει στις μεταβλητές M1, M2,…,Mn.
• Η εντολή readln, η οποία χρησιμοποιείται μόνο σε αρχεία
κειμένου, διαβάζει δεδομένα με τον ίδιο τρόπο αλλά μετά
την εκτέλεσή της ο δείκτης του αρχείου μετακινείται προς την
επόμενη γραμμή του κειμένου του αρχείου.

14
1
Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Επεξεργασία αρχείων2/5
• eof (F1): Όπου F1 είναι μεταβλητή τύπου αρχείου, όπως έχει
καθοριστεί από την εντολή assign.
• Ενέργεια: Η συνάρτηση είναι boolean και επιστρέφει την τιμή
true, αν βρεθεί η ένδειξη τέλους του αρχείου (τέλος
δεδομένων), αλλιώς, επιστρέφει την τιμή false.

15
1

Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Επεξεργασία αρχείων3/5
• seekeof (F1): Όπου F1 είναι μεταβλητή τύπου αρχείου, όπως
έχει καθοριστεί από την εντολή assign.
• Ενέργεια: Η συνάρτηση είναι boolean και επιστρέφει την τιμή
true, αν βρεθεί η ένδειξη τέλους του αρχείου (τέλος
δεδομένων), αλλιώς, επιστρέφει την τιμή false.
• Είναι αντίστοιχη της συνάρτησης eof με τη διαφορά ότι
παραλείπει όλα τα κενά και τους χαρακτήρες τέλους
γραμμής.

16
1
Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Επεξεργασία αρχείων4/5
• eoln (F1): Όπου F1 είναι μεταβλητή τύπου αρχείου, όπως έχει
καθοριστεί από την εντολή assign.
• Ενέργεια: Η συνάρτηση δηλώνει αν υπάρχουν ακόμη
χαρακτήρες στην τρέχουσα γραμμή.
• Η συνάρτηση επιστρέφει την τιμή true, αν διαβάζοντας βρει
το τέλος της γραμμής ή το τέλος του αρχείου, αλλιώς
επιστρέφει την τιμή false.

17
1

Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Επεξεργασία αρχείων5/5
• Ioresult:
• Ενέργεια: Η συνάρτηση επιστρέφει μία ακέραια τιμή που
δείχνει την κατάσταση της τελευταίας εντολής εισόδου/
εξόδου/ Η συνάρτηση είναι χωρίς παράμετρο.
• Αν η τελευταία λειτουργία εισόδου/ εξόδου τελειώσει
επιτυχώς, τότε η συνάρτηση επιστρέφει την τιμή 0 (μηδέν).
• Για να λειτουργήσει η συνάρτηση πρέπει να έχει δηλωθεί
προς τον compiler της Pascal η δήλωση{$I-} που δίνει στο
χρήστη τη δυνατότητα ελέγχου των λαθών που έχουν σχέση
με είσοδο και έξοδο. 18
1
Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Χειρισμός αρχείων1/3
• eof (F1): Όπου F1 είναι μεταβλητή τύπου αρχείου, και F2 το
όνομα του αρχείου στο Λειτουργικό Σύστημα.
• Ενέργεια: Η εντολή αυτή αντιστοιχίζει στη μεταβλητή F1 το
όνομα του αρχείου F2, έτσι όπως έχει οριστεί στο Λειτου
• erase (F1): Όπου F1 είναι μεταβλητή τύπου αρχείου, όπως
έχει καθοριστεί από την εντολή assign.
• Ενέργεια: Η εντολή διαγράφει από το δίσκο το αρχείο που
αντιστοιχεί στην μεταβλητή F1.

19
1

Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Χειρισμός αρχείων2/3
• assign (F1, F2): Όπου F1 είναι μεταβλητή τύπου αρχείου, και
F2 το όνομα του αρχείου στο Λειτουργικό Σύστημα.
• Ενέργεια: Η εντολή αυτή αντιστοιχίζει στη μεταβλητή F1 το
όνομα του αρχείου F2, έτσι όπως έχει οριστεί στο Λειτου
• erase (F1): Όπου F1 είναι μεταβλητή τύπου αρχείου, όπως
έχει καθοριστεί από την εντολή assign.
• Ενέργεια: Η εντολή διαγράφει από το δίσκο το αρχείο που
αντιστοιχεί στην μεταβλητή F1.

20
2
Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Χειρισμός αρχείων3/3
• assign (F1, F2): Όπου F1 είναι μεταβλητή τύπου αρχείου, και
F2 το όνομα του αρχείου στο Λειτουργικό Σύστημα.
• Ενέργεια: Η εντολή αυτή αντιστοιχίζει στη μεταβλητή F1 το
όνομα του αρχείου F2, έτσι όπως έχει οριστεί στο Λειτου
• erase (F1): Όπου F1 είναι μεταβλητή τύπου αρχείου, όπως
έχει καθοριστεί από την εντολή assign.
• Ενέργεια: Η εντολή διαγράφει από το δίσκο το αρχείο που
αντιστοιχεί στην μεταβλητή F1.

21
2

Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 1
Εγγραφή σε αρχείο Program paradeigma_14;
Var fname, txt : string;
κειμένου Userfile : text;
Begin
Write('dose onoma arxeiou
(px.c:\test.txt) :');
Readln(fname);
Assign(userfile, fname);
Rewrite(userfile);
Writeln('grapse to kimeno : ');
Readln(txt);
Writeln(userfile,txt);
Close(userfile);
End.
22
2
Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 2
Program paradeigma_15;
Ανάγνωση από Var userfile : text;
Filename, tfile : string;
αρχείο κειμένου Begin
Write('dose onoma arxeiou
(px.c:\test.txt) :');
Readln(filename);
Assign(userfile, filename);
Reset(userfile);
Repeat
Readln(userfile,tfile);
Writeln(tfile);
Until eof(userfile);
Close(userfile);
Readln;
End. 23
2

Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 3
Program paradeigma_16;
Διαγραφή Αρχείου Var ufile : text;
Filename : string;
( Προσοχή Κίνδυνος !!! ) Begin
Write('dose onoma arxeiou
(px.c:\test.txt) :');
Readln(filename);
Assign(ufile,filename);
Erase(ufile);
End.

Επεξήγηση Προγράμματος
Erase(UFile); Άνοιγμα του αρχείου
FileName για διαγραφή.

24
2
Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 41/2
• Να γράψετε μια διαδικασία (procedure) στην Pascal που θα
ζητά τις πληροφορίες: όνομα, επίθετο, email, τηλέφωνο και
να τις αποθηκεύει σε αρχείο κειμένου(Append).
• Στη συνέχεια θα γίνεται ερώτηση αν θέλουμε να συνεχίσουμε
να προσθέτουμε δεδομένα στο αρχείο. Αν η απάντηση είναι
θετική θα ξανακαλείται η διαδικασία, ενώ αν είναι αρνητική
θα τερματίζεται το πρόγραμμα.
Onoma : Toto
• Τα δεδομένα να αποθηκεύονται στο Epitheto : Blabla
email: mymail@teiep.com
αρχείο στην εξής μορφή  Tilefono : 2109999999
25
2

Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα 42/2
Program paradeigma_17;
Procedure insert();
Var
Userfile : text;
Name, surname, mail, phone : string;
Yn : char;
Begin
Assign(userfile, 'c:\phonebook.txt');
{to arxeio c:\phonebook.txt prepei na yparxei gia na mporesei na ginei
Append !!!}
Append(userfile);
Write('onoma: ');
Readln(name);
Write('epitheto: ');
Readln(surname);
Write('email:');
Readln(mail);
Write('tilefono: ');
Readln(phone);
Writeln(userfile, 'onoma: ' + name);
Writeln(userfile, 'epitheto: ' + surname);
Writeln(userfile, 'email:' + mail);
Writeln(userfile, 'tilefono: ' + phone);
Writeln(userfile, '');
Close(userfile);
Write('thelete na sinexisete (y/n) :');
Readln(yn);
If(yn='y') then
Begin
Clrscr; {katharismos tis othonis}
Insert();
End
Else
Begin
Write('bye bye ...');
Exit; {exodos apo to programma}
26
2
Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αρχεία Με Τύπο1/7
• Τα αρχεία με τύπο (typed files) είναι αρχεία, όπου οι
αριθμητικές τιμές απεικονίζονται σε αριθμητική μορφή και
όχι σε μορφή χαρακτήρων, όπως στα αρχεία κειμένου.
• Οι συνιστώσες του αρχείου μπορεί να είναι κάθε τύπου,
απλού, σύνθετου, με δόμηση κτλ. με εξαίρεση τον τύπο
αρχείου.
• Τα αρχεία αποτελούνται από εγγραφές ενός συγκεκριμένου
τύπου πχ ακεραίου, πραγματικού κτλ.

27
2

Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αρχεία Με Τύπο2/7
• Η δόμηση των αρχείων ορισμένου τύπου προσδιορίζεται από τον
τύπο των δεδομένων τα οποία θα αποθηκευτούν σε αυτά.
• Για να χρησιμοποιήσουμε ένα αρχείο, πρέπει να του δώσουμε ένα
όνομα και να δηλώσουμε ότι είναι αρχείο (file), και να δηλώσουμε
τον τύπο των δεδομένων που αποθηκεύονται σε αυτό.
• Τα δεδομένα είναι οργανωμένα σε εγγραφές (records) και κάθε
δεδομένο αποτελεί μία εγγραφή.
• Το μήκος μίας εγγραφής είναι ο αριθμός των bytes τα οποία
απαιτούνται για την αποθήκευση του συγκεκριμένου τύπου.

28
2
Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αρχεία Με Τύπο3/7
• Οι εντολές reset, rewrite, read, write, append, assign, close,
erase, rename και eof που είναι διαθέσιμες από τη γλώσσα
Pascal για τα αρχεία κειμένου ισχύουν με την ίδια σημασία
και για τα αρχεία με τύπο.
• Οι εντολές read και write είναι απλοποιημένες, αφού μία
μόνο συνιστώσα διαβάζεται ή γράφεται στο αρχείο κάθε
φορά που εκτελούνται.
• Τα αρχεία με τύπο ονομάζονται και δυαδικά (binary) γιατί η
εσωτερική απεικόνιση των δεδομένων στη μνήμη είναι ίδια
με την εξωτερική απεικόνιση των δεδομένων στο αρχείο.
29
2

Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αρχεία Με Τύπο4/7
• Τα δυαδικά αρχεία διαθέτουν έναν αριθμό σειράς για κάθε
συνιστώσα (εγγραφή) αρχίζοντας από το μηδέν.
• Εκτός από τη σειριακή προσπέλαση που μπορεί να γίνει με
την εντολή read, η οποία κάθε φορά διαβάζει την επόμενη
εγγραφή, μία τυχαία εγγραφή μπορεί να βρεθεί αν δοθεί ο
αριθμός της σειράς της.
• Η άμεση ή τυχαία προσπέλαση επιτυγχάνεται με έναν ειδικό
δείκτη, το δείκτη εγγραφής αρχείου (file pointer).

30
3
Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αρχεία Με Τύπο5/7
• Οι ενέργειες είναι:
1. Ενημερώνεται ο δείκτης αρχείου με τον αριθμό
της εγγραφής του αρχείου που θέλουμε να
διαβάσουμε ή να γράψουμε.
2. Χρησιμοποιείται η αντίστοιχη εντολή
ανάγνωσης ή εγγραφής, η οποία εκτελείται
πάνω στην τρέχουσα εγγραφή.

31
3

Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αρχεία Με Τύπο6/7
• seek (F1, R): Όπου F1 είναι μεταβλητή τύπου αρχείου, όπως
έχει καθοριστεί από την εντολή assign, και R η θέση της προς
αναζήτηση εγγραφής στο αρχείο.
• Ενέργεια: Η εντολή, η οποία είναι διαδικασία, τοποθετεί το
δείκτη ανάγνωσης/εγγραφής στο record με αριθμό Rγια
μελλοντικό read ή write.
• Η εντολή δε λειτουργεί σε αρχεία τύπου TEXT.
• Η πρώτη εγγραφή του αρχείου έχει αριθμό μηδέν (0).

32
3
Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Αρχεία Με Τύπο7/7
• filepos (F1): Όπου F1 είναι μεταβλητή τύπου
αρχείου, όπως έχει καθοριστεί από την εντολή
assign.
• Ενέργεια: Η συνάρτηση επιστρέφει τη θέση του
αρχείου όπου θα διαβαστεί ή θα γραφεί η επόμενη
εγγραφή.
• Στην αρχή του αρχείου η συνάρτηση επιστρέφει την
τιμή μηδέν (0), στο τέλος του αρχείου επιστρέφει
την ίδια τιμή με τη filesize. 33
3

Προγραμματισμός Ι – Αρχεία, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Παράδειγμα
Program paradeigma_18;
Var a,i:integer;
Var fp1: file of integer;
Begin
Assign(fp1,'tempo.dat');
Rewrite(fp1);
For i:=1 to 5 do
Begin
Write('dose enan akeraio: ');
Readln(a);
Write(fp1,a);
End;
Close(fp1);
Reset(fp1);
Writeln('ta dedomena tou arxeiou einai:');
While not eof(fp1) do
Begin
Read(fp1,a);
Writeln(a);
End;
Writeln;
Close(fp1);
End.
34
3
Ενότητα 11 : Ασκήσεις Επανάληψης Α’

Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σκοποί ενότητας
• Να παρουσιαστούν οι λύσεις κάποιων ενδεικτικών
ασκήσεων επανάληψης, που αφορούν τις Ενότητες
1-3, προς πλήρη κατανόηση.

5
5
Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Περιεχόμενα ενότητας
• Ασκήσεις Επανάληψης στις Ενότητες 1-3
• Λύσεις ασκήσεων

6
6

Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις1/13
Να γίνει πρόγραμμα με το program apoliti_timi (input, output);
οποίο ο χρήστης να δίνει var x:real;
ένα πραγματικό αριθμό και begin
ένα εμφανίζει την απόλυτη writeln('Dwse enan pragmatiko arithmo');
του τιμή και συγχρόνως να readln(x);
λέει αν είναι θετικός ή if x>=0 then
αρνητικός. begin
writeln('H apolyth timh toy ',x,' einai: ', x);
 Καταρχήν για να writeln('O arithmos aytos einai thetikos ');
δημιουργήσουμε το end
πρόγραμμα θα πρέπει να else
θυμηθούμε τον ορισμό της begin
απόλυτης τιμής: writeln('H apolyth timh toy ',x,' einai: ', -x);
𝑥, 𝛼𝜈 𝑥 ≥ 0 writeln('O arithmos aytos einai arnhtikos ');
𝑥=
−𝑥, 𝛼𝜈 𝑥 < 0 end
end.
7
7
Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις2/13
program artioi_peritoi(input,output);
Να γίνει πρόγραμμα με var a:integer;

το οποίο ο χρήστης να
begin
writeln('Dwse enan thetiko akeraio arithmo');
δίνει ένα θετικό ακέραιο readln(a);
if a<=0 then
και να ελέγχει αν είναι writeln(' Mh apodekta dedomena ')

άρτιο ή περιττός. Αν else (*Edw ypotithetai oti exoume th logikh synthhk a>0*)
begin
είναι άρτιος τον διαιρεί if a mod 2 = 0 then (*Me ayto to entheto if elegxoume an o a

με το 2 ενώ αν είναι
einai artios*)
begin
περιττός να τον διαιρεί writeln('O arithmos ',a,' einai artios ');
a:=a div 2;
με το 3. Τα end

αποτελέσματα να else (*Me ayto to else poy antistoixei sto entheto if


elegxoume an o a einai perittos*)
εμφανίζονται στην begin

οθόνη. Να δοθούν τρία


writeln('O arithmos ',a,' einai perittos ');
a:=a div 3;
παραδείγματα εισόδου. end;
writeln(' H telikh timh toy a einai: ', a);
end
end.

8
8

Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις3/13
Να γίνει πρόγραμμα το οποίο ο χρήστης να βρίσκει τον ελάχιστο
από τρεις πραγματικούς αριθμούς τους οποίους εισάγει ο
χρήστης από το πληκτρολόγιο.
program elaxisto(input,output);
var a,b,c,min:real;
begin
writeln('Dwse treis pragmatikous arithmous');
readln(a,b,c);
min:=a;
if b<min then
min:=b;
if c<min then
min:=c;
writeln(' To elaxisto metaxy twn ',a,'',b,' kai',c,' einai: ', min)
end.
9
9
Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις4/13
Να γίνουν προγράμματα με τα οποία:
I. Ο χρήστης να δίνει του βαθμούς τριών διαγωνισμάτων σε ένα μάθημα
ενός φοιτητή και να εμφανίζει αν αυτός περνά το μάθημα ή όχι. Ο φοιτητής
περνάει το μάθημα αν έχει στα διαγωνίσματα μέσο όρο πάνω από 4.5. Οι
βαθμοί παίρνουν τιμές από 0 έως 10. Ακόμη να σχεδιαστεί το λογικό
διάγραμμα αυτού του προγράμματος.
II. Ο χρήστης να δίνει του βαθμούς τεσσάρων διαγωνισμάτων σε ένα
μάθημα ενός φοιτητή και να εμφανίζει αν αυτός περνά το μάθημα ή όχι. Ο
φοιτητής περνάει το μάθημα αν έχει γράψει σε όλα τα διαγωνίσματα πάνω
από 5 ή όταν ο μέσος όρος των διαγωνισμάτων είναι πάνω από 7. Οι βαθμοί
παίρνουν τιμές από 0 έως 10.
10
1

Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις4/13-1
I) Εδώ θα χρησιμοποιήσουμε τρεις πραγματικές μεταβλητές a1,a2,a3 για τους βαθμούς των
διαγωνισμάτων και μια πραγματική average για το μέσο όρο του φοιτητή. Αφού ο χρήστης
εισάγει τους βαθμούς των τριών μαθημάτων, στη συνέχεια ελέγχεται αν είναι αποδεκτές οι
τιμές τους. Αν είναι τότε εκτελείται το υπόλοιπο πρόγραμμα, δηλαδή εμφανίζεται στην οθόνη
αν ο φοιτητής περνάει το μάθημα. Το πρόγραμμα είναι το εξής:
program bathmoi(input,output);
var a1,a2,a3,average:real;
begin
writeln(' Dose toys bathmoys 3 diagwnismatwn ');
readln(a1,a2,a3);
if (a1<0)or (a1>10)or (a2<0)or (a2>10)or(a3<0)or (a3>10)then
writeln(' Mh apodekta dedomena ')
else
begin
average:=(a1+a2+a3)/3.0;
if average>=4.5 then
writeln(' O foithths pernaei to mathima ')
else
writeln(' O fothths den pernaei to mathima ');
end
end. 11
1
Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις4/13-2
begin
writeln(' Dose toys
bathmoys 4
diagwnismatwn ')

readln
(a1,a2,a3)

(a1<0)or
(a1>10)or
(a2<0)or
(a2>10)or(a3<0
writeln(' Mh )or (a3>10) average:=(a1+a2+a3)/3
apodekta .0;
dedomena ')

average
writeln(' O
>=4.5 writeln(' O
foithths fothths den
pernaei to pernaei to
mathima ') mathima ');

12
end. 1

Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις4/13-3
II) Εδώ θα χρησιμοποιήσουμε τέσσερις πραγματικές μεταβλητές b1,b2,b3,b4 για τους
βαθμούς των διαγωνισμάτων και άλλη μια average για το μέσο όρο του φοιτητή (οι βαθμοί
μπορεί να είναι και ακέραιες μεταβλητές αφού αυτό δεν ξεκαθαρίζεται από την εκφώνηση).
Με το πρόγραμμα αυτό αφού εξασφαλίσουμε ότι τα δεδομένα είναι δεκτά, θα πρέπει να
ελέγχουμε κατ’ αρχήν αν όλοι οι βαθμοί του φοιτητή είναι πάνω από 5, αν όχι τότε βρίσκουμε
το μέσο όρο των διαγωνισμάτων και ελέγχουμε αν είναι μεγαλύτερος του 7.
Αν συμβαίνει κάτι από τα παραπάνω τότε ο φοιτητής περνάει το μάθημα αλλιώς όχι.
Επομένως, το πρόγραμμα είναι το εξής:

13
1
Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις4/13-4
program bathmoi(input,output);
var b1,b2,b3,b4,average:real;
begin
writeln(' Dose toys bathmoys 4 diagwnismatwn ');
readln(b1,b2,b3,b4);
if (b1<0)or (b1>10)or (b2<0)or (b2>10)or(b3<0)or (b3>10)or(b4<0)or (b4>10)then
writeln(' Mh apodekta dedomena ')
else
begin
if (b1>=5.0) and (b2>5.0)and (b3>=5.0) and (b4>5.0)then
writeln(' O foithths pernaei to mathima ')

else
begin
average:=(b1+b2+b3+b4)/4.0;
if average>=7.0 then
writeln(' O foithths pernaei to mathima ')
else
writeln(' O foithths den pernaei to mathima ');
end;
end
end.

14
1

Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις5/13-1
Να γίνει πρόγραμμα με το οποίο ο χρήστης να δίνει
δύο πραγματικού αριθμούς και το σύμβολο μιας
αριθμητικής πράξης και να εκτελείται η αντίστοιχη
πράξη. Να ελέγχονται οι αντίστοιχοι περιορισμοί και
να εμφανίζονται τα αποτελέσματα στην οθόνη. Να
δοθούν δύο αντίστοιχα παραδείγματα εκτέλεσης

15
1
Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις5/13-2
• Εδώ θα χρειαστούμε τρεις πραγματικές μεταβλητές a, b, c τις δύο πρώτες
για τις τιμές που θα εισάγει ο χρήστης από το πληκτρολόγιο και την τρίτη
για το αποτέλεσμα κάθε επιμέρους πράξης ακόμα θα χρειαστούμε μια
μεταβλητή praxi τύπου χαρακτήρα για το πρόσημο που θα δίνει ο χρήστης
(δηλαδή για την πράξη που θα ζητάει κάθε φορά να εκτελείται).
• Το σύμβολο της αντίστοιχης πράξης και στη συνέχεια ή θα τους προσθέτει
ή θα του αφαιρεί ή θα τους πολλαπλασιάζει ή θα τους διαιρεί εφόσον ο
παρονομαστής (δηλαδή ο δεύτερος αριθμός) είναι διάφορος του 0.
• Τα αποτελέσματα θα εμφανίζονται στην οθόνη.
• Επειδή το σύμβολο της πράξης μπορεί να πάρει τέσσερις τιμές (+, -, *, /)
είναι προτιμότερο να χρησιμοποιήσουμε την εντολή case
16
1

Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις5/13-3
program praxeis(input,output);
var a,b,c:real;
praxi:char;
begin
writeln(' Dwse 2 pragmatikous arithmoys: ');
readln(a,b);
writeln(' Dwse to symbolo ths praxhs: ');
readln(praxi);
case praxi of
'+':
begin
c:=a+b;
writeln(a,' + ',b,' = ',c);
end;
'-':
begin
c:=a-b;
writeln(a,' - ',b,' = ',c);
end;
'*':
begin
c:=a*b;
writeln(a,' * ',b,' = ',c);
end;
'/':
begin
if b<>0 then
begin
c:=a/b;
writeln(a,' / ',b,' = ',c);
end
else
writeln(' Mh apodektos paronomasths ');
end;
end
end.
17
1
Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις6/13
program name;
Θέλουμε να var ono,epo : string[20];
δημιουργήσουμε ένα var ili : integer;
πρόγραμμα που να begin
write('DWSE ONOMA:');
διαβάζει από το readln(ono);
πληκτρολόγιο το όνομα, write('DWSE EPONYMO:');
το επώνυμο και την readln(epo);
write('DWSE HLIKIA:');
ηλικία σας, και θα τα readln(ili);
εμφανίζει στην οθόνη. writeln('ONOMA: ',ono);
Για τα ονόματα θα writeln('EPWNYMO:',epo);
writeln('HLIKIA: ',ili, 'ETWN');
επιτρέπουμε μήκος έως end.
20 χαρακτήρες
18
1

Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις7/13
Πρόγραμμα που program expression;
διαβάζει από το var x,y : real;
begin
πληκτρολόγιο την τιμή write('DWSE ARI8MO:');
ενός πραγματικού readln(x);
αριθμού x και y := ( exp(-x)+sqr(x)+sqrt(x) ) / ( ln(x)+abs(x) );
writeln('TO APOTELESMA THS EXISWSHS EINAI ',
υπολογίζει την τιμή της y:0:2);
συνάρτησης end.
e x  x 2  x
y
ln x  x

19
1
Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις8/13
Θέλουμε να program seconds;
var secs,o,l,d : integer;
δημιουργήσουμε ένα begin
πρόγραμμα που να write('DWSE DEYTEROLEPTA POY ΤΗES NA
διαβάζει από το METATRAPOYN: ');
readln(secs);
πληκτρολόγιο έναν o := secs DIV 3600;
αριθμό δευτερόλεπτων d := secs MOD 3600;
και να εμφανίζει τις l := d DIV 60;
d := d MOD 60;
ώρες, λεπτά, write('TA ',secs,' DEYTEROLEPTA ANTISTOIXOYN SE ');
δευτερόλεπτα που writeln(o,' WRES ',l,' LEPTA KAI ',d,' DEYTERA');
αντιστοιχούν στον end.

αριθμό αυτό
20
2

Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις9/13
Θέλουμε να program findmax;
δημιουργήσουμε ένα var a,b,c,max: integer;
πρόγραμμα που να begin
διαβάζει από το writeln('Dwste 3 ari0moys kai meta
RETURN');
πληκτρολόγιο τρεις
readln(a,b,c);
αριθμούς και να max:=0;
εμφανίζει στην οθόνη if a>=b then max:=a else max:=b;
τον μεγαλύτερο από if c>=max then max:=c;
αυτούς writeln('Megalyteros = ',max);
end.

21
2
Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις10/13
program eksisosh;
Θέλουμε να var
a:real;
δημιουργήσουμε ένα b:real;

πρόγραμμα που να βρίσκει x:real;


begin
τη λύση εξισώσεων της writeln('EPILYSH EKSISWSHS ax+b = 0');
writeln('DWSE a ');
μορφής a x + b = 0. read (a);

(Παρατήρηση: η λύση είναι writeln('DWSE b ');


read (b);
x = -b/a, εκτός αν α=0. Αν if a<>0 then
begin
α=0 και b=0 η εξίσωση είναι x:=-b/a;

αόριστη, ενώ αν α=0 και b≠0 writeln('Yparxei lysh gia x = ',x:10:4);


end
η εξίσωση είναι αδύνατη) else
if b=0 then writeln ('aoristh')
else
writeln('adynath');
end.

22
2

Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις11/13
Δίνεται συνάρτηση f(t) η
οποία ορίζεται ως εξής: program if_equat;
var t,f :real;
• Εάν t>2 τότε begin
f(t)=2(t2+t)+3lnt-6 writeln('Parakalw dwste to t');
• Εάν t=2 τότε f(t)=1 read(t);
if(t>2) then f := 2 * (sqr(t) + t) + 3 * ln(t) - 6;
• Εάν t<2 τότε f(t)=t2-3t+1 if(t<2) then f := 1;
Να γραφεί πρόγραμμα που if (t=2) then f := sqr(t) - 3 * t + exp(t) + 1;
να υπολογίζει την f(t) για t writeln('f(t) = ',f:10:3);
που θα δίνεται από το end.
χρήστη.

23
2
Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις12/13
Γράψτε πρόγραμμα με
program average;
var i,n,p,sum:integer;
όνομα average το οποίο begin
θα διαβάζει από το
p:=1;
sum:=0;
πληκτρολόγιο ένα write('#');
αριθμό n, και θα
readln(n);
for i:=1 to n do
υπολογίζει το n! begin
δηλαδή το 1·2·3·…·n.
p:=p*i;
sum:=sum+p;
Επίσης να υπολογίζει το end;
writeln('to ',n,' paragontiko einai ',p);
1!+2!+3!..+n! writeln('to a8poisma twn paragontikwn einai ',sum);
end.

24
2

Προγραμματισμός Ι - Ασκήσεις Επανάληψης Α’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις13/13
Να γραφεί πρόγραμμα program mesos;
var m,s,x,sum,tetrag:real;
που να διαβάζει τους i,N:integer;
begin
αριθμούς x1,x2,x3,…,xN write('Posoi einai oi arithmoi synolika?:');
και να υπολογίζει το readln(N);
m:=0; s:=0; sum:=0; tetrag:=0;
μέσο όρο ‘μ’ και τη for i:=1 to N do begin
write('x=');
διακύμανση ‘σ’ όπου: readln(x);
sum:=sum+x;

1
 
 i 1 xi
tetrag:=tetrag+sqr(x);
end;
m:=1/N*sum;
1  2 1 
   xi  2 [ xi ]2 s:=1/N*tetrag-1/sqr(N)*sqr(sum);
 i 1  i 1 writeln('Mesos oros=', m, 'Diakymansh=', s);
end.
25
2
Ενότητα 12: Ασκήσεις Επανάληψης Β’

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σκοποί ενότητας
• Να παρουσιαστούν οι λύσεις κάποιων ενδεικτικών
ασκήσεων επανάληψης, που αφορούν τις Ενότητες
4-6

5
5
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Περιεχόμενα ενότητας
• Ασκήσεις Επανάληψης στις Ενότητες 4-6
• Λύσεις ασκήσεων

6
6

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις1/14
Να απλοποιήσετε το if x>5 then
παρακάτω τμήμα x:=x+5;
προγράμματος else
χρησιμοποιώντας τη δομή if x=5 then
if…then…else y:=x+1;
else
if x>5 then
if x>2 then
x:=x+5; x:=x+2;
if x=5 then else
y:=y-1;
y:=x+1;
if (x>2) and (x=5) then
x:=x+2;
if (x<=2) then y:=y-1;
7
7
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις2/14-1
Δίνεται το λογικό διάγραμμα
του σχήματος. Να
μετατρέψετε σε πρόγραμμα:
α) Χρησιμοποιώντας την
εντολή if…then…else
β) Χρησιμοποιώντας την
εντολή case

8
8

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις1/14-2
α) Χρησιμοποιώντας την εντολή if…then…else
program a(input,output);
var x:integer;
begin
writeln(' Dwse thn timh toy x: ');
readln(x);
if x=0 then
writeln(x+1)
else
if x=1 then
writeln(x*3)
else
if x=1 then
writeln(x*3)
else
if x=2 then
writeln(x*5)
else
writeln(' Mh apodekta dedomena ')
end.
9
9
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις2/14-3
β) Χρησιμοποιώντας την εντολή case
program b(input,output);
var x:integer;
begin
writeln(' Dose thn timh toy x: ');
readln(x);
case x of
0:writeln(x+1);
1:writeln(x*3);
2:writeln(x*5)
else
writeln(' Mh apodekta dedomena ')
end
end.

10
1

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις3/14
Να γίνει πρόγραμμα με program trith(input,output);
το οποίο ο χρήστης να var a,b,c,y,min:real;
εισάγει τις τιμές τριών begin
writeln(' Dwse treis pragmatikes times ');
μεταβλητών a, b, c και να readln(a,b,c);
υπολογίζει την τιμή της min:=a;
συνάρτησης: if b<min then
min:=b;
y  f (a, b,c)  (5  min(a, b,c)) / b, if c<min then
min:=c;
όπου το 𝑚𝑖𝑛(𝑎, 𝑏, 𝑐 writeln(' To elaxisto twn a= ',a:10:1,' b=',b:10:1,' c=',c:10:1,' einai
είναι το ελάχιστο από τα min=',min:10:1);
a, b, c και το οποίο πρέπει y:=(5.0-3.0*min)/b;
writeln(' H timh ths synarthshs einai y= ',y:10:1);
να υπολογίζεται από το end.
πρόγραμμα.
11
1
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις4/14-1
Να γίνει πρόγραμμα με το οποίο να υπολογίζεται το κόστος παραγγελίας κάποιου προϊόντος. Ο
χρήστης θα πρέπει να εισάγει από το πληκτρολόγιο την ποσότητα του προϊόντος που
παραγγέλλεται κάθε φορά και το πρόγραμμα να εμφανίζει το κόστος της παραγγελίας, την αξία
του ΦΠΑ (23%) επί του κόστους καθώς και το συνολικό κόστος, δηλαδή το κόστος και το ΦΠΑ
μαζί. Το πλήθος μπορεί να παίρνει τιμές από 1 μέχρι 1000. Η τιμή του προϊόντος χωρίς το ΦΠΑ
διαμορφώνεται ανάλογα με το μέγεθος της παραγγελίας σύμφωνα με το παρακάτω πίνακα:

Ποσότητα Τιμή κάθε προϊόντος


1-100 500
101-200 400
201-400 360
Πάνω από 400 330
• Αν για παράδειγμα κάποιος παραγγείλει 250 προϊόντα τότε το πρόγραμμα θα πρέπει να
εμφανίζει τα εξής:
 Το κόστος των 250 προϊόντων χωρίς ΦΠΑ είναι ίσο με 90000
 Η αξία του ΦΠΑ είναι ίση με 20700
 Το συνολικό κόστος είναι 110700
12
1

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις4/14-2
program tetarth(input,output);
var k:integer;
s1,s2:real;
begin
writeln(' Dwse to plhthos twn proiontwn poy poylhthhkan ');
readln(k);
if (k<=0)or(k>1000) then
writeln(' Mh apodekta dedomena ')
else
begin
if k<=100 then
begin
s1:=k*500.0;
s2:=0.23*s1;
writeln(' To kostos twn ',k,' proiontwn xwris FPA einai ish me ',s1:10:1);
writeln(' H aksia toy FPA einai me ',s2:10:1);
writeln(' To synoliko kostos ',(s1+s2):10:1);
end
else
if k<=200 then
begin
s1:=k*400.0;
s2:=0.23*s1;
writeln(' To kostos twn ',k,' proiontwn xwris FPA einai ish me ',s1:10:1);
writeln(' H aksia toy FPA einai me ',s2:10:1);
writeln(' To synoliko kostos ',(s1+s2):10:1);
end
13
1
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις4/14-3
else
if k<=400 then
begin
s1:=k*360.0;
s2:=0.23*s1;
writeln(' To kostos twn ',k,' proiontwn xwris
FPA einai ish me ',s1:10:1);
writeln(' H aksia toy FPA einai me ',s2:10:1);
writeln(' To synoliko kostos ',(s1+s2):10:1);
end
else
begin
s1:=k*330.0;
s2:=0.23*s1;
writeln(' To kostos twn ',k,'
proiontwn xwris FPA einai ish me ',s1:10:1);
writeln(' To kostos twn ',k,'
proiontwn xwris FPA einai ish me ',s1:10:1);
writeln(' H aksia toy FPA einai
me ',s2:10:1);
writeln(' To synoliko kostos
',(s1+s2):10:1);
end;
end
end. 14
1

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις5/14-1
else
if k<=400 then
begin
s1:=k*360.0;
s2:=0.23*s1;
writeln(' To kostos twn ',k,' proiontwn xwris
FPA einai ish me ',s1:10:1);
writeln(' H aksia toy FPA einai me ',s2:10:1);
writeln(' To synoliko kostos ',(s1+s2):10:1);
end
else
begin
s1:=k*330.0;
s2:=0.23*s1;
writeln(' To kostos twn ',k,'
proiontwn xwris FPA einai ish me ',s1:10:1);
writeln(' To kostos twn ',k,'
proiontwn xwris FPA einai ish me ',s1:10:1);
writeln(' H aksia toy FPA einai
me ',s2:10:1);
writeln(' To synoliko kostos
',(s1+s2):10:1);
end;
end
end. 15
1
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις6/14
Να γίνει πρόγραμμα με program trith(input,output);
το οποίο ο χρήστης να var a,b,c,y,min:real;
εισάγει τις τιμές τριών begin
writeln(' Dwse treis pragmatikes times ');
μεταβλητών a, b, c και να readln(a,b,c);
υπολογίζει την τιμή της min:=a;
συνάρτησης: if b<min then
min:=b;
y  f (a, b,c)  (5  min(a, b,c)) / b, if c<min then
min:=c;
όπου το 𝑚𝑖𝑛(𝑎, 𝑏, 𝑐 writeln(' To elaxisto twn a= ',a:10:1,' b=',b:10:1,' c=',c:10:1,' einai
είναι το ελάχιστο από τα min=',min:10:1);
a, b, c και το οποίο πρέπει y:=(5.0-3.0*min)/b;
writeln(' H timh ths synarthshs einai y= ',y:10:1);
να υπολογίζεται από το end.
πρόγραμμα.
16
1

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις7/14
Να γίνει πρόγραμμα με program trith(input,output);
το οποίο ο χρήστης να var a,b,c,y,min:real;
εισάγει τις τιμές τριών begin
writeln(' Dwse treis pragmatikes times ');
μεταβλητών a, b, c και να readln(a,b,c);
υπολογίζει την τιμή της min:=a;
συνάρτησης: if b<min then
min:=b;
if c<min then
min:=c;
όπου το 𝑚𝑖𝑛(𝑎, 𝑏, 𝑐 writeln(' To elaxisto twn a= ',a:10:1,' b=',b:10:1,' c=',c:10:1,' einai
είναι το ελάχιστο από τα min=',min:10:1);
a, b, c και το οποίο πρέπει y:=(5.0-3.0*min)/b;
writeln(' H timh ths synarthshs einai y= ',y:10:1);
να υπολογίζεται από το end.
πρόγραμμα.
17
1
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις8/14-1
program pempth(input,output);

Να γίνει πρόγραμμα var month:integer;


begin

με το οποίο να δίνει writeln(' Dwse ton arithmo tou mhna: ');


readln(month);

ο χρήστης έναν if (month<1) or (month>12) then


writeln(' Mh apodekta dedomena ')

ακέραιο μεταξύ του 1 else


case month of

και του 12 και να 1:writeln('Ianouarios');


2:writeln('Febrouarios');

εμφανίζεται στην 3:writeln('Martios');


4:writeln('Aprilios');

οθόνη ο αντίστοιχος 5:writeln('Maios');


6:writeln('Iounios');

μήνας. 7:writeln('Ioulios');
8:writeln('Augoustos');
9:writeln('Septemvrios');
10:writeln('Oktwvrios');
11:writeln('Noemvrios');
12:writeln(‘Dekemvrios');
end
end.
18
1

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις8/14-2
program pempth(input,output); if month=7 then
var month:integer; writeln('Ioulios')
begin
else
writeln(' Dwse ton arithmo tou mhna: ');
readln(month); if month=8 then
if (month<1) or (month>12) then writeln('Augoustos')
writeln(' Mh apodekta dedomena ') else
else if month=9 then
if month=1 then writeln('Septemvrios')
writeln('Ianouarios') else
else
if month=10 then
if month=2 then
writeln('Febrouarios') writeln('Oktwvrios')
else else
if month=3 then if month=11 then
writeln('Martios') writeln('Noemvrios')
else else
if month=4 then if month=12 then
writeln('Aprilios')
writeln('Dekemvrios')
else
if month=5 then end.
writeln('Maios')
else
if month=6 then
writeln('Iounios')
else
end
19
1
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις9/14
Να γραφεί το i:=1;
παρακάτω τμήμα x:=1;
προγράμματος y:=2;
χρησιμοποιώντας το
βρόχο while while i<6 do
begin
x:=1; x:=x+2;
y:=2; y:=y-2;
for i:=1 to 5 do i:=i+1;
end;
begin
.
x:=x+2;
y:=y-2;
end;
20
2

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις10/14
Δημιουργήστε ένα program askhsh2;
πρόγραμμα σε Pascal var i,j:integer;
το οποίο να εμφανίζει begin
στην οθόνη το τρίγωνο i:=0;
αστεριών: j:=0;
* for i:=0 to 8 do
** begin
*** for j:=0 to i do
**** write('*');
*****
writeln;
******
end;
*******
end.
********

*********

21
2
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις11/14
Να γραφεί πρόγραμμα program askhsh3(input,output);
με το οποίο ο χρήστης var i, j, n: integer;
θα εισάγει μια ακέραια begin
τιμή n και στην οθόνη repeat
θα εμφανίζεται η εξής writeln(' Dwse ena thetiko akeraio: ');
έξοδος: readln(n);
1 until(n>0);
for i:=1 to n do
22 begin
333 for j:=1 to i do
write(i:3);
4444 writeln;
5 5 5 5 5 κ.ο.κ. end
end.
22
2

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις12/14-1
Να γίνει πρόγραμμα το οποίο να ζητάει διαδοχικά τους βαθμούς 20
φοιτητών σε ένα μάθημα και να εμφανίζει το βαθμό του καλύτερου φοιτητή,
το μέσο όρο των φοιτητών καθώς και το πλήθος των φοιτητών που
αρίστευσαν. Ένα φοιτητής θεωρείται ότι έχει αριστεύσει αν έχει βαθμό
μεγαλύτερο ή ίσο του 9. Το πρόγραμμα πρέπει να ελέγχει αν οι βαθμοί που
δίνει ο χρήστης παίρνουν τιμές από 0 μέχρι 10.
Οδηγίες
• Εδώ χρειαζόμαστε μια επαναληπτική δομή για να εισάγει ο χρήστης τους 20 βαθμούς
• Μια ένθετη επαναληπτική δομή ή την εντολή if για να ελέγχει το πρόγραμμα αν ο χρήστης
εισάγει αποδεκτά δεδομένα
• Για τον έλεγχο των δεδομένων προτιμούμε το βρόχο while αλλά για την εισαγωγή των
βαθμών από το χρήστη προτιμάμε το βρόχο for γιατί εδώ γνωρίζουμε τον αριθμό των
επαναλήψεων που είναι ίσος με 20
• Ο βρόχος while πρέπει να βρίσκεται μέσα στο for γιατί πρέπει ο χρήστης αν δίνει τους
βαθμούς και μετά να τους ελέγχει το πρόγραμμα αν έχει αποδεκτές τιμές
23
2
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις12/14-2
• Μεταβλητές
 Σε αυτό το πρόγραμμα θα χρησιμοποιήσουμε μια μεταβλητή b
για το βαθμό που δίνει κάθε φορά ο χρήσης
 Μια μεταβλητή max για τον καλύτερο βαθμό
 Μια μεταβλητή sum για το άθροισμα των βαθμών του φοιτητή
 Μια μεταβλητή average για το μέσο όρο όλων των φοιτητών
 Ένα μετρητή i για την εισαγωγή των 20 βαθμών μέσω του for
 Ένα μετρητή j για τους φοιτητές που αρίστευσαν
24
2

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις12/14-3
program askhsh4(input,output);
var b, max, i, j, sum: integer;
average:real;
begin
j:=0; (*Arxikopoihsh tou arithmou twn foithtwn poy aristeysa*)
sum:=0;
for i:=1 to 20 do
begin
writeln(' Dwse to bathmo tou ',i,' foithth ');
readln(b);
while (b<0) or (b>10) do
begin
writeln(' Mh apodekta dedomena ');
readln(b);
end;
if b>max then
max:=b; (*Eyresh tou kalyterou bathou*)
if b>=9 then
j:=j+1; (*Eyresh tou plhthous twn foithtwn poy phran arista*)
sum:=sum+b;
end;
average:=sum/20;
writeln(' O megalyteros bathmos einai o ',max,' o mesos oros ',average,' kai oi foithtes poy aristeysan einai ',j)
end.

25
2
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις13/14
Να γίνει πρόγραμμα program askisi5(input,output);
με το οποίο όλοι οι var i,j:integer;
begin
αριθμοί από το 1 έως j:=0;
το 500 οι οποίοι for i:=1 to 500 do
if (i mod 3=0) and (i mod 5=0) and (i mod 4<>0) then
διαιρούνται ακριβώς begin
με το 5 και το 3 αλλά j:=j+1;
write(i);
όχι με το 4 και να writeln;
υπολογίζεται το end;
writeln(' To plhthos twn akeraiwn pou diairountai akrivws me to 3
πλήθος τους kai to 5 alla oxi me to 4 einai ',j)
end.

26
2

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Β’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις14/14
Δημιουργήστε ένα program askisi6(input,output);
πρόγραμμα σε Pascal το var a,b,c: integer;
begin
οποίο θα ζητά ακέραιους b:=0;
συνεχώς από το χρήστη c:=0;
μετρώντας τους θετικούς repeat
και τους αρνητικούς μέχρι ο writeln(' Dwste enana akeraio : ');
χρήστης να πληκτρολογήσει readln(a);
if a>0 then b:=b+1;
το μηδέν. Όταν το
if a<0 then c:=c+1;
πρόγραμμα τερματιστεί θα until a=0;
εμφανίζει στην οθόνη τον writeln(' O arithmos twn thetikwn arithmwn einai ',b);
αριθμό των θετικών και writeln(' O arithmos twn arntikwn arithmwn einai ',c);
αρνητικών αριθμών που end.
έδωσε ο χρήστης συνολικά
27
2
Ενότητα 13 : Ασκήσεις Επανάληψης Γ’

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Σκοποί ενότητας
• Να παρουσιαστούν οι λύσεις κάποιων ενδεικτικών
ασκήσεων επανάληψης, που αφορούν τις Ενότητες
7-10

5
5
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Περιεχόμενα ενότητας
• Ασκήσεις Επανάληψης στις Ενότητες 7-10
• Λύσεις ασκήσεων

6
6

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις1/14
Ορίστε μια program ask1;
var that:string;
διαδικασία η οποία procedure printthat(what:string);
θα δέχεται σαν begin
όρισμα ένα writeln(what);
end;
αλφαριθμητικό και begin
θα το εμφανίζει στην that:='';
οθόνη writeln('dwse sthn othoni ena alfarithmhtiko: ');
readln(that);
printthat(that);
end.

7
7
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις2/14
Ορίστε μια διαδικασία program ask2;
η οποία θα δέχεται 4 var first,second,third,fouth:string;
procedure printmenu(line1,line2,line3,line4:string);
ορίσματα οι οποίες και begin
θα είναι οι επιλογές writeln(line1);
ενός μενού επιλογών. writeln(line2);
writeln(line3);
Έπειτα καλέστε την δύο writeln(line4);
φορές με διαφορετικά end;
begin
ορίσματα μέσα από το printmenu('1/Eisagwgh','2/Diagrafh',
πρόγραμμά σας '3/Dior8wsh','4/Eksodos');
printmenu('1/Panw','2/Katw', '3/Deksia','4/Aristera');
end.

8
8

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις3/14
program ask3;
Ορίστε μια διαδικασία var maxnumber:integer;
η οποία θα εμφανίζει procedure printstars(maxtimes:integer);
στην οθόνη ένα var i1,i2:integer;
τρίγωνο αστεριών και begin
θα δέχεται σαν όρισμα for i1:=1 to maxtimes do
begin
τον αριθμό των for i2:=1 to i1 do
αστεριών. Π.χ. write('*');
* writeln
end;
**
end;
*** begin
**** maxnumber:=0;
writeln('dwse to megisto arithmo twn asteriwn: ');
***** readln(maxnumber);
printstars(maxnumber)
end. 9
9
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις3/14
program ask4;
Υπολογισμός var x,y:integer;
procedure par(in1:integer; var out1:integer);
παραγοντικού με var i:integer;

διαδικασία
begin
out1:=1;
for i:=1 to in1 do
begin
out1:=out1*i;
end;
end;
begin
write('Δώστε έναν ακέραιο ');
readln(x);
par(x,y);
writeln ('Παραγοντικό=',y);
end.
10
1

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις4/14
program expression(input,output);
Nα υπολογισθεί η var x,y:real;
τιμή της έκφρασης function sinh(w:real):real;
begin
y=2sinh(x)+3sinh(x+3), sinh:=(exp(w)-exp(-w))/2
όπου sinh(x) είναι το end;
υπερβολικό ημίτονο begin
writeln('x= ');
του x και ορίζεται ως readln(x);
εξής: y:=2*sinh(x)+3*sinh(x+3);
writeln(' y=',y)
sinh(x)= (𝒆𝒙 −𝒆−𝒙 )/2 end.

11
1
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις5/14
program value(input,output);
var x,y:real;
{-------------------------}
function dyn(a:real;b:integer):real;
var i:integer;
Nα υπολογισθεί η τιμή d:real;
begin
της συνάρτησης που d:=1;
for i:=1 to b do
ορίζεται ως εξής: d:=d*a;
dyn:=d
end;
𝐬𝐢 𝐧( 𝒙) {-------------------------}
− 𝒙𝟕 , 𝒙 < −𝟏𝟎 function tan(z:real):real;
𝒙
y= 𝟑
begin
𝟐𝒙 + 𝐭𝐚𝐧 𝒙 , 𝟏𝟎 ≤ 𝒙 < 𝟏𝟓 tan:=sin(z)/cos(z);
end;
𝐥𝐧 𝒙 + 𝒙𝟓 + 𝐭𝐚𝐧 𝟐𝒙 − 𝟑 , 𝒙 ≥ 𝟏𝟓 {-------------------------}
begin

Nα ορισθούν write('x=');
readln(x);
συναρτήσεις για τη if x<-10 then y:=sin(x)/x-dyn(x,7)
else if x<15 then y:=2*dyn(x,3)+tan(x)
δύναμη και την else y:=ln(x)+dyn(x,5)+tan(2*x-3);
writeln('y=',y)
εφαπτομένη tan end.

12
1

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις6/14 program sygkrisi_diadikasion_synartiseon(input,output);


var a,b,min,max:integer;
function find_max(x,y:integer):integer;
begin
Να γίνει πρόγραμμα με if x>y then
find_max:=x
το οποίο ο χρήστης να else
find_max:=y;
εισάγει δύο ακέραιους end;

και με τη χρήση μια


procedure find_min(x,y:integer; var elaxisto:integer);
begin
συνάρτησης βρίσκει το if x>y then
elaxisto:=y
μεγαλύτερο μεταξύ τους else
elaxisto:=x;
ενώ με τη χρήση μιας end;
διαδικασία βρίσκει το begin
writeln('Dwse 2 akeraious: ');
μικρότερο μεταξύ τους readln(a,b);
max:=find_max(a,b);
min:=0;
find_min(a,b,min);
writeln(' To elaxisto einai iso ', min,' kai to megisto ',max)
end. 13
1
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις8/14
program thema3a(input,output);
var x,apantisi:integer;
a:real;
function F1(x:real):real;
begin
F1:=x;

Ορίστε τρεις συναρτήσεις


end;
function F2(x:real):real;
begin
f1=x, f2=x2, f3=3x2+1. F2:=x*x;
end;
function F3(x:real):real;
Ζητήστε από το χρήστη να επιλέξει begin
F3:=3*x*x+1;
ποια συνάρτηση θέλει να end;

χρησιμοποιήσει, μέσω ενός μενού,


begin
repeat

και αφού αποδώσει μια τιμή στη writeln('1/F1:=x');


writeln('2/F2:=x*x');
μεταβλητή x υπολογίστε την writeln('3/F3:=3*x*x+1');
readln(apantisi);
αντίστοιχη τιμή συνάρτησης και readln(a);
if apantisi=1 then
εμφανίστε τα αποτελέσματα στην writeln(F1(a));
if apantisi=2 then
οθόνη writeln(F2(a));
if apantisi=3 then
writeln(F3(a));
until apantisi<>4;
end.
14
1

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου
program thema3b(input,output);

Ασκήσεις10/14
var x,y,apantisi:integer;
a,b:real;
function F1(x,y:real):real;
begin
F1:=x+y;
end;
function F2(x,y:real):real;

Ορίστε τις συναρτήσεις


begin
F2:=x-y;
end;
function F3(x,y:real):real;
f1=x+y, f2=x-y, f3=x*y και f4=x/y. begin
F3:=x*y;
end;

Ο χρήστης θα πρέπει να μπορεί function F4(x,y:real):real;


begin

να καλεί κάθε συνάρτηση μέσα


F4:=x/y;
end;

από μενού και να υπολογίζει την


begin
repeat
writeln('1/F1:=x+y');
τιμή της για τις μεταβλητές που writeln('2/F2:=x-y');
writeln('3/F3:=x*y');
θα δίνει από το πληκτρολόγιο. writeln('4/F4:=x/y');
readln(apantisi);
readln(a,b);
if apantisi=1 then
writeln(F1(a,b));
if apantisi=2 then
writeln(F2(a,b));
if apantisi=3 then
writeln(F3(a,b));
if apantisi=4 then
writeln(F4(a,b));
until apantisi<>5;
end.
15
1
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις11/14
program ask81(input,output);
Τι κάνει το διπλανό var a:array [1..10] of integer;
i:integer;
πρόγραμμα; begin
for i:=1 to 10 do
begin
write('a[',i,']=');
readln(a[i]);
end;
for i:=1 to 10 do
begin
write('a[',i,']=');
writeln(a[i]);
end;
for i:=10 downto 1 do
begin
write('a[',i,']=');
writeln(a[i]);
end;
end. 16
1

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις12/14
program ask82(input,output);
Εύρεση του μεγαλύτερου var a:array [1..10] of integer;
i,max,pos:integer;
στοιχείου αλλά και της begin
for i:=1 to 10 do
θέσης σε ένα πίνακα begin
write('a[',i,']=');
ακεραίων; readln(a[i]);
end;
max:=a[1];
pos:=1;
for i:=2 to 10 do
begin
if a[i]>max then
begin
max:=a[i];
pos:=i;
end;
end;
writeln('O megalyteros enai: ', max,' kai brethike sth 8esh ', pos);
end.

17
1
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις12/14
program ask83(input,output);
const max=50;
var a,b,c:array [1..max] of integer;
i,n:integer;
ch:char;
begin
Να γίνει πρόγραμμα με το repeat
writeln('Dwse to plhthos twn stoixeiwn twn pinakwn: ');
οποίο ο χρήστης να εισάγει τα readln(n);
while (n<=0)or(n>max) do
στοιχεία δύο μονοδιάστατων begin
writeln('Mh apodekta dedomena ');
πινάκων και να υπολογίζεται readln(n);

το άθροισμά τους. Το πλήθος


end;
writeln('Dwse ta stoixeia tou 1ou pinaka: ');

των στοιχείων θα πρέπει να το for i:=1 to n do


readln(a[i]);
δίνει ο χρήστης και να είναι το writeln('Dwse ta stoixeia tou 2ou pinaka: ');
for i:=1 to n do
πολύ μέχρι πενήντα. Το for i:=1 to n do
readln(b[i]);

πρόγραμμα θα πρέπει να c[i]:=a[i]+b[i];

επαναλαμβάνεται αν το
writeln('Ta stoixeia tou telikou pinaka: ');
for i:=1 to n do

επιθυμεί ο χρήστης
writeln(c[i]);
writeln(' Thes na epanalaveis? y/no ');
readln(ch);
until(ch='n')or(ch='N')
end.

18
1

Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις13/14
program ask84(input,output);
var b:array[1..15]of real;
i,mathitis:integer;
min,average,sum:real;
begin
Οι 15 μαθητές μιας τάξης έγραψαν sum:=0.0;
writeln('Dwse tous bathmous 15 foithtwn: ');
διαγώνισμα στα μαθηματικά. for i:=1 to 15 do
Υποθέτουμε ότι κάθε μαθητής έχει readln(b[i]);
αριθμό μητρώου από το 1 ως το 15 . for i:=1 to 15 do
sum:=sum+b[i];
Να δημιουργηθεί πρόγραμμα με το average:=sum/15.0;
οποίο: writeln('Oi mathites pou exoun m.o mikrotero: ');
for i:=1 to 15 do
α) ο χρήστης να εισάγει τους if b[i]<average then
βαθμούς των μαθητών με αύξοντα writeln(i);
αριθμό μητρώου, min:=b[1];
mathitis:=1;
β) να εμφανίζονται οι μαθητές που for i:=2 to 15 do
ο βαθμός τους είναι μικρότερος if b[i]<min then
από τον μέσο όρο των βαθμών της begin
min:=b[i];
τάξης, mathitis:=i;
γ) να εντοπίζει ο ελάχιστος βαθμός end;
writeln('Elaxistos bathmos: ',min:0:0, ' Antistoixos mathitis: ',mathitis)
καθώς και αντίστοιχος μαθητής που end.
τον έφερε
19
1
Προγραμματισμός Ι – Ασκήσεις Επανάληψης Γ’, Τμήμα Μηχανικών Πληροφορικής, ΤΕΙ ΗΠΕΙΡΟΥ - Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ηπείρου

Ασκήσεις14/14
program ask85(input,output);
const max=40;
var a,b,c:array [1..max,1..max]of integer;
i,j,m,n:integer;
begin
writeln('Dwse to plhthos twn grammwn kai twn sthlwn toy pinaka: ');

Να γίνει πρόγραμμα με το
readln(m,n);
while(m<=0)or(m>max)or(n<=0)or(n>max) do

οποίο ο χρήστης να δίνει τα


begin
writeln('Mh apodekta dedomena ');

στοιχεία δύο δισδιάστατων readln(m,n);


end;
πινάκων με n γραμμές και m writeln('Dwse ta stoixeia tou 1ou pinaka: ');
for i:=1 to n do
στήλες και να υπολογίζει το for j:=1 to m do
readln(a[i,j]);
άθροισμά τους. Το n και το m writeln('Dwse ta stoixeia tou 2ou pinaka: ');
for i:=1 to n do
θα πρέπει να τα δίνει ο for j:=1 to m do
readln(b[i,j]);
χρήστης και να παίρνει τιμές for i:=1 to n do
for j:=1 to m do
μέχρι 40 c[i,j]:=a[i,j]+b[i,j];
writeln('Ta stoixeia tou telikou pinaka: ');
for i:=1 to n do
begin
for j:=1 to m do
write(c[i,j]);
writeln;
end
end.
20
2
Προγραμματισμός Ι
Ασκήσεις
Τζάλλας Αλέξανδρος, Καθηγητής Εφαρμογών
Τμ. Μηχανικών Πληροφορικής Τ.Ε.

Άρτα, Μάιος 2015


Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 1 - Δομή Ακολουθίας


Να γραφεί πρόγραμμα σε γλώσσα Pascal το οποίο υπολογίζει και εμφανίζει το εμβαδόν
τραπεζίου, όταν δίνονται οι βάσεις και το ύψος του. Το εμβαδόν τραπεζίου δίνεται αν
πολλαπλασιάσουμε το ημιάθροισμα των βάσεων επί το ύψος.

Απάντηση

PROGRAM PARADEIGMA_1;
VAR B1,B2,Y:INTEGER;
E,HA:REAL;
BEGIN
WRITE('DOSE BASH TRAPEZIOY MEGALH ');
READLN(B1);
WRITE('DOSE BASH TRAPEZIOY MIKRH ');
READLN(B2);
WRITE('DOSE YPSOS TRAPEZIOY ');
READLN(Y);
HA := (B1+B2)/2;
E := HA * Y;
WRITELN('TO EMBADON TOY TRAPEZIOY EINAI : ',E:5:2);
END.

Τζάλλας Αλέξανδρος, PhD


Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 2 - Η εντολή IF (ΑΠΛΗ ΕΠΙΛΟΓΗ)


Να γραφεί πρόγραμμα σε γλώσσα Pascal το οποίο να διαβάζει δύο αριθμούς A και Β να τους
συγκρίνει και να εμφανίζει ποιος είναι μεγαλύτερος.

Απάντηση

{ΠΡΩΤΟΣ ΤΡΟΠΟΣ ΛΥΣΗΣ}


PROGRAM PARADEIGMA_2A;
VAR A,B:INTEGER; C:STRING;
BEGIN
WRITE('DOSE ARITHMO A ');
READLN(A);
WRITE('DOSE ARITHMO B ');
READLN(B);
IF A > B THEN
BEGIN
C := 'O ARITHMOS A EINAI MEGALYTEROS TOY B ';
WRITELN(C);
END;
ELSE
BEGIN
C := 'O ARITHMOS B EINAI MEGALYTEROS TOY A ';
WRITELN(C);
END;
END.
{ΜΠΟΡΟΥΜΕ ΝΑ ΒΑΛΟΥΜΕ ΤΗΝ ΕΝΤΟΛΗ WRITELN( ) ΜΟΝΟ ΜΙΑ ΦΟΡΑ ΜΕ ΤΟ
ΤΕΛΟΣ ΤΗΣ ΕΝΤΟΛΗΣ ΑΠΟΦΑΣΗΣ IF}

{ΔΕΥΤΕΡΟΣ ΤΡΟΠΟΣ ΛΥΣΗΣ}


PROGRAM PARADEIGMA_2B;
VAR A,B:INTEGER;
C:STRING;
BEGIN
WRITE('DOSE ARITHMO A ');
READLN(A);
WRITE('DOSE ARITHMO B ');
READLN(B);
IF A > B THEN
C := 'O ARITHMOS A EINAI MEGALYTEROS TOY B '
ELSE
C := 'O ARITHMOS B EINAI MEGALYTEROS TOY A ';
WRITELN(C);
END.

Τζάλλας Αλέξανδρος, PhD


Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 3 - Η εντολή IF (ΠΕΡΙΟΡΙΣΜΕΝΗ ΕΠΙΛΟΓΗ)


Να γραφεί πρόγραμμα σε γλώσσα Pascal το οποίο να διαβάζει το βαθμό μαθήματος ενός
σπουδαστή. Αν ο βαθμός είναι μεγαλύτερος ή ίσος του 5 να εμφανίζει το μήνυμα ότι πέρασε
το μάθημα.

Απάντηση

PROGRAM PARADEIGMA_3;
VAR N:INTEGER;
L:STRING;
BEGIN
WRITE('DOSE BATHMO SPOYDASTH ');
READLN(N);
IF N >= 5 THEN
BEGIN
L := 'O SPOYDASTHS PERASE TO MATHIMA';
WRITELN(L);
END;
END.

Τζάλλας Αλέξανδρος, PhD


Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 4 - Η εντολή CASE


Να γραφεί πρόγραμμα σε γλώσσα Pascal το οποίο να διαβάζει ένα ακέραιο αριθμό Ν από το
1 μέχρι το 12 και να εμφανίζει τον αντίστοιχο μήνα του έτους (1 για Ιανουάριο, 2 για
Φεβρουάριο, ..., 12 για Δεκέμβριο).

Απάντηση

PROGRAM PARADEIGMA_4;
USES CRT;
VAR I:INTEGER;
BEGIN
CLRSCR;
WRITE('DOSE ARITHMO 1-12 GIA NA EMFANISTEI O KATALLHLOS
MHNAS ');
READLN(I);
CASE I OF
1: WRITELN('IANOYARIOS ');
2: WRITELN('FEBROYARIOS ');
3: WRITELN('MARTIOS ');
4: WRITELN('APRILIOS ');
5: WRITELN('MAIOS ');
6: WRITELN('IOYNIOS ');
7: WRITELN('IOYLIOS ');
8: WRITELN('AYGOYSTOS ');
9: WRITELN('SEPTEMBRIOS ');
10: WRITELN('OKTOBRIOS ');
11: WRITELN('NOEMBRIOS ');
12: WRITELN('DEKEMBRIOS ');
ELSE
WRITELN('MH APODEKTOS ARITHMOS GIA MHNA ');
END;
END.

Τζάλλας Αλέξανδρος, PhD


Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 5 - Εντολές Επανάληψης (Η εντολή FOR)


Να γραφεί πρόγραμμα σε γλώσσα Pascal το οποίο να υπολογίζει και να τυπώνει το μέσο όρο,
το άθροισμα και το γινόμενο των αριθμών από το 1 έως το Ν.

Απάντηση

PROGRAM PARADEIGMA_5;
VAR I,N,SUM:INTEGER; GIN:LONGINT; MO:REAL;
BEGIN
WRITE('DOSE ARITHMO N EOS TO 10 : ');
READLN(N);
SUM := 0;
GIN := 1;
FOR I:=1 TO N DO
BEGIN
SUM := SUM + I;
GIN := GIN * I;
END;
MO := SUM / N;
WRITELN('TO ATHROISMA EINAI : ',SUM);
WRITELN('TO GINOMENO EINAI : ',GIN);
WRITELN('O MESOS OROS EINAI : ',MO:5:3);
END.

Τζάλλας Αλέξανδρος, PhD


Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 6 - Εντολές Επανάληψης (Η εντολή FOR)


Περιπτώσεις στις οποίες δεν μπορεί να χρησιμοποιηθεί η εντολή επανάληψης FOR
Να γραφεί πρόγραμμα σε γλώσσα Pascal το οποίο να διαβάζει έως 10 ακέραιους αριθμούς,
να υπολογίζει και να τυπώνει (α) το μέσο όρο τους και (β) πόσοι από αυτούς είναι θετικοί,
πόσοι αρνητικοί και πόσοι μηδέν. Αν διαβάσει τον αριθμό 100 να σταματάει η εκτέλεσή του.

Απάντηση

PROGRAM PARADEIGMA_6;
VAR N,AR,POS,NEG,ZER,I,SUM:INTEGER;
MO:REAL;
BEGIN
SUM := 0;
POS := 0;
NEG := 0;
ZER := 0;
I := 0;
WRITE('DOSE ARITHMO ');
READLN(AR);
WHILE (I < 10) AND (AR <> 100) DO
BEGIN
SUM := SUM + AR;
IF AR > 0 THEN
POS := POS + 1
ELSE IF AR < 0 THEN
NEG := NEG + 1
ELSE
ZER := ZER + 1;
I := I + 1;
WRITE('DOSE ARITHMO ');
READLN(AR);
END;
IF I > 0 THEN
BEGIN
MO := SUM / I;
WRITELN('O MESOS OROS EINAI ',MO:5:2);
END;
WRITELN('OI THETIKOI EINAI ',POS);
WRITELN('OI ARNHTIKOI EINAI ',NEG);
WRITELN('MHDEN EINAI ',ZER);
END.

Τζάλλας Αλέξανδρος, PhD


Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 7 - Εντολές Επανάληψης (Η εντολή WHILE - DO)


Να γραφεί πρόγραμμα σε γλώσσα Pascal το οποίο να υπολογίζει και να τυπώνει το μέσο όρο,
το άθροισμα και το γινόμενο των αριθμών από το 1 έως το Ν.

Απάντηση

PROGRAM PARADEIGMA_7;
VAR I,N,SUM:INTEGER; GIN:LONGINT; MO:REAL;
BEGIN
WRITE('DOSE ARITHMO N EOS TO 10 : ');
READLN(N);
SUM := 0; GIN := 1; I := 1;
WHILE I <= N DO
BEGIN
SUM := SUM + I;
GIN := GIN * I;
I := I + 1;
END;
MO := SUM / N;
WRITELN('TO ATHROISMA EINAI : ',SUM);
WRITELN('TO GINOMENO EINAI : ',GIN);
WRITELN('O MESOS OROS EINAI : ',MO:5:3);
END.

Τζάλλας Αλέξανδρος, PhD


Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 8 - Εντολές Επανάληψης (Η εντολή REPEAT - UNTIL)


Να γραφεί πρόγραμμα σε γλώσσα Pascal το οποίο να υπολογίζει και να τυπώνει το μέσο όρο,
το άθροισμα και το γινόμενο των αριθμών από το 1 έως το Ν.

Απάντηση

PROGRAM PARADEIGMA_8;
VAR I,N,SUM:INTEGER; GIN:LONGINT; MO:REAL;
BEGIN
WRITE('DOSE ARITHMO N EOS TO 10 : ');
READLN(N);
SUM := 0; GIN := 1; I := 1;
REPEAT
SUM := SUM + I;
GIN := GIN * I;
I := I + 1;
UNTIL I > N;
MO := SUM / N;
WRITELN('TO ATHROISMA EINAI : ',SUM);
WRITELN('TO GINOMENO EINAI : ',GIN);
WRITELN('O MESOS OROS EINAI : ',MO:5:3);
END.

Τζάλλας Αλέξανδρος, PhD


Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 9 - Διαδικασίες Και Συναρτήσεις


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

Απάντηση

PROGRAM PARADEIGMA_9;
CONST KERDOS = 0.15;
VAR AXIA, SAXIA :REAL;
NUMBER:INTEGER;
XONDRIKH:CHAR;
PROCEDURE TOTAL (VAR P1:INTEGER; VAR P2, P3 :REAL);
BEGIN {total}
P3:= P1 * (P2 + KERDOS * P2)
END; {total}
PROCEDURE AMOUNTDUE(VAR N1:INTEGER;
VAR N2, N3 :REAL; VAR C: CHAR);
BEGIN {amount due}
IF C= 'Y' THEN
N3 := N1 * N2
ELSE
TOTAL(N1,N2,N3)
END; {amount due}

BEGIN {main program}


WRITE('DOSE AXIA EMPOREYMATOS: ');
READLN(AXIA);
WRITE('DOSE PLITHOS EMPOREYMATON: ');
READLN(NUMBER);
WRITE('EINAI XONDRIKH POLHSH; (Y/N) ');
READLN(XONDRIKH);
AMOUNTDUE(NUMBER, AXIA, SAXIA, XONDRIKH);
WRITELN(NUMBER,' EIDH ME EURO ',AXIA:0:2);
WRITELN('SYNOLIKOS LOGARIASMOS EURO ',SAXIA:0:2);
IF XONDRIKH = 'Y' THEN
WRITELN('H POLHSH EINAI XONDRIKH')
ELSE
WRITELN('H POLHSH EINAI LIANIKH ')
END. {main program}

Τζάλλας Αλέξανδρος, PhD


Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 10 - Διαδικασίες Και Συναρτήσεις


Να γραφεί πρόγραμμα σε γλώσσα Pascal το οποίο να διαβάζει το μήκος και το πλάτος ενός
ορθογώνιου παραλληλόγραμμου και να υπολογίζει και να εμφανίζει το εμβαδόν του.

Απάντηση

PROGRAM PARADEIGMA_10;
VAR M,P:INTEGER;
PROCEDURE COUNT(VAR LENGTH, WIDTH,AP:INTEGER);
BEGIN
WRITELN('TO ORTHOGONIO PARALLHLOGRAMMO EXEI DIASTASEIS: ');
WRITELN(LENGTH,' EPI ', WIDTH, ' cm ');
WRITELN('EXEI EMBADON ',LENGTH * WIDTH,' TETRAGONIKA cm ');
END;
BEGIN
WRITE('DOSE MHKOS PLEVRAS ');
READLN(M);
WRITE('DOSE PLATOS PLEVRAS ');
READLN(P);
COUNT(M, P);
END.

Τζάλλας Αλέξανδρος, PhD


Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 11 - Συναρτήσεις - Functions


Να γραφεί ένα πρόγραμμα που να χρησιμοποιεί μια συνάρτηση η οποία να δίνει το
τετράγωνο ενός αριθμού.

Απάντηση

PROGRAM PARADEIGMA_11;
VAR N:INTEGER;
FUNCTION SQUARE(X:INTEGER):INTEGER;
BEGIN{square}
SQUARE:=X*X;
END;{square}

BEGIN{main program}
N:=SQUARE(4);
WRITELN('4 SQUARED IS ', N);
WRITELN('5 SQUARED IS ', SQUARE(5));
END.{main program}

Τζάλλας Αλέξανδρος, PhD


Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 12 - Συναρτήσεις - Functions


Να γραφεί πρόγραμμα σε γλώσσα Pascal το οποίο να διαβάζει δυο ακεραίους αριθμούς και
να υπολογίζει και να τυπώνει το Μέγιστο Κοινό Διαιρέτη και το Ελάχιστο Κοινό Πολλαπλάσιο.

Απάντηση

PROGRAM PARADEIGMA_12;
VAR AR1,AR2:INTEGER;
FUNCTION MKD(X,Y:INTEGER):INTEGER;
BEGIN{MKD}
WHILE X<>Y DO
BEGIN
IF X>Y THEN
X:=X-Y
ELSE
Y:=Y-X;
END;
MKD:=X;
END;{MKD}

FUNCTION EKP(X,Y:INTEGER):INTEGER;
BEGIN{EKP}
EKP:=(X*Y) DIV MKD(X,Y);
END;{EKP}

BEGIN{MAIN PROGRAM}
WRITE('DOSE TO PROTO AKERAIO ARITHMO ');
READLN(AR1);
WRITE('DOSE TO DEYTERO AKERAIO ARITHMO ');
READLN(AR2);
WRITELN('O MEGISTOS KOINOS DIAIRETHS EINAI ',MKD(AR1,AR2));
WRITELN('TO ELAXISTO KOINO POLLAPLASIO EINAI ',EKP(AR1,AR2));
END.{MAIN PROGRAM}

Τζάλλας Αλέξανδρος, PhD


Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 13 - Αρχεία
Να γράψετε μια διαδικασία (procedure) στην Pascal που θα ζητά τις πληροφορίες: όνομα,
επίθετο, email, τηλέφωνο και να τις αποθηκεύει σε αρχείο κειμένου(Append). Στη συνέχεια
θα γίνεται ερώτηση αν θέλουμε να συνεχίσουμε να προσθέτουμε δεδομένα στο αρχείο. Αν
η απάντηση είναι θετική θα ξανακαλείται η διαδικασία, ενώ αν είναι αρνητική θα
τερματίζεται το πρόγραμμα.
Onoma : Toto
Τα δεδομένα να αποθηκεύονται στο αρχείο στην εξής μορφή: Epitheto : Blabla
email: mymail@teiep.com
Tilefono : 2109999999

Απάντηση

PROGRAM PARADEIGMA_13;

PROCEDURE INSERT();
VAR
USERFILE : TEXT;
NAME, SURNAME, MAIL, PHONE : STRING;
YN : CHAR;
BEGIN
ASSIGN(USERFILE, 'C:\PHONEBOOK.TXT');
{TO ARXEIO C:\PHONEBOOK.TXT PREPEI NA YPARXEI GIA NA
MPORESEI NA GINEI APPEND !!!}
APPEND(USERFILE);
WRITE('ONOMA: ');
READLN(NAME);
WRITE('EPITHETO: ');
READLN(SURNAME);
WRITE('EMAIL:');
READLN(MAIL);
WRITE('TILEFONO: ');
READLN(PHONE);
WRITELN(USERFILE, 'ONOMA: ' + NAME);
WRITELN(USERFILE, 'EPITHETO: ' + SURNAME);
WRITELN(USERFILE, 'EMAIL:' + MAIL);
WRITELN(USERFILE, 'TILEFONO: ' + PHONE);
WRITELN(USERFILE, '');
CLOSE(USERFILE);
WRITE('THELETE NA SINEXISETE (Y/N) :');
READLN(YN);
IF(YN='Y') THEN
BEGIN
CLRSCR; {KATHARISMOS TIS OTHONIS}
INSERT();
END
ELSE
BEGIN
WRITE('BYE BYE ...');
EXIT; {EXODOS APO TO PROGRAMMA}
END;
END;
BEGIN
INSERT();
READLN;
END.
Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 14 - Πίνακες (Μονοδιάστατος πίνακα)


(Παράδειγμα σε μονοδιάστατο πίνακα) Να γραφεί πρόγραμμα σε γλώσσα Pascal το οποίο να
διαβάζει ένα μονοδιάστατο πίνακα ακέραιων αριθμών Α με 10 θέσεις και υπολογίζει και να
τυπώνει το μέσο όρο, το άθροισμα και το γινόμενο των στοιχείων του πίνακα Α.

Απάντηση

PROGRAM PARADEIGMA_14;
USES CRT;
VAR I,SUM:INTEGER; GIN:LONGINT; MO:REAL;
A:ARRAY[1..10] OF INTEGER;
BEGIN
CLRSCR;
FOR I:=1 TO 10 DO
BEGIN
WRITE('DOSE A[',I,']= ');
READ(A[I]);
END;
SUM:=0;GIN:=1;
FOR I:=1 TO 10 DO
BEGIN
SUM:=SUM+A[I];
GIN:=GIN*A[I];
END;
MO:=SUM/10;
WRITELN('TO ATHROISMA EINAI : ',SUM);
WRITELN('TO GINOMENO EINAI : ',GIN);
WRITELN('O MESOS OROS EINAI : ',MO:5:2);
END.

Τζάλλας Αλέξανδρος, PhD


Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 15 - Πίνακες (δύο διαστάσεων)


Να γραφεί πρόγραμμα σε γλώσσα Pascal το οποίο να διαβάζει ένα πίνακα ακέραιων αριθμών
Α, δύο διαστάσεων 3 x 3 και να υπολογίζει και να τυπώνει το μέσο όρο, το άθροισμα και το
γινόμενο των στοιχείων του πίνακα Α, καθώς και τα στοιχεία του πίνακα κατά σειρές και
στήλες.

Απάντηση

PROGRAM PARADEIGMA_15;
USES CRT;
VAR I,J,SUM:INTEGER; GIN:LONGINT; MO:REAL;
A:ARRAY[1..3,1..3] OF INTEGER;
BEGIN
CLRSCR;
FOR I:=1 TO 3 DO
FOR J:=1 TO 3 DO
BEGIN
WRITE('DOSE A[',I,' ',J,']= ');
READ(A[I,J]);
END;
SUM:=0;GIN:=1;
FOR I:=1 TO 3 DO
FOR J:=1 TO 3 DO
BEGIN
SUM:=SUM+A[I,J];
GIN:=GIN*A[I,J];
END;
MO:=SUM/9;
FOR I:=1 TO 3 DO
BEGIN
FOR J:=1 TO 3 DO
WRITE(A[I,J],' ');
WRITELN;
END;
WRITELN('TO ATHROISMA EINAI : ',SUM);
WRITELN('TO GINOMENO EINAI : ',GIN);
WRITELN('O MESOS OROS EINAI : ',MO:5:2);
END.

Τζάλλας Αλέξανδρος, PhD


Προγραμματισμός Ι Ασκήσεις
---------------------------------------------------------------------------------------------------------------------------

Άσκηση 16 - Εγγραφές - Records


Να γραφεί πρόγραμμα σε γλώσσα Pascal το οποίο να διαβάζει τα στοιχεία 5 σπουδαστών
(επώνυμο, αριθμό μητρώου, χρονολογία γέννησης και βαθμό στο μάθημα Προγραμματισμός
Ι) του Τμήματος Τεχνολογίας Πληροφορικής και Τηλεπικοινωνιών. Να υπολογίζει το μέσο όρο
στο μάθημα Δομές Δεδομένων και να τυπώνει τα στοιχεία των σπουδαστών που έχουν
βαθμό μεγαλύτερο από το μέσο όρο.

Απάντηση

PROGRAM PARADEIGMA_16;
USES CRT;
TYPE STUDENT=RECORD
SUR:STRING[20];
AM,BIRTH:INTEGER;
DD:REAL;
END;
VAR STUD:ARRAY[1..5] OF STUDENT;
I:INTEGER;SUM,MO:REAL;
BEGIN
CLRSCR;
SUM:=0;
FOR I:=1 TO 5 DO
BEGIN
WRITE('DOSE EPONYMO ',I,' OU SPOUDASTH : ');
READLN(STUD[I].SUR);
WRITE('DOSE AR. MHTROOU ',I,' OU SPOUDASTH : ');
READLN(STUD[I].AM);
WRITE('DOSE HM. GENNHSHS ',I,' OU SPOUDASTH : ');
READLN(STUD[I].BIRTH);
WRITE('DOSE BATHMO ',I,' OU SPOUDASTH : ');
READLN(STUD[I].DD);
SUM := SUM + STUD[I].DD;
END;
WRITELN;
MO := SUM / 5;
WRITELN('O MESOS OROS EINAI : ',MO:0:2);
WRITELN;
FOR I:=1 TO 5 DO
IF STUD[I].DD > MO THEN
WRITELN('EPONYMO:',STUD[I].SUR,'A.M.:',STUD[I]
.AM,'
HM.GENNHSHS:',STUD[I].BIRTH,'BATHMOS:',STUD[I]
.DD:0:2);
END.

Τζάλλας Αλέξανδρος, PhD

You might also like