Προγραμματισμός Βασικές Έννοιες.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Βασικές έννοιες αλγορίθμων
Advertisements

Επιμέλεια: Τίκβα Χριστίνα
Κεφάλαιο Τμηματικός προγραμματισμός
7.3.8 Μεταφραστές Ελληνογαλλική Σχολή Καλαμαρί - Τίκβα Χριστίνα.
Τι είναι ο υπολογιστής; Τι είναι ο προγραμματισμός
Διαδικασία ανάπτυξης Προσδιορισμός απαιτήσεων Αρχιτεκτονικός Σχεδιασμός Λεπτομερής Σχεδιασμός Κωδικοποίηση Έλεγχος Παράδοση Συστήματος Λειτουργία - Συντήρηση.
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
Γλώσσα Προγραμματισμού
ΜΑΘ-3122/106 Προγραμματισμός
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ
ΕΙΣΑΓΩΓΗ ΜΑΘΗΜΑ 1.
ΜΕΤΑΒΛΗΤΕΣ - ΤΥΠΟΙ ΜΑΘΗΜΑ 3.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
Κεφ.1 Εισαγωγη στην εννοια του Αλγοριθμου και στον Προγραμματισμο
ΣΥΝΑΡΤΗΣΕΙΣ.
Μεταβλητές – εντολές εκχώρησης- δομή ακολουθίας
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
Σχεδίαση Αλγορίθμων. Διεργασίες (1/2) Μία διεργασία αλληλεπιδρά με το περιβάλλον της δεχόμενη είσοδο και παράγοντας έξοδο.
Κεφάλαιο 6: Εισαγωγή στον προγραμματισμό Φυσικές και τεχνητές γλώσσες.
Ενότητα Α.4. Δομημένος Προγραμματισμός
31 Μαρτίου 2015 ΔΙΑΦΑΝΕΙΑ 1 ΤΥΠΙΚΕΣ ΜΕΘΟΔΟΙ ΑΝΑΛΥΣΗΣ ΣΥΣΤΗΜΑΤΩΝ ΤΜ. ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. – ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ ΚΑΤΗΓΟΡΗΜΑΤΙΚΟΣ ΛΟΓΙΣΜΟΣ Ι Για τον προτασιακό.
Για τη διεκπεραίωση ενός προβλήματος πρέπει να ακολουθηθεί η εξής διαδικασία:  να γραφεί ο αλγόριθμος να συνταχθεί το πρόγραμμα σε γλώσσα υψηλού επιπέδου.
1.5 Γλώσσες Προγραμματισμού
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 3 Η Σημασιολογία των Γλωσσών Προγραμματισμού Προπτυχιακό.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ. ΥΠΟΛΟΓΙΣΤΗΣ Μηχανή που μπορεί να φέρει σε πέρας πνευματικές εργασίες ρουτίνας με μεγάλη ταχύτητα.
ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Προπτυχιακό.
Κεφάλαιο 10 – Υποπρογράμματα
Από την ιδέα μέχρι το λογισμικό. Ξεκινώντας από το πρόβλημα...
Μονάδες μέτρησης πληροφορίας και χώρου στους Η/Υ
ΚΕΦΑΛΑΙΟ Τι είναι αλγόριθμος
ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language.
Βασικά στοιχεία της Java
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
ΚΕΦΑΛΑΙΟ Το αλφάβητο της ΓΛΩΣΣΑΣ
Εισαγωγή στην Έννοια του Αλγορίθμου και στον Προγραμματισμό
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ
ΕΝΟΤΗΤΑ 2 – Κεφάλαιο 5: Γνωριμία με το Λογισμικό
Κρυφή μνήμη (cache memory) (1/2) Εισαγωγή στην Πληροφορκή1 Η κρυφή μνήμη είναι μία πολύ γρήγορη μνήμη – πιο γρήγορη από την κύρια μνήμη – αλλά πιο αργή.
ΗΜΥ 100 Εισαγωγή στην Τεχνολογία ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ.
ΠΑΡΑΔΕΙΓΜΑ: ΤΑ ΕΠΙΠΕΔΑ ΥΛΙΚΟΥ – ΛΟΓΙΣΜΙΚΟΥ ΣΕ ΕΝΑΝ ΥΠΟΛΟΓΙΣΤΗ.
Βασικές έννοιες προγραμματισμού Κεφάλαιο 7 ο. Βασικές έννοιες προγραμματισμού Αλφάβητο και τύποι δεδομένων Σταθερές και μεταβλητές Τελεστές, συναρτήσεις.
Πληροφορική 2 Γλώσσες Προγραμματισμού 1. Γλώσσες προγραμματσιμού  Επιτρέπουν την κωδικοποίηση των αλγορίθμων  Η εκτέλεση ενός προγράμματος θα πρέπει.
ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
Εισαγωγή στην Python.
Το εσωτερικό ενός υπολογιστή
ΚΕΦΑΛΑΙΟ 2ο - ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ
ΑΛΓΟΡΙΘΜΟΣ ΠΡΟΒΛΗΜΑ ΑΛΓΟΡΙΘΜΟΣ ΛΥΣΗ
Δείκτες Προγραμματισμός Ι
στην Επιστήμη των Υπολογιστών Κωδικός Διαφανειών: MKT110
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
Εισαγωγή στις Αρχές της Επιστήμης των Η/Υ
Analog vs Digital Δούρβας Ιωάννης ΙΩΑΝΝΗΣ ΔΟΥΡΒΑΣ.
Η Γλώσσα Pascal Υποπρογράμματα
Μανασσάκης Βασίλης Καθηγητής Πληροφορικής
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον
2ο ΓΥΜΝΑΣΙΟ ΣΗΤΕΙΑΣ - ΤΑΞΗ Γ'
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ Η/Υ
ΕΝΟΤΗΤΑ 1 – Γνωρίζω τον υπολογιστή ως ενιαίο σύστημα
1.1 Ψηφιακό – Αναλογικό σύστημα 1.2 Ο υπολογιστής ως ψηφιακή μηχανή Τζικούδη – Παπαγεωργίου Χρυσάνθη ΑΣΠΑΙΤΕ – ΕΠΠΑΙΚ – Τμήμα Ε2 Θεσσαλονίκη Νοέμβριος.
Διαχειρίζεται, Επεξεργάζεται και Ανταλλάσσει
ΠΛΗΡΟΦΟΡΙΚΗ Γ΄ Γυμνασίου Α΄ Τρίμηνο
ΗΜΥ 210: Λογικός Σχεδιασμός
Κυριάκου Νικόλαος Πληροφορικής ΠΕ-20
Βασικές έννοιες (Μάθημα 2) Τίτλος: Η Συσκευή
ΕΚΦΡΑΣΕΙΣ, ΑΝΑΜΟΝΕΣ (DELAYS), ΗΧΟΙ
UNIT 1 Τα Πρώτα Προγράμματα.
Μεταγράφημα παρουσίασης:

Προγραμματισμός Βασικές Έννοιες

Γενικές Πληροφορίες Διδάσκων: Πέτρος Λάμψας Υπεύθυνος Εργαστηρίου: Γιώργος Δημητρίου Θεωρία: Παρασκευή 10:00-13:00 Δικτυακός τόπος μαθήματος: Προγραμματισμός

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

Προγραμματισμός Ένας αλγόριθμος μπορεί να περιγραφεί σε μια συμβατική καθομιλουμένη γλώσσα ή/και με την βοήθεια κάποιας ειδικής γλώσσας προσδιορισμού. Μια γλώσσα προσδιορισμού έχει συγκεκριμένους κανόνες σύνταξης (ποιές προτάσεις επιτρέπονται) και συγκεκριμένη σημασιολογία (τη σημασία έχει κάθε επιτρεπτή πρόταση). Μια γλώσσα προγραμματισμού είναι μια (ειδική) γλώσσα προσδιορισμού, η οποία σχεδιάζεται έτσι ώστε κάθε επιτρεπτή πρόταση της να μπορεί να μετατραπεί σε εντολές που εκτελούνται σε ειδικά σχεδιασμένες μηχανές εκτέλεσης –πιο συγκεκριμένα τον επεξεργαστή (CPU) ενός Η/Υ. Γλώσσα προγραμματισμού

Προγραμματισμός Ένα πρόγραμμα δεν είναι τίποτα παραπάνω (αλλά ούτε και λιγότερο) από μια πρόταση που γράφεται στα πλαίσια μιας γλώσσας προγραμματισμού. Όπως κάθε πρόταση, ένα πρόγραμμα πρέπει να είναι (α) συντακτικά σωστό (β) σημασιολογικά ορθό. Αντίθετα με περιγραφές που δίνονται σε κάποια καθομιλουμένη ή/και μαθηματική γλώσσα, ένα πρόγραμμα μπορεί να εκτελεστεί σε έναν Η/Υ. Πρόγραμμα

Προγραμματισμός Το συντακτικό μιας γλώσσας ορίζει το σύνολο των επιτρεπτών προτάσεων (ακολουθία συμβόλων). Κάθε επιτρεπτή πρόταση αντιστοιχεί σε ένα συντακτικά ορθό πρόγραμμα, το οποίο μπορεί να μεταφραστεί επιτυχώς και να εκτελεστεί. Υπάρχουν ειδικές γλώσσες περιγραφής των κανόνων σύνταξης γλωσσών προγραμματισμού, π.χ.: –Extended Backus Naur Form (EBNF) –συντακτικά διαγράμματα Ο μόνος τρόπος να κατανοήσει κανείς (πλήρως) όλες τις επιτρεπτές προτάσεις μιας γλώσσας είναι να συμβουλευτεί αυτές τις περιγραφές. Συντακτικό

Προγραμματισμός ΣυμβολισμόςΣημασία Α Α Β Α ακολουθούμενο από το Β Α | Β Α ή Β [Α] «τίποτα» ή Α {Α} «τίποτα» ή Α ή Α Α ή Α Α Α ή... 'Α' το τερματικό στοιχείο 'Α' EBNF

Προγραμματισμός ΣυμβολισμόςΣημασία Α Α και μετά Β Α ή Β «τίποτα» ή Α «τίποτα» ή Α ή Α Α ή Α Α Α ή... το τερματικό στοιχείο 'Α' Συντακτικά διαγράμματα Α ΑΒ Α Β Α Α Α

Προγραμματισμός Σύνταξη: κανόνες για τον σχηματισμό προτάσεων. Σημασία: το νόημα (π.χ. σειρά αποτίμησης) που έχουν οι συντακτικά επιτρεπτές προτάσεις. Η σύνταξη μιας γλώσσας δεν μπορεί να ορίσει ταυτόχρονα και την σημασία της, αλλά υπάρχουν γλώσσες προσδιορισμού σημασίας (σημασιολογίας). Υπάρχουν όμως συντακτικά επιτρεπτές προτάσεις που δεν έχουν ορισμένη (μια μοναδική) σημασία; Σε γλώσσες προγραμματισμού: πιθανώς, αλλά είναι λάθος(!) να τις χρησιμοποιεί ο προγραμματιστής. Στην ανθρώπινη γλώσσα: βεβαίως, στην οποία περίπτωση απλά προκαλείται κάποια σύγχιση. Σύνταξη και σημασία

Προγραμματισμός ακέραια-έκφραση = ακέραιος[πράξη ακέραια-έκφραση] ακέραιος = [πρόσημο]νούμερο{νούμερο} νούμερο = '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9' πρόσημο = '+'|'-' πράξη = '+'|'-'|'*'|'/' ΕBNF ακέραια-έκφραση ακέραιος πρόσημο Syntax diagram ψηφίο + - πράξη ψηφίο ακέραια-έκφραση ακέραιος πράξη * / + - πρόσημο 0 1 ψηφίο 9

Προγραμματισμός Συντακτικά ορθές προτάσεις: /5-2 Όμως, σε τι τιμές αντιστοιχούν; (-2)+(13) ή –(2+13) 15/5-2 (15/5)-2 ή 15/(5-2) Η προηγούμενη σύνταξη δεν ορίζει (ούτε και θα μπορούσε ποτέ να ορίσει) την σειρά αποτίμησης, δηλαδή την σημασία, των παραπάνω προτάσεων. Παραδείγματα

Προγραμματισμός Εκτέλεση εντολών

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

Προγραμματισμός Μοντέλο εκτέλεσης προγράμματος εκτέλεσε την εντολή μεταβλητές προγράμματος επέλεξε την πρώτη εντολή επέλεξε την επόμενη εντολή μνήμη διάβασμα γράψιμο

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

Προγραμματισμός πρόγραμμα P(x,y) 1:s <- 0 2:if (x=0) goto 6 3:s <- s + y 4:x <- x -1 5:if (1=1) goto 2 6:print s εκτέλεση P(3,5) εκτέλεση P(0,5) παράμετροι s <- 0 if (x=0) goto 6 print s s <- 0 if (x=0) goto 6 s <- s + y x <- x -1 if (1=1) goto 2 if (x=0) goto 6 s <- s + y x <- x -1 if (1=1) goto 2 if (x=0) goto 6 s <- s + y x <- x -1 if (1=1) goto 2 if (x=0) goto 6 print s

Προγραμματισμός Το κείμενο (κώδικας) του προγράμματος είναι δεδομένο, δεν αλλάζει την ώρα της εκτέλεσης. Παρ’ όλα αυτά, όταν χρησιμοποιούνται εντολές ελέγχου, η σειρά με την οποία θα εκτελεσθούν οι εντολές στην πραγματικότητα δεν είναι γνωστή εκ των πρoτέρων. Η σειρά εκτέλεσης εξαρτάται από την (αρχική / τρέχουσα) κατάσταση του προγράμματος. Μια αρχική κατάσταση ΑΚ1 μπορεί να οδηγήσει σε μια εκτέλεση Ε1, και μια αρχική κατάσταση ΑΚ2 μπορεί να οδηγήσει σε μια διαφορετική εκτέλεση Ε2. Σχόλιο

Προγραμματισμός Χρησιμοποιούμε τον όρο «υποπρόγραμμα» για να αναφερθούμε σε μια ομάδα εντολών (και δεδομένων) που είναι συντακτικά ή/και εκτελεστικά ανεξάρτητη (αυτόνομη) από τον υπόλοιπο κώδικα. Ένα πρόγραμμα μπορεί να αποτελείται από (ή να χρησιμοποιεί) πολλά διαφορετικά υποπρογράμματα. Η χρήση υποπρογραμμάτων βοηθά σημαντικά στην (α) δομημένη ανάπτυξη, (β) αναγνωσιμότητα και (γ) επαναχρησιμοποίηση του κώδικα. Όταν καλείται ένα υποπρόγραμμα, η εκτέλεση μεταφέρεται στο υποπρόγραμμα, και όταν τερματιστεί η εκτέλεση του, επιστρέφει στο πρόγραμμα που πραγματοποίησε την κλήση. Υποπρογράμματα

Προγραμματισμός πρόγραμμα P1 code A call P2 code B πρόγραμμα P2 call P3 code C return εκτέλεση P1 πρόγραμμα P3 code D return code A call P2 call P3 code D return code C return code B

Προγραμματισμός Μνήμη και μεταβλητές

Προγραμματισμός Καθώς η μνήμη του Η/Υ είναι δυαδική, όλα τα δεδομένα ενός προγράμματος αποθηκεύονται σαν ακολουθίες από bits, δηλαδή τιμές 0 ή 1. Κωδικοποίηση: η μετατροπή δεδομένων από ένα σύστημα σε ένα άλλο (π.χ. δεκαδικό -> δυαδικό). Όσο μεγαλύτερο το πεδίο τιμών που επιθυμούμε να καλύψουμε και όσο μεγαλύτερη η ακρίβεια με την οποία επιθυμούμε να καταγράψουμε τις τιμές αυτές, τόσο περισσότερα bits/bytes απαιτούνται για την αποθήκευση της ψηφιακής τιμής. Με Ν bits κωδικοποιούμε 2 Ν διαφορετικές τιμές, π.χ. Καλύπτουμε το πεδίο φυσικών [0...2 Ν -1] ή αντίστοιχα το πεδίο ακεραίων [-2 Ν Ν-1 -1]. Κωδικοποίηση δεδομένων στους Η/Υ

Προγραμματισμός Η μνήμη των Η/Υ είναι ουσιαστικά μια διάταξη από «κουτιά» κάθε ένα από τα οποία μπορεί να χρησιμοποιηθεί για την αποθήκευση 1 bit (0 / 1). Ένας τυπικός Η/Υ διαθέτει κύρια μνήμη (RAM) εκατοντάδων Megabyte έως και λίγων Gigabyte, και σκληρό δίσκο πολλών δεκάδων Gigabyte. –1 byte = 8 bits –1 KiB = 1024 B = 2 10 B (1 KB = 1000 B = 10 3 B) –1 MiB = 1024 KiB (1 MB = 1000 KB) –1 GiB = 1024 MiB (1 GB = 1000 MB) –1 TiB = 1024 GiB (1 TB = 1000 GB) –… Μνήμη Η/Υ

Προγραμματισμός Η μνήμη του Η/Υ μοντελοποιείται (αφαιρετικά) ως μια συστοιχία από Ν (συνεχόμενα) bytes. Η μνήμη προσπελαύνεται, προσδιορίζοντας: (α) την θέση (διεύθυνση) του byte από το οποίο αρχίζει να εφαρμόζεται η πράξη (β) τον αριθμό bytes που αφορά η πράξη Η πράξη «ανάγνωσης» επιστρέφει τις τιμές των bytes που έχουν αποθηκευτεί στις αντίστοιχες θέσεις. Η πράξη «γραψίματος» προσδιορίζει τις τιμές των bytes προς αποθήκευση στις αντίστοιχες θέσεις. Μοντελοποίηση και πρόσβαση μνήμης

Προγραμματισμός Ν-1 Ν διεύθυνσηπεριεχόμενα μηχανισμός πρόσβασης μνήμης op=read adr=3 len=

Προγραμματισμός Ν-1 Ν διεύθυνσηπεριεχόμενα μηχανισμός πρόσβασης μνήμης Η/Υ adr=1 len= op=write

Προγραμματισμός Για κάθε δεδομένο που χρησιμοποιεί ένα πρόγραμμα, πρέπει να καθοριστεί (από τον προγραμματιστή): (α) η θέση μνήμης για την αποθήκευση του (β) ο αριθμός των bytes που χρειάζονται για την αποθήκευση των τιμών που μπορεί να λάβει (γ) η κωδικοποίηση που χρησιμοποιείται για κάθε τιμή στο δυαδικό σύστημα (της μνήμης) Είναι ιδιαίτερα δύσκολο άν όχι αδύνατο για τον προγραμματιστή να θυμάται μια τέτοια αντιστοίχιση, για κάθε δεδομένο που χρησιμοποιεί το πρόγραμμα, κατά την συγγραφή ή/και ανάγνωση του κώδικα. Χρειάζεται κατάλληλη υποστήριξη από τις γλώσσες προγραμματισμού... Δεδομένα προγράμματος και μνήμη

Προγραμματισμός Για διευκόλυνση του προγραμματιστή, κάθε γλώσσα ορίζει ένα σύνολο από βασικούς τύπους δεδομένων. Κάθε βασικός τύπος έχει ένα (α) εκ των προτέρων καθορισμένο μέγεθος (σε bytes) και χαρακτηρίζεται (β) από μια συγκεκριμένη δυαδική κωδικοποίηση και κατα συνέπεια και ένα αντίστοιχο πεδίο τιμών. Ο προγραμματιστής μπορεί να ορίσει κάθε δεδομένο του προγράμματος ως ένα αντικείμενο ενός τύπου, καθορίζοντας έτσι (έμμεσα) τόσο το μέγεθος όσο και την κωδικοποίηση του (την σημασία των bits). Σημείωση: η μνήμη του Η/Υ αποθηκεύει τις τιμές των bits/bytes χωρίς να γνωρίζει τον τύπο τους, δηλαδή το πως αυτές ερμηνεύονται από το πρόγραμμα. Τύποι δεδομένων

Προγραμματισμός Για ευκολία, σε κάθε αντικείμενο δεδομένων δίνεται (εκτός από τον τύπο του) και ένα μνημονικό όνομα. Το όνομα του δεδομένου μπορεί να χρησιμοποιείται, αντί της διεύθυνσης του, στις πράξεις ανάγνωσης και αλλαγής τών τιμών του. Σημείωση: η πρόσβαση στην μνήμη εξακολουθεί να γίνεται με βάση την θέση μνήμης και τον αριθμό bytes προς ανάγνωση/αποθήκευση – η αντιστοίχιση αυτή γίνεται (αυτόματα) από την εκάστοτε γλώσσα προγραμματισμού (μεταφραστή). Ονομασία (θέσεων) δεδομένων

Προγραμματισμός Με τον όρο μεταβλητή αναφερόμαστε σε ένα αντικείμενο δεδομένων του προγράμματος στο οποίο έχει δοθεί ένα όνομα και τύπος. Όταν λέμε ότι «διαβάζουμε» μια μεταβλητή, εννοούμε ότι διαβάζουμε την τιμή που έχει αποθηκευτεί στην αντίστοιχη θέση της μνήμης. Όταν λέμε ότι «αναθέτουμε» μια τιμή σε μια μεταβλητή, εννοούμε ότι γράφουμε αυτή την τιμή στην αντίστοιχη θέση της μνήμης. Με τον όρο «δέσμευση» μεταβλητής εννοούμε την δέσμευση αντίστοιχου χώρου στην μνήμη, και με τον όρο «ζωή» μεταβλητής εννοούμε το διάστημα κατά το οποίο αυτός ο χώρος παραμένει δεσμευμένος. Μεταβλητές προγράμματος

Προγραμματισμός Ν-1 Ν διεύθυνσηπεριεχόμενα int v; θεση/διεύθυνση: 3 τύπος: int τύπος int μέγεθος: 2 bytes ερμηνεία: ακέραιος κωδικοποίηση: 2’s complement τι τιμή έχει η μεταβλητή v; διάβασε από την διεύθυνση της v όσα bytes ορίζει ο τύπος της T, και ερμήνεψε τα σύμφωνα με την σύμβαση κωδικοποίησης του T αποτέλεσμα

Προγραμματισμός Κάθε γλώσσα δίνει, μέσω κατάλληλων εκφράσεων, την δυνατότητα χρήσης της τιμής των μεταβλητών για την παραγωγή νέων τιμών (του ιδίου τύπου). Κάθε τύπος δεδομένων μπορεί να έχει ειδικούς τελεστές πράξεων – με αντίστοιχη σημασιολογία. Οι τιμές που υπολογίζονται μέσα από εκφράσεις πράξεων μπορεί να χρησιμοποιηθούν «αυτούσιες» ή/και να αποθηκευτούν σε (νέες) μεταβλητές. Η αποθήκευση μιας τιμής σε μεταβλητή γίνεται μέσω ειδικής πράξης που ονομάζεται και ανάθεση. Συνήθως υπάρχει ένας μοναδικός τελεστής ανάθεσης, για όλους τους τύπους των δεδομένων. Τελεστές πράξεων και ανάθεσης

Προγραμματισμός Ένα πρόγραμμα πρέπει να μπορεί να εισάγει/εξάγει δεδομένα από/προς το «περιβάλλον» του, συνήθως από το πληκτρολόγιο και προς την οθόνη του Η/Υ. Για αυτό το σκοπό ορίζονται/υποστηρίζονται ειδικές εντολές εισόδου/εξόδου (input/output commands). Είσοδος / Έξοδος (input/output) πρόγραμμα είσοδος έξοδος

Προγραμματισμός Μετάφραση

Προγραμματισμός Οι εντολές μιας γλώσσας προγραμματισμού σπάνια αντιστοιχούν (επακριβώς) σε εντολές της γλώσσας (μηχανής) που εκτελεί ένας επεξεργαστής Η/Υ. Για να εκτελεστεί ένα πρόγραμμα, πρέπει οι εντολές του να μετατραπούν σε εντολές γλώσσας μηχανής. Αυτό ονομάζει μεταγλώτιση και γίνεται από ειδικά προγράμματα, τους μεταγλωτιστές (compilers). Η μεταγλώτιση γίνεται (συνήθως) ως ξεχωριστή διαδικασία, πολύ πριν αρχίσει η εκτέλεση του κώδικα. Υπάρχουν περιπτώσεις όπου η μετάφραση γίνεται ακριβώς πριν την εκτέλεση (just in time compilation). Μετάφραση / μεταγλώτιση (compilation)

Προγραμματισμός PxPx CPU y compiler Χ -> Y P’y

Προγραμματισμός PxPx CPU y compiler X -> Z P’’y P’z compiler Z -> Y

Προγραμματισμός Όταν ο κώδικας δεν μεταφράζεται σε γλώσσα μηχανής αλλά εκτελείται, εντολή προς εντολή, μέσα από ένα άλλο πρόγραμμα, τότε αυτό ονομάζεται ερμηνεία και το πρόγραμμα που την πραγματοποιεί διερμηνέας (interpreter). Η ερμηνεία οδηγεί συνήθως σε πιο αργή εκτέλεση από την μετάφραση, γιατί (α) δεν γίνεται αποδοτική απεικόνιση των πράξεων σε εντολές επεξεργαστή, και (β) δεν μπορεί να γίνουν βελτιστοποιήσεις. Όμως με την ερμηνεία ο κώδικας είναι (1) συνήθως πιο μικρός σε μέγεθος και (2) μεταφέρσιμος οπότε μπορεί να εκτελεσθεί σε διαφορετικές πλατφόρμες χωρίς ανάγκη μετάφρασης για κάθε μια από αυτές. Ερμηνεία (interpretation)

Προγραμματισμός PxPx CPU y compiler X -> Z P’z Z interpreter

Προγραμματισμός Γιατί δεν γράφουμε τα προγράμματα μας απ’ ευθείας στην γλώσσα του επεξεργαστή; 1. Ανεξαρτησία: ο κώδικας υψηλού επιπέδου έχει ισχύ ανεξάρτητα από τους διάφορους επεξεργαστές Η/Υ που υπάρχουν –και θα υπάρξουν στο μέλλον. 2.Αφαίρεση: ο κώδικας υψηλού επιπέδου βασίζεται σε πολύπλοκες εκφράσεις (που μπορεί να μην υφίστανται στην γλώσσα ενός επεξεργαστή) που διευκολύνουν σημαντικά τον προγραμματισμό. 3.Αναγνωσιμότητα: ο κώδικας υψηλού επιπέδου είναι (συνήθως) πολύ πιο κατανοητός σε έναν άνθρωπο από τον κώδικα σε επίπεδο επεξεργαστή, και άρα είναι πιο εύκολο να επιδιορθωθεί / αλλαχθεί. Σχόλιο

Προγραμματισμός Αν στη μετάφραση εντοπιστεί συντακτικό λάθος, αυτή τερματίζεται (εκτυπώνεται μήνυμα λάθους), διαφορετικά παράγεται κώδικας μηχανής. Το γεγονός ότι ένα πρόγραμμα μεταφράστηκε επιτυχώς δεν εγγυάται ότι η εκτέλεση του θα έχει και το επιθυμητό / αναμενόμενο αποτέλεσμα. Η εκτέλεση ενός (μεταγλωτισμένου) προγράμματος γίνεται πάντα σωστά, δηλαδή όπως ορίζεται από την σημασιολογία της γλώσσας προγραμματισμού. Αυτό δεν σημαίνει ότι το πρόγραμμα κάνει αυτό που θέλουμε – μπορεί να υπάρχουν σημασιολογικά ή/και λογικά λάθη. Ορθότητα προγραμμάτων

Προγραμματισμός Υπολογισμός x= n Στην καθομιλουμένη γλώσσα: Θέσε το x ίσο με 0. Πρόσθεσε στο x την τιμή 1. Πρόσθεσε στο x την τιμή 2. Πρόσθεσε στο x την τιμή Πρόσθεσε στο x την τιμή n-1. Πρόσθεσε στο x την τιμή n. Στη γλώσσα προγραμματισμού C: x = 0; x = x+1; x = x+2 x = x+3;... x = x+n-1; x = x+n; συντακτικό λάθος δεν έχουμε βάλει ; εκεί που θα έπρεπε εντοπίζεται από τον μεταφραστή

Προγραμματισμός Υπολογισμός x= n Στην καθομιλουμένη γλώσσα: Θέσε το x ίσο με 0. Πρόσθεσε στο x την τιμή 1. Πρόσθεσε στο x την τιμή 2. Πρόσθεσε στο x την τιμή Πρόσθεσε στο x την τιμή n-1. Πρόσθεσε στο x την τιμή n. Στη γλώσσα προγραμματισμού C: x = 0; x = x+1; x == x+2; x = x+3;... x = x+n-1; x = x+n; σημασιολογικό λάθος δεν έχουμε καταλάβει τι κάνει ο τελεστής == δεν εντοπίζεται από τον μεταφραστή

Προγραμματισμός Υπολογισμός x= n Στην καθομιλουμένη γλώσσα: Θέσε το x ίσο με 0. Πρόσθεσε στο x την τιμή 1. Πρόσθεσε στο x την τιμή Πρόσθεσε στο x την τιμή n-1. Πρόσθεσε στο x την τιμή n. Στη γλώσσα προγραμματισμού C: x = 0; x = x+1; x = x+3;... x = x+n-1; x = x+n; λογικό λάθος έχουμε υλοποιήσει λάθος αλγόριθμο δεν εντοπίζεται από τον μεταφραστή

Προγραμματισμός Συντακτικό επίπεδο (εύκολο) –ο κώδικας δεν αντιστοιχεί σε επιτρεπτή πρόταση σύμφωνα με τους κανόνες σύνταξης της γλώσσας Σημασιολογικό επίπεδο (δύσκολο) –ο κώδικας είναι συντακτικά σωστός αλλά εμείς δεν χρησιμοποιούμε σωστά κάποια εντολή (η πρόθεση μας δεν συμπίπτει με την αντίστοιχη σημασιολογία) και παράγεται λάθος αποτέλεσμα Λογικό επίπεδο (πιο δύσκολο) –ο κώδικας είναι συντακτικά σωστός και όλες οι εντολές χρησιμοποιούνται σωστά, όμως υπάρχει λάθος σε επίπεδο αλγορίθμου (σκέψης) Αποσφαλμάτωση

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