Προγραμματισμός Ι (HY120) · • Το συντακτικό ορίζει το...

Post on 01-Nov-2019

5 views 0 download

Transcript of Προγραμματισμός Ι (HY120) · • Το συντακτικό ορίζει το...

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

1 Σπύρος Λάληςlalis@uth.gr

Προγραμματισμός Ι (HY120)

μνήμη & μεταβλητέςπρόγραμμα & εκτέλεση

#1

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

2 Σπύρος Λάληςlalis@uth.gr

Ψηφιακά δεδομένα, μνήμη, μεταβλητές

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

3 Σπύρος Λάληςlalis@uth.gr

Δυαδικός κόσμος

• Οι υπολογιστές είναι δυαδικές μηχανές• Όλη η πληροφορία (δεδομένα και κώδικας)

κωδικοποιείται ως μια ακολουθία από 0 ή 1

• Η ελάχιστη μονάδα πληροφορίας ονομάζεται bit• 1 bit μπορεί να πάρει τις τιμές 0 / 1

• Η βασική μονάδα πληροφορίας είναι το byte • 1 byte αποτελείται από 8 bit

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

4 Σπύρος Λάληςlalis@uth.gr

00 11 10 10

11 11 11 11

00 00 00 00

11 00 01 01

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

5 Σπύρος Λάληςlalis@uth.gr

Μνήμη

• Αφαίρεση: μια (μακριά) σειρά από bytes

• Πως γίνεται αναφορά σε ένα συγκεκριμένο byte;

• Διεύθυνση μας λέει το πού βρίσκεται ένα byte στην μνήμη συγκεκριμένα: ο αριθμός σειράς του byte στη μνήμη

• Οι διευθύνσεις αρχίζουν (θεωρητικά) από την τιμή 0

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

6 Σπύρος Λάληςlalis@uth.gr

00 11 10 10

11 11 11 11

00 00 00 00

11 00 01 01

00 11 10 10

11 11 11 11

00 00 00 00

11 00 01 01

περιεχόμενα

...

διευθύνσεις

0

1

2

3

4

5

Ν-2

Ν-1

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

7 Σπύρος Λάληςlalis@uth.gr

Μνήμη ενός τυπικού υπολογιστή

• 1 KB = 1024 B = 210 B

• 1 MB = 1024 KB = 220 B

• 1 GB = 1024 MB = 230 B

• 1 TΒ = 1024 GΒ = 240 B

Κύρια μνήμη (RAM)• γρήγορη πρόσβαση• μερικά GB

Σκληρός δίσκος (hard disk)• αργή πρόσβαση• λίγα TB

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

8 Σπύρος Λάληςlalis@uth.gr

Πρόσβαση στην μνήμη

• Λειτουργίες: ανάγνωση / εγγραφή• Σημείο αναφοράς: διεύθυνση• Ποσότητα δεδομένων: αριθμός bytes

• Ανάγνωση: επιστρέφει τις τιμές των bytes που έχουν αποθηκευτεί στις αντίστοιχες θέσεις

• Εγγραφή: προσδιορίζει τις τιμές των bytes που θα αποθηκευτούν στις αντίστοιχες θέσεις

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

9 Σπύρος Λάληςlalis@uth.gr

Ανάγνωση

00 11 10 10

11 01 01 01

11 10 10 11

00 11 10 10

11 11 01 01

00 00 10 10

11 10 01 10

................

0

1

2

3

4

5

Ν-1

Ν

διεύθυνση περιεχόμενα

μηχανισμόςπρόσβασης μνήμης

op=read

adr=3

len=1

10101011

01 01 01 11

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

10 Σπύρος Λάληςlalis@uth.gr

Εγγραφή

00 11 10 10

00 11 10 10

11 11 01 01

00 00 10 10

11 10 01 10

................

0

1

2

3

4

5

Ν-1

Ν

διεύθυνση περιεχόμενα

μηχανισμόςπρόσβασης

μνήμης Η/Υ

adr=1

len=2

00010101 11101010

01 01 01 11

00 10 10 10

11 01 01 01

op=write

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

11 Σπύρος Λάληςlalis@uth.gr

Κωδικοποίηση δεδομένων

• Κωδικοποίηση: η μετατροπή δεδομένων από ένα σύστημα αναπαράστασης σε ένα άλλο δεκαδικό -> δυαδικό χαρακτήρες -> δυαδικό, ...

• Πόσα bits χρειαζόμαστε για κάθε είδος δεδομένων;• Περισσότερα bits/bytes

μεγαλύτερο πεδίο τιμών μεγαλύτερη ακρίβεια

• Με Ν bits κωδικοποιούμε 2Ν διαφορετικές τιμές π.χ. πεδίο φυσικών [0...2Ν-1] π.χ. πεδίο ακεραίων [-2Ν-1...2Ν-1-1]

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

12 Σπύρος Λάληςlalis@uth.gr

Δεδομένα και πρόγραμματισμός

• Για κάθε δεδομένο πρέπει να καθοριστεί (από τον προγραμματιστή) η θέση μνήμης για την αποθήκευση του ο αριθμός των bytes που χρειάζονται

για την αποθήκευση των τιμών που μπορεί να λάβει η κωδικοποίηση που χρησιμοποιείται για κάθε τιμή

στο δυαδικό σύστημα

• Απάνθρωπο!

• Χρειάζεται κατάλληλη υποστήριξη από τις γλώσσες προγραμματισμού ...

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

13 Σπύρος Λάληςlalis@uth.gr

Τύποι δεδομένων

• Κάθε γλώσσα προγραμματισμού ορίζει ένα σύνολο από βασικούς τύπους δεδομένων

• Κάθε βασικός τύπος έχει προκαθορισμένο μέγεθος (σε bytes) συγκεκριμένη δυαδική κωδικοποίηση

και αντίστοιχο πεδίο τιμών

• Ο προγραμματιστής ορίζει κάθε δεδομένο του προγράμματος ως αντικείμενο ενός τύπου καθορίζει έμμεσα το μέγεθος και την κωδικοποίηση του

(την σημασία των bits που αντιστοιχούν στο αντικείμενο)

• Η μνήμη αποθηκεύει τις τιμές των bits/bytes χωρίς να γνωρίζει το πως αυτές ερμηνεύονται

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

14 Σπύρος Λάληςlalis@uth.gr

Αναφορά σε αντικείμενα δεδομένων

• Σε κάθε αντικείμενο δεδομένων του προγράμματος δίνεται και ένα μνημονικό όνομα

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

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

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

15 Σπύρος Λάληςlalis@uth.gr

Μεταβλητή

• Αντικείμενο δεδομένων του προγράμματος με συγκεκριμένο όνομα και τύπο

• «Διαβάζουμε» μια μεταβλητή διαβάζουμε την τιμή που έχει αποθηκευτεί

στην αντίστοιχη θέση της μνήμης

• «Αναθέτουμε» μια τιμή σε μεταβλητή γράφουμε την τιμή στην αντίστοιχη θέση της μνήμης

• «Δέσμευση» μεταβλητής δέσμευση αντίστοιχου χώρου στην μνήμη

• «Ζωή» μεταβλητής διάστημα κατά το οποίο ο χώρος παραμένει δεσμευμένος

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

16 Σπύρος Λάληςlalis@uth.gr

00 11 10 10

00 00 00 00

11 11 01 01

00 00 10 10

11 10 01 10

................

0

1

2

3

4

5

Ν-1

Ν

διεύθυνση περιεχόμενα

11 11 11 11

00 00 00 00

int var;

θεση/διεύθυνση: 1τύπος: int

τύπος int

μέγεθος: 2 bytesερμηνεία: ακέραιοςκωδικοποίηση: 2’s complement 00 00 00 00

τι τιμή έχει η μεταβλητή var;

διάβασε από τη διεύθυνση της var όσα bytes ορίζει ο τύπος της T (π.χ. int), και ερμήνευσέ τα σύμφωνα με τη σύμβαση κωδικοποίησης του T

αποτέλεσμα = 255(για little-endian)

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

17 Σπύρος Λάληςlalis@uth.gr

Little-endian vs. big-endian

• Little-endian: η σημαντικότητα των bytes αυξάνει όσο μεγαλώνουν οι διευθύνσεις το λιγότερο σημαντικό byte είναι στην μικρότερη διεύθυνση

• Big-endian: η σημαντικότητα των bytes μειώνεται όσο μεγαλώνουν οι διευθύνσεις το πιο σημαντικό byte είναι στην μικρότερη διεύθυνση

11 11 11 11

00 00 00 00 11 11 11 11

00 00 00 00

little-endian big-endian

ακέραιος που καταλαμβάνει 2 bytes, αρχίζοντας από την διεύθυνση k και έχει την τιμή 255

k

k+1

διευθύνσεις

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

18 Σπύρος Λάληςlalis@uth.gr

Διαφάνεια αποθήκευσης/κωδικοποίησης

• Ο προγραμματιστής δεν χρειάζεται να γνωρίζει το πώς ακριβώς αποθηκεύεται/κωδικοποιείται η πληροφορία στην μνήμη του υπολογιστή

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

κανείς μια γλώσσα προγραμματισμού υψηλού επιπέδου

• Ο προγραμματιστής δεν καταλαβαίνει τη διαφορά όσο χρησιμοποιεί κανονικές πράξεις πρόσβασης

• Αυτό αλλάζει όταν χρησιμοποιείται γλώσσα μηχανής ή/και προσπελάζονται τα δεδομένα που βρίσκονται στη μνήμη με άμεσο τρόπο βλέπε αργότερα ...

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

19 Σπύρος Λάληςlalis@uth.gr

Πρόγραμμα & εκτέλεση

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

20 Σπύρος Λάληςlalis@uth.gr

Πρόγραμμα / Γλώσσα προγραμματισμού

• Πρόγραμμα: εντολές γραμμένες σε μια συγκεκριμένη γλώσσα προγραμματισμού αυτή που «καταλαβαίνει» ο υπολογιστής με λίγη βοήθεια … (ο υπολογιστής ξέρει μόνο από 0 και 1)

• Γλώσσα προγραμματισμού: γλώσσα σχεδιασμένη για να δίνουμε εντολές στον υπολογιστή

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

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

21 Σπύρος Λάληςlalis@uth.gr

Συντακτικό

• Το συντακτικό ορίζει το σύνολο των επιτρεπτών προτάσεων (ακολουθία συμβόλων)

• Επιτρεπτή πρόταση = συντακτικά ορθό πρόγραμμα μπορεί να μεταφραστεί σε γλώσσα μηχανής

και να εκτελεστεί στον υπολογιστή

• Ειδικές «γλώσσες» περιγραφής των κανόνων σύνταξης γλωσσών προγραμματισμού Extended Backus Naur Form (EBNF) συντακτικά διαγράμματα

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

22 Σπύρος Λάληςlalis@uth.gr

Σύνταξη & σημασία

• Σύνταξη: κανόνες για τον σχηματισμό προτάσεων

• Σημασία: το νόημα που έχουν οι συντακτικά επιτρεπτές προτάσεις η σύνταξη μιας γλώσσας δεν μπορεί να ορίσει ταυτόχρονα

και την σημασία της

• Υπάρχουν συντακτικά επιτρεπτές προτάσεις που δεν έχουν ορισμένη (μια μοναδική) σημασία;

• Στις ανθρώπινες γλώσσες: ναι! μαζί μιλάμε και χώρια καταλαβαινόμαστε

• Σε γλώσσες προγραμματισμού: (κατά κανόνα) όχι

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

23 Σπύρος Λάληςlalis@uth.gr

Για παράδειγμα

● Συντακτικά ορθές προτάσεις

-2+13

15/5-2

● Όμως, σε τι τιμές αντιστοιχούν τα παρακάτω;-2+13: (-2)+(13) ή –(2+13)

15/5-2: (15/5)-2 ή 15/(5-2)

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

24 Σπύρος Λάληςlalis@uth.gr

Μεταγλώττιση

• Κώδικας: μια σειρά εντολών προς τον υπολογιστή, γραμμένες με βάση μια γλώσσα προγραμματισμού

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

σε μια σειρά εντολών γλώσσας μηχανής

• Γίνεται από ειδικά προγράμματα, τους λεγόμενους μεταγλωττιστές (compilers)

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

πριν αρχίσει η εκτέλεση (just in time compilation)

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

25 Σπύρος Λάληςlalis@uth.gr

CPU

compilerγλώσσα -> 01001010

εντολές μηχανής

εντολές γλώσσας

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

29 Σπύρος Λάληςlalis@uth.gr

Συμβάσεις εκτέλεσης

• Κάθε γλώσσα έχει συγκεκριμένες συμβάσεις για την αποτίμηση και εκτέλεση των εκφράσεων/προτάσεων

• Συνήθως «από αριστερά προς τα δεξιά» και «από πάνω προς τα κάτω» όπως γράφουμε/διαβάζουμε κείμενα (στον δυτικό κόσμο)

• Επίσης, μπορεί να γίνουν άλματα μέσα στον κώδικα είτε «προς τα εμπρός» είτε «προς τα πίσω» κάποιες εντολές μπορεί να παρακαμφθούν ή/και να

εκτελεστούν παραπάνω από μια φορά

• Πραγματοποιούνται με ειδικές εντολές της γλώσσας εντολές ελέγχου ροής εκτέλεσης προγράμματος εντολές κλήσης υποπρογραμμάτων

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

30 Σπύρος Λάληςlalis@uth.gr

Έλεγχος ροής εκτέλεσης

• Ο προγραμματιστής μπορεί να επηρεάσει την ροή εκτέλεσης του προγράμματος

• Mέσω εντολών ελέγχου

• Διαβάζουν την κατάσταση του προγράμματος και ανάλογα μπορεί να μεταφέρουν την εκτέλεση σε ένα διαφορετικό σημείο του κώδικα

• Μπορούμε να φτιάξουμε προγράμματα με εντολές που εκτελούνται υπό συνθήκη / επανειλημμένα

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

31 Σπύρος Λάληςlalis@uth.gr

Εκτέλεση προγράμματος

μνήμη

διάβασμα

γράψιμο

εκτέλεση επόμενης εντολής

αρχικοποίηση κατάστασης

επιλογή επόμενης εντολής

μεταβλητές

γράψιμο

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

32 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

πρόγραμμα P(x,y)

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

33 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

πρόγραμμα P(x,y)

εκτέλεση P(0,5)

? ? ?x y s

program counter ?

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

34 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

πρόγραμμα P(x,y)

εκτέλεση P(0,5)

0 5 ?x y s

program counter ?

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

35 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

πρόγραμμα P(x,y)

εκτέλεση P(0,5)

0 5 ?x y s

program counter 1

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

36 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

εκτέλεση P(0,5)παράμετροι

s <- 0

πρόγραμμα P(x,y)

0 5 ?x y s

program counter 1

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

37 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

εκτέλεση P(0,5)παράμετροι

s <- 0

πρόγραμμα P(x,y)

0 5 0x y s

program counter 1

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

38 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

εκτέλεση P(0,5)παράμετροι

s <- 0

πρόγραμμα P(x,y)

0 5 0x y s

program counter 2

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

39 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

εκτέλεση P(0,5)παράμετροι

s <- 0if (x is 0) goto 6

πρόγραμμα P(x,y)

0 5 0x y s

program counter 2

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

40 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

εκτέλεση P(0,5)παράμετροι

s <- 0if (x is 0) goto 6

πρόγραμμα P(x,y)

0 5 0x y s

program counter 2

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

41 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

εκτέλεση P(0,5)παράμετροι

s <- 0if (x is 0) goto 6

πρόγραμμα P(x,y)

0 5 0x y s

program counter 6

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

42 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

εκτέλεση P(0,5)παράμετροι

s <- 0if (x is 0) goto 6print s

πρόγραμμα P(x,y)

0 5 0x y s

program counter 6

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

43 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

? ? ?x y s

program counter ?

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

44 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

2 5 ?x y s

program counter ?

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

45 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

2 5 ?x y s

program counter ?

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

46 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

2 5 ?x y s

program counter 1

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

47 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

2 5 ?x y s

program counter 1

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

48 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

2 5 0x y s

program counter 1

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

49 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

2 5 0x y s

program counter 2

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

50 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

2 5 0x y s

program counter 2

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

51 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

2 5 0x y s

program counter 2

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

52 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

2 5 0x y s

program counter 3

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

53 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + y

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

2 5 0x y s

program counter 3

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

54 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + y

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

2 5 0x y s

program counter 3

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

55 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + y

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

2 5 5x y s

program counter 3

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

56 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + y

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

2 5 5x y s

program counter 4

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

57 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

2 5 5x y s

program counter 4

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

58 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

2 5 5x y s

program counter 4

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

59 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

1 5 5x y s

program counter 4

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

60 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

1 5 5x y s

program counter 5

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

61 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

1 5 5x y s

program counter 5

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

62 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

1 5 5x y s

program counter 2

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

63 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

1 5 5x y s

program counter 2

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

64 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

1 5 5x y s

program counter 2

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

65 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

1 5 5x y s

program counter 3

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

66 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6s <- s + y

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

1 5 5x y s

program counter 3

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

67 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6s <- s + y

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

1 5 5x y s

program counter 3

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

68 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6s <- s + y

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

1 5 10x y s

program counter 3

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

69 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6s <- s + y

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

1 5 10x y s

program counter 4

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

70 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6s <- s + yx <- x - 1

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

1 5 10x y s

program counter 4

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

71 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6s <- s + yx <- x - 1

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

1 5 10x y s

program counter 4

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

72 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6s <- s + yx <- x - 1

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

0 5 10x y s

program counter 4

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

73 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6s <- s + yx <- x - 1

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

0 5 10x y s

program counter 5

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

74 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6s <- s + yx <- x - 1if (1 is 1) goto 2

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

0 5 10x y s

program counter 5

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

75 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6s <- s + yx <- x - 1if (1 is 1) goto 2

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

0 5 10x y s

program counter 2

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

76 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

0 5 10x y s

program counter 2

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

77 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

0 5 10x y s

program counter 2

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

78 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

0 5 10x y s

program counter 6

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

79 Σπύρος Λάληςlalis@uth.gr

1: s <- 02: if (x is 0) goto 63: s <- s + y4: x <- x - 15: goto 26: print s

παράμετροι

s <- 0if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6s <- s + yx <- x - 1goto 2if (x is 0) goto 6print s

πρόγραμμα P(x,y)

εκτέλεση P(2,5)

0 5 10x y s

program counter 6

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

80 Σπύρος Λάληςlalis@uth.gr

Υποπρογράμματα

• Ομάδα εντολών (και δεδομένων) που είναι συντακτικά ή/και εκτελεστικά ανεξάρτητη (αυτόνομη) από τον υπόλοιπο κώδικα ένα πρόγραμμα μπορεί να αποτελείται από (ή να

χρησιμοποιεί) πολλά διαφορετικά υποπρογράμματα

• Όταν καλείται ένα υποπρόγραμμα, η εκτέλεση μεταφέρεται στο υποπρόγραμμα

• Όταν τερματιστεί η εκτέλεση του, επιστρέφει πίσω στο πρόγραμμα που πραγματοποίησε την κλήση

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

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

81 Σπύρος Λάληςlalis@uth.gr

πρόγραμμα P1code Acall P2code B

πρόγραμμα P2call P3code Creturn

εκτέλεση P1

πρόγραμμα P3code Dreturn

code Acall P2call P3code Dreturncode Creturncode B

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

82 Σπύρος Λάληςlalis@uth.gr

Μεθοδολογία επίλυσης προβλημάτων

• Ανάλυση του προβλήματος τι δεδομένα έχουμε στην διάθεση μας; τι θέλουμε να βρούμε; πώς σπάει σε μικρότερα / απλούστερα προβλήματα; ποια στρατηγική πρέπει να ακολουθήσουμε;

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

που πρέπει να ακολουθηθούν για να λυθεί το πρόβλημα

• Απαιτήσεις ορθότητα, καλή επίδοση, εξοικομόμηση πόρων

• Για το ίδιο πρόβλημα πιθανόν να υπάρχουν περισσότεροι κατάλληλοι αλγόριθμοι

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

83 Σπύρος Λάληςlalis@uth.gr

Παράδειγμα: γραμμική αναζήτηση

Βρες τη θέση που υπάρχει (αν υπάρχει) η τιμή 50

1 13 17 20 21 34 45 46 47 50 55 59 61 63 70

1 13 17 20 21 34 45 46 47 50 55 59 61 63 70

1 13 17 20 21 34 45 46 47 50 55 59 61 63 70

1 13 17 20 21 34 45 46 47 50 55 59 61 63 70

1ο βήμα

2ο βήμα

3ο βήμα

10ο βήμα

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

84 Σπύρος Λάληςlalis@uth.gr

Παράδειγμα: δυαδική αναζήτηση

Βρες τη θέση που υπάρχει (αν υπάρχει) η τιμή 50

1 13 17 20 21 34 45 46 47 50 55 59 61 63 70

1 13 17 20 21 34 45 46 47 50 55 59 61 63 70

1 13 17 20 21 34 45 46 47 50 55 59 61 63 70

1ο βήμα

2ο βήμα

3ο βήμα

κάτω όριο πάνω όριομέσο

κάτω όριο πάνω όριομέσο

κάτω όριο πάνω όριομέσο

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

87 Σπύρος Λάληςlalis@uth.gr

Αποσφαλμάτωση (debugging)

• Συντακτικό επίπεδο (εύκολο) ο κώδικας δεν αντιστοιχεί σε συντακτικά επιτρεπτή πρόταση ευκολάκι, νά' ναι καλά αυτός που έγραψε τον compiler

• Σημασιολογικό επίπεδο (δύσκολο) ο κώδικας είναι συντακτικά σωστός και εκτελείται (τρέχει)

αλλά εμείς δεν χρησιμοποιούμε σωστά κάποια εντολή άλλο θέλουμε να κάνουμε και άλλο ζητάμε από τον

υπολογιστή να κάνει: παράγεται λάθος αποτέλεσμα επίπονο, αλλά η κατάσταση βελτιώνεται με την εμπειρία

• Λογικό επίπεδο (πιο δύσκολο) ο κώδικας είναι συντακτικά και σημασιολογικά σωστός υπάρχει λάθος σε επίπεδο αλγορίθμου (σκέψης) το πιο δύσκολο, ακόμα και για πολύ έμπειρους

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

88 Σπύρος Λάληςlalis@uth.gr

Αποσφαλμάτωση (debugging) στο παρελθόν

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

89 Σπύρος Λάληςlalis@uth.gr

Χρονικό σημείο εντοπισμού λαθών

• Χρόνος μετάφρασης (compile time) ο εντοπισμός λαθών γίνεται από τον μεταγλωττιστή,

αναλόγως με την γλώσσα προγραμματισμού π.χ. συντακτικά λάθη, λάθη ανάθεσης τιμών, ...

• Χρόνος εκτέλεσης (run time / execution time) ο εντοπισμός λαθών γίνεται από το περιβάλλον εκτέλεσης

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

• Μετά την εκτέλεση ο εντοπισμός λαθών γίνεται από τον χρήστη ή ένα άλλο

πρόγραμμα με βάση τα αποτελέσματα που παράγει το πρόγραμμα,

χωρίς αυτό να έχει παρουσιάσει κάποιο «ορατό» λάθος

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

94 Σπύρος Λάληςlalis@uth.gr

Ορθότητα (correctness)

• Ορθότητα: ο κώδικας υλοποιεί την επιθυμητή (προδιαγεγραμμένη) λειτουργικότητα για όλες τις δυνατές περιπτώσεις

• Το γεγονός ότι ο κώδικας μεταφράστηκε επιτυχώς (προφανώς) δεν συνεπάγεται ορθότητα

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

• Το πρόγραμμα πάλι μπορεί να μην λειτουργεί σωστά να μην κάνει αυτό που θέλουμε, σε όλες τις περιπτώσεις

• Η εκτέλεση αυτή καθ’αυτή γίνεται πάντα σωστά όπως ορίζεται από την σημασιολογία της γλώσσας

προγραμματισμού – δεν φταίει το «καταραμένο μηχάνημα» μπορεί να υπάρχουν σημασιολογικά ή/και λογικά λάθη

Προγραμματισμός IΤΗΜΜΥ, Πανεπιστήμιο Θεσσαλίας

95 Σπύρος Λάληςlalis@uth.gr

Ο νέος = ψάρι = γατάκι Ο παλιός