Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Βασικές Έννοιες Προγραμματισμού Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD
Αριθμητικά συστήματα Υπάρχουν 10 τύποι ανθρώπων: Αυτοί που καταλαβαίνουν το δυαδικό αριθμητικό σύστημα και αυτοί που δεν το καταλαβαίνουν Τα αριθμητικά συστήματα αναπτύχθηκαν για να εξυπηρετήσουν διαφορετικές ανάγκες απεικόνισης των αριθμών Τα πιο διαδεδομένα στον προγραμματισμό Η/Υ είναι Δυαδικό π.χ. (01001011) 2 Οκταδικό π.χ. (47025) 8 Δεκαδικό π.χ. (13594) 10 Δεκαεξαδικό π.χ. (3ΑFB9) 16
Παράδειγμα Μετατροπής Μεταξύ Συστημάτων Αρίθμησης Από το δεκαδικό στο δυαδικό, δεκαεξαδικό 1) Διαιρούμε επανειλημμένα με την βάση του συστήματος που μας ενδιαφέρει (2 ή 16) 2) Σταματούμε τη διαδικασία όταν φτάσουμε σε 0 3) Καταγράφουμε τα υπόλοιπα με αντίστροφη σειρά εμφάνισης Από το δυαδικό, δεκαεξαδικό στο δεκαδικό x = x n n 1 1 0 n b + xn 1 b +... + x1b + x0b b: η βάση του συστήματος n: η θέση του ψηφίου x n : το ψηφίο στη θέση n (101101110) 2 = 1*2 8 +0*2 7 +1*2 6 +1*2 5 +0*2 4 +1*2 3 +1*2 2 +1*2 1 +0*2 0 =256+64+32+8+4+2=(366) 10 (16E) 16 = 1*16 2 +6*16 1 +14*16 0 =256+96+14=(366) 10
Μετατροπή δεκαδικών ψηφίων από και προς το δυαδικό σύστημα Από το δεκαδικό στο δυαδικό Από το δυαδικό στο δεκαδικό (0.625) 10 = (0.101) 2 Επειδή 0.625 x 2 = 1.25 0.25 x 2 = 0.5 0.5 x 2 = 1.0 (0.101) 2 =1*2-1 +0*2-2 +1*2-3 =0.5+0.125=(0.625) 10 Σταματούμε τη διαδικασία όταν φτάσουμε σε.0 Παρατήρηση: Ένας αριθμός με πεπερασμένο πλήθος δεκαδικών ψηφίων στο δεκαδικό σύστημα, μπορεί να έχει άπειρο πλήθος δεκαδικών ψηφίων στο δυαδικό σύστημα. Για παράδειγμα: (0.1) 10 = (0.000110011001100 ) 2 0.1 x 2 = 0.2 0.2 x 2 = 0.4 0.4 x 2 = 0.8 0.8 x 2 = 1.6 0.6 x 2 = 1.2 0.2 x 2 = 0.4.... http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html
Παράδειγμα: ΑΡΙΘΜΟΙ 0-47 ΒΙΝ, DEC, HEX BIN DEC HEX BIN DEC HEX BIN DEC HEX 0 0 0 10000 16 10 100000 32 20 1 1 1 10001 17 11 100001 33 21 10 2 2 10010 18 12 100010 34 22 11 3 3 10011 19 13 100011 35 23 100 4 4 10100 20 14 100100 36 24 101 5 5 10101 21 15 100101 37 25 110 6 6 10110 22 16 100110 38 26 111 7 7 10111 23 17 100111 39 27 1000 8 8 11000 24 18 101000 40 28 1001 9 9 11001 25 19 101001 41 29 1010 10 A 11010 26 1A 101010 42 2A 1011 11 B 11011 27 1B 101011 43 2B 1100 12 C 11100 28 1C 101100 44 2C 1101 13 D 11101 29 1D 101101 45 2D 1110 14 E 11110 30 1E 101110 46 2E 1111 15 F 11111 31 1F 101111 47 2F
Βit - Byte Αναφερόμενοι στην ψηφιακή τεχνολογία ορίζουμε bit ή b (binary digit) - ένα δυαδικό ψηφίο (δηλ. 0 ή 1) - απεικόνιση της κατάστασης του ηλ. σήματος Byte ή Β (Βinary term) - είναι μια συνεχής ακολουθία από bits - έχει καθορισμένο μήκος (8 bits στα PC) - μονάδα μέτρησης όγκου δεδομένων Λέξεις (Words) - είναι μια ακολουθία από bytes την οποία ο επεξεργαστής μπορεί να χειριστεί σαν μονάδα - προκαθορισμένο μήκος κατά περίπτωση (4,8 Bytes)
Βασικά πολλαπλάσια του Byte KB (Kilobyte) = 2 10 Bytes = 1024 Bytes MB (Megabyte) = 2 20 Bytes = 1,048,576 Bytes GB (Gigabyte) = 2 30 Bytes = 1,073,741,824 Bytes TB (Terabyte) = 2 40 Bytes = 1,099,511,627,776 Bytes
Αναπαράσταση Μνήμης RAM Για 32bit σύστημα Διεύθυνση Δεδομένα 00000000 Β3 00000001 FA 00000002 46 00000003 3B 00000004 00 00000005 F4 00000006 FF FFFFFFFF D8 Κάθε διεύθυνση μνήμης αντιστοιχεί σε 1 Byte δεδομένων (Τα νούμερα εμφανίζονται στο δεκαεξαδικό σύστημα)
Βασικές Μαθηματικές Απεικονίσεις Αριθμών Έστω ο αριθμός 57600000 Εκθετική ή Επιστημονική 5760 x 10 4 a x 10 b Κανονικοποιημένη Επιστημονική 5.760 x 10 7 a x 10 b με 1<= a < 10 Μηχανικής 57.60 x 10 6 a x 10 b με 1<= a < 1000 και το b να διαιρείται με το 3
Εσωτερική αναπαράσταση Αριθμών Η αποθήκευση γίνεται στο δυαδικό σύστημα Ακέραιοι (1,2,4,8 bytes) Θετικοί π.χ. (38) 10 =(100110) 2 0 0 1 0 0 1 1 0 Αρνητικοί (Συμπλήρωμα ως προς 2) π.χ. (-38) 10 =(11011010) 2 1 1 0 1 1 0 1 0 (1 Byte) (1 Byte) Κινητής υποδιαστολής (4,8,10 bytes) (IEEE 754 Standard) π.χ. (12.375) 10 = (-1) 0 2 3 (1.100011) 2 (4 Bytes) 0 10000010 10001100000000000000000 1 Bit 8 Bits 23 Bits Πρόσημο (1=αρνητικό) Εκθέτης +127 (exponent) Δεκαδικό μέρος (mantissa)
Ειδικές Αριθμητικές Τιμές Inf (Άπειρο) π.χ. 4/0 0 11111111 00000000000000000000000 1 Bit 8 Bits 23 Bits NaN (Not a Number Απροσδιόριστος αριθμός) π.χ. 0/0 0 11111111 10000000000000000000000 1 Bit 8 Bits 23 Bits Παρατήρηση: Στο σύστημα ΙΕΕΕ 574 υπάρχουν δύο μηδέν (το +0 και το -0) Website: http://www.h-schmidt.net/floatconverter/ieee754.html
Εσωτερική αναπαράσταση Χαρακτήρων Κάθε χαρακτήρας μετατρέπεται σε ακέραιο μη προσημασμένο αριθμό χρησιμοποιώντας κάποιο στάνταρντ κωδικοποίησης, όπως για παράδειγμα ASCII, Unicode, κτλ, και στη συνέχεια αυτός ο αριθμός αποθηκεύεται στην μνήμη (στο δυαδικό σύστημα) Πίνακας ASCII Στην κωδικοποίηση ASCII (American Standard Code for Information Interchange) κάθε χαρακτήρας αντιστοιχεί σε ένα Byte δεδομένων.
Γλώσσες Προγραμματισμού μέσο επικοινωνίας μεταξύ ανθρώπου και υπολογιστή Έχουν αυστηρούς κανόνες Λεξιλόγιο (εντολές, τύπους,...) Σύνταξη Δομή Για την εκμάθησή τους και την υλοποίηση εφαρμογών είναι απαραίτητα Η Εξάσκηση Η Προσαρμογή του τρόπου σκέψης Η Φαντασία
Γενιές Γλωσσών Προγραμματισμού 1η Γενιά Γλώσσα Μηχανής 2η Γενιά Συμβολικές γλώσσες (Assembly) 3η Γενιά Γλώσσες υψηλού επιπέδου (C, Fortran, Pascal, Basic) 4η Γενιά Επικοινωνία με βάσεις δεδομένων, εξειδικευμένες γλώσσες (SQL, SPSS, Mathematica. Matlab) 5η Γενιά Γλώσσες Τεχνητής Νοημοσύνης (Prolog)
Παράδειγμα Γλώσσα Μηχανής - Αssembly H αριθμητική πράξη 2+3 σε Γλώσσα Μηχανής (για 32bit PC): 10111000 00000010 00000000 00000000 00000000 10111011 00000011 00000000 00000000 00000000 11110000 11000000 Τα νούμερα συνήθως τα γράφουμε στο δεκαεξαδικό σύστημα για ευκολία στον χειρισμό τους: B8 02 00 00 00 BB 03 00 00 00 03 C3 Το ίδιο πρόγραμμα σε Assembly MOV EAX,2 MOV EBX,3 ADD EAX,EBX
Τύποι Δεδομένων Βασικοί τύποι Παράγωγοι τύποι Αριθμητικοί Μη αριθμητικοί ακέραιοι μιγαδικοί λογικοί χαρακτήρες Ή αλφαριθμητικοί πραγματικοί
Μεταβλητές - Σταθερές Μεταβλητές Σταθερές Όνομα Τύπος Τιμή Ρητές Τύπος Τιμή Επώνυμες Όνομα Τύπος Τιμή
Τελεστές Τελεστές Αριθμητικοί Λογικοί Σχεσιακοί Αλφαριθμητικοί +, -, *, /, **.OR.,.AND., <, >, ==, // Οι τελεστές εκτελούνται με συγκεκριμένη σειρά προτεραιότητας
Εκφράσεις Εκφράσεις Αριθμητικές Λογικές Αλφαριθμητικές Συναρτήσεις
Έλεγχος ροής Έλεγχος ροής Εκτέλεση υπό συνθήκη Εκτέλεση κατ επανάληψη
Δομημένος Προγραμματισμός Είναι μία μεθοδολογία προγραμματισμού με στόχο την ευκολία στη συγγραφή του κώδικα την αποσφαλμάτωση του τη συντήρηση του προγράμματος Αποφεύγει την εντολή GOTO (κώδικας spaghetti) Κάνει εκτεταμένη χρήση υποπρογραμμάτων Στηρίζεται στο Θεώρημα του Δομημένου Προγράμματος (ή Θεώρημα Βöhm - Jacopini) (1966), κατά το οποίο κάθε αλγόριθμος μπορεί να διατυπωθεί χρησιμοποιώντας μόνον τρεις βασικές δομές ελέγχου Δομή ακολουθίας Δομή επιλογής Δομή επανάληψης
Ακρίβεια Ευστοχία πειραματικών μετρήσεων Ακρίβεια (precision ): πόσο κοντά είναι οι μετρήσεις μεταξύ τους (διασπορά). Ευστοχία (accuracy ): πόσο κοντά είναι οι μετρήσεις (ο μέσος όρους τους) στην πραγματική τιμή π.χ. Μεγάλη ευστοχία, μικρή ακρίβεια Μεγάλη ακρίβεια, μικρή ευστοχία
Σημαντικά Ψηφία Παρέχουν ένα μέτρο της ακρίβειας των πειραματικών μετρήσεων. Το πλήθος τους ισούται με όλα τα ακριβή ψηφία μιας μέτρησης συν ένα προσεγγιστικό ψηφίο. Όλα τα μη μηδενικά ψηφία είναι σημαντικά Μηδενικά ανάμεσα σε σημαντικά ψηφία είναι σημαντικά Όλα τα μηδενικά αριστερά από το πρώτο μη μηδενικό ψηφίο δεν είναι σημαντικά Όλα τα μηδενικά δεξιά από το τελευταίο σημαντικό ψηφίο είναι σημαντικά αν υπάρχει υποδιαστολή Στην επιστημονική απεικόνιση, οι δυνάμεις του 10 δεν είναι σημαντικές π.χ. Αριθμός Σημαντικά Ψηφία 0.040600 5 1500? Τουλάχιστον 2 1500 3 150 x 10 1 3 1500. 4
Σημαντικά Ψηφία (συνέχεια) Στον πολλαπλασιασμό και τη διαίρεση το αποτέλεσμα περιλαμβάνει τόσα σημαντικά ψηφία όσα ο παράγοντας με την μικρότερη ακρίβεια π.χ. 154.5 x 0.43 = 66.435 => 66 Στην πρόσθεση και την αφαίρεση το αποτέλεσμα γράφεται μέχρι τη δεκαδική θέση που δίνεται από τον αριθμό με την μικρότερη ακρίβεια π.χ. 642.62+15 = 657.62 => 658 435.5 432.3 = 3.2
Αριθμητικά Σφάλματα Σφάλματα Μοντελοποίησης Σφάλματα Μεθοδολογίας Σφάλματα Αποκοπής Σφάλματα Διακριτοποίησης Σφάλματα Δεδομένων Εισόδου (Μετρήσεων) Σφάλματα Στρογγυλοποίησης (Ακρίβειας) Machine Epsilon: O μικρότερος πραγματικός αριθμός ε για τον οποίο ισχύει 1+ε > 1. Χαρακτηρίζει την ακρίβεια ενός Η/Υ. Σε αριθμούς απλής ακρίβειας ε = 2-23 = 1.19209x10-7 Ενέργειες που αυξάνουν τα σφάλματα στρογγυλοποίησης Πρόσθεση ή αφαίρεση δύο αριθμών που διαφέρουν πολύ σε μέγεθος Αφαίρεση δύο σχεδόν ίσων αριθμών Μεγάλος αριθμός πράξεων
Τρόποι Μέτρησης Αριθμητικών Σφαλμάτων Έστω x η πραγματική τιμή και x' η αριθμητική τιμή μιας ποσότητας, τότε ορίζουμε: Απόλυτο σφάλμα (Απόλυτο) Σχετικό σφάλμα Ποσοστιαίο σφάλμα ε = x x' α ε σ x x' x' = = 1 x x x ' ε π = 1 100% x Συνθήκη για να είναι ένα αποτέλεσμα σωστό σε τουλάχιστον n σημαντικά ψηφία ε π π.χ. για n=3 πρέπει ε π < 0.05% < 2 (0.5 10 n )%
Προγραμματιστικά Λάθη Συντακτικά Λάθη Δεν επιτρέπουν την εκτέλεση του προγράμματος Λάθη Χρόνου Εκτέλεσης Διακόπτουν μη ομαλά τη λειτουργία του προγράμματος Λογικά Λάθη Δίνουν λανθασμένα αποτελέσματα
Αποσφαλμάτωση (Debugging) Εύρεση και επιδιόρθωση λαθών σε ένα πρόγραμμα. Ο όρος debugging, κατά μία ερμηνεία, αποδίδεται στην αφαίρεση ενός σκόρου (bug=έντομο) από τα ηλεκτρονικά κυκλώματα του υπολογιστή Mark II το 1940. Ο σκόρος εμπόδιζε τη σωστή λειτουργία του υπολογιστή. Για την αποσφαλμάτωση σύνθετων προγραμμάτων, χρησιμοποιούνται ειδικά προγράμματα που καλούνται debuggers και παρέχουν τη δυνατότητα εκτέλεσης του προγράμματος εντολή προς εντολή με ταυτόχρονη παρουσίαση των αλλαγών στη μνήμη RAM του υπολογιστή.