1
ΔΗΜΟΣΙΟ ΙΝΣΤΙΤΟΥΤΟ ΕΠΑΓΓΕΛΜΑΤΙΚΗΣ ΚΑΤΑΡΤΙΣΗΣ Ι.Ε.Κ. ΛΕΥΚΑΔΟΣ
TΟΜΕΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΔΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ
ΣΧΕΔΙΑΣΗ ΠΡΟΓΡΑΜΜΑΤΟΣ PASCAL ΤΟΜΟΣ Α΄
ΓΟΥΡΖΗΣ ΣΤΑΘΗΣ – ΦΥΣΙΚΟΣ
2
ΛΕΥΚΑΔΑ - ΑΠΡΙΛΙΟΣ 1998
ΠΕΡΙΕΧΟΜΕΝΑ ΠΡΟΛΟΓΟΣ 1) ΙΣΤΟΡΙΑ ΤΩΝ Η/Υ
Μία σύντομη ιστορική αναδρομή στην εξέλιξη των Ηλεκτρονικών Υπολογιστών και των Μικροεπεξεργαστών. 2) ΑΡΧΙΚΕΣ ΕΝΝΟΙΕΣ Γενικά στοιχεία προγραμματισμού, η σπουδαιότητα του Λογισμικού, παρουσίαση προβλημάτων και επίλυσή τους με τον Ηλεκτρονικό Υπολογιστή. 3) ΠΑΡΟΥΣΙΑΣΗ ΑΛΓΟΡΙΘΜΟΥ Ο τρόπος σκέψης για να προγραμματίσουμε τον Ηλεκτρονικό Υπολογιστή. Περιγραφή Αλγορίθμων, μέθοδοι, ψευτοκώδικας και συμβολισμός. 4) Η ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ TURBO PASCAL 6.0 Η γλώσσα προγραμματισμού Pascal, δομή προγράμματος στην Pascal, δεδομένα και τύποι δεδομένων, εκφράσεις, τελεστές, εντολές ,σύνθετες εντολές και συναρτήσεις. 5) ΑΠΛΟΙ ΑΛΓΟΡΙΘΜΟΙ Ξεκίνημα στον προγραμματισμό με παραδείγματα προγραμμάτων και δημιουργία κώδικα, διατυπωμένα σε Pascal και σε στοιχειώδεις αλγορίθμους. ΕΠΙΛΟΓΟΣ ΒΙΒΛΙΟΓΡΑΦΙΑ
3
ΠΡΟΛΟΓΟΣ Ένα από τα μαθήματα που περιλαμβάνονται στο Α΄ Εξάμηνο του Ειδικού Εφαρμογών Πληροφορικής, (Τομέας Πληροφορικής), είναι και ο Σχεδιασμός Προγράμματος Pascal. Στο μάθημα αυτό ο σπουδαστής πρέπει να εξοικειωθεί με τις αρχικές έννοιες του προγραμματισμού και να αποκτήσει τις βασικές γνώσεις, που απαιτούνται για τον σχεδιασμό και την δημιουργία προγραμμάτων στον ηλεκτρονικό υπολογιστή. Στα πλαίσια της διδασκαλίας του μαθήματος στο Ι.Ε.Κ. Λευκάδος, κρίθηκε αναγκαίο να υπάρξει ένα βοηθητικό φυλλάδιο που να περιλαμβάνει αυτές τις βασικές έννοιες του προγραμματισμού, αλλά και γενικότερα μία σύντομη θεώρηση της γλώσσας προγραμματισμού Pascal, ώστε να διευκολυνθεί η διαδικασία της εκμάθησης του αντικειμένου. Οι σημειώσεις αυτές δημιουργήθηκαν με το σκεπτικό να εισαγάγουν στο απέραντο κόσμο του προγραμματισμού, οποιονδήποτε έχει τη διάθεση και τη θέληση να μάθει. Απευθύνονται δηλαδή, όχι μόνο στους σπουδαστές του Τομέα Πληροφορικής, αλλά και σε μαθητές κάθε ηλικίας που θα ήθελαν να εντρυφήσουν στα μυστικά της ανθρώπινης νόησης, όπως αυτή έχει καταγραφεί μέσα στα προγράμματα, τις εφαρμογές, τις γλώσσες προγραμματισμού και τα υπερσύγχρονα υπολογιστικά συστήματα της εποχής μας. Για την ευκολότερη ανάγνωση αυτών των σημειώσεων, πολύ γρήγορα θα γίνει αντιληπτό ότι απαιτούνται κάποιες βασικές γνώσεις, τόσο για τον ηλεκτρονικό υπολογιστή όσο και για τα βασικά προγράμματα που χρησιμοποιούν, τα Λειτουργικά Συστήματα. Το σύνολο των προαπαιτούμενων γνώσεων δεν είναι τόσο μεγάλο σε μέγεθος ώστε να χρειάζεται να το αγνοήσετε. Κυκλοφορούν στις μέρες μας πολλά και καλά βιβλία και σημειώσεις, που μπορείτε να συμβουλευθείτε για να λύσετε τυχόν απορίες ή και να συμπληρώσετε κενά που μπορεί να δημιουργηθούν στην πορεία. Εκείνο που κρίνεται ως απολύτως απαραίτητο για να αξιοποιηθεί πλήρως η γνώση που περιλαμβάνεται σε αυτές τις σελίδες, είναι η πρακτική εξάσκηση πέρα από τις ώρες του εργαστηρίου που διατίθενται στο Ι.Ε.Κ. Ο πειραματισμός των σπουδαστών πάνω στις δυνατότητες της Pascal είναι, σε αυτό το στάδιο εκμάθησης, ο πιο χρήσιμος σύμβουλος για την επίλυση κάθε είδους απορίας που μπορεί να δημιουργηθεί. Αυτό όμως απαιτεί
4
μεγαλύτερη εξοικείωση, που σημαίνει περισσότερες ώρες ενασχόλησης με τον ηλεκτρονικό υπολογιστή.
ΙΣΤΟΡΙΑ ΤΩΝ Η/Υ
5
Οι ηλεκτρονικοί υπολογιστές δημιουργήθηκαν από την ανάγκη να πραγματοποιούνται ταχύτατοι και έγκυροι αριθμητικοί υπολογισμοί. Σχεδιάστηκαν στην αρχή για να χρησιμοποιηθούν σε μεγάλα ερευνητικά εκπαιδευτικά ιδρύματα, όπως τα Πανεπιστήμια των Θετικών Επιστημών, αλλά γρήγορα η χρήση τους εξαπλώθηκε σε όλους σχεδόν τους τομείς της ανθρώπινης δραστηριότητας. Υπάρχουν πολλοί λόγοι που ώθησαν τους επιστήμονες να δημιουργήσουν αυτές τις μηχανές, οι κυριότεροι όμως ήταν εκείνοι που προέκυπταν από τις έρευνες που έκαναν γύρω από τα Μαθηματικά και τη Φυσική. Για παράδειγμα μπορούμε να αναφέρουμε την σημαντικότατη συνεισφορά που είχαν οι ηλεκτρονικοί υπολογιστές στην προσομοίωση του Σύμπαντος, στην Αστρονομία. Ειδικοί Αστροφυσικοί και Μαθηματικοί, διεπίστωσαν την ανάγκη να χρησιμοποιηθούν υπολογιστές για την αναπαράσταση σε συνθήκες εργαστηρίου, (στην οθόνη των υπολογιστών), της εικόνας του Σύμπαντος. Με αυτό τον τρόπο μπορούσαν να μελετηθούν οι διάφορες θεωρίες που είχαν αναπτυχθεί για την δημιουργία του κόσμου. Ας υποθέσουμε ότι η τροχιά ενός αστεριού στο διάστημα είναι μία μαθηματική συνάρτηση, που “παράγει” ένα σύνολο σημείων στο χώρο, ανάλογα με τις παραμέτρους που περιλαμβάνει. Με πιο απλά λόγια, ”βάζω” αριθμούς στη συνάρτηση και “βγάζω” σημεία στο χώρο, που απεικονίζουν την κίνηση του ουράνιου σώματος. Τα αποτελέσματα από αυτή τη διαδικασία προκύπτουν από υπολογισμούς, τις περισσότερες φορές, καθαρά αλγεβρικούς. Για να έχω μία αρκετά καλή προσομοίωση της κίνησης πρέπει να κάνω πολλούς υπολογισμούς για το ένα αστέρι, και απείρως περισσότερους για να έχω την εικόνα ενός μεγάλου αριθμού αστεριών, και άρα του παγκόσμιου στερεώματος, του Σύμπαντος. Η επεξεργασία αυτού του τεράστιου όγκου των πληροφοριών δείχνουν την χρησιμότητα των υπολογιστών αλλά και την ανάγκη ύπαρξης των προγραμμάτων για τους ηλεκτρονικούς υπολογιστές. Το υλικό που αποτελεί τον ηλεκτρονικό υπολογιστή λέγεται hardware ,και είναι τα μηχανικά μέρη του συστήματος. Τα προγράμματα που χρησιμοποιεί ,που “τρέχει” όπως λέμε ο υπολογιστής, είναι το software, το λογισμικό όπως αποκαλείται επίσημα. Ο σχεδιασμός του hardware είναι απόλυτα εξαρτώμενος από το software και αντιστρόφως. Αν χρειάζομαι ένα πολύ γρήγορο πρόγραμμα για να μελετήσω π.χ. ένα φυσικό φαινόμενο, τότε
6
πιθανότατα να χρειάζομαι και έναν υπερσύγχρονο υπολογιστή για να το χρησιμοποιήσει. Αντίθετα αν έχω δημιουργήσει ένα καινούργιο μηχάνημα, τ τότε διευρύνω τις δυνατότητες που έχω στην κατασκευή πιο πολύπλοκων προγραμμάτων. Ο προγραμματισμός λοιπόν γεννήθηκε στα Ανώτατα Εκπαιδευτικά Ιδρύματα των πιο προηγμένων τεχνολογικά κρατών, για τις ανάγκες της Επιστήμης. Οι εφαρμογές του, βέβαια, σήμερα είναι το ίδιο αμέτρητες όπως και οι εκδηλώσεις της ανθρώπινης κοινωνίας. Αυτό σημαίνει, για σας τουλάχιστον που ξεκινάτε, ότι δεν είναι απαραίτητο να προγραμματίσετε υπερσύγχρονους υπολογιστές και να δημιουργήσετε τεράστια προγράμματα για να μάθετε τα βασικά εκείνα, που θα σας επιτρέψουν να γνωρίσετε όλη τη διαδικασία της ολοκλήρωσης ενός προγράμματος. Ένα πρόγραμμα για έναν ηλεκτρονικό υπολογιστή μπορεί να έχει από μερικές δεκάδες γραμμές έως και αρκετές χιλιάδες ή δεκάδες χιλιάδων γραμμών κώδικα, όπως απόκαλούμε τα “κείμενα” που γράφουμε για να δημιουργήσουμε μία εφαρμογή. Όμως τα πιο σημαντικά μέρη ενός προγράμματος δεν είναι τόσο η συγγραφή του, όσο: α) Η αρχική ιδέα που θα ωθήσει κάποιον να φτιάξει ένα πρόγραμμα ή αλλιώς, το πρόβλημα που θέλει να λύσει με τον ηλεκτρονικό υπολογιστή, και β) Τα επιμέρους κομμάτια μιας εφαρμογής που θα αποτελέσουν ένα πλήρες, εύχρηστο και ακριβές σύνολο, ικανό να ανταποκρίνεται στην πραγμάτωση αυτής της αρχικής ιδέας. Αν δεχθούμε λοιπόν τις παραπάνω αρχές, μπορούμε να προσδιορίσουμε αχνά την γέννηση του προγραμματισμού στο πέρασμα των αιώνων. Γιατί όμως αναφέρουμε το απώτερο παρελθόν; Απλά γιατί η ιδέα της κατασκευής και χρήσης μιας υπολογιστικής μηχανής δεν ανήκει, όπως είναι εύκολο να σκεφτεί κανείς, στον 20ο αιώνα, αλλά σε κάποιον προγενέστερο. Συγκεκριμένα αναφέρεται ότι ο πρώτος άνθρωπος που σκέφτηκε και κατασκεύασε μια υπολογιστική μηχανή ήταν ο Γάλλος μαθηματικός και φιλόσοφος Blaise Pascal. Το 1642,σε ηλικία μόλις 19 ετών, ο Pascal δημιούργησε την πρώτη μηχανή που έκανε προσθέσεις, με βάση ένα
7
αρκετά περίπλοκο σύστημα τροχών και μοχλών. Στην Ιστορία αυτή είναι και η πρώτη μηχανή που εκτελεί υπολογισμούς, αντί για το ανθρώπινο μυαλό. Η ιδέα της δημιουργίας αυτής της μηχανής, μπορούμε να πούμε ότι είναι και ένα σημάδι πρώιμου προγραμματισμού στη σκέψη του ανθρώπου. Ας σημειώσουμε εδώ ότι τον 16ο και τον 17ο Αιώνα έζησαν και δημιούργησαν, πολλοί διαπρεπείς επιστήμονες που πολύ πιθανόν να είχαν παρόμοιες ιδέες και κατασκευές. Ιστορικά όμως η μηχανή του Pascal καταγράφεται πρώτη σε επίσημα αρχεία ευρεσιτεχνίας. Προς τιμήν του μεγάλου αυτού εφευρέτη ο Niklaus Wirth, καθηγητής του Πολυτεχνείου της Ζυρίχης και δημιουργός της γλώσσας προγραμματισμού Pascal που θα μελετήσουμε σε αυτό το μάθημα, ονόμασε το δημιούργημά του με το όνομα του μεγάλου αυτού μαθηματικού. Η Pascal σαν εργαλείο προγραμματισμού φτιάχτηκε αποκλειστικά από τον Wirth, από έναν μόνο άνθρωπο, πράγμα ασυνήθιστο και σπάνιο, όχι μόνο για την εποχή του, το 1970,αλλά ακόμα και για τα σημερινά δεδομένα. Το επόμενο βήμα στην εξέλιξη αυτής της υπολογιστικής μηχανής έγινε από τον μαθηματικό Gottfried Leibnitz το 1673.Τη συσκευή αυτή ο Leibnitz την δημιούργησε σε ηλικία 27 ετών, και είχε την δυνατότητα να κάνει προσθέσεις, πολλαπλασιασμούς και διαιρέσεις. Η επόμενη αξιοσημείωτη πρόοδος στον τομέα των υπολογιστικών μηχανών θα γίνει τον 19ο Αιώνα, από τον Charles Babbage. Ο Babbage θα κατασκευάσει το 1822 την λεγόμενη “Μηχανή των διαφορών”, μία συσκευή που θα λειτουργούσε με προκαθορισμένη σειρά πράξεων. Κάτι σαν ένα σύνολο εντολών, που έχουμε δημιουργήσει εκ των προτέρων, για να πραγματοποιήσουμε μία εργασία στον σύγχρονο υπολογιστή. Είναι λοιπόν μία διαδικασία, πολύ κοντά στην σύγχρονη αντίληψη του προγραμματισμού. Η εξέλιξη των υπολογιστικών μηχανών θα συνεχιστεί τον 20ο Αιώνα, με τα υπολογιστικά συστήματα που χρησιμοποιούσαν διάτρητες κάρτες, ειδικά έντυπα από σκληρό χαρτόνι με ορισμένο αριθμό τρυπών, που απεικόνιζαν αριθμούς ή διάφορους υπολογισμούς. Αυτή ήταν η δεκαετία του 1920 και ο Μηχανικός Herman Hollerith, που εμπνεύστηκε αυτές τις τεχνικές. Η επίσημη παρουσίαση ενός ηλεκτρονικού υπολογιστή, αρκετά όμοιο όπως τον γνωρίζουμε σήμερα, έγινε το 1944 από Howard Aiken και λεγόταν Mark I. Ο υπολογιστής αυτός δωρίστηκε από την IBM στο Πανεπιστήμιο του Harvard, και θεωρείται από πολλούς ως ο πρώτος ηλεκτρονικός υπολο-
8
γιστής. Ο Howard Aiken, τελειόφοιτος του τμήματος Μαθηματικών του Harvard, θα δημιουργήσει τον πρώτο υπολογιστή χρησιμοποιώντας ηλεκτρομηχανικά μέρη που ζύγιζαν 5 τόνους και κατελάμβαναν χώρο ύψους 17 μέτρων!. Ο πρώτος υπολογιστής που χρησιμοποιεί ηλεκτρικά σήματα για να υπολογίζει δεδομένα είναι γεγονός, και οι διαστάσεις του υποδηλώνουν, σήμερα πια, την απόσταση που μας χωρίζει από την διαρκή εξέλιξη των υπολογιστικών συστημάτων. Ο υπολογιστής αυτός λειτουργούσε με λυχνίες και ήταν, για την εποχή του, ένα τεχνολογικό θαύμα. Οι σημερινοί υπολογιστές λειτουργούν με transistors, που βρίσκονται πάνω στον μικροεπεξεργαστή, (microproseccor).Ο πρώτος μικροεπεξεργαστής κατασκευάζεται από την Intel το 1971. Λέγεται 4004 και αποτελείται από 2.300 transistors. Σχεδιάστηκε και δημιουργήθηκε από μία ομάδα μηχανικών της Intel, με επικεφαλής τον Federico Faggin. Στην ομάδα σχεδίασης συμμετείχε και ο Ted Hoff, αρχιμηχανικός της Intel, που είχε και την αρχική ιδέα. Ο πρώτος επεξεργαστής στον κόσμο αποτελείται από ηλεκτρονικά μέρη, αλλά κάποια συστατικά του είναι δημιουργημένα από ξύλο. Ο 4004 έχει επιφάνεια 12 τετραγωνικών χιλιοστών και έχει κατασκευαστεί με τεχνολογία χάραξης 10μ, (1 μ = 1/1.000.000 του cm, εκατοστού). Αυτό σημαίνει ότι η επιφάνεια του ολοκληρωμένου κυκλώματος πυριτίου έχει χαραχθεί με ακρίβεια 10 εκατομμυριοστών του εκατοστού. Η συχνότητα λειτουργίας του επεξεργαστή είναι τα 0,750 Mhz και η χωρητικότητα της μνήμης που μπορεί να διαχειρισθεί είναι μόλις 4 Kbytes. Διάδοχος του 4004 είναι ο 8008,το 1972. Ακολουθεί ο 8080 το 1974 που γίνεται ο επεξεργαστής του πρώτου προσωπικού υπολογιστή, (PC Personal Computer), με το όνομα Altair. Το 1978 κατασκευάζονται οι 8086 και 8088, που αποτελούν το πρώτο σημαντικό βήμα στην μαζική παραγωγή ηλεκτρονικών υπολογιστών. Ακολουθούν ο 80286, το 1982, ο 80386 το 1985 και ο 80486 το 1989. Οι καινούργιοι επεξεργαστές διαθέτουν βέβαια μεγαλύτερες συχνότητες λειτουργίας, ”τρέχουν” σε μεγαλύτερες “ταχύτητες”, πράγμα που σημαίνει ότι οι αυξάνονται τόσο οι απαιτήσεις του software, αλλά και οι δυνατότητες των τελικών χρηστών, όπως λέγονται και εκείνοι που χρησιμοποιούν υπολογιστή για οποιαδήποτε εργασία. Από την κατασκευή του 80286,το 1982 μπορούμε να μιλάμε πλέον για την εποχή των Windows, του διασημότερου λειτουργικού συστήματος στο κόσμο, μιας και
9
ο εν λόγω επεξεργαστής είναι ο πιο αργός που χρησιμοποιεί το πρόγραμμα αυτό Η μεγάλη όμως καινοτομία στην κατασκευή και τις επιδόσεις των επεξεργαστών θα σημειωθεί το 1993,με την διάθεση στην μαζική παραγωγή του Pentium. Ο επεξεργαστής αυτός ξεκινά με την συχνότητα λειτουργίας των 75Mhz και φτάνει στις μέρες μας να διαθέτει, σε διαφορετικές εκδόσεις, ταχύτητα μέχρι 333Mhz, (Pentium II). Όλοι οι επεξεργαστές διαθέτουν δύο συχνότητες λειτουργίας, την εσωτερική και τη εξωτερική. Η εσωτερική συχνότητα είναι αυτή που αναφέρεται μαζί με το μοντέλο του επεξεργαστή, π.χ. Pentium - MMX166Mhz. Η εξωτερική συχνότητα είναι η συχνότητα που μετακινούνται τα δεδομένα από και προς την μητρική πλακέτα,(motherboard), όπου βρίσκεται ο επεξεργαστής. Η συχνότητα αυτή τα τελευταία χρόνια βρίσκεται καθηλωμένη στα 66Mhz, με αποτέλεσμα να μην αξιοποιούνται πλήρως οι δυνατότητες των καινούρ-γιων ταχύτατων επεξεργαστών που κατασκευάζονται. Ο πιο σύγχρονος επεξεργαστής, που αναμένεται στα τέλη του 1998,είναι ο Deschutes της Intel,στα 450 Mhz. Η τεχνολογία κατασκευής του θα φθάνει τα 0,28 μικρά, και η εξωτερική συχνότητα λειτουργίας τα 100 Mhz. Η αύξηση στην εξωτερική συχνότητα αναμένεται να βελτιώσει θεαματικά τις επιδόσεις του καινούργιου επεξεργαστή. Στον παρακάτω Πίνακα Ι παρατίθενται τα κυριότερα μοντέλα των επεξεργαστών που έχουν κυκλοφορήσει, τα ο έτος κατασκευής ή διάθεσής τους στην αγορά, η συχνότητα,(κατά προσέγγιση),και ο αριθμός των transistors που περιλαμβάνουν:
10
Πίνακας Ι Έτος κατασκευής
Επεξεργαστήs
Συχνότητα
Αριθμός transistors
1971
4004
0,75 Mhz
2.300
1974
8080
1,50 Mhz
6.000
1978
8086
1,70 Mhz
29.000
1982
80286
12 Mhz
134.000
1985
80386DX
20 Mhz
275.000
1989
80486DX
40 Mhz
1.200.000
1993
Pentium
75 Mhz
3.100.000
1995
Pentium Pro
150 Mhz
5.500.000
11
Ιανουάριος 1997
Pentium MMX
166 Mhz
4.500.000
Μάιος1997
Pentium II
233 Mhz
7.500.000
Η ταχύτητα των επεξεργαστών αναφέρεται κατά προσέγγιση, γιατί στα είδη που κυκλοφόρησαν μετά το 1985 έχουμε διάφορα μοντέλα για τον ίδιο κωδικό επεξεργαστή. Ο 80386 κυκλοφόρησε σε δύο εκδόσεις, την 80386 SX και την 80386 DX, με τον δεύτερο σε υψηλότερη συχνότητα από τον πρώτο. Το ίδιο ισχύει και για τον 80486,που είχε επίσης δύο εκδόσεις, τον 80486 SX και τον 80486 DX. Οι Pentium επεξεργαστές είναι μία ολόκληρη σύγχρονη κατηγορία chips της Intel, που εξελίσσονται ακατάπαυστα από το 1993 που παρουσιάστηκαν στην αγορά, στην μαζική παραγωγή. Για παράδειγμα ο πρώτος Pentium ξεκίνησε στα 75 Mhz και έφτασε τα 133 Mhz. O Pentium Pro παρουσιάστηκε στα 150 Mhz και έφτασε τα 200 Mhz.Ο Pentium MMX ξεκίνησε στα 166Mhz και η τελευταία έκδοση φτάνει τα 233 Mhz. Ο Pentium II εμφανίστηκε στα 233 Mhz και αυτό τον καιρό διατίθενται στα 333 Mhz. Οι εκδόσεις των Pentium επεξεργαστών αλλάζουν πολύ γρηγο-ρα, ανάλογα με τις απαιτήσεις της αγοράς και την πολιτική marketing που ακολουθούν οι κατασκευάστριες εταιρείες.O Pentium II αναμένεται να φτάσει τα 450 Mhz στο τέλος του 1998,όταν θα τεθεί σε κυκλοφορία ο νέος επεξεργα-στής της Intel, ο Deschutes που θα φθάσει μέσα στο 1998 τα 500 Mhz. Στον Πίνακα ΙΙ γίνεται μία σύγκριση του πρώτου επεξεργαστή με τον πλέον πρόσφατο σε κυκλοφορία. Εδώ σημειώνονται και η επιφάνεια πού έχουν τα chips, μαζί με την τεχνολογία κατασκευής και την μέγιστη μνήμη που μπορούν να διαχειρισθούν σε ένα υπολογιστικό σύστημα:
12
Πίνακας IΙ Επεξεργαστής
Intel - 4004 (1971)
Intel - Pentium II (1997)
Transistors
2.300
7.500.000
Επιφάνεια
12 τετρ. χιλιοστά
196 τετρ. χιλιοστά
Τεχνολογία Χάραξης
10 μικρά
0,35 μικρά
Συχνότητα
0.750 Mhz
233 Mhz
Διαχείριση Μνήμης
4 Kilobytes
64 Gigabytes
Ακίδες Επαφής (Pins)
16 Ακίδες
387 Ακίδες
Η ατέρμονη αυτή κούρσα στην αύξηση της ταχύτητας των επεξεργαστών, δεν φαίνεται να έχει σύντομο τέλος. Τα αμέσως επόμενα χρόνια, και συγκεκριμένα πριν από το 2000,οι μεγάλες εταιρείες κατασκευής επεξεργαστών υπόσχονται επεξεργαστές με ταχύτητα 1000Mhz και έπεται συνέχεια.
13
Όλοι αυτοί οι αριθμοί αποδεικνύουν πόσο γρήγορα αλλάζουν και εξελίσσονται τα δεδομένα στον χώρο της Πληροφορικής, αλλά και πόσο σημαντική θα γίνεται η παρουσία της στην καθημερινότητα, ολοένα και περισσότερων ανθρώπων με την πάροδο του χρόνου. Οι ταχύτητες των επεξεργαστών ξεπερνούν κατά πολύ, ήδη και τις μεγαλύτερες προσδοκίες των απλών χρηστών των προσωπικών υπολογιστών. Επεξεργαστές που έχουν συχνότητα πάνω από 300 Mhz διατίθενται στην αγορά και καθιστούν απεριόριστες τις δυνατότητες ενός και μόνο ανθρώπου που χειρίζεται ηλεκτρονικό υπολογιστή. Η ζωγραφική, το σχέδιο, το βιβλίο, η εικόνα, ο ήχος και οι επικοινωνίες γίνονται πια μια απλή υπόθεση για κάθε άνθρωπο, με την βοήθεια των υπολογιστών. Η ταχύτητα θα συνεχίσει να αυξάνει, επειδή οι επεξεργαστές θα γίνουν πολύ σύντομα τα βασικά εκείνα εξαρτήματα όλων των τηλεπικοινωνιακών συσκευών. Το Internet, το παγκόσμιο Διαδίκτυο, είναι μόνο μία μικρή εφαρμογή μπροστά στις τεράστιες αλλαγές στην μεταφορά πληροφοριών, από και προς κάθε γωνιά του πλανήτη. Η τεράστια ανάπτυξη που γνωρίζει η Πληροφορική στις μέρες μας, δείχνει την απόλυτη αναγκαιότητα, που προβάλει επιτακτικά, σε ανθρώπινο δυναμικό κατάλληλα εκπαιδευμένο και άρτια καταρτισμένο στον χώρο των ηλεκτρονικών υπολογιστών. Καμία εθνική οικονομία δεν έχει μέλλον, σε οποιοδήποτε μοντέλο κοινωνικής και πολιτικής ανάπτυξης, αν δεν έχει την επάρκεια και την αναγκαία υποδομή για να στηρίξει, τόσο την εφαρμογή όσο και την ανάπτυξη της Πληροφορικής. Η τεχνογνωσία της επιστήμης του Μέλλοντος θα παραμένει πάντα θέμα καθαρά οικονομικό, αλλά ο απόλυτος έλεγχος θα παραμείνει στην ανάπτυξη του λογισμικού. Οι μηχανές δεν θα πάψουν ποτέ να αναπτύσσονται, μετά και εξ αιτίας των αναγκών που προκύπτουν από την ανθρώπινη νόηση. Έτσι η παραγωγή και ο έλεγχος της κατασκευής software, των προγραμμάτων των ηλεκτρονικών υπολογιστών, θα είναι το νευραλγικό σημείο κάθε οικονομικού σχεδιασμού. Ίσως δεν φαντάζει τόσο μακριά η εποχή, όπου ειδικά προγραμματισμένες μηχανές θα ασχολούνται αποκλειστικά με την κατασκευή και την ανάπτυξη των ηλεκτρονικών υπολογιστών. Τα Robot ήδη χρησιμοποιούνται πάρα πολύ στην κατασκευή των βασικών εξαρτημάτων των Η/Υ και αυξάνεται ραγδαία το μερίδιο που κατέχουν στην συναρμολόγηση των PC’s.
14
Η σύντομη αυτή αναδρομή στο παρελθόν των υπολογιστών, αλλά και η σύντομη ματιά στο μέλλον τους, μέσα στην κοινωνία των ανθρώπων, είναι προφανές ότι συνδέεται άμεσα με τον προγραμματισμό. Ο έλεγχος της εξέλιξης των υπολογιστών θα ανήκει σε αυτούς που θα γνωρίζουν τον σχεδιασμό προγραμμάτων στις, κατά καιρούς, σύγχρονες γλώσσες προγραμματισμού. Το μάθημα του Σχεδιασμού Προγράμματος Pascal είναι το πρώτο, από μία σειρά μαθημάτων, που μπορούν να καταρτίσουν άρτια κάθε ενδιαφερόμενο για την ανάπτυξη των εφαρμογών της Πληροφορικής.
ΑΡΧΙΚΕΣ ΕΝΝΟΙΕΣ
15
ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ Λογισμικό είναι, όπως ήδη έχει αναφερθεί, τα προγράμματα που χρησιμοποιεί ο υπολογιστής για να εκτελεί τις διάφορες λειτουργίες του. Τα προγράμματα αυτά δημιουργούνται με τα Εργαλεία Ανάπτυξης Εφαρμογών, (Development Tools), ή με τις γλώσσες προγραμματισμού, όπως αλλιώς λέγονται. Διακρίνονται σε δύο μεγάλες κατηγορίες: α) Το Λογισμικό συστήματος,(system software), και β) Το Λογισμικό εφαρμογών,(applications software) Οι διαφορές των προγραμμάτων αυτών είναι πολύ σημαντικές και γι’ αυτό εξε-τάζονται σε ξεχωριστές ενότητες.
ΛΟΓΙΣΜΙΚΟ ΣΥΣΤΗΜΑΤΟΣ Το λογισμικό του συστήματος είναι, κυρίως, αυτό που ευρύτερα σήμερα είναι γνωστό σαν Λειτουργικό Σύστημα, (Operating System). Παρέχεται μαζί με κάθε υπολογιστή από τον κατασκευαστή του μηχανήματος και η τιμή του έχει μειωθεί αισθητά στις μέρες μας. Το πρόγραμμα αυτό, που αποτελείται από αρ-κετά άλλα μικρότερα προγράμματα, είναι το βασικότερο στην εκκίνηση του υπολογιστή. Χωρίς αυτό ο υπολογιστής δεν ξεκινά, ή ακόμη και αν ξεκινήσει δεν εκτελεί ούτε τις ζωτικότερες λειτουργίες του. Ελέγχει όλο το σύστημα και είναι υπεύθυνο για την εύρυθμη λειτουργία του. Τα πιο γνωστά λειτουργικά συστήματα των ημερών μας είναι: 1) Το Ms - Dos,(Microsoft - Disk Operating System),
16 2) Τα Windows 3.1, 3) Τα Windows 95,(Windows NT - Windows for Workstation - Windows 98), 4) Το Unix,(Λειτουργικό Δικτύου), 5) Το Novell,(Λειτουργικό Δικτύου), 6) To Apple System,(για υπολογιστές Macintosh), 7) Το OS/2,
και άλλα που έχουν μικρότερη απήχηση λόγω της κατασκευής τους για χρήση σε μικρό, σχετικά, αριθμό υπολογιστών. Τα λειτουργικά συστήματα είναι επιφορτισμένα με τις ακόλουθες σημαντικές λειτουργίες σε κάθε μηχάνημα: 1) Έλεγχος του υπολογιστή για σωστή λειτουργία και ενεργοποίηση των
προγραμμάτων που χρησιμοποιεί. 2) Έλεγχος των δεδομένων που διακινούνται από και προς τον υπολογιστή. 3) Έλεγχος και καταγραφή όλων των λειτουργιών του μηχανήματος. 4) Αναγνώριση και διόρθωση των λαθών που προκύπτουν. 5) Διαχείριση δικτύου υπολογιστών, αν υπάρχει σύνδεση. Οι ενέργειες που επιθυμεί ο χρήστης του υπολογιστή, γνωστοποιούνται στο λειτουργικό σύστημα, μέσα από τις εντολές που δίνουμε κάθε φορά. Αυτό μπορεί να γίνει από την προτροπή εντολών,(Dos - Prompt, C:\>), τυπώνοντας το όνομα των εντολών, σε περιβάλλον Dos, ή από τις επιλογές που έχουμε κάνει με τον δείκτη του ποντικιού,(mouse),σε περιβάλλον Windows. Με αυτό τον τρόπο ενημερώνουμε τον υπολογιστή για την φύση των εισαγόμενων και εξαγόμενων πληροφοριών. Αν πρόκειται, δηλαδή, για διαχείριση δεδομένων ή για ενεργοποίηση προγραμμάτων. Στα βασικά προγράμματα του λογισμικού συστήματος περιλαμβάνονται οι Με-ταφραστές προγραμμάτων,(Compilers), και οι Διερμηνευτές προγραμμάτων,(Interpreters). Τα προγράμματα αυτά μεταφράζουν τον κώδικα που γράφουν οι προγραμματιστές στις διάφορες γλώσσες προγραμματισμού, σε γλώσσα μηχανής για να εκτελεστούν από τον υπολογιστή. Ο Compiler είναι ένα πρόγραμμα που περιλαμβάνεται σε όλες τις σύγχρονες γλώσσες προγραμματισμού και μετατρέπει τον κώδικα του Editor, (Κειμενογράφου), σε εκτελέσιμο πρόγραμμα, ακολουθώντας την ροή του προγράμματος, (Turbo Pascal 6.0).
17
Ο Compiler παράγει ανεξάρτητα προγράμματα. Ο Interpreter περιλαμβάνεται και αυτός στις πιο παλιές γλώσσες προγραμματισμού,αλλά μετατρέπει τον κώδικα σε γλώσσα μηχανής, γραμμή γραμμή, χωρίς να επιτρέπει την περαιτέρω εκτέλεση του προγράμματος αν συναντήσει λάθη,(GW - Basic 3.23). Ο κώδικας δεν εκτελείται χωρίς τον Interpreter. Στο λογισμικό συστήματος περιλαμβάνονται επίσης και διάφορα βοηθητικά προγράμματα, όπως επεξεργαστές κειμένου, ημερολόγια, υπολογιστές τσέπης με τις βασικές πράξεις, προγράμματα ελέγχου των λαθών του υπολογιστή κ.ά.
ΛΟΓΙΣΜΙΚΟ ΕΦΑΡΜΟΓΩΝ Το λογισμικό εφαρμογών είναι το σύνολο των υπόλοιπων προγραμμάτων που χρησιμοποιεί ένα υπολογιστικό σύστημα. Σε αυτό περιλαμβάνονται όλα τα προγράμματα που αγοράζουμε σήμερα ξεχωριστά από τον υπολογιστή. Πακέτο εφαρμογών, (Application package), θεωρείται κάθε συλλογή προγραμμάτων που χρησιμοποιείται για συγκεκριμένες εφαρμογές. Οι κειμενογράφοι,(Word - Word Pro),τα λογιστικά φύλλα,(Excel , Lotus 1-23), περιλαμβάνονται στο λογισμικό εφαρμογών. Οι γλώσσες προγραμματισμού, μαζί με όλα τα προγράμματα που περιλαμβάνουν εκτός από τον Compiler, είναι επίσης πακέτα εφαρμογών. (Quick Basic, Visual Basic ,Turbo Pascal ,Clipper, Turbo C, C++ Java ,κ.ά.). Οι βάσεις δεδομένων,(Data Bases),που χρησιμοποιούνται για την αρχειοθέτηση δεδομένων, περιλαμβάνονται στο λογισμικό εφαρμογών.(Dbase, Access, FoxPro ,SQL κ.ά.).
ΤΟ ΠΡΟΒΛΗΜΑ ΚΑΙ Η ΔΙΑΔΙΚΑΣΙΑ ΤΗΣ ΕΠΙΛΥΣΗΣ Οι ηλεκτρονικοί υπολογιστές έχουν κατασκευαστεί από ανθρώπους που ήξεραν την εσωτερική του λειτουργική δομή. Οι τεχνικοί των ηλεκτρικών εξαρτημάτων ενός υπολογιστή δεν ήταν απλοί Ηλεκτρονικοί Μηχανικοί, αλλά γνώστες της συνολικότερης απόδοσης της μηχανής. Μπορεί να ασχολήθηκαν με την κατασκευή των επιμέρους κομματιών του υπολογιστή, όμως είχαν αντίληψη για το τελικό αποτέλεσμα. Έτσι λέμε ότι ήξεραν το “πρόβλημα” και προσπαθούσαν να κατασκευάσουν την “λύση”.
18
Το “πρόβλημα” εδώ είναι η ταχύτητα και η ακρίβεια των μαθηματικών υπολογισμών για οποιοδήποτε ερευνητικό τομέα. Η “λύση” είναι η δημιουργία μιας μηχανής που θα ελαχιστοποιούσε τον χρόνο υπολογισμού και θα έλεγχε τα αποτελέσματα αξιόπιστα, σε επίσης ελάχιστο χρόνο. Η αντίληψη και η κατανόηση του προβλήματος είναι το πρώτο στάδιο στην δημιουργία ενός προγράμματος για τον ηλεκτρονικό υπολογιστή. Ο Η/Υ μπορεί να κάνει κάποιες βασικές πράξεις και να παίρνει αποφάσεις για κάποιες μηχανικές λειτουργίες, που αφορούν, τις περισσότερες φορές, τα περιφερειακά του. Πρέπει να του πούμε εμείς τι να κάνει, μέσω κάποιου τρόπου επικοινωνίας, που είναι τα προγράμματα που χρησιμοποιεί. Έτσι ο υπολογιστής, για να βοηθήσει στην επίλυση ενός προβλήματος, πρέπει να ενημερωθεί πρώτα από τον άνθρωπο, τον χειριστή του μηχανήματος. Εμείς θα σχεδιάσουμε το πρόγραμμα και θα του υποδείξουμε την μέθοδο που θα ακολουθήσει για να εξάγει το αποτέλεσμα. Όμως πριν από αυτό το στάδιο, πρέπει να κατασκευαστεί το ίδιο το σχέδιο επίλυσης του προβλήματος. Το πρώτο βήμα είναι η αντίληψη του προβλήματος, να διαπιστώσει κανείς τι ακριβώς είναι αυτό που θέλει να κάνει ο υπολογιστής. Υστέρα είναι να σκεφθεί τα βήματα που θα κάνει, για να φτάσει στην λύση του προβλήματος. Αυτή είναι η λογική ανάλυση του προβλήματος, ο τρόπος και τα στάδια επίλυσής του. Η λογική ανάλυση δεν είναι μονοσήμαντη για κάθε περίπτωση, δεν υπάρχει, με άλλα λόγια, μόνο μία λύση για κάθε πρόβλημα, τουλάχιστον τις περισσότερες φορές. Όμως η επιλογή της πιο γρήγορης και αξιόπιστης λύσης είναι πάντα το ζητούμενο και γνήσιο αποτέλεσμα της ανθρώπινης νόησης και ευφυΐας. Όταν χρησιμοποιούμε τον υπολογιστή για επιλύσουμε διάφορα προβλήματα ακολουθούμε την λογική συνέχεια των παρακάτω βημάτων: 1. Λογική Διατύπωση του προβλήματος
Το πρώτο στάδιο ανάπτυξης του προγράμματος, είναι να διατυπωθεί το πρόβλημα με όσο το δυνατόν μεγαλύτερη σαφήνεια. Αμέσως μετά καθορίζονται τα δεδομένα, (π.χ. Αριθμητικά αποτελέσματα από έρευνα ή Μαθηματικοί Τύποι ή Φυσικοί νόμοι που εμπεριέχονται στο πρόβλημα), ο προσδιορισμός της λύσης, (τι θα μπορούσε να θεωρηθεί σαν απάντηση), και οι περιορισμοί.
19
2. Μαθηματική Διατύπωση του προβλήματος
Διατυπώνουμε το πρόβλημα με μαθηματικό τρόπο, χρησιμοποιώντας λογικά και συνεχόμενα βήματα, χρησιμοποιώντας όπου χρειάζονται μαθηματικά σύμβολα και παραστάσεις. Αυτό το στάδιο εξαρτάται βέβαια από τις μαθηματικές μας γνώσεις, αλλά και από την ικανότητά μας να συνδυάζουμε τα δεδομένα και να εκφράζουμε από την αφηρημένη κατάσταση του προβλήματος, την συγκεκριμένη και υπαρκτή λύση του.
3. Αριθμητική Ανάλυση του προβλήματος
Σημειώνουμε τις εξισώσεις ή τους τύπους που θα χρησιμοποιηθούν για Να πραγματοποιηθεί το υπολογιστικό μέρος του προγράμματος, φροντίζοντας να διατηρήσουμε την λογική συνέχεια που έχουμε θέσει στην Μαθηματική Ανάλυση του προβλήματος. Αυτό είναι και το κύριο μέρος του προγράμματος που θα εκτελέσει ο ηλεκτρονικός υπολογιστής. 4. Λογικό Διάγραμμα του προγράμματος
Δημιουργούμε το Λογικό Διάγραμμα του προγράμματος, την σειρά των πράξεων που θα κάνει ο υπολογιστής. Το Διάγραμμα περιγράφει την πορεία που θα ακολουθήσει ο υπολογιστής για την επίλυση του προβλήματος και μας δίνει την δυνατότητα να επεμβαίνουμε στην ροή του προγράμματος, όπου αυτό είναι απαραίτητο, να ελέγχουμε δηλαδή την διαδικασία. 5. Προγραμματισμός - Δημιουργία Κώδικα
Το κυριότερο μέρος ενός προγράμματος. Μελετώντας προσεκτικά τα προηγούμενα 4 στάδια, επιλέγουμε την γλώσσα προγραμματισμού που θα χρησιμοποιήσουμε. Κάθε μία από τις υπάρχουσες γλώσσες προγραμματισμού δημιουργήθηκε για να καλύπτει συγκεκριμένες
20
ανάγκες. Επίσης μπορεί να αποδώσει καλύτερα αποτελέσματα από άλλες, σε συγκεκριμένες εφαρμογές. Για παράδειγμα, η Turbo Pascal έχει την δυνατότητα να διαχειρίζεται με ευχέρεια αριθμητικά δεδομένα, μιας και είναι μία καθαρά μαθηματική γλώσσα προγραμματισμού. Ο Clipper, έχει ιδιαίτερη ακρίβεια και άνεση στην επεξεργασία βάσεων δεδομένων, πολλών διαφορετικών αρχείων ταυτόχρονα και είναι κατάλληλος για την ανάπτυξη επαγγελματικών εφαρμογών. Μετά την επιλογή του προγράμματος ανάπτυξης εφαρμογών, όπως επίσημα λέγεται μία γλώσσα προγραμματισμού, γράφουμε τον κώδικα που αντιστοιχεί στο Λογικό Διάγραμμα που έχουμε κάνει για την επίλυση του προβλήματος. Αυτό είναι το πρόγραμμα που θα χρησιμοποιήσει ο υπολογιστής. 6. Έλεγχος - Διόρθωση - Εκτέλεση του προγράμματος
Όταν ολοκληρωθεί η συγγραφή του κώδικα, πραγματοποιούμε την εκτέλεση του προγράμματος στον υπολογιστή. Αν διαπιστωθεί δυσλειτουργία κατά την εκτέλεση ή μη αναμενόμενα αποτελέσματα, κάνουμε έλεγχο των δεδομένων και του κώδικα. Διορθώνουμε τυχόν παραλείψεις ή αλλάζουμε κάποια σημεία και επιχειρούμε πάλι την εκτέλεση του κώδικα. Επαναλαμβάνουμε τη διαδικασία μέχρι να εξάγουμε τα επιθυμητά αποτελέσματα. Τα βήματα αυτής της φάσης είναι αλληλοεξαρτώμενα και συμπληρώνουν το ένα το άλλο, δηλαδή είναι δυνατόν να αλλάζει η λογική τους συνέχεια. 7. Επεξεργασία των αποτελεσμάτων - Συμπεράσματα
Μετά το τέλος της εξαγωγής αποτελεσμάτων από τον ηλεκτρονικό υπολογιστή, επεξεργαζόμαστε τα καινούργια δεδομένα, διαπιστώνουμε την λύση του προβλήματος και προσδιορίζουμε καινούργια συμπεράσματα, αν αυτό έπεται της λύσης του προβλήματος. Η διαδικασία της επίλυσης ενός προβλήματος, φαίνεται στο Σχήμα 1:
21
Λογική Διατύπωση του προβλήματος
Μαθηματική Διατύπωση του προβλήματος
Αριθμητική Ανάλυση του προβλήματος
Λογικό Διάγραμμα του προγράμματος
Προγραμματισμός - Δημιουργία
22
Κώδικα
Έλεγχος Διόρθωση Εκτέλεση προγράμματος
Επεξεργασία αποτελεσμάτων Συμπεράσματα Σχήμα 1. Τα λογικά βήματα στην επίλυση ενός προβλήματος. Κάποια από αυτά τα στάδια πρακτικά παραλείπονται, είτε γιατί είναι αυτονόητα και εύκολα στην συμμετοχή τους στο τελικό πρόγραμμα, είτε γιατί δεν περιλαμβάνονται νοηματικά στην όλη διαδικασία.
Ο ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΠΡΟΒΛΗΜΑΤΟΣ Είδαμε λοιπόν σε τι συνίσταται η διαπίστωση ενός προβλήματος και η μεταφορά του στον ηλεκτρονικό υπολογιστή για την επίλυσή του. Η αντιμετώπιση ενός προβλήματος μπορεί να θεωρηθεί ότι περιλαμβάνει τρία βασικά στάδια: α) Την Διατύπωση του προβλήματος, β) Τις Οδηγίες και την Βοήθεια για την διαδικασία επίλυσης, και γ) Την Μέθοδο για την επίλυση του προβλήματος. Το στάδιο που εξετάζεται σε αυτό το μέρος των σημειώσεων, είναι το τρίτο, η μέθοδος της επίλυσης του προβλήματος. Εδώ βρίσκεται η αφετηρία της ανά-πτυξης του τρόπου που θα επιλυθεί το πρόβλημα, του Αλγορίθμου. Αλγόριθμος λέγεται, με άλλα λόγια, η διαδικασία επίλυσης ενός προβλήματος εκφρασμένη με μαθηματικό τρόπο, στην γλώσσα των ηλεκτρονικών υπολογιστών.
23
ΚΩΔΙΚΟΠΟΙΗΣΗ ΑΛΓΟΡΙΘΜΟΥ Ο Αλγόριθμος δημιουργείται με την βοήθεια μιας γλώσσας προγραμματισμού και αποτελεί το πρόγραμμα που θα εκτελέσει ο υπολογιστής. Από την στιγμή που θα πιστοποιηθεί το πρόβλημα, προκύπτει και το θέμα της επιλογής του Αλγορίθμου. Αυτό σημαίνει πιο απλά, ποιά γλώσσα προγραμματισμού θα χρησιμοποιήσω για την κωδικοποίηση του Αλγορίθμου. Οι ανάγκες της επίλυσης του προβλήματος, μας καθορίζουν και τα εργαλεία που θα χρησιμοποιήσουμε. Ο Πίνακας ΙΙΙ μας δίνει μία εικόνα των δυνατοτήτων που έχουμε, ανάλογα το εργαλείο ανάπτυξης εφαρμογών που χρησιμοποιούμε:
Στο Σχεδιασμό Προγράμματος θα χρησιμοποιήσουμε την γλώσσα προγραμματισμού Pascal, γιατί αποτελεί, αφ’ ενός ένα υποδειγματικό εκπαιδευτικό εργαλείο ανάπτυξης εφαρμογών, αφ’ ετέρου ένα πρόγραμμα απλής και κατανοητής μαθηματικής γλώσσας προγραμματισμού. Η κωδικοποίηση του Αλγόριθμου απαιτεί εξειδικευμένη γνώση αλλά, το κυριότερο, εμπειρία στην κατασκευή προγραμμάτων και στην διόρθωσή τους. Γι’ αυτό τον λόγο στο κεφάλαιο “ Απλοί Αλγόριθμοι “,θα δοθούν άφθονα παραδείγματα κώδικα, μαζί με την νοηματική τους εξήγηση.
Πίνακας IΙΙ (α) Γλώσσα Προγραμματισμού
Ανάπτυξη Αλγορίθμου
GW - BASIC
Εισαγωγή στον προγραμματισμό
Quick Basic
Δημιουργία αρχείων και παιχνιδιών
24
Visual Basic
Σύγχρονες εφαρμογές κάθε είδους
Fortran
Εφαρμογές μαθηματικής έρευνας
Turbo Pascal
Εκπαίδευση - Μαθηματική έρευνα
Πίνακας IΙΙ (β) Γλώσσα Προγραμματισμού
Ανάπτυξη Αλγορίθμου
Delphi
Σύγχρονες εφαρμογές κάθε είδους
Clipper - Dbase
Βάσεις δεδομένων
CA - Visual Objects
Βάσεις δεδομένων για Windows
Turbo C
Μαθηματική έρευνα - Δίκτυα
Borland C ++
Εφαρμογές για Windows κάθε είδους
25
Assembly
Έλεγχος περιφερειακών Hardware
Cobol
Επαγγελματικές εφαρμογές
Logo Writer
Εκπαίδευση μαθητών Δημοτικού
Java
Εφαρμογές Δικτύου
HTML
Διευθύνσεις στο Internet
SQL
Βάσεις δεδομένων
ΜΕΤΑΦΡΑΣΗ ΚΩΔΙΚΑ Τα στάδια που περιγράφτηκαν προηγούμενα είναι τα απολύτως απαραίτητα για την δημιουργία του προγράμματος, για την συγγραφή του κώδικα, που θα οδηγήσει τον υπολογιστή στην επίλυση του επιθυμητού προβλήματος. Η Διαπίστωση του προβλήματος, η μετατροπή του σε μαθηματικό συμβολισμό με την σύνταξη του Αλγορίθμου, η μετάφραση σε κάποια γλώσσα προγραμματισμού με την Κωδικοποιήση, είναι μία αρκετά επίπονη διαδικασία, ειδικά για τον αρχάριο προγραμματιστή. Όμως μεγάλη σημασία έχει η τελική φάση αξιοποίησης του κώδικα, που γίνεται με την μετάφραση και την εκτέλεσή του. Κάθε στάδιο της δημιουργίας ενός προγράμματος είναι αξιοσημείωτο και αναντικατάστατο. Έχει τις δικές του δυσκολίες και ιδιαιτερότητες και απαιτεί μεγάλη προσοχή και μελέτη από τον προγραμματιστή, όσο έμπειρος και αν είναι. Στην τελική του μορφή ο κώδικας που έχουμε συντάξει με κάποιον Editor, κειμενογράφο που συνήθως περιλαμβάνεται στο πακέτο της γλώσσας προγραμματισμού, δίνεται για την επεξεργασία στον Compiler, και από εκεί, αν δεν βρεθούν λάθη, παράγεται το εκτελέσιμο πρόγραμμα.
26
Όμως πριν από το τελικό πρόγραμμα γίνονται επαναλαμβανόμενοι έλεγχοι του κώδικα, σε διαφορετικά επίπεδα κάθε φορά. Αυτοί είναι: α) Ο πρώτος έλεγχος αφορά τα Συντακτικά Λάθη,(Syntax Errors),που έχουμε κάνει, γράφοντας στην διάλεκτο που έχουμε επιλέξει. Ο κώδικας ίσως παρουσιάζει φραστικές ασυμβατότητες με τις προκαθορισμένες λέξεις και φράσεις του Compiler. Έτσι μόλις ζητάμε μετάφραση του κώδικα, ο Compiler ελέγχει τα λάθη που πιθανόν έχουν γίνει. Η διόρθωση γίνεται σύμφωνα με το συντακτικό της γλώσσας προγραμματισμού που χρησιμοποιούμε. β) Ο δεύτερος έλεγχος γίνεται από εμάς τους ίδιους, που έχουμε δημιουργήσε το πρόγραμμα και αφορά τα Λογικά Λάθη, (Run - Time Errors), που έχουν γίνει. Αυτά είναι τα λάθη που πιθανόν κάνει το πρόγραμμα, εξ’ αιτίας δικών μας παραλείψεων, ή λόγω εσφαλμένων τύπων και δεδομένων που έχουμε εισαγάγει στον κώδικα. Επίσης μπορεί να είναι λειτουργίες που δεν έχουν συμπεριληφθεί στο σύνολο των πράξεων του προγράμματος. Ο έλεγχος αυτός θεωρείται και ο δυσκολότερος γιατί εξαρτάται από: 1) Τον προγραμματιστή και όχι από κάποιο πρόγραμμα που κάνει τον
έλεγχο του κώδικα, και 1) Από την πείρα, την φαντασία και την οξυδέρκεια του προγραμματιστή να αντιμετωπίζει προβλήματα που ζητούν λύση, χωρίς ενδείξεις για την διαδικασία επίλυσής τους. Με την ολοκλήρωση των ελέγχων του κώδικα, ο Compiler θα τον μεταφράσει σε γλώσσα μηχανής, σε σύμβολα που μπορεί να αντιληφθεί ο επεξεργαστής και θα δημιουργήσει το εκτελέσιμο πρόγραμμα. Η μορφή του τελικού προγράμματος φαίνεται αν το “ανοίξουμε” με οποιονδήποτε Editor, και αποτελεί ένα σύνολο από ακαταλαβίστικα σύμβολα, που απεικονίζουν το αρχείο στην ψηφιακή του μορφή. Αυτή είναι και η μόνη “γλώσσα” που αντιλαμβάνεται ο Η/Υ.
27
ΠΑΡΟΥΣΙΑΣΗ ΑΛΓΟΡΙΘΜΟΥ
28
ΠΕΡΙΓΡΑΦΗ ΑΛΓΟΡΙΘΜΟΥ Το πρόβλημα που περιγράφτηκε στις προηγούμενες ενότητες, είναι η βάση που θα στηριχτούμε για να δημιουργήσουμε τον αλγόριθμο. Όσο πιο σαφής είναι η διατύπωση του αλγορίθμου, τόσο πιο σύντομη και εύκολη θα είναι η δημιουρ-γία του προγράμματος. Το σύνολο αυτών των οδηγιών που θα δώσουμε στον Η/Υ μαζί με τις υπάρχουσες βοηθητικές λειτουργίες στο λογισμικό του μηχανή-ματος, θα μας δώσουν τα τελικά αποτελέσματα. Οι κυριότερες ιδιότητες ενόs αλγόριθμου είναι: 1) Ένας αλγόριθμος αποτελείται από στερεά και αδιαμφισβήτητα λογικά
τμήματα. Τα στάδια της διαδικασίας δεν πρέπει να είναι διφορούμενα, για να εξασφαλιστεί ο έλεγχος της ροής του προγράμματος. 2) Η αποτελεσματικότητα του αλγορίθμου πρέπει να είναι δεδομένη ως προς τα τελικά συμπεράσματα.
29 3) Η περιγραφή του αλγορίθμου πρέπει να γίνεται με όσο το δυνατόν πιο
γενικό τρόπο, ώστε να μπορεί να έχει εφαρμογή στην επίλυση όσο το δυνατον περισσότερων προβλημάτων. 2) Ο αλγόριθμος πρέπει να είναι ευέλικτος, μικρός σε μέγεθος, κατανοητός και ικανός να συνεργάζεται σωστά με κάθε υπολογιστική μηχανή. Για να γραφτεί λοιπόν ο αλγόριθμος ενός προγράμματος, πρέπει να ακολουθήσουμε τις βασικές ιδιότητες και να χρησιμοποιήσουμε τα κατάλληλα μαθηματικά σύμβολα. Γι’ αυτό το λόγο θα αξιοποιήσουμε το Λογικό Διάγραμμα,(flow chart ή block diagram),που έχουμε φτιάξει κατά την διάρκεια της δημιουργίας του προγράμματος. ΣΥΜΒΟΛΙΚΗ ΜΕΘΟΔΟΣ Η κατασκευή του αλγόριθμου μπορεί να γίνει με το λογικό διάγραμμα, αν και αυτό δεν είναι απαραίτητο. Ο αλγόριθμος αποτελείται από επιμέρους κομμάτια ,που μπορούμε να τα συνθέσουμε με μαθηματικό τρόπο ή και με κατάλληλες φράσεις. Τα στοιχεία εκείνα που χρησιμοποιούνται σε αυτό το στάδιο από τους προγραμματιστές, είναι κυρίως η λογική και η ευφυΐα, συστατικά που αποκτούν-ται από την πάροδο του χρόνου και την επιμονή και την θέληση των δημιουργών του προγράμματος. Για την ιστορία, θα αναφέρουμε τα σχήματα που χρησιμοποιούνται στην κατασκευή ενός λογικού διαγράμματος και, κατ’ επέκταση, του αλγορίθμου επίλυσης ενός προβλήματος. Αυτή είναι η συμβολική μέθοδος ενός αλγορίθμου, και σημειώνουμε εδώ ότι η “ιστορία” που αναφέρουμε, έχει να κάνει με την σύγχρονη μέθοδο κατασκευής των προγραμμάτων. Στην σημερινή εποχή οι προγραμματιστές, όχι μόνο δεν ασχολούνται με λογικά διαγράμματα και αλγορίθμους, αλλά ούτε καν με τη κατασκευή της εξωτερικής εμφάνισης,(interface),των εφαρμογών τους. Ο κώδικας αναπτύσσεται σε επιμέρους ενότητες και ο έλεγχος των λαθών αφορά αποκλειστικά τα τμήματα κώδικα που δημιουργούνται και όχι ολόκληρη την εφαρμογή. Τα σχήματα που χρησιμοποιούνταν, λοιπόν, στα πρώτα βήματα της δημιουργίας των εφαρμογών για υπολογιστές, φαίνονται στις επόμενες σελίδες: 1) Ορθογώνιο Παραλληλόγραμμο Το παραλληλόγραμμο συμβολίζει μία ενδιάμεση πράξη,
30
που αναφέρεται αναλυτικά μέσα στο σχήμα του ορθωγωνίου. Χρησιμοποιείται πολύ συχνά στις διακλαδώσεις. 2) Ρόμβος
Ο ρόμβος δηλώνει κάποια απόφαση που πρέπει να γίνε μέσα στο πρόγραμμα, και συνδέεται με όλες τις δυνατές περιπτώσεις που παρουσιάζονται. Είναι μία λογική διεργασία, που σχετίζεται άμεσα με την κατασκευή του αλγορίθμου. 3) Ισοσκελές Τραπέζιο Το τραπέζιο δείχνει μία αρχική ή τελική πράξη του προγράμματος. Η περιγραφή της πράξης γίνεται μέσα στο πλαίσιο του τραπεζίου. 4) Οβάλ Σχήμα
Το οβάλ σχήμα σημειώνει την αρχή ή το τέλος ενός λογικού διαγράμματος. Συνήθως σημειώνουμε τις λέξεις “Αρχή” ή “Τέλος” μέσα στο σχήμα. 5) Κύκλος
Ο κύκλος δείχνει την ένωση δύο κομματιών ενός Λογικού διαγράμματος. Στην περίπτωση που το λογικό διάγραμμα περιγράφει μία μεγάλη εφαρμογή, τότε είναι πιθανό να απεικονίζεται σε πολλά κομμάτια χαρτί, και χρησιμοποιούμε τους κύκλους για να σημειώσουμε την συνέχεια. 6) Μακρόστενο Εξάπλευρο Το σχήμα αυτό συμβολίζει μία ολόκληρη ομάδα από πράξεις ή λειτουργίες μέσα σε ένα πρόγραμμα. Στο συγκεκριμένο σημείο του διαγράμματος, που το τοποθετούμε, δεν θέλουμε να περιγράψουμε αναλυτικά
31
τις διαδικασίες που περιέχει,(π.χ. κάποιο υποπρόγραμμα). 7) Το Σχήμα Κάρτας Το σχήμα αυτό είναι ενδεικτικό ότι εισάγονται δεδομένα στον υπολογιστή, από το πληκτρολόγιο ή από δισκέτες. Το σχήμα προέρχεται από τις διάτρητες κάρτες δεδομένων που χρησιμοποιούνταν παλαιότερα. 8) Σχήμα Χαρτιού Το σχήμα αυτό, που μοιάζει με κομμένο φύλλο χαρτιού, συμβολίζει εκτύπωση αποτελεσμάτων, σε κατάλληλη συσκευή. 9) Κυλινδρική Επιφάνεια
Η κυλινδρική επιφάνεια δηλώνει την χρήση του σκληρού δίσκου στο σημείο του προγράμματος. Ο δίσκος μπορεί να χρησιμοποιηθεί για εγγραφή ή για ανάγνωση δεδομένων.
10) Δισορθογώνιο Τραπέζιο Το τραπέζιο αυτού του σχήματος συμβολίζει το πληκτρολόγιο του υπολογιστικού συστήματος. Στο σημείο αυτό του προγράμματος γίνεται εισαγωγή δεδομένων στον υπολογιστή. Τα σχήματα αυτά συνδέονται με απλές γραμμές που καταλήγουν σε ένα μικρό βέλος. Αυτό υποδηλώνει την σειρά που διαγράφεται το λογικό διάγραμμα και είναι ίδιο με την σειρά εκτέλεσης των πράξεων από τον υπολογιστή. Περισσότερο χρησιμοποιούνται:
32 1) Το σχήμα του Οβάλ, για την αρχή και το τέλος του προγράμματος, 2) Το σχήμα της Κάρτας για εισαγωγή δεδομένων, 3) Το Ορθογώνιο Παραλληλόγραμμο, για πράξεις μέσα στο πρόγραμμα, 4) Ο Ρόμβος, για την διακλάδωση της ροής των πράξεων, και, 5) Το κομμένο φύλλο Χαρτιού, για την εκτύπωση των αποτελεσμάτων.
ΠΑΡΑΔΕΙΓΜΑ: Έστω το παρακάτω πρόβλημα: Δίνονται 3 διαφορετικοί αριθμοί Α, Β, Γ και ζητείται να βρεθεί και να τυπωθεί ο μεγαλύτερος από αυτούς. Ποιό είναι το Λογικό Διάγραμμα του προβλήματος; Για να το δημιουργήσουμε, διατυπώνουμε τα εξής λογικά βήματα: α) Εισαγωγή των δεδομένων,(των 3 διαφορετικών αριθμών),στον υπολογιστή, β) Σύγκριση του Α με τον Β και εύρεση του μεγαλύτερου, γ) Σύγκριση του μεγαλύτερου με τον Γ και εύρεση του μεγαλυτέρου όλων, δ) Εκτύπωση των αποτελεσμάτων. Το Λογικό διάγραμμα του προβλήματος δείχνει το Σχήμα 2:
ΑΡΧΗ
ΕΙΣΑΓΩΓΗ 3 ΔΙΑΦΟΡΕΤΙΚΩΝ ΑΡΙΘΜΩΝ Α Β Γ
>
< Α<>Β
33 >
<
>
Α<>Γ
Χ=Α
< Β<>Γ
Χ=Β
Χ=Γ
Χ=Β
ΕΚΤΥΠΩΣΗ Χ
ΤΕΛΟΣ
Σχήμα 2: Λογικό διάγραμμα του παραδείγματος σύγκρισης 3 αριθμών.
ΦΡΑΣΤΙΚΗ ΜΕΘΟΔΟΣ Η μέθοδος αυτή είναι, ούτως ή άλλως, το πρώτο βήμα στην δημιουργία ενός προγράμματος. Είτε σημειώσουμε το γενικό πλαίσιο του προγράμματος, είτε όχι, θα χρησιμοποιήσουμε λογικά βήματα για την στοιχειώδη οργάνωση του προβλήματος. Στην αρχή, βέβαια, καλό είναι να περιγράφουμε αναλυ-τικά στο χαρτί, με δικά μας λόγια, τι ακριβώς θέλουμε ή πρόκειται να κάνου-με, στην διαδικασία της επίλυσης ενός συγκεκριμένου προβλήματος. Ειδικά όταν τα προβλήματα είναι απλά και σύντομα στη λύση τους, μπορούμε να αποφύγουμε την διαδικασία. Όταν όμως έχουμε να σχεδιάσουμε μεγάλες εφαρμογές, με πολλά επιμέρους κομμάτια, είμαστε υποχρεωμένοι να διατυπώσουμε την περιγραφή του Λογικού Διαγράμματος φραστικά, αλλά και να κρατήσουμε σημειώσεις για την πορεία της επίλυσης.
34
Η φραστική μέθοδος συνίσταται στην λεκτική διατύπωση των λογικών βημάτων, που θα ακολουθήσουμε για να σχηματίσουμε το Λογικό Διάγραμμα και, κατ’ επέκταση, τον κώδικα του προγράμματος. Στο προηγούμενο παράδειγμα, πριν φτιάξουμε το Λογικό Διάγραμμα, θα μπορούσαμε να διατυπώσουμε φραστικά, το πρόβλημα και την λύση του, ως εξής: α) Θέλω ένα πρόγραμμα που να εκτελεί αριθμητικούς υπολογισμούς. Άρα θα χρησιμοποιήσω μία γλώσσα προγραμματισμού ,κατάλληλη για αριθμητική επεξεργασία, (εμείς έχουμε επιλέξει, εξ’ ορισμού, βέβαια την Pascal ). β) Πρέπει να εισαγάγω δεδομένα, με τουλάχιστον 3 διαφορετικές αριθμητικές μεταβλητές στον υπολογιστή, μία για κάθε έναν αριθμό του προβλήματος. γ) Μετά πρέπει να χρησιμοποιήσω μαθηματικές σχέσεις για να συγκρίνω τους 3 αριθμούς και να βρω τον μεγαλύτερο από αυτούς. δ) Τέλος πρέπει να καταχωρήσω τα αποτελέσματα στον υπολογιστή και να τα εμφανίσω στην οθόνη ή να τα εκτυπώσω στο χαρτί. ΨΕΥΔΟΚΩΔΙΚΑΣ Η δημιουργία του ψευδοκώδικα είναι και αυτό ένα στάδιο που μπορεί να αποφευχθεί, από την πείρα του προγραμματιστή ή από την ευκολία της επίλυσης ενός απλού προβλήματος. Ο ψευδοκώδικας είναι η πρώτη προσπάθεια μετά το Λογικό Διάγραμμα, να εκφράσουμε το πρόβλημα με το συντακτικό της γλώσσας προγραμματισμού που έχουμε επιλέξει. Αν πρόκειται για μία αρκετά μεγάλη ή πολύπλοκη εφαρμογή, τότε η δημιουργία του ψευδικώδικα επιβάλλεται εκ’ των πραγμάτων. Σημειώνουμε σε ένα τετράδιο, τα μέρη εκείνα που αποτελούν την εφαρμογή, διατυπωμένα σε Pascal, για να ελέγχουμε καλύτερα το υπολογιστικό τμήμα του προγράμματος. Συνοψίζοντας την ενότητα αυτή, βλέπουμε ότι τα κύρια σημεία στην δημιουργία του κώδικα ενός προγράμματος, από την στιγμή που έχουμε κατανοήσει το πρόβλημα, είναι: α) Φραστική Διατύπωση του προβλήματος,
35
β) Δημιουργία του Λογικού Διαγράμματος για την επίλυσή του, γ) Ψευδοκώδικας του προγράμματος, ακολουθώντας τα βήματα του διαγράμματος, και, δ) Σύνταξη του κώδικα στον Editor.
36
Η ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ TURBO PASCAL 6.0
H TURBO PASCAL 6.0 Πριν προχωρήσουμε στα παραδείγματα των απλών αλγορίθμων σε κώδικα, πρέπει να γνωρίσουμε το εργαλείο που θα χρησιμοποιήσουμε για την συγγραφή του κώδικα. Στο μάθημα του Σχεδιασμού Προγραμμάτων χρησιμοποιείται η Pascal, λόγω του απλού συντακτικού της, συγκριτικά με άλλες γλώσσες προγραμματισμού και λόγω της καθαρά μαθηματικής της δομής. Αυτά τα δύο χαρακτηριστικά την κάνουν ιδανική σήμερα για ένα, όσο το δυνατόν πιο εύκολο και σωστό ξεκίνημα στον προγραμματισμό.
37
Δημιουργός της Pascal, όπως αναφέρθηκε και στην ενότητα της “Ιστορίας των Η/Υ”,είναι ο καθηγητής Πληροφορικής Niklauws Wirth του Πολυτεχνείου της Ζυρίχης. Παρουσιάστηκε στο ευρύ κοινό για πρώτη φορά το 1970 και καθιερώθηκε σαν πρότυπο το 1982,με αριθμό 7185 ISO, (International Organization for Standardization). Την εποχή που εμφανίστηκε η Pascal κυριαρχούσαν η Fortran, η Cobol, η Algo1 και η PL/1 της IBM. Επίσης είχε κάνει και την εμφάνισή της η Basic, που έκανε τότε τα πρώτα της βήματα. Κάθε μία από αυτές τις γλώσσες είχε τα προτερήματα και τα μειονεκτήματά της, ανάλογα την χρήση της. Τα “κενά” που άφηναν αυτές οι γλώσσες ήρθε να καλύψει η Pascal, καθώς και να βελτιώσει τις ήδη υπάρχουσες τεχνικές και δυνατότητες προγραμματισμού. Η ανάπτυξη της Pascal από τον Wirth, έγινε κυρίως από την ανάγκη να υπάρχει ένα ισχυρό προγραμματιστικό εργαλείο για έρευνα, που να μπορεί να υλοποιηθεί, να λειτουργήσει, και σε μικρούς υπολογιστές. Την εποχή εκείνη οι υπολογιστές βρίσκονταν ακόμα μόνο σε ερευνητικά κέντρα και Πανεπιστήμια. Δεν είχαν διατεθεί ακόμα στην μαζική κατανάλωση υπολογιστές για ξεχωριστούς χρήστες. Ο πρώτος προσωπικός υπολογιστής - PC,(Personal Computer), κυκλοφόρησε το 1974,(το μοντέλο Altair με επεξεργαστή τον 8008 και συχνότητα λειτουργίας το 1,5 Mhz). Ο Wirth συμμετείχε ο ίδιος στην προγραμματιστική ομάδα της Algo68, μιας γλώσσας προγραμματισμού τεράστιας σε μέγεθος, κατάλληλη μόνο για τους υπερυπολογιστές της εποχής. Την εποχή εκείνη αποφάσισε να δημιουργήσει την Pascal, διαπιστώνοντας την ανάγκη ύπαρξης μίας ευέλικτης γλώσσας προγραμματισμού που να έχει ταυτόχρονα και μικρό μέγεθος σε bytes. Μια άλλη πολύ σημαντική αναγκαιότητα για την εποχή, εκτός από το μέγεθος του προγράμματος, ήταν και η ύπαρξη μιας γλώσσας με πειθαρχημένο, ”μαθηματικό” κώδικα και επιμέρους προγραμματιστικά κομμάτια, που να έχουν την ικανότητα να περιγράφουν την λειτουργικότητά τους. Η ύπαρξη, δηλαδή, των procedures, έτσι όπως ορίζονται στην Pascal, που θα γνωρίσουμε στη συνέχεια του μαθήματος, σε άλλες ενότητες. Ο πρώτος Compiler της Pascal γράφτηκε σε Fortran, αλλά δεν τα πήγε τόσο καλά στην πράξη. Ο δεύτερος Compiler γράφτηκε σε Pascal, δοκιμάστηκε επιτυχώς και ακολούθησε η ανακοίνωση της Pascal το 1970. Το γεγονός ότι χρησιμοποιήθηκε μία γλώσσα προγραμματισμού,(Fortran), για να κατάσκευαστεί μία άλλη γλώσσα προγραμματισμού,(Pascal), δείχνει και τις δυ-
38
νατότητες που μπορεί να αποκτήσει κανείς με την γνώση του προγραμματισμού των ηλεκτρονικών υπολογιστών.
ΔΟΜΗ ΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΕ PASCAL Ξεκινώντας, θα περιγράψουμε τα κυριότερα μέρη ενός προγράμματος που είναι γραμμένο με Pascal. Τα συστατικά στοιχεία της γλώσσας που είναι απαραίτητα κάθε φορά, θα αναλύονται μετά την διαπίστωση της ύπαρξής τους μέσα στο πρόγραμμα, όπως Δηλώσεις Μεταβλητών, Τμήματα Κώδικα, Σταθερές, Εντολές, Συναρτήσεις κ.λ.π. Η αναλυτική παρουσίαση της γλώσσας γίνεται σε άλλο μάθημα, που ασχολείται αποκλειστικά με την Pascal. Η βασική, λοιπόν, δομή ενός προγράμματος σε Pascal, είναι: 1) Τίτλος προγράμματος,(Π.χ. Program first; ) Είναι η επικεφαλίδα με το όνομα του προγράμματος, με την οποία ξεκινά υποχρεωτικά πάντα ένα πρόγραμμα. Σημειώνουμε το ερωτηματικό ; που υπάρχει στο τέλος των περισσότερων εκφράσεων της Pascal. Το ερωτηματικό “δείχνει” στον Compiler το τέλος μίας γραμμής κώδικα. Οπού δεν χρησιμοποιείται το ερωτηματικό, θα αναφέρεται ρητά. 2) Τμήμα δηλώσεων βοηθητικών τμημάτων κώδικα,(Π.χ. uses crt; ) Μετά το όνομα του προγράμματος, γράφουμε τις βοηθητικές μονάδες Κώδικα που πιθανόν χρησιμοποιεί το πρόγραμμα. Πρόκειται για έτοιμα βοηθητικά προγράμματα, που υπάρχουν στην Pascal, για την ευκολότερη διαχείριση των περιφερειακών του υπολογιστή. Στο παράδειγμα, η μονάδα crt επιτρέπει στην Pascal να αναλάβει τον έλεγχο της οθόνης, προκειμένου να χρησιμοποιηθούν σχετικές εντολές ή συναρτήσεις του προγράμματος, όπως η clrscr; 3) Τμήμα Δηλώσεων, (Των μεταβλητών, και γενικότερα του είδους δεδομένων, που θα διαχειριστεί το πρόγραμμα), (Π.χ. Var
39
a : real; b , c : integer; d , e : char; f , g : boolean; ) Εδώ δηλώνουμε το όνομα,(π.χ. b,c ),και το είδος των μεταβλητών ,(π.χ. integer), που θα χρησιμοποιηθούν από το πρόγραμμα. Το όνομα των μεταβλητών ορίζεται στο αριστερό μέρος και το είδος τους στο δεξιό μέρος της οθόνης. Ανάμεσά τους υπάρχει πάντα η άνω - κάτω τελεία : ,που αντιστοιχεί στο όνομα της μεταβλητής, τον τύπο που ορίζεται να έχει στην μνήμη του υπολογιστή. 4) Τμήμα Εντολών,(Το κυρίως πρόγραμμα) Το τμήμα αυτό περιέχει τον βασικό κώδικα της εφαρμογής που θα δημιουργήσουμε. Ξεκινά με το BEGIN,(το πρώτο Begin που συναντάμε),και τελειώνει με το END.,(το τελευταίο End έχει πάντα την τελεία .).Είναι δυνατόν να υπάρχουν και άλλα End αλλά μόνο το τελευταίο έχει την τελεία. Οτιδήποτε άλλο υπάρχει γραμμένο μετά το END., αγνοείται από τον Compiler και δεν ελέγχεται ούτε και μεταφράζεται σε γλώσσα μηχανής.
ΠΑΡΑΔΕΙΓΜΑ ΔΟΜΗΣ ΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ: Program Second;
Τίτλος Προγράμματος
uses crt;
Βοηθητικά τμήματα κώδικα
40
Var
Τμήμα Δηλώσεων
Αρχή Τμήματος Εντολών
A:integer; Begin
clrscr ; writeln ; writeln(‘ Αυτό το πρόγραμμα εμφανίζει έναν αριθμό στην οθόνη.‘) ; writeln ; writeln(‘ Πληκτρολογήστε έναν ακέραιο αριθμό… ‘) ; readln(A) ; writeln(‘ Πληκτρολογήσατε τον αριθμό :’,Α) ; writeln ; writeln(‘ Πατήστε κάποιο πλήκτρο για τερματισμό του προγράμματος…’) ; writeln ; readln ; End.
Τέλος Τμήματος Εντολών
ΑΣΚΗΣΗ 1: α) Να διατυπωθεί ο φραστικός Αλγόριθμος του παραπάνω προγράμματος, με λογικά βήματα. β) Να γίνει το Λογικό Διάγραμμα του προβλήματος χρησιμοποιώντας τα σύμβολα των σελίδων 16 και 17. γ) Περιγράψτε με δικά σας λόγια τι κάνει αυτό το πρόγραμμα. δ) Ποιές αλλαγές θα μπορούσατε να κάνετε στον κώδικα για να βελτιώσετε τα αποτελέσματα ή την εμφάνιση αυτού του προγράμματος; ε) Τι λείπει από αυτό το πρόγραμμα, που θα μπορούσε να συμπληρωθεί; Εντολές και Συναρτήσεις του προγράμματος: Clrscr : Εντολή καθαρισμού της οθόνης για να διακρίνουμε τα
41
Αποτελέσματα του προγράμματος. Ίδια σε χρήση με την εντολή CLS του MS - DOS. Writeln : Συνάρτηση εξόδου της Pascal. Εμφανίζει ένα μήνυμα στην οθόνη, που περικλείεται μέσα στις αποστρόφους, (’ ’),ή τα περιεχόμενα των μεταβλητών. Readln: Συνάρτηση εισόδου. Καταχωρεί στις μεταβλητές τα δεδομένα που πληκτρολογούμε. Χωρίς όρισμα σταματά τη ροή του προγράμματος, και θέτει τον υπολογιστή σε κατάσταση αναμονής πληκτρολόγησης.
ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΗΝ PASCAL Στο τμήμα των δηλώσεων είδαμε την χρήση διάφορων τύπων δεδομένων ή μεταβλητών. Ο πιο συνηθισμένος τύπος δεδομένων είναι οι μεταβλητές που δηλώνονται στην περιοχή Var, όπως στο παράδειγμα. Υπάρχουν όμως και άλλοι τύποι που ορίζονται σε ξεχωριστές περιοχές στο τμήμα δηλώσεων του προγράμματος. Οι σημαντικότεροι τύποι δεδομένων που ορίζονται στο τμήμα δηλώσεων είναι: 1) Var (Variables - Μεταβλητές)
Περιοχή δήλωσης των μεταβλητών που είναι ορισμένοι στην Pascal. Οι μεταβλητές αυτές αναφέρονται στη συνέχεια. 2) Const (Constants - Σταθερές)
Εδώ ορίζουμε μεταβλητές που θα έχουν σταθερή τιμή καθ’ όλη την διάρκεια του προγράμματος. Οι μεταβλητές αυτές μπορούν να ορισθούν από τον προγραμματιστή, μπορεί όμως να είναι και προκαθορισμένες, (default), από την Pascal. Ορισμένες από την Pascal είναι οι μεταβλητές που φαίνονται στον Πίνακα IV: Πίνακας IV
Όνομα
Τύπος
Τιμή Μεταβλητής
42
Μεταβλητής
Μεταβλητής
pi
real
3.1415926536
maxint
integer
32767
true
boolean
Τιμή αλήθειας true
false
boolean
Τιμή αλήθειας false
Άλλοι τύποι δεδομένων είναι τα Labels, (οι Ετικέτες), τα Types, (Τύποι μεταβλητών), οι Procedures, (οι Διαδικασίες του προγράμματος) και οι Functions, (οι Συναρτήσεις του προγράμματος).Ο ορισμός και η σημασία τους θα γίνουν αμέ-σως με την χρήση τους σε παραδείγματα κώδικα, σε άλλη ενότητα. Οι τύποι των μεταβλητών που χρησιμοποιούμε στην Pascal είναι οι απλοί και οι σύνθετοι. Οι απλοί τύποι μεταβλητών δεν έχουν καταμερισμό σε άλλο τύπο μεταβλητών, ενώ οι σύνθετοι τύποι χωρίζονται σε πιο απλούς τύπους μεταβλητων. Οι σημαντικότεροι από αυτούς αναφέρονται στις επόμενες παραγράφους.
ΑΠΛΟΙ ΤΥΠΟΙ ΜΕΤΑΒΛΗΤΩΝ 1) Integer
43
Αριθμητικός τύπος μεταβλητής. Ο τύπος integer αντιστοιχεί σε ακέραιους αριθμούς και το πεδίο των επιτρεπτών τιμών του βρίσκεται μέσα στο διάστημα από τον αρνητικό ακέραιο -32768 έως τον θετικό ακέραιο 32767, [-32768,32767]. Στην μνήμη κάθε integer μεταβλητή καταλαμβάνει 2 bytes, ή 16 bits,(ψηφία). 2) Shortint
Shortinteger, (μικρός ακέραιος).Τύπου integer με περιοχή τιμών από -128 έως και 127,[-128,127].Χρησιμοποιεί 1 byte μνήμης. 3) Longint
Longinteger, (μεγάλος ακέραιος). Τύπου integer με περιοχή τιμών από τον αρνητικό αριθμό -2147483648 έως τον θετικό ακέραιο 2147483647.Στην μνήμη χρησιμοποιεί 4 bytes. 4) Word
Word, (Λέξη, για υπολογιστές). Αριθμητικός τύπος μεταβλητής, σαν τον integer, με τιμές θετικές από 0 έως 65535.Στην μνήμη καταλαμβάνει χώρο 2 bytes. 5) Real Αριθμητικός τύπος μεταβλητής. Ο τύπος real αντιστοιχεί σε πραγματικούς αριθμούς και το πεδίο των επιτρεπτών τιμών του βρίσκεται μέσα στο διάστημα από τον αρνητικό αριθμό 1 Ε -38, (δύναμη του 10 υψωμένη στην -37), έως τον θετικό αριθμό 1 Ε +38, (δύναμη του 10 υψωμένη στην +37). Στην μνήμη κάθε real μεταβλητή καταλαμβάνει 6 bytes, ή 48 bits, (ψηφιακούς χαρακτήρες). Ο χώρος στην μνήμη για τις real μεταβλητές είναι μεγαλύτερος, γιατί εκτός από το πρόσημο και το μέγεθος των αριθμών, κρατείται χώρος και για τα εκθετικά σύμβολα που περιλαμβάνει η έκφρασή τους στην Pascal.
44 6) Single (Αν το υπολογιστικό σύστημα διαθέτει μαθηματικό
συνεπεξεργαστή) Single real, (απλός πραγματικός αριθμός).Τύπου real με περιοχή τιμών από 1.5 * 10 εις την -45 έως 3.4 * 10 εις την 38. 7) Double (Αν το υπολογιστικό σύστημα διαθέτει μαθηματικό συνεπεξεργαστή) Double real, (διπλός πραγματικός αριθμός).Τύπου real με περιοχή τιμών από 5.1 * 10 εις την -384 έως 1.7 * 10 εις την 308. 8) Extended (Αν ο υπολογιστής διαθέτει μαθηματικό συνεπεξεργαστή) Extended real, (Εκτεταμένος πραγματικός αριθμός). Τύπου real με τιμές από 1.9 * 10 εις την -4951 έως 1.1 * 10 εις την 4932. 9) Boolean Λογικός τύπος μεταβλητής με 2 τιμές. Η μία είναι η τιμή True,(Αληθής) και η άλλη η τιμή False,(Ψευδής).Χρησιμοποιείται για την διακλάδωση του προγράμματος σε δύο δυνατές επιλογές. Στην μνήμη καταχωρείται χώρος 1 byte. 10) Char Τύπος μεταβλητής για χαρακτήρες, γράμματα. Κάθε μεταβλητή τύπου char μπορεί να έχει σαν τιμή έναν από τους 128 χαρακτήρες του κώδικα ASCII των υπολογιστών. ASCII,(American Standard Code for Information Interchange), είναι το σύνολο των διεθνών συμβόλων που χρησιμοποιούν οι υπολογιστές για να συμβολίζουν χαρακτήρες. Μπορεί να είναι οποιοδήποτε από τα γράμματα του αγγλικού και του ελληνικού αλφαβήτου, αλλά και διαφορετικά σύμβολα όπως το + ,το * ,κ.λ.π. Οι μεταβλητές αυτού του τύπου περικλείονται από αποστρόφους. Π.χ. ‘Υ΄ , ‘Ν’ . Στην μνήμη καταλαμβάνουν χώρο ίσο με 1 byte.
45
11) Byte Ο τύπος δεδομένων byte είναι επέκταση τύπου δεδομένων και πλήρως συμβα-τός με τον τύπο integer. Η περιοχή τιμών του είναι υποπεριοχή του integer και συγκεκριμένα παίρνει τιμές στο διάστημα από 0 έως 255, [0,255].Στην μνήμη καταλαμβάνει χώρο 1 byte. Με αυτόν τον τύπο δεδομένων συμβολίζουμε ακέραιους αριθμούς από το 0 έως και το 255. Η χρήση του κάθε τύπου μεταβλητής εξαρτάται από το είδος των πληροφοριών που θέλουμε να διαχειριστεί το πρόγραμμά μας. Για παράδειγμα στην δημιουργία ενός προγράμματος με τις βασικές αριθμητικές πράξεις, αρκεί να ορίσουμε τις αριθμητικές μας μεταβλητές σαν integer, για χρήση με μικρούς αριθμούς. Αν θελήσουμε να χρησιμοποιήσουμε μεγάλους αριθμούς, μετατρέπουμε τις μεταβλητές μας σε real. Αν θέλουμε το πρόγραμμα να επιλέγει ανάμεσα σε 2 δυνατές καταστάσεις, θα ορίσουμε στις Var μία boolean μεταβλητή ή μπορούμε να χρησιμοποιήσουμε και char μεταβλητές με καθορισμένες τιμές,(π.χ. ch=’Y’). Οι πιο συνηθισμένοι απλοί τύποι μεταβλητών, για εκείνους που ξεκινούν τον προγραμματισμό με την Pascal, είναι οι integer, real, boolean, και char. Η επιλογή των μεταβλητών είναι από τις σημαντικότερες δουλειές, στην δημιουργία του προγράμματος. Μπορεί να γίνει ευθύς εξ’ αρχής, αλλά και στην πορεία της συγγραφής του κώδικα. Όσο προκύπτουν καινούργιες ιδέες ή ανάγκες από το ίδιο το πρόγραμμα, τόσο περισσότερες καινούργιες μεταβλητές θα ορίζουμε στο τμήμα δηλώσεων μεταβλητών της αρχής. Η τεχνική της δήλωσης και της διαχείρισης των πληροφοριών που περιέχει κάθε μεταβλητή, είναι ο ίδιος ο προγραμματισμός, η κατάστρωση του κώδικα, μετά από τον αρχικό σχεδιασμό και την δομή του προγράμματος.
ΣΥΝΘΕΤΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ
46 5) String
Το string λέγεται και συμβολοσειρά. Περιέχει ένα σύνολο από μεταβλητές τύπου char. Για παράδειγμα, ένα string με όνομα name που περιλαμβάνει 20 χαρακτή-ρες,καταχωρείται στην μνήμη, με δήλωσή στις μεταβλητές του προγράμματος: Var name : string[20]; Η μεταβλητή αυτή μπορεί να χρησιμοποιηθεί για την καταχώρηση κάποιου ονόματος. Ο χώρος που καταλαμβάνει στην μνήμη εξαρτάται από τον αριθμό των χαρακτήρων που περιλαμβάνει το string. 6) Array
Το array, (πίνακας), αποτελείται από ένα οποιοδήποτε σύνολο ομοειδών μεταβλητών. Είναι ένας πίνακας στην μνήμη, με όλα τα στοιχεία που τον αποτελούν να είναι του ίδιου τύπου. Η δήλωση: Var dianysma : array [1..20] of integer; ορίζει στην μνήμη έναν μονοδιάστατο πίνακα με όνομα dianysma που αποτε-λείται από 20 ακέραιους αριθμούς. Πίνακες χρησιμοποιούμε συνήθως σε προ-γράμματα αρχειοθέτησης. Το μέγεθος στην μνήμη εξαρτάται από τον αριθμό των στοιχείων του. Οι πίνακες μπορούν να έχουν πολλές διαστάσεις στην Pascal, μπορούν να είναι δηλαδή πολυδιάστατοι. Ένα παράδειγμα δισδιάστατου πίνακα είναι το παρακάτω: Var disdiastatos : array [1..10] of array [1..20] of integer; disdiastatos : array [1..10,1..20] of integer; disdiastatos : array [1..10] [1..20] of integer;
ή ή
47
Οι εκφράσεις αυτές είναι ισοδύναμες και ορίζουν έναν πίνακα δύο διαστάσεων με 10 στοιχεία, εκ των οποίων κάθε ένα είναι ένας άλλος πίνακας με 20 ακεραίους αριθμούς.
ΘΕΜΕΛΙΩΔΗ ΣΤΟΙΧΕΙΑ ΤΗΣ PASCAL Στα βασικά σύμβολα της Pascal περιλαμβάνονται και τα παρακάτω: Τελεστές Σύγκρισης = <> > >= < <=
Τελεστής ισότητας, ”ίσο” Τελεστής για την έκφραση “διάφορο” Τελεστής “μεγαλύτερο” Τελεστής “μεγαλύτερο ή ίσο” Τελεστής ”μικρότερο” Τελεστής “μικρότερο ή ίσο”
Πρόταση Καταχώρησης :=
Τελεστής καταχώρησης τιμής σε μεταβλητή
Αριθμητικές Παραστάσεις + * / DIV MOD SHL SHR
Σύμβολο αλγεβρικής πρόσθεσης Σύμβολο αλγεβρικής αφαίρεσης Σύμβολο πολλαπλασιασμού Σύμβολο διαίρεσης Σύμβολο ακεραίας διαίρεσης Σύμβολο για το υπόλοιπο ακεραίας διαίρεσης Μετατόπιση προς τα αριστερά Μετατόπιση προς τα δεξιά
Σημείωση: Στα σύμβολα (+ , - ) σημειώνεται ο όρος αλγεβρική, γιατί υπάρχει και πρόσθεση σε συμβολοσειρές ή σε άλλα δομικά στοιχεία της Pascal.
48
Γενικά Σύμβολα { }
Σε αγκύλες γράφουμε συνήθως τα σχόλια του προγράμματος. Οτιδήποτε περιλαμβάνεται ανάμεσα σε αγκύλες αγνοείται από τον Compiler, στην μετάφραση του κώδικα σε γλώσσα μηχανής.
^ ( )
Το σύμβολο αυτό δεν υψώνει έναν αριθμό σε κάποια δύναμη. Καθορίζει τα περιεχόμενα, παραμέτρους των συναρτήσεων της Pascal. Ορισμός παραμέτρων σε μεταβλητή τύπου array. Διαχωρισμός των δεικτών ενός πίνακα, π.χ. array[1..20] of real;
[ ] ..
Λογικές Εκφράσεις and or xor Not
Το λογικό “καί”, (Σύνθεση Συνθηκών) Το λογικό “ή”,(Διάζευξη Συνθηκών) Το λογικό “αποκλειστικό ή”,(Αποκλειστική Διάζευξη Συνθηκών) Το λογικό “όχι”, (Άρνηση Συνθήκης)
ΣΥΝΑΡΤΗΣΕΙΣ ΤΗΣ PASCAL Write( ) - Writeln( ) Συναρτήσεις εξόδου,(στο τερματικό).Παρουσιάζει στην οθόνη μηνύματα προς τον χρήστη ή τα περιεχόμενα των μεταβλητών που έχει σαν ορίσματα. Όρισμα μίας συνάρτησης, ή παράμετρος, λέγεται κάθε παράσταση που περικλείεται μέσα στις παρενθέσεις και καθορίζει την λειτουργία της. Π.χ.: Η write (‘ Αυτό είναι ένα μύνημα στην οθόνη ‘) ; εμφανίζει τις λέξεις που βρίσκονται ανάμεσα στις αποστρόφους. Η write ( metavlhth1,metavlhth2) ; εμφανίζει στην οθόνη τα περιεχό-μενα των μεταβλητών με ονόματα metavlhth1 και metavlhth2. Η writeln() λειτουργεί με τον ίδιο τρόπο, με την μόνη διαφορά ότι μετά την εμφάνιση των περιεχομένων της μετακινεί τον δείκτη, κέρσορα, στην αρχή της επόμενης γραμμής.
49
Read( ) - Readln( ) Συναρτήσεις εισόδου,(από το πληκτρολόγιο).Η read καταχωρεί στις μεταβλητές που δέχεται σαν ορίσματα, τα δεδομένα που θα πληκτρολογήσουμε, γράμματα ή αριθμούς. Π.χ. Η read (metavlhth1, metavlith2, metavlhth3); καταχωρεί στις μεταβλητές τα αντίστοιχα δεδομένα που θα δώσει ο χρήστης του προγράμματος. Οι μεταβλητές βέβαια, πρέπει να είναι ορισμένες σωστά στην περιοχή Var, στην αρχή του προγράμματος, αλλιώς ο Compiler θα μας εμφανίσει το μύνημα:Error 3 : Un-known Identifier., στο σημείο μετάφρασης της read. Succ( ) (Successive - Διαδοχικός) Η συνάρτηση αυτή επιστρέφει την επόμενη τιμή της παραμέτρου που έχει. Επιστροφή δεδομένων από μία συνάρτηση λέμε την διαδικασία που εκτελεί κάθε συνάρτηση όταν τερματίσει την λειτουργία της. Σε εσωτερικό επίπεδο, κάθε συνάρτηση μόλις τελειώσει, καταχωρεί κάποια τιμή, κάποια δεδομένα στο πρόγραμμα και ανάλογα με αυτά συνεχίζεται η ροή του κώδικα. Π.χ. Η έκφραση name :=succ(‘B’); σημαίνει δύο πράγματα: α) Η succ(‘B’) επιστρέφει την αμέσως επόμενη τιμή του Β που είναι το C,και, β) Η τιμή αυτή καταχωρείται με τον τελεστή := στην μεταβλητή name. Eof( ) (End of File - Τέλος αρχείου) Τα περισσότερα αρχεία δεδομένων περιέχουν τον χαρακτήρα (^Z) στο τέλος τους. Η συνάρτηση ανιχνεύει τον χαρακτήρα (^Ζ), που υποδηλώνει το τέλος ενός αρχείου, και επιστρέφει αληθή η ψευδή τιμή. Eoln( ) (End of Line - Τέλος μίας γραμμής) Η συνάρτηση επιστρέφει αληθή ή ψευδή τιμή, ψάχνοντας τον χαρακτήρα που δείχνει την αλλαγή γραμμής σε αρχεία κειμένου.
ΕΝΤΟΛΕΣ ΤΗΣ PASCAL
50
Οι απλές εντολές είναι αυτές που αποτελούνται από μία λέξη, όπως η clrscr. Δεν έχουν παρενθέσεις και δεν δέχονται ορίσματα. Οι σύνθετες εντολές αποτε-λούνται από περισσότερες λέξεις και δεν δέχονται και αυτές παραμέτρους. Οι εκφράσεις που συναντάμε μέσα σε παρενθέσεις στις σύνθετες εντολές δεν είναι ορίσματα και λέγονται συνθήκες. Clrscr Σβήνει όλες τις πληροφορίες από την οθόνη και τοποθετεί τον δείκτη στην θέση (0,0),στην αρχή της. Η οθόνη, στους περισσότερους υπολογιστές, έχει 25 γραμμές και 80 στήλες. Η απαρίθμηση των γραμμών και των στηλών ξεκινά από την πάνω αριστερή γωνία της οθόνης, από την θέση (0,0).Ο πρώτος αριθμός δείχνει τον αριθμό γραμμής και ο δεύτερος τον αριθμό στήλης. Έτσι η πρώτη γραμμή έ-χει αριθμό 0 και η τελευταία έχει αριθμό 24,ενώ οι στήλες ξεκινάνε και αυτές από τον αριθμό 0 και τελειώνουν στον αριθμό 79. BEGIN … END Η πιο σημαντική σύνθετη εντολή. Με αυτή ξεκινά ένα πρόγραμμα και τελειώνει με το END. και την τελεία. Ενδιάμεσα από τις δύο φράσεις βρίσκεται ο κώδικας του προγράμματος. Η δομή BEGIN … END χρησιμοποιείται μέσα σε άλλες σύνθετες εντολές, αλλά και ανεξάρτητα σε ξεχωριστά κομμάτια του κώδικα. Μόνο το END που αντιστοιχεί στο αρχικό BEGIN πρέπει να έχει τελεία. Τα άλλαEND μπορεί να έχουν ερωτηματικό, μπορεί και να μην έχουν, ανάλογα την θέση τους μέσα στο πρόγραμμα. IF … THEN … ELSE Σύνθετη εντολή που περιλαμβάνει συνθήκες. Η χρήση της, στην γενική περί-πτωση,περιγράφεται από τα σχήματα: α) IF ( Συνθήκη ) THEN
51
BEGIN (Χωρίς την χρήση του ELSE, το πρόγραμμα (κώδικας) οδηγείται σε μία κατεύθυνση, αν εκπληρώEND; νεται η συνθήκη.) Παράδειγμα κώδικα: IF X>Y THEN BEGIN writeln ; writeln(‘ Ο αριθμός Χ είναι μεγαλύτερος του Υ‘) ; writeln ; END ; β) IF ( Συνθήκη ) THEN BEGIN (κώδικας) END ; ELSE BEGIN (κώδικας) END ;
(Με την χρήση του ELSE, το πρόγραμμα έχει δύο δυνατότητες, την κατεύθυνση THEN και την κατεύθυνση ELSE.)
Παράδειγμα κώδικα: IF X>Y THEN BEGIN writeln ; writeln(‘ Ο αριθμός Χ είναι μεγαλύτερος του Υ‘) ; writeln ;
52
END ; ELSE BEGIN writeln ; writeln(‘ Ο αριθμός Y είναι μεγαλύτερος του X‘) ; writeln ; END; Να σημειωθεί η χρήση του BEGIN … END μετά το THEN και μετά το ELSE, όταν περιλαμβάνουν πάνω από μία γραμμή κώδικα. FOR … TO … DO
και
FOR … DOWNTO … DO
Σύνθετη εντολή που περιλαμβάνει αριθμητικά όρια μεταξύ των λέξεων. Προσφέρει την ελεγχόμενη αριθμητικά, επανάληψη ενός τμήματος κώδικα, μίας συγκεκριμένης λειτουργίας του προγράμματος. FOR (Συνθήκη) TO (Όριο) DO BEGIN (κώδικας) END ; Παράδειγμα κώδικα: α) FOR I:=1 TO 10 DO BEGIN writeln ; writeln(‘ Το μύνημα αυτό εμφανίζεται 10 φορές. ‘) ; writeln ; END ; Η μεταβλητή Ι καθορίζει την αρχή της επανάληψης του κώδικα. Η τιμή της καταχωρείται αμέσως με την έναρξη του βρόγχου. Αυξάνεται κατά 1,κάθε φορά που επαναλαμβάνεται ο βρόγχος των γραμμών του προγράμματος. β) FOR I:=10 DOWNTO 5 DO BEGIN writeln ;
53
writeln(‘ Το μύνημα αυτό εμφανίζεται 5 φορές. ‘) ; writeln ; END; Η μεταβλητή Ι καθορίζει την αρχή της επανάληψης του κώδικα. Εδώ μειώνεται κατά 1,κάθε φορά που επαναλαμβάνεται ο βρόγχος των γραμμών του προγράμματος. Να σημειωθεί και εδώ η χρήση του BEGIN … END μετά το DO, όταν περιλαμβάνουν πάνω από μία γραμμή κώδικα. CASE … OF Η εντολή αυτή μας δίνει την δυνατότητα να διαλέξουμε ανάμεσα σε έναν αριθμό επιλογών, που εμείς καθορίζουμε. Αν δεν είναι σωστή η συνθήκη εκτελείται ο κώδικας μετά το else. Κάθε εντολή CASE τελειώνει με το end, ενώ το else είναι προαιρετικό. CASE ( Συνθήκη) OF Τιμές - 1 : (κώδικας) Τιμές - 2 : (κώδικας) Τιμές - 3 : (κώδικας) Τιμές - n : (κώδικας) else
(κώδικας)
END; Παράδειγμα κώδικα: CASE month OF Dec…Feb : writeln(‘ This is Winter’) ; Mar…May : writeln(‘ This is Spring’) ; Jun…Aug : writeln(‘ This is Summer’) ;
54
Sep…Nov : writeln(‘ This is Autumn’) ; else
writeln(‘ There is no month with this name. Try again…’) ;
END ; WHILE … DO Η εντολή αυτή επαναλαμβάνει ένα κομμάτι του κώδικα, καθόσον ικανοποιείται η συνθήκη που υπάρχει μετά το while. Για να ακολουθήσει το πρόγραμμα την ροή του κώδικα μετά το while, πρέπει να ισχύει η συνθήκη. Αν δεν ισχύει, ο βρόγχος δεν εκτελείται καμία φορά. WHILE (Συνθήκη) DO BEGIN (κώδικας) END ; Παράδειγμα κώδικα: WHILE ch=’Y’ DO BEGIN writeln ; writeln(‘ Επανάληψη του κώδικα. Πατήστε ‘Ν’ για τερματισμό…’) ; writeln ; END ; REPEAT … UNTIL Η εντολή αυτή πραγματοποιεί τον έλεγχο της συνθήκης, που βρίσκεται μετά το until, την πρώτη φορά μετά την εκτέλεση του βρόγχου. Αυτή είναι και η διαφορά της με την while … do που ελέγχει την συνθήκη πριν εκτελεστεί ο βρόνχος. Η γενική της μορφή είναι: REPEAT
55
(κώδικας) UNTIL (Συνθήκη) ; Παράδειγμα κώδικα: REPEAT writeln ; writeln(‘ Για να τερματίσετε το πρόγραμμα πατήστε N … ’) ; writeln ; UNTIL ch=’N’ ; Ας σημειωθεί ότι αυτή η εντολή δεν χρησιμοποιεί την BEGIN … END για να λειτουργήσει.
α
56
ΑΠΛΟΙ ΑΛΓΟΡΙΘΜΟΙ
57
AΛΓΟΡΙΘΜΟΣ Ένας ηλεκτρονικός υπολογιστής χρησιμοποιείται για την εισαγωγή, επεξεργασία και εξαγωγή δεδομένων. Οι αρχικές εργασίες για την επίλυση ενός προβλήματος με τον ηλεκτρονικό υπολογιστή, είναι η παράσταση των δεδομένων,(στη μνήμη),και η δημιουργία ενός αλγορίθμου, δηλαδή, τα βήματα που περιγράφουν την επεξεργασία των δεδομένων. Οι δυο αυτές εργασίες είναι συνδεδεμένες μεταξύ τους, γιατί διαφορετικοί τρόποι παράστασης των δεδομένων στη μνήμη ενός υπολογιστή παράγουν διαφορετικούς αλγόριθμους. Για να τονιστεί αυτή η εξάρτηση των αλγορίθμων, από την παράσταση των δεδομένων, έχουμε διατυπώσει την εξίσωση: Αλγόριθμοι + Παράσταση δεδομένων = Προγράμματα Στη συνέχεια παρουσιάζονται μερικοί βασικοί κανόνες που βοηθούν στην επί-λυση των προβλημάτων. 1. Πλήρης κατανόηση του προβλήματος. 2. Προσδιορισμός δεδομένων και των ποσοτήτων που θα υπολογιστούν, (αποτελέσματα). 3. Προσδιορισμός των μεταβλητών που θα χρησιμοποιηθούν, είτε σαν δεδομένα, είτε σαν αποτελέσματα,(δημιουργία ενός πίνακα με τα ονόματα των μεταβλητών αυτών). 4. Σωστή διατύπωση του προβλήματος και εξασφάλιση ικανών δεδομένων για την λύση του. 5. Διατύπωση των απαιτούμενων βημάτων, για την παραγωγή του επιθυμητού αποτελέσματος, με την επεξεργασία των δεδομένων,(πρώτη φάση σχηματισμού αλγορίθμου).
58
6. Σχηματισμός του αλγορίθμου, μέχρις ότου να είναι δυνατόν να υλοποιηθεί, με μία γλώσσα προγραμματισμού. 7. Ορισμός των καινούργιων μεταβλητών, που ίσως να μας χρειάζονται στο πρόγραμμα. 8. Μετατροπή του αλγόριθμου σε πρόγραμμα. Τα βήματα 5,6 και 7 είναι το πιο δημιουργικό μέρος της όλης διαδικασίας. Η βασική ιδέα είναι στο σημείο αυτό, ο διαχωρισμός του προβλήματος σε άλλα επιμέρους (υπο)προβλήματα. Στη συνέχεια κάθε υποπρόβλημα χωρίζεται και αυτό με τη σειρά του μέχρις ότου,(κάθε υποπρόβλημα), να μπορεί να εκφρασθεί με μία γλώσσα προγραμματισμού. Η μεθοδολογία αυτή καλείται top-down,σε αντίθεση με την bottom-up,κατά την οποία επι-λύονται διάφορα μέρη του προβλήματος κατευθείαν σε μία γλώσσα προγραμματισμού, και στη συνέχεια ενώνονται τα προγράμματα αυτά προκειμένου να αποτελέσουν το κύριο πρόγραμμα. Η τεχνική, την οποία θα ακολουθήσουμε, για την επίλυση των διαφόρων προβλημάτων είναι η top-down.
ΕΝΑ ΠΡΟΓΡΑΜΜΑ ΜΕ ΑΡΙΘΜΗΤΙΚΑ ΔΕΔΟΜΕΝΑ Στη συνέχεια παρουσιάζονται διάφορα προβλήματα, οι αντίστοιχοι αλγόριθμοι και η μετατροπή τους σε προγράμματα Pascal. ΠΡΟΒΛΗΜΑ 1: Γράψτε ένα πρόγραμμα σε Pascal,που να υπολογίζει και να τυπώνει το άθροισμα και τη μέση τιμή τριών αριθμών. α) Σχηματίζουμε τον Πίνακα δεδομένων : Πίνακας δεδομένων Δεδομένα αποτελεσμάτων Ο πρώτος αριθμός Ο δεύτερος αριθμός
Μεταβλητές Προγράμματος Μεταβλητές Χ1 Χ2
SUM : Άθροισμα τριών αριθμών
59
Ο τρίτος
αριθμός
Χ3
ΑVERAGE: Μέση τιμή τριών αριθμών
β) Δίνουμε την πρώτη μορφή του αλγόριθμου που λύνει το πρόβλημα: Αλγόριθμος (Πρώτη μορφή) Βήμα 1. Διάβασε από το πληκτρολόγιο τις τιμές των μεταβλητών Χ1, Χ2 ,Χ3. Εμφάνισε στην οθόνη τις τιμές των μεταβλητών που καταχωρήθηκαν. Βήμα 2. Υπολόγισε το άθροισμα των Χ1, Χ2 και Χ3 και καταχώρησε το αποτέλεσμα στη μεταβλητή SUM. Βήμα 3. Υπολόγισε την μέση τιμή των Χ1, Χ2 ,Χ3 και καταχώρησε το αποτέλεσμα στη μεταβλητή AVERAGE. Βήμα 4. Εμφάνισε στην οθόνη τις τιμές των μεταβλητών SUM και AVERAGE. Παρατηρούμε ότι το βήμα 3 του αλγόριθμου χρειάζεται περισσότερη ανάλυση. Ανάλυση του βήματος 3 Βήμα 3.1. Διαίρεση της μεταβλητής SUM με το πλήθος των αριθμών που προστέθηκαν,( SUM/3 ). Στη φάση αυτή ο αλγόριθμος έχει αναλυθεί σωστά, ώστε να είναι δυνατή η μετάφρασή του στη γλώσσα προγραμματισμού Pascal. Στο πρόγραμμα γράφουμε πρώτα τις μεταβλητές του Πίνακα δεδομένων, στο τμήμα των δηλώσεων των μεταβλητών,(Var). Στη συνέχεια, μετά το πρώτο BEGIN, γράφουμε τον κώδικα του κυρίως προγράμματος, που είναι η μετάφραση κάθε βήματος του αλγόριθμου στο συντακτικό της Pascal. PROGRAM MESHTIMH; USES CRT ;
60
VAR X1,X2,X3,SUM,AVERAGE : REAL ; BEGIN CLRSCR ; WRITELN ; READ (X1,X2,X3) ; WRITELN ; WRITELN ( ‘X1=‘, X1:8:4, ‘X2=‘, X2:8:4, ‘X3=‘, X3:8:4) ; SUM:=X1+X2+X3; ÁVERAGE:=SUM/3; WRITELN ; WRITELN ( ‘ SUM= ‘, SUM:8:4, ‘ AVERAGE =‘ , AVERAGE:8:4) ; WRITELN ; READLN END. Ξεκινώ με την δήλωση των μεταβλητών. Όλοι οι αριθμοί ορίζονται real, πραγματικοί, για να μπορώ να χρησιμοποιώ και μεγάλους αριθμούς, οποιασδήποτε μορφής. Στο πρόγραμμα αυτό δηλώνω την βοηθητική μονάδα κώδικα crt, για να λειτουργήσει η εντολή clrscr. Αφήνω μία κενή γραμμή, αρκετά συχνά, με την writeln, (χωρίς όρισμα),για να έχω ευκρίνεια στην οθόνη, παρακολουθώντας την ροή του προγράμματος. Εισαγάγω τα δεδομένα με την read και τα εμφανίζω στην οθόνη με την writeln και τα ονόματα των μεταβλητών. Επειδή οι αριθμοί είναι πραγματικοί, ορίζω τον συνολικό αριθμό των ψηφίων και το δεκαδικό τους μέρος, με τους αριθμούς που συνοδεύουν το όνομα κάθε αριθμού, π.χ. Χ1:8:4,σημαίνει 8 συνολικά ψηφία στη μεταβλητή Χ1,εκ των οποίων τα 4 είναι δεκαδικά. Επεξεργάζομαι τα δεδομένα με τις μεταβλητές SUM και AVERAGE και τα εμφανίζω στην οθόνη, πάλι με μία εντολή writeln. Η εντολή readln;,(χωρίς όρισμα),που χρησιμοποιείται πριν το END., προκαλεί την διακοπή της ροής του προγράμματος, για να μπορώ να δω τα αποτελέσματα στην οθόνη.
61
ΠΡΟΒΛΗΜΑ 2: Να γραφεί ένα πρόγραμμα σε Pascal,που να διαβάζει ένα αριθμό από το πληκτρολόγιο. Ο αριθμός να διπλασιάζεται και να εμφανίζεται στη οθόνη. Ο διπλασιασμός του αριθμού να επαναλαμβάνεται συνολικά είκοσι φορές. Π.χ. Αν δοθεί ο αριθμός 2,να εμφανιστούν στην οθόνη οι αριθμοί 2-4-8… κ.λ.π. PROGRAM DOUBLE; Uses crt; VAR num1 : real ; Ι : integer ; BEGIN clrscr; writeln ( ‘ This program doubles a number for 20 times.‘ ) ; writeln ( ‘ ----------- start typing the number ------------‘ ) ; readln (num1) ; writeln (num1) ; WHILE Ι <= 20 DO BEGIN num1 : = 2 * num1; i:=i+1; writeln (num1) ; END ; readln
62
END. Ακολουθείται η ίδια τεχνική με το προηγούμενο πρόγραμμα. Το καινούργιο δεδομένο, είναι η χρήση της σύνθετης εντολής While … Do, που δίνει την δυνατότητα να επαναληφθεί ο διπλασιασμός του αριθμού για 20 φορές. Στις μεταβλητές ορίζω τον αριθμό που θα διπλασιάζω πραγματικό,real, και τον αριθμό των επαναλήψεων ακέραιο,integer. Ο αριθμός αυτός δηλώνεται πάντα σαν ακέραιος στην αρχή του προγράμματος. Η χρήση της εντολής clrscr είναι όμοια, όπως και οι συναρτήσεις writeln και readln χωρίς ορίσματα. ΠΡΟΒΛΗΜΑ 3: Να γραφεί ένα πρόγραμμα σε Pascal, που να διαβάζει δύο αριθμούς από το πληκτρολόγιο. Οι αριθμοί να πολλαπλασιάζονται και να εμφανίζεται το απότέλεσμα στην οθόνη. Το πρόγραμμα να επαναλαμβάνεται, μέχρι ο χρήστης να πατήσει τον χαρακτήρα ‘Ν’. PROGRAM GINOMENO1; uses crt; VAR a,b,ginomeno : integer ; ans : char ; BEGIN clrscr ; REPEAΤ writeln ; writeln ( ‘ Εnter two integer numbers : ‘ ) ; readln (a,b) ; ginomeno := a * b ;
63
writeln ; writeln( ‘ The ginomeno is : ’, ginomeno) ; writeln ; writeln ; writeln ; readln(ans) ; UNTIL ans = ‘ N ‘ ; readln END. Στο πρόγραμμα αυτό θα εισαγάγουμε 2 αριθμούς και θα τους πολλαπλασιάσουμε με το σύμβολο * , καταχωρώντας την τιμή του γινομένου σε μία καινούργια μεταβλητή. Ο κώδικας ανάμεσα στην REPEAT … UNTIL θα εκτελεστεί τουλάχιστον μία φορά, και κατόπιν θα ερωτηθεί ο χρήστης αν θέλει επανάληψη της διαδικασίας. Το πρόγραμμα τερματίζει με το πλήκτρο ‘Ν’. ΠΡΟΒΛΗΜΑ 4: Να γραφεί ένα πρόγραμμα σε Pascal,που να διαβάζει ένα όνομα από το πληκτρολόγιο. Στη συνέχεια να εμφανίζεται το όνομα στην οθόνη 10 φορές. Μετά να περιμένει από τον χρήστη να πληκτρολογήσει την απάντηση για να συνεχίσει ή όχι την διαδικασία του προγράμματος. { Σχόλια του προγράμματος } PROGRAM EPANALYPSH ; uses crt ; VAR name : string [20] ; { Μεταβλητή 20 char για την καταχώρηση του ονόματος } I : integer ; { Μετρητής επανάληψης του βρόγχου }
64
ans : char ;
{ Μεταβλητή επιβεβαίωσης επανάληψης - Υ/Ν }
BEGIN clrscr ; writeln ; ans := ‘Y’ ; { Αρχικοποίηση της μεταβλητής ans για να εκτελεστεί η WHILE } WHILE ans = ‘Y’ DO BEGIN writeln ; writeln (‘ Write a name to repeat it on the screen 10 times … ‘ ) ; writeln ; readln(name) ; I := 1 ; { Αρχικοποίηση της μεταβλητής I για να εκτελεστεί η WHILE } WHILE I <= 10 DO BEGIN writeln(name) ; { Εμφάνιση του ονόματος 10 φορές } I := I + 1 { Αύξηση του μετρητή } END; writeln ; writeln ( ‘ Do you want to continue; Y/N ‘ ) ; readln (ans) ; END; readln ; END.
65
ΠΡΟΒΛΗΜΑ 5: Να γραφεί ένα πρόγραμμα σε Pascal,που να διαβάζει ένα αριθμό από το πληκτρολόγιο μεταξύ 1 και 10.Να κάνει έλεγχο αν ο αριθμός που πληκτρολογήθηκε έχει άλλη τιμή και, σε αυτή την περίπτωση να εμφανίζει ένα μήνυμα λάθους. PROGRAM CHOICE ; uses crt; VAR Number : Integer ; Okay : Boolean ; BEGIN clrscr ; writeln ; writeln ( ‘ Enter a number between 1 and 10… ’ ) ; writeln ; REPEAT readln( Number ) ; Okay := ( 1 <= Number ) AND ( Number <= 10 ) ; IF NOT Okay THEN writeln( ‘ Incorrect number. Please try again ... ’ ) UNTIL Okay ; writeln( ‘Okay’ ) END.
66
Στο παραπάνω πρόγραμμα πρέπει να πληκτρολογηθεί ένας αριθμός από το 1 μέχρι το 10. Αν δοθεί άλλη τιμή, το πρόγραμμα εμφανίζει μήνυμα λάθους. Ο έλεγχος για τον αριθμό γίνεται με μία boolean μεταβλητή, που παίρνει τιμές true και false.Η IF εντολή ελέγχει την boolean μεταβλητή και αν είναι false τότε εμφανίζει το μήνυμα λάθους. Η εντολή Okay := (1<=Number) AND (Number <=10) ελέγχει αν ο αριθμός εί-ναι ακριβώς μεταξύ 1 και 10,οπότε επιστρέφει true.Το αποτέλεσμα καταχωρεί-ται στην boolean μεταβλητή. Άλλος τρόπος χρήσης της IF είναι ως εξής : IF
( 1 < = number ) AND ( Number < = 10 ) THEN Okay := true ELSE Okay := FALSE ;
ΠΡΟΒΛΗΜΑ 6: Να γραφεί ένα πρόγραμμα σε Pascal,που να διαβάζει μία χρονολογία από το πληκτρολόγιο. Να υπολογίζει αν το έτος αυτό είναι δίσεκτο ή όχι, και να εμφανίζει το αποτέλεσμα στην οθόνη. Να τερματίζει με την είσοδο του αριθμού 0 από το πληκτρολόγιο. PROGRAM LEAPYEAR; uses crt; VAR LeapYear : Boolean ; Year : Integer ; BEGIN clrscr ; REPEAT writeln ; writeln( ‘Give a Year you wish…or 0 to quit the program… ‘ ) ; readln( Year ) ;
67
IF Year > 0 THEN BEGIN IF Year MOD 100 = 0 THEN LeapYear := ( Year MOD 400 ) = 0 ELSE LeapYear := ( Year MOD 4 ) = 0 ; IF LeapYear THEN writeln( Year, ‘ This is a leap year. ‘ ) ELSE writeln( Year, ‘ This is not a leap year. ’ ) END UNTIL Year = 0 END. Στο παραπάνω πρόγραμμα έχουμε ΙF το ένα μέσα στο άλλο. Αυτά τα IF λέγονται φωλιασμένα,( nested ). Oι εντολές μέσα στα IF ελέγχουν αν τα έτη είναι δίσεκτα, (διαιρώντας τον αριθμό που δίνουμε με το 4). Για την ακρίβεια ελέγχουν το υπόλοιπο της διαίρεσης του αριθμού με το 4. Επίσης ελέγχουν και τους αιώνες, όπως το 1900 και 2000, που είναι δίσεκτοι μόνο αν διαιρούνται ακριβώς με το 400.Γι’ αυτό το 1900 δεν είναι δίσεκτο, ενώ το 2000 είναι. Η MOD είναι μία συνάρτηση η οποία επιστρέφει το υπόλοιπο από μία διαίρεση ακέραιων αριθμών, π.χ. 15 ΜOD 10 δίνει αποτέλεσμα 5. Αν ο χρόνος διαιρείται ακριβώς με το 100 τότε είναι αιώνας, και αν διαιρείται και με το 400,η μεταβλητή LeapΥear γίνεται αληθής. Διαφορετικά η LeapYear γίνεται αληθής αν ο χρόνος διαιρείται ακριβώς με το 4.Μία άλλη IF εντολή, ελέγχει το αποτέλεσμα της μεταβλητής Leapyear και τυπώνει ένα μήνυμα στη οθόνη. Όλες αυτές οι ενέργειες γίνονται μέσα σ’ ένα REPEAT-UNTIL για να επαναλαμβάνεται το πρόγραμμα μέχρι να δοθεί η τιμή 0. Η IF - THEN - ELSE είναι μία εντολή και γι ‘αυτό το ερωτηματικό (;) στο τέλος του IF την ξεχωρίζει από άλλη εντολή. Οι φωλιασμένες IF δέχονται ερωτηματικό στο τέλος του κώδικα μετά το ELSE για να ξεχωρίζουν μεταξύ τους. ΠΡΟΒΛΗΜΑ 7: Γράψτε ένα πρόγραμμα σε Pascal που να διαβάζει την χρονική περίοδο που ένα βιβλίο έχει δανεισθεί από μία βιβλιοθήκη. Να τυπώνει αν είναι
68
εμπρόθεσμο ή εκπρόθεσμο, και αν είναι εκπρόθεσμο να καθορίζει κάποιο πρόστιμο. Θεωρούμε ότι το βιβλίο είναι εκπρόθεσμο αν το έχουν δανεισθεί περισσότερο από 14 ημέρες, και πρέπει να πληρωθεί κάποιο πρόστιμο αν είναι δανεισμένο πάνω από 21 ημέρες. Μεταβλητές EGYRO : Η τιμή της μεταβλητής είναι true αν 0 ημέρες δανεισμού 100 EKPROTHESMO : Η τιμή της είναι true αν οι ημέρες δανείου > 14 και 100 PROSTIMO : Η τιμή της είναι τrue αν οι ημέρες δανείου > 21 και 100 Αλγόριθμος Βήμα 1. Καταχώρησε τις ημέρες δανεισμού στη μεταβλητή HMERES. Βήμα 2. Όρισε μια λογική μεταβλητή EGYRO που να έχει τιμή TRUE,αν οι ημέρες είναι μέσα στα όρια,(δηλαδή αν 0 ΗΜΕRES 100. Βήμα 3. Όρισε μια μεταβλητή EKPROTHESMO που να έχει τη τιμή TRUE, αν η EGYRO είναι TRUE και οι HMERES>14. Βήμα 4. Όρισε μια μεταβλητή PROSTIMO που να έχει τη τιμή TRUE, αν η EGYRO είναι TRUE και HMERES >21. Βήμα 5. Εκτύπωση στην οθόνη τις μεταβλητές HMERES, EGYRO, EKPROTHESMO και PROSTIMO. PROGRAM DANISMOS ; USES CRT; VAR HMERES : INTEGER ; EGYRO, EKPROTHESMO, PROSTIMO : BOOLEAN; BEGIN CLRSCR ; WRITELN ; READ (HMERES) ; EGYRO :=(HMERES > =0) AND (HMERES < =100);
69
EKPROTHESMO:=EGYRO AND (HMERES > 14) ; PROSTIMO:=EGYRO AND (HMERES >21) ; WRITELN ( ‘ ΧΡΟΝΟΣ ΔΑΝΕΙΣΜΟΥ : ‘, ΗΜΕΡΕS) ; WRITELN ( ‘ EΓΚΥΡΗ ΗΜΕΡΟΜΗΝΙΑ :’, EGYRO); WRITELN ( ‘ ΕΚΠΡΟΘΕΣΜΟ : ’, EKPROTHESMO); WRITELN ( ‘ ΠΡΟΣΤΙΜΟ : ’, PROSTIMO) READLN; END. Να γραφεί ένα πρόγραμμα σε Pascal που να διαβάζει ένα χαρακτήρα από το πληκτρολόγιο, να ελέγχει αν ο χαρακτήρας είναι φωνήεν και να τυπώνει τα αποτελέσματα στην οθόνη. Μεταβλητές Ο χαρακτήρας που διαβάζεται από το πληκτρολόγιο. (Μεταβλητή δεδομένων) ΡΗΟΝΗΕΝ : λογική (boolean) μεταβλητή. (Μεταβλητή προγράμματος) Αλγόριθμος Βήμα 1. Καταχώρησε τον χαρακτήρα στη μεταβλητή XARAKTHRAS. Βήμα 2. Εξέτασε αν η τιμή της XARAKTHRAS είναι φωνήεν. Βήμα 3. Τύπωσε τη μεταβλητή XARAKTHRAS και κάποιο μήνυμα στην οθόνη. PROGRAM PHONHEN; USES CRT ; VAR XARAKTHRAS : CHAR ;
70
PHONHEN : BOOLEAN ; BEGIN CLRSCR ; READ (XARAKTHRAS) ; PHONHEN := (XARAKTHRAS = ‘A’) OR (XARAKTHRAS = ‘E’) OR (XARAKTHRAS = ‘I’ ) OR (XARAKTHRAS = ‘O’) OR (XARAKTHRAS = ‘U’) ; WRITELN ; WRITELN ( ‘ Διάβασε το χαρακτήρα : ‘ , XARAKTHRAS) ; WRITELN ( ‘ Ο χαρακτήρας είναι φωνήεν :’ , PHONHEN) ; READLN ; END.
Η ΕΝΤΟΛΗ GOTO H GOTO εντολή χρησιμοποιείται για την άμεση μεταφορά του ελέγχου από την τρέχουσα θέση, σε μία άλλη εντολή του προγράμματος. Η γενική μορφή της GOTO εντολής είναι : GOTO
ετικέτα ; ( Label )
όπου GOTO είναι μία δεσμευμένη λέξη και ετικέτα είναι ένας ακέραιος αριθμός χωρίς πρόσημο από το διάστημα 1 έως 9999. Η εκτέλεση της GOTO εντολής έχει σαν αποτέλεσμα την άμεση μεταφορά του ελέγχου του προγράμματος, σε εκείνη την εντολή που έχει ετικέτα αυτή που εμφανίζεται στην GOTO.Αν και είναι δυνατόν να υπάρχουν διάφορες GOTO εντολές με την ίδια ετικέτα, θα πρέπει να υπάρχει μία μόνο εντολή που να αντιστοιχεί στην ετικέτα αυτή. Είναι γεγονός ότι η GOTO εντολή αποτελεί την ‘εύκολη’ λύση για τη μεταφορά της εκτέλεσης του
71
προγράμματος σε κάποιο επιθυμητό σημείο. Η συχνή όπως χρησιμοποίησή της είναι ένα δείγμα κακού προγραμματισμού, γιατί καθιστά δύσκολη την παρακολούθηση της ροής του προγράμματος και την εξάλειψη των λογικών σφαλμάτων. Έτσι η χρήση της GOTO εντολής θα πρέπει να αποφεύγεται ιδιαίτερα σε μια γλώσσα σαν την PASCAL που είναι τόσο πλούσια σε δομές. Έστω το παρακάτω κομμάτι προγράμματος : Ζ := 0 ; IF Y > = 0 THEN GOTO 10 ; Z :=Z+1 ; 10 :Z :=Z+2; X :=Z ; Σε απλούστερη μορφή χωρίς την GOTO εντολή έχουμε : Ζ := 0 ; IF Y<0 Z :=Z + 2 ; X :=Z ;
THEN
Z :=Z + 1 ;
Η ΕΝΤΟΛΗ CASE Με την εντολή CASE έχουμε τη δυνατότητα να επιλέξουμε, από ένα σύνολο εντολών, μία για εκτέλεση. Η γενική μορφή της εντολής αυτής είναι : CASE ( παράσταση ) OF λίστα τιμών1 : εντολή1 : λίστα τιμών2 : εντολή2 : | | | λίστα τιμώνn : εντολήn END ;
72
όπου CASE και OF είναι δεσμευμένες λέξεις. Η ( παράσταση ) ονομάζεται ‘επιλογέας’ (selector) και μπορεί να είναι οποιουδήποτε τύπου εκτός από REAL, δηλαδή INTEGER, BOOLEAN, CHAR ή κάποιου άλλου τύπου. Η λίστα τιμών είναι μία λίστα μιας ή περισσοτέρων πιθανών τιμών του επιλογέα ,που χωρίζονται με κόμματα. Η CASE λειτουργεί ως εξής: Πρώτα υπολογίζεται η τιμή του επιλογέα και συγκρίνεται με κάθε μία λίστα τιμών. Αν η τιμή του επιλογέα βρίσκεται στη λίστα τιμών, τότε εκτελείται η εντολή που βρίσκεται δεξιά της λίστας. Μετά ο έλεγχος του προγράμματος μεταφέρεται στην πρώτη εντολή μετά το END της CASE. Αν η τιμή του επιλογέα δεν βρίσκεται σε καμία λίστα τιμών, τότε σταματά η εκτέλεση του προγράμματος. Για αυτό θα πρέπει πάντα να μεριμνούμε να συμπεριλαμβάνουμε στις λίστες τιμών, όλες τις δυνατές τιμές του επιλογέα. Επίσης ιδιαίτερη προσοχή χρειάζεται, έτσι ώστε μία τιμή του επιλογέα να μην εμφανίζεται σε περισσότερες από μία λίστα τιμών. Αν δεν θέλουμε να εκτελεστεί καμία εντολή για μία συγκεκριμένη τιμή ή τιμές του επιλογέα, (δηλαδή για την τιμή ή τις τιμές αυτές θέλουμε απλά να συνεχιστεί η εκτέλεση της πρώτης εντολής μετά το END), τότε τοποθετούμε το ; αμέσως μετά το σύμβολο :. Ας σημειωθεί ότι το ΕND στην CASE εντολή δεν αντιστοιχεί σε BEGIN. ΠΡΟΒΛΗΜΑ 10: Ας υποθέσουμε ότι οι ημέρες της εβδομάδας Δευτέρα έως Κυριακή αντιστοιχούν στους αριθμούς 1 έως 7. Γράψτε ένα πρόγραμμα Pascal που να διαβάζει ένα ακέραιο αριθμό και να τυπώνει το όνομα της αντίστοιχης ημέρας. PROGRAM HMERES ; USES CRT ; VAR ARITHMOS : INTEGER ; EPILOGEAS : BOOLEAN ; BEGIN
73
CLRSCR ; READ (ARITHMOS) ; WRITELN ( ‘ ΑΡΙΘΜΟΣ=‘ , ARITHMOS) ; WRITELN ; EPILOGEAS;=( 1 < = ARITHMOS) AND (ARITHMOS < = 7) ; IF EPILOGEAS THEN CASE ARITHMOS OF 1 : WRITELN ( ‘ ΔΕΥΤΕΡΑ ‘ ) ; 2 : WRITELN ( ‘ TPITH ‘ ) ; 3 : WRITELN ( ‘ TETAPTH ‘ ) ; 4 : WRITELN ( ‘ ΠΕΜΠΤΗ ‘ ) ; 5 : WRITELN ( ‘ ΠΑΡΑΣΚΕΥΗ ‘ ) ; 6 : WRITELN ( ‘ ΣΑΒΒΑΤΟ ‘ ) ; 7 : WRITELN ( ‘ ΚΥΡΙΑΚΗ ‘ ); END (*OF CASE*) ELSE WRITELN ( ‘ ΑΚΥΡΟΣ ΕΠΙΛΟΓΕΑΣ ‘ ) ; READLN; ΕND. Η παρατήρηση εδώ είναι ότι πριν από την εκτέλεση της CASE εντολής, εξετάζεται αν η τιμή του επιλογέα βρίσκεται σε μία από τις λίστες τιμών της εντολής, έτσι ώστε να αποφευχθεί το σταμάτημα της εκτέλεσης του προγράμματος. ΠΡΟΒΛΗΜΑ 11:
74
Ένας σπουδαστής απαντά σε μία ερώτηση πολλαπλής επιλογής. Η (α) απάντηση αυξάνει τον βαθμό του κατά 1 μονάδα, η (β) κατά 6 μονάδες, η (γ) δεν αυξάνει τον βαθμό του, ενώ η (δ) τον αυξάνει κατά 10 μονάδες. Γράψετε ένα πρόγραμμα Pascal που να τυπώνει την απάντηση και το βαθμό του σπουδαστή. PROGRAM BATHMOS ; USES CRT; VAR APANTHSH : CHAR; BATHMOS : INTEGER ; EPILOGEAS : BOOLEAN ; BEGIN CLRSCR ; WRITELN ; READ (APANTHSH) ; WRITELN ( ‘ΑΠΑΝΤΗΣΗ=‘ , APANTHSH) ; IF ( ‘A’ < = APANTHSH ) AND ( APANTHSH < = ‘D’ ) THEN EPILOGEAS := TRUE ELSE EPILOGEAS := FALSE ; BATHMOS:=0 ; IF EPILOGEAS THEN CASE APANTHSH OF ‘A’ : BATHMOS:=BATHMOS+1 ; ‘B’ : BATHMOS:=BATHMOS+6 ; ‘C’ : ‘D’ : BATHMOS:=BATHMOS+10
75
END ELSE WRITELN ( ‘ ΛΑΘΟΣ ΑΠΑΝΤΗΣΗ‘ ) ; WRITELN ( ‘ ΒΑΘΜΟΣ=‘, BATHMOS:5) ; READLN ; END.
ΠΡΟΒΛΗΜΑ 13: Γράψτε ένα πρόγραμμα σε Pascal που να υπολογίζει και να τυπώνει στο τέλος κάθε χρόνου, τον τόκο ενός κεφαλαίου για ένα συγκεκριμένο αριθμό ετών και με γνωστό επιτόκιο. PROGRAM EPENDYSH ; USES CRT; VAR EPITOKIO, KEFALAIO, TOKOS, AXIAKEF : REAL; PERIODOS, XRONOS : INTEGER ; BEGIN
76
CLRSCR; WRITELN ; READ (KEFALAIO, PERIODOS, EPITOKIO) ; WRITELN ( ‘ ΠΕΡΙΟΔΟΣ=‘, PERIODOS : 3,‘ ΕΠΙΤΟΚΙΟ=‘ , EPITOKIO :2:4,‘ ΚΕΦΑΛΑΙΟ=‘ , KEFALAIO : 10 : 2) ; AXIAKEF:=KEFALAIO ; WRITELN ( ‘ ΑΡΧΙΚΗ ΑΞΙΑ ΚΕΦΑΛΑΙΟΥ=‘ , AXIAKEF:10:2) ; WRITELN ; WRITELN ( ΧΡΟΝΟΣ ΤΟΚΟΣ ΑΞΙΑ ) ; FOR XRONOS :=1 TO PERIODOS DO BEGIN TOKOS:=AXIAKEF * EPITOKIO ; AXIAKEF:=AXIAKEF + TOKOS ; WRITELN (XRONOS:3, TOKOS:10:2,AXIAKEF:10:2) END; READL N; END. ΕΠΙΛΟΓΟΣ Εδώ τελειώνει η πρώτη περιήγηση στον κόσμο του προγραμματισμού και της Pascal ειδικότερα. Είδαμε στην ιστορία των Η/Υ, το ξεκίνημα των πρώτων επιστημόνων και τις προσπάθειες που κατέβαλαν για να αξιοποιήσουν την τεχνολογία προς όφελος της γνώσης. Οι δυσκολίες που αντιμετώπιζαν ήταν πέρα από κάθε περιγραφή, αφού, όσο προχωράμε προς το παρελθόν, λιγοστεύουν τα μέσα αλλά και η γνώση. Σήμερα ο προγραμματισμός έχει απλουστευθεί σε τέτοιο βαθμό, ώστε να ασχολούνται διεξοδικά μαζί του ακόμη και μαθητές Γυμνασίου και Λυκείου. Οι γνώσεις που προαπαιτούνται είναι πια ελάχιστες, όσον αφορά τα Μαθηματικά,
77
την Φυσική ή ακόμα και την ίδια την Πληροφορική. Τα καινούργια προγράμματα ανάπτυξης εφαρμογών, οι τελευταίες εκδόσεις των πιο σύγχρονων γλωσσών προγραμματισμού, κάνουν τον νέο προγραμματιστή τόσο πλήρη, από πλευράς δυνατοτήτων που μπορεί να δημιουργήσει μόνος του οποιαδήποτε εφαρμογή. Η δύναμη που κρατά ο γνώστης των τελευταίων επι-τευγμάτων της τεχνολογίας, αυξάνεται καθημερινά και έχει φτάσει πια σε δυσθεώρητα επίπεδα. Αν προσθέσουμε και την ραγδαία ανάπτυξη των υπολογιστικών συστημάτων καθώς και την ταυτόχρονη μείωση της τιμής τους, δεν θα ήταν υπερβολή να μιλάμε πια για μια καινούργια εποχή, που όλοι, ο κάθε ένας με τον τρόπο του, θα μπορεί να διαμορφώνει. Η ανάπτυξη του παγκόσμιου Διαδικτύου φέρνει, ολοένα και περισσότερο, στο προσκήνιο την ανάγκη ανθρώπων με εξειδικευμένη γνώση που θα επικοινωνούν μεταξύ τους σε όλες τις γωνιές της Γης, ανεξάρτητα από τις οποιεσδήποτε διαφορές τους. Η JAVA και η HTML είναι γλώσσες προγραμματισμού που σχεδιάστηκαν και κατασκευάστηκαν για να λειτουργούν μέσα στο Δίκτυο, και όχι μόνο, κατάλληλες για δημιουργία εφαρμογών που θα υλοποιούνται σε δεκάδες διαφορετικά μηχανήματα. Η παγκοσμιότητα των προγραμμάτων των ηλεκτρονικών υπολογιστών θα αναδείξει μελλοντικά, ίσως, και το ζητούμενο μιας διεθνούς γλώσσας επικοινωνίας μεταξύ των ανθρώπων. Κυρίαρχη γλώσσα παραμένει σταθερά στον προγραμματισμό η Αγγλική, αλλά η εξέλιξη των εργαλείων του προγραμματισμού δίνει πια την δυνατότητα δημιουργίας προγραμμάτων και σε άλλες γλώσσες. Μιλάμε για το μέλλον και απλά κάνουμε υποθέσεις που μπορεί να επαληθευθούν, μπορεί και όχι. Το γεγονός όμως ότι όλοι μπορούμε να βλέπουμε μπροστά, δεν είναι τόσο συνηθισμένο στην ανθρώπινη ιστορία, ούτε και τόσο απλό. Η δυνατότητα που αποκτά ο άνθρωπος να δημιουργεί το μέλλον των επόμενων γενεών είναι γεγονός χάρη στην τεχνολογία και ο έλεγχος των εξελίξεων είναι πια στενά συνδεδεμένος με τους ηλεκτρονικούς υπολογιστές. ΒΙΒΛΙΟΓΡΑΦΙΑ 1) “ FORTRAN ” - Σωτήριος Κ. Περσίδης - Εκδόσεις ΙΔΕΑ - Αθήνα 1989
78
Καθηγητής Πανεπιστημίου Θεσσαλονίκης 2) “ ΧΡΗΣΗ ΚΑΙ ΕΦΑΡΜΟΓΕΣ ΤΗΣ TURBO PASCAL 6.0 “ - Michael Yester
Εκδόσεις Μ.Γκιούρδας - Αθήνα 1991 3) “ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ “ - Α.ΜΠΕΜ - Γ.ΚΑΡΑΜΠΑΤΖΟΣ
Επίκουροι Καθηγητές Τμήματος Πληροφορικής Πανεπιστημίου Αθηνών Εκδόσεις Συμμετρία - Αθήνα 1991 4) “ ΕΙΣΑΓΩΓΗ ΣΤΗΝ PASCAL ΚΑΙ ΣΤΗΝ TURBO PASCAL ” - Α.Λυμπέρης
Φυσικός - Σημειώσεις Σεμιναρίων Ένωσης Ελλήνων Φυσικών Πάτρα 1989