next up previous contents
Next: 2. Προγραμματισμός στη γλώσσα Up: 1. Τι είναι προγραμματισμός Previous: 1.1 Ο υπολογιστής   Contents

Subsections

1.2 Πρόγραμμα

Ένα πρόγραμμα λοιπόν είναι ένα σύνολο από οδηγίες που μπορούν να εκτελεστούν μηχανικά, χωρίς την απαίτηση για την ύπαρξη κάποιας ``κρίσης'' εκ μέρους του μηχανήματος που εκτελεί.

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

Για παράδειγμα, στη γλώσσα προγραμματισμού BASIC1.1, μια από τις απλούστερες ίσως γλώσσες, το παραπάνω πρόγραμμα μπορεί να γραφεί ως εξής:

10 print "Give a: "
20 input a
30 print "Give b: "
40 input b
50 x = 0
60 if a<b then goto 100
70 x = x + 1
80 a = a - b
90 goto 60
100 print "The quotient a/b is "; x
Η γλώσσα BASIC, στη μορφή αυτή που φαίνεται στο πιο πάνω πρόγραμμα συναντάται πλέον σπάνια. Υπάρχουν πιο εξελιγμένες μορφές της γλώσσας που χρησιμοποιούνται σήμερα.

Παρ' όλα αυτά, στο παραπάνω πρόγραμμα, όπου υπολογίζεται το πηλίκο της διαίρεσης του ακεραίου a διαιρούμενου από τον ακέραιο b (θετικοί ακέραιοι κι οι δυο), εμφανίζονται τα βασικότερα στοιχεία ενός προγράμματος και θα το χρησιμοποιήσουμε ως το βασικό παράδειγμα για την εισαγωγή τους.

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

Ας κάνουμε όμως πρώτα μια περιγραφή της στρατηγικής που χρησιμοποιείται στον αλγόριθμο που υλοποιείται στο παραπάνω πρόγραμμα BASIC. Πώς δηλ. υπολογίζεται το πηλίκο της διαίρεσης a/b;

Το πηλίκο k της διαίρεσης του a διά του b είναι ο μέγιστος ακέραιος τέτοιος ώστε k . b$ \le$a. Ο τρόπος που έχουμε επιλέξει εδώ για να υπολογίσουμε το k είναι το να αρχίσουμε να προσθέτουμε το b στον εαυτό του μέχρι αυτό το άθροισμα να ξεπεράσει το a. Το πλήθος των φορών που προσθέσαμε πριν ξεπεραστεί το a είναι το πηλίκο k.

1.2.1 Μεταβλητές

Οι μεταβλητές (variables) είναι το πιο βασικό κομμάτι ενός προγράμματος. Τις φανταζόμαστε σαν ένα κουτί, που έχει πάντα ένα, συνήθως περιγραφικό, όνομα, και κάποια περιεχόμενα που μπορεί να αλλάζουν από βήμα σε βήμα του προγράμματος. Ακόμη, σε πολλές γλώσσες προγραμματιμού (η C και η παλιά αυτή BASIC που δείχνουμε εδώ συμπεριλαμβάνονται σε αυτές) κάθε μεταβλητή έχει το δικό της σταθερό τύπο δεδομένων που μπορεί να κρατήσει. Για παράδειγμα μια μεταβλητή μπορεί να έχει τύπο ακέραιο αριθμό, πραγματικό αριθμό (συνήθως λέγονται αριθμοί κινητής υποδιαστολής ή floating point numbers), λογική τιμή (true ή false, δηλ. να είναι αληθής ή ψευδής), λέξη (string), κ.ά. Το προηγούμενο πρόγραμμα σε BASIC έχει τρεις μεταβλητές: τα a, b, x, που και οι τρεις είναι τύπου ακέραιου.

Οι δύο μεταβλητές a και b χρησιμοποιούνται κατ' αρχήν ως μεταβλητές εισόδου: εκεί κρατάει το πρόγραμμα, στην αρχή τουλάχιστον, τους δύο ακεραίους των οποίων το πηλίκο θέλουμε να υπολογίσουμε. Αντιθέτως η μεταβλητή x είναι μεταβλητή που χρησιμοποιείται και για να κρατήσει μερικά ενδιάμεσα αποτελέσματα, αλλά είναι και η μεταβλητή που στο τέλος των βασικών υπολογισμών κρατάει το επιθυμητό αποτέλεσμα.

1.2.2 I/O (input/output)

Οι εντολές στις γραμμές 10, 20, 30 και 100 είναι εντολές που είτε διαβάζουν (εντολή input της BASIC) κάποια στοιχεία που ο χρήστης γράφει στο πληκτρολόγιο είτε τυπώνουν (εντολή print της BASIC) στην οθόνη του υπολογιστή ή του τερματικού κάποιο κείμενο. Είναι προφανές ότι δεν μπορεί να υπάρξει χρήσιμο πρόγραμμα χωρίς κάποια τέτοια αλληλεπίδραση με το χρήστη. Οι εντολές αυτές λέγονται εισόδου/εξόδου (I/O).

1.2.3 Εντολές ανάθεσης τιμής σε μεταβλητές

Αυτές είναι οι εντολές 50, 70 και 80. Η 50 θέτει τη μεταβλητή x ίση με 0, η 70 αυξάνει την τιμή της ίδιας μεταβλητής κατά 1 και η 80 αφαιρεί από τη μεταβλητή a την τιμή της μεταβλητής b. Η χρήση του συμβόλου = που μοιάζει κατ' αρχήν αντιφατική σε σχέση με όσα έχει κανείς συνηθίσει από την αλγεβρική του χρήση, πρέπει στη γλώσσα BASIC (όπως και στη γλώσσα C) να ερμηνεύεται ως εξής: αριστερά του = υπάρχει πάντα μια μεταβλητή και δεξιά του υπάρχει πάντα μια παράσταση. Το πρόγραμμα πρώτα κάνει όσους υπολογισμούς χρειάζεται για να υπολογίσει την τιμή της παράστασης (ενδεχομένως χρησιμοποιώντας και την μεταβλητή που υπάρχει αριστερά του =, και το αποτέλεσμα αυτό εκχωρεί στη μεταβλητή που βρίσκεται αριστερά.

1.2.4 Εντολές εκτελούμενες υπό συνθήκη

Η εντολή στη γραμμή 60 αποτελείται από μια συνθήκη (a<b) και μια εντολή (goto 100) που εκτελείται μόνο αν ισχύει τη συγκεκριμένη εκείνη χρονική στιγμή εκτέλεσης του προγράμματος η συνθήκη.

1.2.5 Εντολές μεταφοράς ροής προγράμματος

Τέλος η εντολή goto <line number> που εμφανίζεται στις γραμμές 60 και 90 είναι μια εντολή που δεν κάνει τίποτε άλλο από το να μεταφέρει τον έλεγχο ροής του προγράμματος σε μια συγκεκριμένη γραμμή. Αμέσως μετά τη γραμμή 90, για παράδειγμα, εκτελείται η γραμμή 60 και ποτέ η 100.

Ας δώσουμε τώρα ένα παράδειγμα της ροής του προγράμματος όταν το πρόγραμμα τρέξει με a ίσο με 13, και b ίσο με 10 (εδώ εννοούμε ότι ο χρήστης πληκτρολογεί τους αριθμούς 13 και 10 στο πληκτρολόγιο και με αυτή τη σειρά). Η ροή λοιπόν του προγράμματος σε αριθμούς γραμμών είναι η εξής:

10, 20 (ο χρήστης πληκτρολογεί 13), 30, 40 (ο χρήστης πληκτρολογεί 10), 50, 60, 70, 80, 90, 60, 100 (εκτυπώνεται The quotient a/b is 1).



Υποσημειώσεις

... BASIC1.1
Μπορεί κανείς να πειραματιστεί με ένα BASIC interpreter, χωρίς να εγκαταστήσει κάποιον στον υπολογιστή του. Υπάρχουν BASIC interpreters (δηλ. προγράμματα που διαβάζουν ένα πρόγραμμα BASIC και το εκτελούν) στο Internet, για παράδειγμα στο http://professionals.com/ cmcmanis//java/javaworld/examples/BASIC.html


Mihalis Kolountzakis 2001-10-21