ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΕισαγωγή στον Προγραμματισμό Διαφάνειες παρουσίασης #1 Εισαγωγή Δομή του προγράμματος Τί σημαίνει ορθό πρόγραμμα Συντακτικά διαγράμματα
2Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Εισαγωγή(i) u Σκοπός του μαθήματος l Εισαγωγή στην πληροφορική (computer science) l Εισαγωγή στον προγραμματισμό ηλεκτρονικών υπολογιστών (Η/Υ) l Μεθοδολογία αλγοριθμικής επίλυσης προβλημάτων
3Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Εισαγωγή(ii) u Αλγόριθμος l Πεπερασμένη ακολουθία ενεργειών που περιγράφει τον τρόπο επίλυσης ενός προβλήματος l Εφαρμόζεται σε δεδομένα (data) u Πρόγραμμα l Ακριβής περιγραφή ενός αλγορίθμου σε μια τυπική γλώσσα που ονομάζεται γλώσσα προγραμματισμού
4Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Εισαγωγή(iii) u Φυσική γλώσσα l Χωρίς τόσο αυστηρούς συντακτικούς περιορισμούς l Μεγάλη πυκνότητα και σημασιολογική ικανότητα u Τεχνητή γλώσσα l Αυστηρότατη σύνταξη και σημασιολογία u Γλώσσα προγραμματισμού l Τεχνητή γλώσσα στην οποία μπορούν να περιγραφούν υπολογισμοί l Εκτελέσιμη από έναν ηλεκτρονικό υπολογιστή
5Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Εισαγωγή(iv) u Πληροφορική Ηλεκτρονικοί υπολογιστές (engineering) Μαθηματικά Σχεδίαση και κατασκευή Θεωρία και αναλυτική μέθοδος u Κεντρική έννοια: υπολογισμός (computation)
6Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Εισαγωγή(v) u Κατασκευή υπολογιστικών μηχανών l Αρχαιότητα: υπολογιστικές μηχανές, μηχανισμός των Αντικυθήρων, κ.λπ. l 17ος αιώνας, Pascal και Leibniz, μηχανικές υπολογιστικές αριθμομηχανές στοιχειώδεις αριθμητικές πράξεις l 1830–1840, Babbage, “αναλυτική μηχανή” λογάριθμοι, τριγωνομετρικές συναρτήσεις l 1880–1890, Hollerith, μηχανή με διάτρητες κάρτες για την αυτοματοποίηση των εκλογών
7Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Εισαγωγή(vi) u Κατασκευή υπολογιστών l 1920–1930, Bush, ηλεκτρική (αναλογική) υπολογιστική μηχανή διαφορικές εξισώσεις l ~1940, Zuse, ηλεκτρονική (ψηφιακή) υπολογιστική μηχανή πρόγραμμα και δεδομένα, χωριστά l 1945–1950, μοντέλο von Neumann πρόγραμμα και δεδομένα, από κοινού l 1950–σήμερα, ραγδαία ανάπτυξη της τεχνολογίας των ηλεκτρονικών υπολογιστών
8Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Εισαγωγή(vii) u Θεμέλια της πληροφορικής l Μαθηματική λογική l Αριστοτέλης: συλλογισμοί A A B B (modus ponens) l Ευκλείδης: αξιωματική θεωρία l Αρχές 20ου αιώνα, Hilbert αξίωμα, θεώρημα, τυπική απόδειξη
9Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Εισαγωγή(viii) u Πρόγραμμα του Leibniz: θεμελίωση των μαθηματικών l γλώσσαγια όλα τα μαθηματικά l θεωρία l συνεπής (consistent) και πλήρης (complete) A Aαντίφαση u Γλώσσα l προτασιακός λογισμόςx, c, , , , , l κατηγορηματικός λογισμός ,
10Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Εισαγωγή(ix) u Θεωρία l Συνολοθεωρία, Cantor, Frege l Παράδοξο του Russel A = { x | x x } A A A A A A A A l Άλλες θεωρίες συνόλων (ZF, κ.λπ.) l Άλλες θεωρίες για τη θεμελίωση των μαθηματικών (θεωρία συναρτήσεων, κατηγοριών, κ.λπ.) l 1920–1930, προσπάθειες για απόδειξη συνέπειας
11Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Εισαγωγή(x) u Συνέπεια και πληρότητα l 1931, Gödel, θεώρημα μη πληρότητας δεν είναι δυνατόν να κατασκευαστεί συνεπής και πλήρης θεωρία της αριθμητικής l 1936, Turing, μη αποκρίσιμες (undecidable) προτάσεις μηχανή Turing, υπολογισιμότητα
12Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Εισαγωγή(xi) u Κλάδοι της πληροφορικής l Αλγόριθμοι και δομές δεδομένων l Γλώσσες προγραμματισμού l Αρχιτεκτονική υπολογιστών και δικτύων l Αριθμητικοί και συμβολικοί υπολογισμοί l Λειτουργικά συστήματα l Μεθοδολογία – τεχνολογία λογισμικού l Βάσεις δεδομένων και διαχείριση πληροφοριών l Τεχνητή νοημοσύνη και ρομποτική l Επικοινωνία ανθρώπου – υπολογιστή
13Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Εισαγωγή(xii) u Υπολογιστής l επεξεργαστής l μνήμη l συσκευές εισόδου/εξόδου u Ιδιότητες l αυτόματο χωρίς εξυπνάδα l μεγάλη ταχύτητα l ακρίβεια στις πράξεις
14Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Γλώσσες προγραμματισμού(i) u Γλώσσα μηχανής διεύθυνσηεντολή u Συμβολική γλώσσα (assembly) label:addax, bx διεύθυνσηπράξηδεδομένα u Γλώσσες χαμηλού και υψηλού επιπέδου u Υλοποίηση γλωσσών προγραμματισμού l μεταγλωττιστής (compiler) l διερμηνέας (interpreter)
15Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Γλώσσες προγραμματισμού(ii) u Κυριότερες γλώσσες, ιστορικά l FORTRAN, Algol, LISP, COBOL, BASIC, PL/I l Pascal l Prolog, C, Smalltalk, Modula-2, Ada, C++, Java
16Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Γλώσσες προγραμματισμού(iii) u Pascal l Niklaus Wirth (1971) l Γλώσσα γενικού σκοπού (general purpose) l Ευνοεί το συστηματικό και δομημένο προγραμματισμό u Παραλλαγές l Standard, ISO Pascal l UCSD Pascal l ANSI Pascal l Turbo Pascal
17Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό κυρίως σώμα δηλώσεις επικεφαλίδα Δομή του προγράμματος(i) program example(input, output); var i, j : integer; begin i:=15; j:=23; write('sum of i and j is: '); i:=i+j; write(i) end.
18Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Δομή του προγράμματος(ii) u Επικεφαλίδα identifier program(input, output) header Συντακτικό διάγραμμα l περιγράφει τη σύνταξη ενός τμήματος του προγράμματος το όνομα του τμήματος προγράμματος που ορίζεται τετράγωνα κουτιά: απαιτούν εξήγηση οβάλ κουτιά: γράφονται ακριβώς έτσι βέλη: περιγράφουν τη σειρά με την οποία γράφονται τα κουτιά αρχή τέλος
19Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Δομή του προγράμματος(iii) u Δηλώσεις μεταβλητών l μεταβλητή: ένα «κουτί» της μνήμης του υπολογιστή όπου μπορεί να αποθηκευτεί μια πληροφορία (ένα δεδομένο) l στο τμήμα δηλώσεων ορίζουμε όλες τις μεταβλητές που χρησιμοποιεί το πρόγραμμα l για κάθε μεταβλητή ορίζουμε το όνομά της και τον τύπο της, δηλαδή το πεδίο των δυνατών τιμών που μπορεί η μεταβλητή να πάρει var i : integer;
20Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Δομή του προγράμματος(iv) u Απλοί τύποι μεταβλητών integer ακέραιοι αριθμοί 0, 1, –3 real πραγματικοί αριθμοί 3.14 char χαρακτήρες 'a' boolean λογικές τιμές true, false u Δήλωση περισσότερων μεταβλητών var i,j,k : integer; x,y : real; ch : char; changed : boolean;
21Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Δομή του προγράμματος(v) u Κυρίως σώμα statement beginend body ; u Σχόλια var x,y : real; (* οι συντεταγμένες του κέντρου *) r : real; (* η ακτίνα *)
22Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό κυρίως σώμα δηλώσεις επικεφαλίδα Δομή του προγράμματος(vi) Υποπρογράμματα program example(input, output); var i, j : integer; begin i:=15; j:=23; write('sum of i and j is: '); i:=i+j; write(i) end. procedure add; (* ορισμός της *) begin (* διαδικασίας *) i:=i+j end; add; (* κλήση της διαδικασίας *)
23Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Τί σημαίνει ορθό πρόγραμμα(i) u Συντακτική ορθότητα l το πρόγραμμα πρέπει να υπακούει στους συντακτικούς κανόνες της γλώσσας προγραμματισμού u Συντακτικά σφάλματα στην Pascal l εμφανίζονται όταν δεν ικανοποιούνται τα συντακτικά διαγράμματα l παράδειγμα: ( program ) input example, output;
24Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Τί σημαίνει ορθό πρόγραμμα(ii) u Νοηματική ορθότητα l το πρόγραμμα πρέπει να υπακούει τους νοηματικούς κανόνες της γλώσσας προγραμματισμού u Νοηματικά σφάλματα στην Pascal l εσφαλμένη χρήση τελεστών n := 'a' + 1 l χρήση μεταβλητών χωρίς δήλωση var n,i : integer; begin n := i + j
25Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Τί σημαίνει ορθό πρόγραμμα(iii) sqrt διαίρεση με το μηδέν u Σημασιολογική ορθότητα l όταν το πρόγραμμα εκτελείται, πρέπει να κάνει ακριβώς αυτό που θέλουμε να κάνει u Σημασιολογικά σφάλματα στην Pascal l προέρχονται από την κακή σχεδίαση ή την κακή υλοποίηση του προγράμματος l αυτά τα σφάλματα ονομάζονται συνήθως bugs και η διαδικασία εξάλειψής τους debugging x1 := (-b + sqr(b*b-4*a*c))/(2*a)
26Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Τί σημαίνει ορθό πρόγραμμα(iv) u Ο μεταγλωττιστής μπορεί να εντοπίσει σε ένα πρόγραμμα την ύπαρξη l συντακτικών σφαλμάτων l νοηματικών σφαλμάτων u Τυπώνει κατάλληλα μηνύματα σφάλματος u Ο προγραμματιστής είναι υπεύθυνος για l τη διόρθωση των παραπάνω l τον εντοπισμό και τη διόρθωση σημασιολογικών σφαλμάτων
27Νίκος Παπασπύρου Εισαγωγή στον Προγραμματισμό Συντακτικά διαγράμματα identifier _ letter digit letter a b z... digit