Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL Δυνατότητα ανάπτυξης, μεταγλώττισης και εκτέλεσης προγραμμάτων στη PASCAL. Κατανόηση της σύνταξης των προτάσεων της PASCAL. Κατανόηση της εντολής εξόδου για την εμφάνιση / εκτύπωση δεδομένων και αποτελεσμάτων από το πρόγραμμα. Κατανόηση της εντολής εισόδου για την ανάγνωση δεδομένων από το πρόγραμμα.. Κατανόηση των αλγεβρικών / αριθμητικών και λογικών παραστάσεων στην εκτέλεση αριθμητικών και λογικών υπολογισμών. Κατανόηση των δηλώσεων μεταβλητών. Κατανόηση της εντολής εκχώρησης στη PASCAL. Εντοπισμός και διόρθωση των συντακτικών λαθών σ ένα πρόγραμμα. Εντοπισμός και διόρθωση των λογικών λαθών σ ένα πρόγραμμα Σκοπός
ΣΥΝΟΠΤΙΚΗ ΘΕΩΡΙΑ ΜIA ΔΕΥΤΕΡΗ ΜΑΤΙΑ ΣΤΗ PASCAL Ένα πρόγραμμα στη γλώσσα PASCAL αποτελείται / χωρίζεται σε δύο τμήματα ή ενότητες: (1) Επικεφαλίδα (2) Δηλώσεις των μεταβλητών (3) Εντολές που περιγράφουν / ορίζουν έναν υπολογισμό ή επεξεργασία, για να εκτελεστεί από τον υπολογιστή. Κάθε ένα από τα δύο αυτά τμήματα αποτελείται από εντολές. Κάθε πρόταση στη PASCAL, αλλά και σε κάθε γλώσσα προγραμματισμού είναι μία εντολή προς τον υπολογιστή ή ορθότερα στον επεξεργαστή για να εκτελέσει μία λειτουργία. Αυτή η λειτουργία μπορεί να είναι: (1) η εκτέλεση μίας απλής αριθμητικής πράξης πρόσθεση, αφαίρεση, πολλαπλασιασμός, διαίρεση, ή (2) μία λογική πράξη, δηλαδή μία σύγκριση για ισότητα ή ανισότητα, ή τέλος (3) μία πιο σύνθετη λειτουργία που όμως αναλύεται στις απλές αριθμητικές και λογικές πράξεις που το αλγεβρικό λογικό κύκλωμα του επεξεργαστή μπορεί να εκτελέσει. Η μονάδα επεξεργασίας του υπολογιστή αποτελείται από απλά ψηφιακά κυκλώματα συνδυαστικά και ακολουθιακά που μόνον μπορεί να εκτελούν απλές αριθμητικές και λογικές πράξεις. Όμως εκτός από αριθμητικές πράξεις, το κύκλωμα της μονάδας επεξεργασίας ενός υπολογιστή μπορεί να αναγνωρίζει και να εκτελεί εντολές που προσδιορίζουν απλές αριθμητικές και λογικές πράξεις, όπως για παράδειγμα είναι οι εντολές ADD, SUB, COMP, LOAD. Αυτή η τελευταία δυνατότητα είναι που ξεχωρίζει τον υπολογιστή από μία ταμειακή μηχανή. Καθεμία από τις εντολές που μπορεί να εκτελεστούν από την μονάδα επεξεργασίας του υπολογιστή ορίζει μία απλή αριθμητική / λογική πράξη. Συνδυάζοντας πολλές από αυτές τις εντολές και ορίζοντας στη μονάδα επεξεργασίας να τις εκτελέσει με καθορισμένη σειρά, μπορούμε να οδηγήσουμε τον υπολογιστή στην εκτέλεση πολύ πιο σύνθετων υπολογισμών από μία απλή πρόσθεση ή αφαίρεση. Αυτή είναι η έννοια και η λειτουργία του προγράμματος να ορίζουμε δηλαδή στον επεξεργαστή να εκτελεί σύνθετους υπολογισμούς, συνδυάζοντας τις απλές εντολές που μπορεί εύκολα να εκτελεί. Χαρακτηριστικά παραδείγματα των 2
υπολογισμών που μπορούμε έτσι να ορίσουμε αποτελούν τα σύγχρονα προγράμματα εφαρμογών, όπως τα προγράμματα για την πρόβλεψη του καιρού ή των τάσεων στο χρηματιστήριο, αλλά και οι εφαρμογές (applications) που έχουν γραφεί για να εκτελούνται από τους επεξεργαστές των σύγχρονων κινητών και των tablets. Όμως, κάθε υπολογισμός και πολύ περισσότερο ένας σύνθετος υπολογισμός πάντοτε περιλαμβάνει δεδομένα και (ενδιάμεσα και τελικά) αποτελέσματα. Αυτές ακόμα οι απλές αριθμητικές και λογικές εντολές (ADD, SUB, COMP, κ.ά.) που μπορεί να εκτελεί η μονάδα επεξεργασίας λειτουργούν πάνω σε δεδομένα. Αυτά τα δεδομένα, καθώς και ενδιάμεσα αποτελέσματα ενός υπολογισμού πρέπει να αποθηκευτούν - και όσο διαρκεί ο υπολογισμός παραμένουν αποθηκευμένα στη μνήμη του υπολογιστή. Εδώ, βλέπουμε τον κεντρικό ρόλο της μνήμης στην εκτέλεση υπολογισμών από τον υπολογιστή, σαν το χώρο που διατηρούνται τόσο οι εντολές που περιγράφουν αυτό τον υπολογισμό, όσο και τα δεδομένα.. Εφόσον κάθε υπολογισμός περιλαμβάνει δεδομένα, πριν ακόμα ορίσουμε / διαμορφώσουμε τον συνδυασμό των εντολών που απαιτούνται για την εκτέλεση αυτού του υπολογισμού από τον επεξεργαστή, χρειαζόμαστε ένα τρόπο για να: (a) εισάγουμε και να αποθηκεύουμε δεδομένα στη μνήμη του υπολογιστή και (b) εφόσον έχουμε εισάγει στη μνήμη όλα τα δεδομένα που απαιτούνται για έναν υπολογισμό, χρειαζόμαστε ένα τρόπο για να αναφερόμαστε σε αυτά και να ορίζουμε ποιες πράξεις και λειτουργίες θέλουμε να εκτελέσουμε σε αυτά τα δεδομένα. και (c) Τέλος, αφού προσδιορίσουμε την μορφή της επεξεργασίας που ο υπολογιστής θα εκτελέσει στα δεδομένα, χρειάζεται να ορίσουμε στον υπολογιστή να εμφανίσει τα αποτελέσματα των υπολογισμών. Η ΕΝΤΟΛΗ ΕΞΟΔΟΥ Μία άλλη βασική λειτουργία ενός προγράμματος είναι η δυνατότητα να εμφανίσει τα αποτελέσματα του υπολογισμού που προσδιορίζεται από αυτό. Τόσο τα τελικά αποτελέσματα, όσο και ενδιάμεσα αποτελέσματα, προκειμένου να ελέγχουμε την εκτέλεση αυτού του υπολογισμού. Πώς ένα πρόγραμμα εμφανίζει τα αποτελέσματα του υπολογισμού του? Στη PASCAL, μπορούμε ακόμα εύκολα να εμφανίσουμε δεδομένα και αποτελέσματα στην οθόνη, με την εντολή writeln (αλγ. Παράσταση 1 :n 1, αλγ. παράσταση 2 :n 2,, αλγ. παρσταση ν :n ν ) 3
Η εκτέλεση της εντολής writeln() πολύ απλά, εκτυπώνει στην οθόνη τις τιμές των παραστάσεων που περιέχονται σε αυτή, δηλαδή εκτυπώνει τις τιμές των παραστάσεων αλγ. Παράσταση 1, αλγ. παράσταση 2,, αλγ. παρσταση ν, χρησιμοποιώντας n 1, n 2,, n ν θέσεις εκτύπωσης, αντίστοιχα για κάθε παράσταση. ΑΣΚΗΣΗ 3.1 Γράψτε ένα πρόγραμμα το οποίο να εμφανίζει τους παρακάτω αριθμούς στην μορφή που δίνονται: 1 1 12 12 123 123 1234 1234 12345 2345 Πρόγραμμα 3.1 program output1; const a = 1; b = 12; begin write(a:8, ' '); Writeln(a:-8); write(b:8, ' '); writeln(b:-8); readln; end. 4
ΑΣΚΗΣΗ 3.2 Γράψτε ένα πρόγραμμα το οποίο να υπολογίζει και να εκτυπώνει το συνημίτονο, το ημίτονο και την εφαπτομένη των 60. Πρόγραμμα 3.2 program output2; const begin pi = 3.14; write('cos(60) ='); writeln(cos(60.0*pi/ 180):5:2); readln; end. ΑΣΚΗΣΗ 3.3 Ένα σώμα αφήνεται να πέσει ελεύθερα από ηρεμία. Συντάξτε ένα πρόγραμμα το οποίο να υπολογίζει την απόσταση που διανύει το σώμα και την ταχύτητά του μετά από 1 sec και μετά από 5 sec. Διατηρείστε ακρίβεια 2 δεκαδικών ψηφίων στους υπολογισμούς σας. (Δίνονται s=1/2*(g*t 2 ), u=g*t, g=9.81 m/sec2) program output3; const g = 9.81; begin write('s(1) ='); writeln(g*1*1/2:5:2); write('u(1) ='); writeln(g*1:5:2); readln; end. 5
Η ΕΝΝΟΙΑ ΚΑΙ Η ΧΡΗΣΗ ΤΩΝ ΜΕΤΑΒΛΗΤΩΝ Για να αναφερόμαστε στα δεδομένα, στο πλαίσιο των εντολών μίας γλώσσας προγραμματισμού, χρησιμοποιούμε μεταβλητές. Γενικά, για κάθε ένα από τα δεδομένα ενός υπολογισμού που αποτελούν τις μονάδες πληροφορίας χρησιμοποιούμε / ορίζουμε μία μεταβλητή. Κάθε μεταβλητή προσδιορίζεται από ένα όνομα που αποτελείται από γράμματα του λατινικού αλφαβήτου και ψηφία, όμως πρέπει να αρχίζει με ένα γράμμα. Κάθε μεταβλητή που ορίζουμε σ ένα πρόγραμμα συνδέεται με μία θέση / χώρο στη μνήμη του υπολογιστή. Αρχικά χρησιμοποιούμε την μεταβλητή για να αποθηκεύσουμε την τιμή ενός δεδομένου στο συγκεκριμένο χώρο / θέση στη μνήμη του υπολογιστή. Αφού αυτό το δεδομένο αποθηκευτεί στη μνήμη, χρησιμοποιούμε την μεταβλητή, αντί της πραγματικής διεύθυνσης στη μνήμη όπου έχει αποθηκευτεί, για να αναφερόμαστε σ αυτό το δεδομένο, στη πορεία του υπολογισμού. Σαν γενικό κανόνα, για κάθε δεδομένο και για κάθε ενδιάμεσο ή τελικό αποτέλεσμα ενός υπολογισμού, ορίζουμε μία μεταβλητή. Ο ορισμός μίας μεταβλητής γίνεται με την δήλωση αυτής της μεταβλητής στην αρχή του προγράμματος. Στη δήλωση μίας μεταβλητής, ορίζουμε το όνομα και τον τύπο αυτής της μεταβλητής, εάν δηλαδή αυτή η μεταβλητή θα είναι ακέραια, πραγματική, χαρακτήρας, ή μία λογική μεταβλητή. Η δήλωση μίας; μεταβλητής χρησιμεύει για να δεσμεύεται αρκετός χώρος στην μνήμη του υπολογιστή για την αποθήκευση της τιμής ενός δεδομένου. Έτσι, οι δηλώσεις: var voltage : integer; Current : integer; δεσμεύουν χώρο στη μνήμη του υπολογιστή για την αποθήκευση δύο πραγματικών τιμών. ΑΣΚΗΣΗ 4.3 Ένα σώμα αφήνεται να πέσει ελεύθερα από ηρεμία. Συντάξτε ένα πρόγραμμα το οποίο να υπολογίζει την απόσταση που διανύει το σώμα και την ταχύτητά του μετά από 1 sec και μετά από 5 sec. Διατηρείστε ακρίβεια 2 δεκαδικών ψηφίων στους υπολογισμούς σας. (Δίνονται s=1/2*u*t), u=g*t, g=9.81 m/sec2). program output1; const g = 9.81; var u : double; 6
begin u := g*1; write('u(1) ='); writeln(u:5:2); write('s(1) ='); writeln(u*1/2:5:2); readln; end. ΕΙΣΟΔΟΣ και ΕΞΟΔΟΣ Ένας υπολογισμός εκτελείται / επεξεργάζεται δεδομένα. Εφόσον ένα πρόγραμμα προσδιορίζει την εκτέλεση ενός υπολογισμού από τον υπολογιστή και αναγκαστικά, αυτός ο υπολογισμός θα περιλαμβάνει κάποια δεδομένα, χρειαζόμαστε ένα τρόπο για να εισάγουμε αυτά τα δεδομένα στον υπολογιστή. Έχοντας ορίσει την έννοια της μεταβλητής, ο πιο απλός τρόπος για να εισάγουμε δεδομένα στον υπολογιστή, προκειμένου να εκτελέσει τον υπολογισμό που ορίζεται από ένα πρόγραμμα, είναι με την εντολή readln (μεταβλητή 1, μεταβλητή 2, μεταβλητή 3,, μεταβλητή ν ) Όταν η εκτέλεση ενός προγράμματος φτάνει στην εντολή readln(), τότε η εκτέλεση διακόπτεται και ο υπολογιστής περιμένει να εισάγουμε / πληκτρολογήσουμε τιμές δεδομένων. Κάθε τιμή που θα πληκτρολογήσουμε, θα πρέπει να έχει έναν από τους βασικούς τύπους, θα πρέπει δηλαδή να είναι ακέραια, πραγματική, χαρακτήρας, ή λογική (true ή false). Μπορούμε να πληκτρολογήσουμε όσες τιμές θέλουμε, όμως το πλήθος των τιμών που θα πληκτρολογήσουμε θα πρέπει να αντιστοιχεί ακριβώς στο πλήθος και το τύπο των μεταβλητών μέσα στην readln που εκτελείται. Αφού πληκτρολογήσουμε τις τιμές που θέλουμε να εισάγουμε και που θα πρέπει να αντιστοιχούν ακριβώς στις μεταβλητές μέσα στην readln, πατάμε Enter. Μόλις πατήσουμε Enter, η εκτέλεση του προγράμματος επαναρχίζει και ο υπολογιστής εισάγει λέμε «διαβάζει» - κάθε μία από τις τιμές που έχουμε πληκτρολογήσει και την αποθηκεύει στην αντίστοιχη μεταβλητή μέσα στην εντολή readln(). 7
Δηλαδή, ο υπολογιστής διαβάζει και αποθηκεύει την πρώτη τιμή που έχουμε πληκτρολογήσει στη πρώτη μεταβλητή μέσα στην readln(), την δεύτερη τιμή στη δεύτερη μεταβλητή, κ.ο.κ μέχρι την τελευταία τιμή που την αποθηκεύει στην τελευταία μεταβλητή στην readln(). Εάν έχουμε πληκτρολογήσει λιγότερες τιμές από το πλήθος των μεταβλητών στην readln(), o υπολογιστής περιμένει μέχρις ότου πληκτρολογήσουμε τις υπόλοιπες τιμές, τόσες δηλαδή όσες και οι μεταβλητές στην readln(). Εάν πληκτρολογήσουμε περισσότερες τιμές από όσες είναι οι μεταβλητές στην readln(), τότε η εκτέλεση του προγράμματος θα διακοπεί και θα εμφανιστεί στην οθόνη, ένα μήνυμα λάθους. H ΕΝΤΟΛΗ ΕΚΧΩΡΗΣΗΣ Όπως με τα δεδομένα που χρησιμοποιούνται από ένα πρόγραμμα, έτσι και κάθε αποτέλεσμα υπολογισμού από ένα πρόγραμμα αποθηκεύεται ή καταχωρείται σε μία μεταβλητή. Αυτή η μεταβλητή πρέπει να έχει οριστεί στις δηλώσεις των μεταβλητών στην αρχή του προγράμματος. Ο λόγος που καταχωρούμε κάθε ενδιάμεσο ή τελικό αποτέλεσμα σε μία μεταβλητή είναι όχι μόνο προκειμένου αυτό το αποτέλεσμα να εμφανιστεί στην έξοδο. Αλλά και για μπορεί να χρησιμοποιηθεί σε επόμενο στάδιο στον υπολογισμό. Εφόσον έχουμε καταχωρήσει ένα αποτέλεσμα σε μία μεταβλητή, μπορούμε να χρησιμοποιήσουμε αυτό το αποτέλεσμα σε επόμενο στάδιο, με απλή αναφορά στο όνομα της μεταβλητής. Ο τρόπος που καταχωρούμε το αποτέλεσμα ενός υπολογισμού σε μία μεταβλητή είναι με την εντολή καταχώρησης μεταβλητή := αριθμητική παράσταση; η μεταβλητή := λογική παράσταση; ΑΣΚΗΣΗ 4.4 Γράψτε ένα πρόγραμμα που χρησιμοποιεί τις μαθηματικές συναρτήσεις sin(x), cos(x) για να υπολογίζει και να ελέγχει την ισχύ της ταυτότητας : Cos 2 (x) + sin 2 (x) = 1 για κάθε τιμή x. 8
rogram output4; var x : double; apotelesma : double; begin readln(x); apotelesma := sin(x) * sin(x) + cos(x) * cos(x); readln; end. 9
10
ΕΡΓΑΣΤΗΡΙΟ 3 Εισαγωγή στο Προγραμματισμό με τη PASCAL & τη MATLAB Ενότητα 1: Θεωρητικό Μέρος Όνομα: 1. Η λειτουργία μίας μεταβλητής σ ένα πρόγραμμα, είναι: (α) Να δίνουμε ένα όνομα σε σταθερές τιμές. (β) Να παριστάνουμε τα αποτελέσματα ενός υπολογισμού, από ένα πρόγραμμα. (γ) Να αποθηκεύουμε δεδομένα και αποτελέσματα στη μνήμη του υπολογιστή και να αναφερόμαστε σ αυτά, χρησιμοποιώντας τη μεταβλητή. (δ) Να δεσμεύουμε χώρο στη μνήμη του υπολογιστή, για ένα πρόγραμμα. 2. Μία μεταβλητή: (α) Μπορεί να πάρει μία μόνον τιμή, κατά την εκτέλεση ενός προγράμματος. (β) Μπορεί να πάρει πολλές τιμές, κατά τη εκτέλεση ενός προγράμματος. (γ) Μπορεί να πάρει μόνον ακέραιες τιμές, κατά την εκτέλεση ενός προγράμματος. (δ) Μπορεί να πάρει πολλές τιμές, ακέραιες, πραγματικές ή και κείμενο, κατά την εκτέλεση ενός προγράμματος. 3. Ένα πρόγραμμα είναι: (α) Ένας συνδυασμός αλγεβρικών πράξεων και υπολογισμών. (β) Η λύση μαθηματικών εξισώσεων. (γ). Εντολές για να αποθηκεύουμε δεδομένα στη μνήμη του υπολογιστή. (δ) Ένας συνδυασμός εντολών που περιγράφει μία επεξεργασία δεδομένων, από τον υπολογιστή. 4. Ποια είναι η βασική διαφορά του υπολογιστή από μία αριθμομηχανή (calculator): (α) Ο υπολογιστής, πέρα από αριθμητικούς, μπορεί να εκτελεί και λογικούς υπολογισμούς, αν δηλαδή μία τιμή είναι μεγαλύτερη ή μικρότερη, από μία άλλη. 11
(β) Ο υπολογιστής μπορεί να αποθηκεύει δεδομένα στη μνήμη του. (γ) Ο υπολογιστής μπορεί να υπολογίζει πολύ περισσότερες συναρτήσεις, όχι δηλαδή μόνον τις τριγωνομετρικές, λογαριθμικές, αλλά και πολλές άλλες συναρτήσεις. (δ) Ο υπολογιστής μπορεί να συνδυάζει υπολογισμούς, χρησιμοποιώντας τα αποτελέσματα από ένα υπολογισμό, σ έναν άλλο, εκτελώντας έτσι μία σύνθετη ανάλυση / επεξεργασία των δεδομένων. 5. Ποια είναι τα βασικά μέρη ενός προγράμματος? 6. Ποια είναι η λειτουργία των εντολών εισόδου και εξόδου σ ένα πρόγραμμα? 7. Γράψτε το παρακάτω πρόγραμμα στη Pascal. program Project1; begin writeln; writeln('aspete'); readln(); end. Ποια είναι η λειτουργία του? 8. Γράψτε το παρακάτω πρόγραμμα στη Pascal. program output1; const a = 1; b = 12; begin write(a:8, ' '); Writeln(a:-8); write(b:8, ' '); writeln(b:-8); 12
readln; end. Ποια είναι η λειτουργία του? 9. Γράψτε ένα πρόγραμμα που να προσομοιώνει τη ρίψη ενός νομίσματος (κορώνα ή γράμματα), χρησιμοποιώντας τη συνάρτηση Random στη PASCAL. Εργαστήριο 3 10. Γράψτε ένα πρόγραμμα που να διαβάζει δύο ακέραιους αριθμούς από την οθόνη και να εκτυπώνει τη λογική τιμή true εάν οποιοσδήποτε από τους δύο αριθμούς διαιρεί ακριβώς τον άλλο. 13
Εργαστήριο 3 3.1 Γράψτε ένα πρόγραμμα που χρησιμοποιεί τις μαθηματικές συναρτήσεις sin(x), cos(x) για να υπολογίζει και να ελέγχει την ισχύ της ταυτότητας : Cos 2 (x) + sin 2 (x) = 1 για κάθε τιμή x. 3.2 Γράψτε ένα πρόγραμμα που να διαβάζει δύο ακέραιους αριθμούς από την οθόνη και να εκτυπώνει τη λογική τιμή true εάν οι δυο αυτό αριθμοί είναι διαφορετικοί και τη τιμή false εάν είναι ισοι. 4.1 Γράψτε ένα πρόγραμμα που να μετατρέπει καρτεσιανές συντεταγμένες σε πολικές. 3.3 Γράψτε ένα πρόγραμμα που να διαβάζει δύο ακέραιους αριθμούς από την οθόνη d και m και εκτυπώνει τη λογική τιμή true εάν η ημέρα d του μήνα m είναι μεταξύ 20/3 και 20/6