HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Γραφήματα & Επίπεδα Γραφήματα
Advertisements

Βασικές έννοιες αλγορίθμων
Επιμέλεια: Τίκβα Χριστίνα
Κεφάλαιο Τμηματικός προγραμματισμός
ΠΙΝΑΚΕΣ ΜΑΘΗΜΑ 6.
-Στοίβα-Ουρά - Πλεονεκτήματα πινάκων -Δομές δεδομένων δευτερεύουσας μνήμης -Πληροφορική και δεδομένα -Παραδείγματα-Προβλήματα ψευδοκώδικα.
Τι είναι ο υπολογιστής; Τι είναι ο προγραμματισμός
Τα στοιχειώδη περί γεωδαιτικών υπολογισμών
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Σημειώσεις : Χρήστος Μουρατίδης
ΣΤΟΙΧΕΙΑ ΨΕΥΔΟΚΩΔΙΚΑ ΒΑΣΙΚΕΣ ΔΟΜΕΣ ΒΑΣΙΚΟΙ ΑΛΓΟΡΙΘΜΟΙ ΠΙΝΑΚΩΝ
Προγραμματισμός Ι Πίνακες •Ο πίνακας είναι μία συλλογή μεταβλητών ίδιου τύπου, οι οποίες είναι αποθηκευμένες σε διαδοχικές θέσεις μνήμης. Χρησιμοποιείται.
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
ΘΕΩΡΙΑ ΔΙΑΛΕΞΗ 4 Αριθμητικές εκφράσεις και πράξεις Εντολές ανάθεσης
Εκτέλεση Αλγορίθμων σε ψευδογλώσσα
ΜΑΘ-3122/106 Προγραμματισμός
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
1 iPac Μια πρώτη γνωριμία Κώστας Βίγλας ΥΚΒ. 26/6/2002 Ενημέρωση πάνω στις νέες ψηφιακές υπηρεσίες 2 Περιεχόμενα 1 iPac  Τί είναι το iPac  Δυνατότητες.
-17 Προσδοκίες οικονομικής ανάπτυξης στην Ευρώπη Σεπτέμβριος 2013 Δείκτης > +20 Δείκτης 0 a +20 Δείκτης 0 a -20 Δείκτης < -20 Σύνολο στην Ευρωπαϊκή Ένωση:
Κεφάλαιο 2ο Πεπερασμένα αυτόματα.
1 AYTOΣ Ο ΠΛΑΝΗΤΗΣ ΕΙΝΑΙ ΠΟΛΥ ΕΝΔΙΑΦΕΡΩΝ ΤΟΠΟΣ ΓΙΑ ΝΑ ΖΕΙ ΚΑΝΕΙΣ….
1 ΕΝΤΟΛΕΣ ΠΛΗΡΟΦΟΡΙΩΝ ΓΕΝΙΚΕΣ ΠΛΗΡΟΦΟΡΙΕΣΓΕΝΙΚΕΣ ΠΛΗΡΟΦΟΡΙΕΣ ΘΕΣΗ ΣΗΜΕΙΟΥΘΕΣΗ ΣΗΜΕΙΟΥ ΑΠΟΣΤΑΣΗΑΠΟΣΤΑΣΗ ΕΜΒΑΔΟΝΕΜΒΑΔΟΝ.
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1 Συναρτησιακές Εξαρτήσεις.
ΙΣΟΛΟΓΙΣΜΟΣ ΒΑΣΕΙ Δ.Λ.Π. (ΕΝΑΡΞΗΣ)
Η αλληλουχία των ενεργειών δεν είναι πάντα μία και μοναδική!!!
Εισαγωγή στις Αρχές της Επιστήμης των Η/Υ» Β΄ τάξης Γενικού Λυκείου
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
Προγραμματισμός ΙΙ Διάλεξη #6: Απλές Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
Ολυμπιάδα Πληροφορικής
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ
1 Α. Βαφειάδης Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ.Ε.Ι Θεσσαλονίκης Μάθημα Προηγμένες Αρχιτεκτονικές Υπολογιστών Κεφαλαίο Τρίτο Συστήματα.
Η αλληλουχία των ενεργειών δεν είναι πάντα μία και μοναδική!!!
ΣΥΝΑΡΤΗΣΕΙΣ.
Τεχνολογία ΛογισμικούSlide 1 Αλγεβρική Εξειδίκευση u Καθορισμός τύπων αφαίρεσης σε όρους σχέσεων μεταξύ τύπων λειτουργιών.
Μοντέλα Συστημάτων Παρουσιάσεις των συστημάτων των οποίων οι απαιτήσεις αναλύονται.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Μεταβλητές – εντολές εκχώρησης- δομή ακολουθίας
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
Ενότητα Α.4. Δομημένος Προγραμματισμός
Η αλληλουχία των ενεργειών δεν είναι πάντα μία και μοναδική!!!
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
1 ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Πίνακας Συμβόλων Symbol Table.
1.5 Γλώσσες Προγραμματισμού
Διδακτική της Πληροφορικής ΗΥ302 Εργασία :Παρουσίαση σχολικού βιβλίου Γ’ Λυκείου Τεχνολογικής Κατεύθυνσης «Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον»
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 3 Η Σημασιολογία των Γλωσσών Προγραμματισμού Προπτυχιακό.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Προπτυχιακό.
Κεφάλαιο 10 – Υποπρογράμματα
Κάντε κλικ για έναρξη… Τ Ο ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ Κέντρο εντολών Χώρος γραφικών (σελίδα) Χώρος σύνταξης διαδικασιών.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language.
Μερικές φορές το αποτέλεσμα εμφανίζεται αμέσως από κάτω.
Βασικά στοιχεία της Java
ΚΕΦΑΛΑΙΟ Το αλφάβητο της ΓΛΩΣΣΑΣ
Πληροφορική 2 Γλώσσες Προγραμματισμού 1. Γλώσσες προγραμματσιμού  Επιτρέπουν την κωδικοποίηση των αλγορίθμων  Η εκτέλεση ενός προγράμματος θα πρέπει.
ΑΛΓΟΡΙΘΜΟΣ ΠΡΟΒΛΗΜΑ ΑΛΓΟΡΙΘΜΟΣ ΛΥΣΗ
Ενισχυτική διδασκαλία
Η Γλώσσα Pascal Υποπρογράμματα
Μανασσάκης Βασίλης Καθηγητής Πληροφορικής
Εισαγωγή στον Προγ/μό Υπολογιστών
Β.ΕΠΑΛ-Γενικής Παιδείας  ΜΑΘΗΜΑ: Εισαγωγή στης αρχές Επιστήμης των Η/Υ  ΚΕΦΑΛΑΙΟ 4: Γλώσσες Αναπαράστασης Αλγορίθμων  ΕΝΟΤΗΤΑ 4.2: Δομή Ακολουθίας 
UNIT 1 Τα Πρώτα Προγράμματα.
Μεταγράφημα παρουσίασης:

HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος Νικολάου

Διάλεξη 1η (και μοναδική) ΕΝΟΤΗΤΑ ΙV ΛΑΘΗ ΚΑΙ ΕΠΙΔΙΟΡΘΩΣΗ Διάλεξη 1η (και μοναδική) HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Περιεχόμενα Λάθη κατά τη μεταγλώττιση Λάθη κατά την εκτέλεση HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Λάθη κατά τη μεταγλώττιση Συντακτικά λάθη Το πρόγραμμα μας περιέχει λάθη ως προς την συντακτική του δομή Σημασιολογικά λάθη Το πρόγραμμά μας περιέχει λάθη τα οποία οφείλονται σε αποκλίσεις από τους κανόνες της γλώσσας HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Συντακτικά λάθη (1/15) Αναγνωρίζονται από τον τρόπο που ο μεταγλωττιστής αναφέρει το λάθος “syntax error..” “parse error..” “…κάτι expected…” “…κάτι missing…before / after… κάτι άλλο..” Είναι συνηθισμένο ένα συντακτικό λάθος να προκαλεί σε επόμενα τμήματα του κώδικα εμφάνιση σημασιολογικών λαθών (θα δούμε γιατί) Τα οποία ωστόσο οφείλονται αποκλειστικά και μόνο στην ύπαρξη του συντακτικού λάθους και με την επιδιόρθωση του επιλύονται HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Συντακτικά λάθη (2/16) Παραδείγματα Δεν έχουμε εισάγει σαν πρώτη γραμμή του προγράμματος το #include “servant.h” όπως θα έπρεπε και δεν αναγνωρίζονται οι λέξεις κλειδιά της FLIP HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Ξεχάσαμε το ; μετά το name και το ; μετά το RECEND Συντακτικά λάθη (3/16) Ξεχάσαμε το ; μετά το name και το ; μετά το RECEND 16 17 18 Πρώτα εντοπίζουμε τα συντακτικά λάθη και σε κάθε περίπτωση το είδος του συντακτικού λάθους Έπειτα ελέγχουμε εάν μπορούμε αμέσως να διακρίνουμε το σημείο του κώδικα που το προκαλεί. Εάν τύχει και έχουμε για την ίδια γραμμή κώδικα πλέον του ενός λάθη (όπως στο παράδειγμα) και στην ίδια γραμμή έχουμε κώδικα που μπορεί να σπάσει σε περισσότερες γραμμές χωρίς να αλλάξει το κάνουμε (για να διακρίνουμε καλύτερα τα ξεχωριστά λάθη και τις γραμμές εμφάνισής τους) HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Συντακτικά λάθη (4/16) Πως συντάσσουμε το πρόγραμμά μας ώστε να επιλύουμε όσο το δυνατόν ευκολότερα τα συντακτικά λάθη; Αυξητικά, προσθέτοντας τμήματα αφού σιγουρέψουμε ότι το τμήμα πάνω στο οποίο προσθέτουμε είναι συντακτικά ορθό, κάνοντας κάθε φορά compile Έτσι, όταν εμφανιστεί ένα λάθος ξέρουμε ότι οφείλεται στην τελευταία προσθήκη και δεν ψάχνουμε ολόκληρο τον κώδικα Κάθε φορά το τμήμα που κάνουμε compile πρέπει προφανώς να είναι συντακτικά και σημασιολογικά αυτούσιο Δηλ. να μπορεί να κάνει compile από μόνο του, θα δούμε παραδείγματα γι’ αυτό HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Κάθε μεγαλύτερη έλλειψη αναπαριστά και την επόμενη προσαύξηση Συντακτικά λάθη (5/16) Κάθε μεγαλύτερη έλλειψη αναπαριστά και την επόμενη προσαύξηση Με τον τρόπο αυτό, όταν εμφανιστεί ένα συντακτικό λάθος, αν ζητούμε την αιτία του κακού στην τελευταία προσαύξηση. Πώς όμως; 1. Κρύβουμε όλη την προσαύξηση με σχόλια και κάνουμε compile. Η προσθήκη δεν είναι πάντα ένα τμήμα κώδικα, αλλά μπορεί να είναι η ένωση διάσπαρτων τμημάτων σε διαφορετικά σημεία. Τα κρύβουμε όλα ως σχόλια. Αυτό λέγεται commenting out. 2. Εμφανίζουμε σταδιακά τον κρυμμένο κώδικα, ξεκινώντας από την αρχή του προγράμματος προς τα κάτω, μόνο ως μικρά αυτούσια συστατικά τμήματα. Π.χ. ένα κρύψαμε δέκα δηλώσεις ,μεταβλητών τις εμφανίζουμε μία-μια και όχι όλες μαζί. Εάν κρύψαμε μία συνάρτηση, εμφανίζουμε μόνο το βασικό block βάζοντας μία προσωρινή RESULT (dummy), χωρίς να εμφανίσουμε τις εντολές. 3. Προσέξτε ότι όσο μικρότερη η προσθήκη τόσο ευκολότερα (δηλ. βάσει της διαδικασίας γρηγορότερα) για σας να εντοπίσετε το συντακτικό λάθος. HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Η τελευταία προσαύξηση Όπως φαίνεται προκάλεσε πολλά λάθη Συντακτικά λάθη (6/16) Η τελευταία προσαύξηση Όπως φαίνεται προκάλεσε πολλά λάθη HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Συντακτικά λάθη (7/16) Πρώτη κίνηση: commenting out όλης της τελευταίας προσαύξησης Τώρα πρέπει να έχουμε (προφανώς) ένα συντακτικά ορθό πρόγραμμα HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Δεύτερη κίνηση: εμφανίζουμε την κρυμμένη προσαύξηση τμηματικά Συντακτικά λάθη (8/16) Δεύτερη κίνηση: εμφανίζουμε την κρυμμένη προσαύξηση τμηματικά Όμως κάτι ξεχάσαμε: καθώς επαναφέρουμε ορισμό συνάρτησης, κρύβοντας όμως την υλοποίησή της, πρέπει να βάλουμε μία προσωρινή RESULT (που μετά θα την αφαιρέσουμε). Ο compiler διαμαρτύρεται ότι δεν έχουμε επιστροφή τιμής (θα δούμε μετά ότι αυτό είναι σημασιολογικό λάθος) HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Συντακτικά λάθη (9/16) Με την dummy (προσωρινή / άχρηστη) RESULT, το πρόγραμμά μας κάνει compile. Πάμε λοιπόν να εμφανίσουμε το επόμενο όσο το δυνατόν μικρότερο τμήμα της προσθήκης. HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Συντακτικά λάθη (10/16) Τώρα, ενώ δεν βγαίνει μήνυμα λάθους (Visual Studio) βγαίνει μία προειδοποίηση την οποία δεν πολύ-καταλαβαίνουμε. Ωστόσο, ελέγχουμε την ορθότητα την επαύξησης. Κοιτώντας τις σημειώσεις παρατηρούμε ότι η δήλωση αυτή δεν είναι ορθό συντακτικό για τύπους ADDRESSEX. HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Συντακτικά λάθη (11/16) Μετά την επιδιόρθωση της δήλωσης κάνουμε compile και βλέπουμε ότι όλα είναι εντάξει. Συνεχίζουμε με τον ίδιο τρόπο. Για λόγους πληρότητας θα δείξουμε όλα τα επιμέρους βήματα. HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Συντακτικά λάθη (12/16) HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Συντακτικά λάθη (13/16) HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Συντακτικά λάθη (14/16) Εδώ προειδοποιεί ο compiler ότι έχουμε εντολή ροής ελέγχου με κενή εντολή και «αναρωτιέται» εάν ήταν αυτό εκούσιο. Επειδή ήταν αγνοούμε την προειδοποίηση HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Συντακτικά λάθη (15/16) Εδώ προφανώς και διώχνουμε την κενή dummy εντολή αφού βγάζουμε από τα σχόλια την πραγματική εντολή του IF HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Συντακτικά λάθη (16/16) Ομοίως διώχνουμε την προσωρινή RESULT αφού βγάζουμε από τα σχόλια την πραγματική RSULT της συνάρτησης Τώρα πια επιβεβαιώνουμε ότι η παρούσα έκδοση του προγράμματος είναι συντακτικά ορθή. HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Σημασιολογικά λάθη (1/10) Αυτά τα λάθη δεν σημαίνουν συντακτικές αποκλίσεις αλλά ασυμφωνίες με τους κανόνες της γλώσσας, π.χ. Ασυμφωνίες τύπων, δηλ. χρησιμοποιείτε μεταβλητές ή εκφράσεις με τρόπο που δεν «αρμόζει» Σύγκρουση αναγνωριστικών ονομάτων Απουσία εντολής που επιστρέφει τιμή σε συνάρτηση Παρουσία εντολής που επιστρέφει τιμή σε διαδικασία Χρήση κλήσης διαδικασίας ως έκφρασης Χρήση μη ορισμένου αναγνωριστικού ονόματος HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Σημασιολογικά λάθη (2/10) Εδώ φταίει το γεγονός ότι χρησιμοποιούμε ως μέγεθος πίνακα μεταβλητή ενώ επιτρέπεται μόνο σταθερά. Ασυμφωνίες τύπων 1. Συνήθως εμφανίζονται με μηνύματα του τύπου “..cannot convert..”, ότι δηλ. δεν υφίσταται μετατροπή από κάποιον τύπο σε κάποιον άλλο. Η επιδιόρθωσή τους απαιτεί να ελέγξετε εάν η χρήση των μεταβλητών που υπάρχουν στη γραμμή του λάθους ονομάτων επιτρέπεται βάσει της σημασιολογίας της γλώσσας. HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Σημασιολογικά λάθη (3/10) Εδώ φταίει το γεγονός ότι χρησιμοποιούμε μεταβλητή ειδικού τύπου διεύθυνσης με τον τελεστή / ενώ επιτρέπονται μόνο οι τελεστές + και – στον τύπο αυτό. Ασυμφωνίες τύπων 2. Όταν χρησιμοποιήσουμε μεταβλητές κάποιου τύπου με τελεστές που δεν επιτρέπονται σε αυτόν τον τύπο θα δούμε μηνύματα του τύπου “..no operator defined which..”, ότι δηλ. δεν υφίσταται ο τελεστής για τον τύπο αυτό. Η επιδιόρθωσή τους απαιτεί να ελέγξετε εάν η χρήση του τελεστή στη γραμμή του λάθους επιτρέπεται για τις συγκεκριμένες μεταβλητές βάσει της σημασιολογίας της γλώσσας. HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Σημασιολογικά λάθη (4/10) Εδώ φταίει το γεγονός ότι χρησιμοποιούμε μεταβλητή STRING ως δείκτη σε πίνακα. Ασυμφωνίες τύπων 3. Χρησιμοποιήσουμε άλλο τύπο εκτός ακεραίου για αναφορά σε στοιχείο πίνακα. Θα δείτε ένα παράξενο μήνυμα όπως το παραπάνω το οποίο αναφέρεται σε κώδικα του υπηρέτη. Αυτό σημαίνει απλά ότι έχετε γράψει κάτι που δεν συμβαδίζει με τον υπηρέτη και όχι ότι ο ίδιος ο υπηρέτης έχει συντακτικό λάθος. Το μήνυμα είναι πολύ κωδικοποιημένο. Μπορείτε να θεωρήσετε ότι λέει κάτι σαν: σε πίνακα δέκα αντικειμένων τύπου integer υπάρχει λάθος ως προς το «φιλτράρισμα» του τύπου της έκφρασης δείκτη στοιχείου HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Σημασιολογικά λάθη (5/10) Εδώ φταίει το γεγονός ότι χρησιμοποιούμε to .X (κεφαλαίο) ενώ θα έπρεπε να χρησιμοποιήσουμε το .x (μικρό) Μη ορισμένο αναγνωριστικό όνομα 1. Χρησιμοποιήσουμε μεταβλητή τύπου RECORD με αναφορά σε κάποιο πεδίο το οποίο όμως δεν είναι ορισμένο μέσα στο συγκεκριμένο RECORD. Συνήθως θα δούμε μήνυμα “..is not a member of…” και “…see declaration of…” Επιδιορθώνουμε την αναφορά όπως πρέπει (είτε εισάγουμε το νέο πεδίο ή διορθώνουμε το αναγνωριστικό της αναφοράς) HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Σημασιολογικά λάθη (6/10) Εδώ φταίει το γεγονός ότι χρησιμοποιούμε to i ενώ πιο πριν δεν υπάρχει δηλωμένο (…το μετά δεν παίζει ρόλο) Μη ορισμένο αναγνωριστικό όνομα 2. Χρησιμοποιήσουμε μεταβλητή με όνομα το οποίο δεν αντιστοιχεί σε ορισμένη μεταβλητή στον χώρο που χρησιμοποιείται. Συνήθως θα δούμε μήνυμα “..undeclared identifier…” Επιδιορθώνουμε με την εισαγωγή της αναγκαίας δήλωσης μεταβλητής HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Σημασιολογικά λάθη (7/10) Εδώ φταίει το γεγονός ότι στο block της f δεν υπάρχει καμία RESULT Απουσία εντολής που επιστρέφει τιμή σε συνάρτηση 1. Ορίζουμε συνάρτηση αλλά δεν γράφουμε κάποια εντολή RESULT. Συνήθως θα δούμε μήνυμα “..must return a value…” Επιδιορθώνουμε με την εισαγωγή των αναγκαίων εντολών RESULT ανάλογα με την αλγοριθμική υλοποίηση της συνάρτησης HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Σημασιολογικά λάθη (8/10) Εδώ φταίει το γεγονός ότι στην περίπτωση που το i είναι < 0 δεν θα εκτελεστεί καμία RESULT Απουσία εντολής που επιστρέφει τιμή σε συνάρτηση 2. Ορίζουμε συνάρτηση, έχουμε εντολή RESULT, αλλά υπάρχει ροή εκτέλεσης ώστε ποτέ να μην εκτελεστεί μία εντολή RESULT. Συνήθως θα δούμε μήνυμα “..not all control paths return a value…” Επιδιορθώνουμε με την εισαγωγή των υπολειπόμενων εντολών RESULT ανάλογα με την αλγοριθμική υλοποίηση της συνάρτησης HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Σημασιολογικά λάθη (9/10) Εδώ φταίει το γεγονός η ύπαρξη της RESULT Εντολή που επιστρέφει τιμή σε διαδικασία. Ορίζουμε διαδικασία, αλλά βάζουμε και εντολή RESULT. Συνήθως θα δούμε μήνυμα “..’void’ function returning a value…” και “…see declaration of..” Επιδιορθώνουμε ή αφαιρώντας την εκ παραδρομής RESULT, ή μετατρέποντας σε συνάρτηση, ή χρησιμοποιώντας παράμετρο διεύθυνσης για την επιστροφή αποτελέσματος HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Σημασιολογικά λάθη (10/10) Τα σημασιολογικά λάθη μεταγλώττισης συνήθως επιλύονται εύκολα, αρκεί να γνωρίζετε καλά τη γλώσσα που χρησιμοποιείτε Δυστυχώς τα μηνύματα που θα παρουσιάζει ο μεταγλωττιστής δεν είναι πάντα διαφωτιστικά για σας, οπότε πρέπει να ελέγχετε κάθε τι στη γραμμή για την οποία εντοπίζεται το λάθος HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Λάθη κατά την εκτέλεση (1/3) Όταν αναφερόμαστε σε λάθη εννοούμε αποκλίνουσα συμπεριφορά του προγράμματος κατά την εκτέλεση ως προς τις προδιαγραφές ορθής λειτουργίας: Το πρόγραμμα πρέπει να λύνει το πρόβλημα για το οποίο προορίζεται και μόνο αυτό HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Λάθη κατά την εκτέλεση (2/3) Λάθη αλγοριθμικής σχεδίασης Design errors Λάθη στην χρήση υποπρογραμμάτων τρίτων Library use errors Ελλιπής γνώση της γλώσσας Language misuse Λάθη μετάφρασης του σχεδιασμένου αλγορίθμου σε κώδικα Design / coding mismatches HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Λάθη κατά την εκτέλεση (3/3) Τα λάθη σας δεν είναι απαραίτητο να τερματίζουν το πρόγραμμα με κάποιο system crash ή runtime error του υπηρέτη Απλώς θα παρατηρείτε το πρόγραμμά σας να συμπεριφέρεται με διαφορετικό τρόπο από ότι εσείς νομίζατε ότι σχεδιάσατε Συνήθως μετά από την εκτέλεση της 1ης εντολής που είναι τμήμα του «ένοχου» κώδικα, λάθος τιμές υπολογίζονται και προκαλείται ένα είδος κατακλυσμιαίας διανομής λαθεμένων τιμών ακόμη και από τα «αθώα» τμήματα στη μνήμη του προγράμματος HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Αντιμετώπιση λαθών (1/4) Θα δούμε μερικά μόνο παραδείγματα καθώς γενική και εξαντλητική κατηγοριοποίηση δεν υφίσταται Περισσότερο μας ενδιαφέρει το πώς αντιμετωπίζουμε την παρουσία λαθών με συστηματικό τρόπο HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Αντιμετώπιση λαθών (2/4) Στην περίπτωση εμφάνισης λάθους Ελέγχουμε εάν το σημείο στον κώδικα όπου παρατηρείται ταυτόχρονα προκαλείται το λάθος Εάν ναι, είμαστε πολύ τυχεροί και απλώς διορθώνουμε το λάθος Εάν όχι, σημαίνει ότι υπάρχει απόσταση μεταξύ του σημείου παρατήρησης / εμφάνισης του λάθους και του σημείου που το προκάλεσε Σε μικρά τμήματα κώδικα, ο έλεγχος γίνεται με το «μάτι», σε μία διαδικασία όπου ουσιαστικά τρέχουμε τον αλγόριθμο η τεχνική αυτή λέγεται dry run Σε πιο δύσκολες περιπτώσεις φυτεύουμε διαγνωστικό κώδικα ελέγχου, δηλ. κλήσεις OUTPUT με τιμές μεταβλητών και μηνύματα, βάζοντας σε κλοιό τα πιθανά σημεία που μπορεί να φωλιάζει το λάθος HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Αντιμετώπιση λαθών (3/4) Λάθη αλγοριθμικής σχεδίασης Είναι ο αλγόριθμος σωστός; Λύνει γενικά το πρόβλημα; Ποιες περιπτώσεις δεν καλύπτει; HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Αντιμετώπιση λαθών (4/4) Να χρησιμοποιείτε συχνά διαγνωστικό κώδικα Να εκτυπώνετε εκφράσεις ελέγχοντας την τιμή τους Να ελέγχετε τις τιμές μεταβλητών που αλλάζουν από κλήση υποπρογραμμάτων πριν και μετά την κλήση Να αφήνετε τον διαγνωστικό κώδικα σε σχόλια καθώς μπορεί να ξαναχρησιμοποιηθεί HY100, 2005 Α. Σαββίδης, Χ. Νικολάου

Προσοχή, τα λάθη θέλουν ήρεμη, γνωστική Προσοχή, τα λάθη θέλουν ήρεμη, γνωστική. συστηματική και …πολιτισμένη αντιμετώπιση HY100, 2005 Α. Σαββίδης, Χ. Νικολάου