Δομημένος Προγραμματισμός

Σχετικά έγγραφα
Δομημένος Προγραμματισμός

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

5 &6. Τύποι δεδομένων, τελεστές και

Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις. ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Ι. Θεματική ενότητα 3: Tελεστές. εκφράσεις

Δομημένος Προγραμματισμός (ΤΛ1006)

Εισαγωγή στον Προγραμματισμό

Δομημένος Προγραμματισμός

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Στοιχειώδης προγραμματισμός σε C++

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Προγραμματισμός Ι (ΗΥ120)

Κεφάλαιο 2.5: Τύποι Δεδομένων, Τελεστές και Αριθμητικές Εκφράσεις. (Διαλέξεις 5-6)

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Περιεχόμενα. Κεφάλαιο 2.5: Τύποι Δεδομένων, Τελεστές και Αριθμητικές Εκφράσεις. (Διαλέξεις 5-6) Τύποι Δεδομένων. Τελεστές. Αριθμητικές εκφράσεις

a = 10; a = k; int a,b,c; a = b = c = 10;

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Δομημένος Προγραμματισμός

Διαδικασιακός Προγραμματισμός

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Εισαγωγή στον Προγραμματισμό με C++

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Ανάπτυξη και Σχεδίαση Λογισμικού

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τύποι δεδομένων, μεταβλητές, πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΗΥ-150. Προγραμματισμός

Δομημένος Προγραμματισμός

Διαδικασιακός Προγραμματισμός

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-2

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

Η γλώσσα προγραμματισμού C

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

Δομημένος Προγραμματισμός

ΗΥ-150. Προγραμματισμός

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 3: Είσοδος και Έξοδος Δεδομένων

Ανάπτυξη και Σχεδίαση Λογισμικού

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

8. Συνθήκες ελέγχου, λογικοί τελεστές

Εισαγωγή στην γλώσσα προγραμματισμού C

Εισαγωγή στον Προγραμματισμό

Δομημένος Προγραμματισμός

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Εισαγωγή στη γλώσσα προγραμματισμού C++

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Διαδικασία Ανάπτυξης Λογισμικού

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 4: Έλεγχος Ροής. Κ.

Εισαγωγή στον δομημένο προγραμματισμό

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Δομημένος Προγραμματισμός

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΦΥΛΛΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ 1

Εισαγωγή στον Προγραμματισμό με C++

Δομημένος Προγραμματισμός

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον δομημένο προγραμματισμό

Δομημένος Προγραμματισμός

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Τύποι δεδομένων, τελεστές, μεταβλητές

Εισαγωγή στην Πληροφορική

Προγραμματισμός Ι (ΗΥ120)

Η γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός (ΤΛ1006)

Εισαγωγή στον Προγραμματισμό με C++

Βασικές Αρχές Προγραμματισμού

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στον Προγραμματισμό με C++

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 9: Συναρτήσεις Εμβέλεια

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΣΥΝΟΠΤΙΚΟΣ ΟΔΗΓΟΣ ΓΛΩΣΣΑΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C

Ηλεκτρονικοί Υπολογιστές

Διαδικασιακός Προγραμματισμός

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική Ι. Ενότητα 3 : Αναπαράσταση αριθμών στο δυαδικό σύστημα. Δρ.

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

Transcript:

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα 2: Τύποι δεδομένων, Μεταβλητές, Τελεστές και παραστάσεις Κουκουλέτσος Κώστας Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστικών Συστημάτων

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3

Σκοποί ενότητας Oι διδακτικοί σκοποί της ενότητας είναι ο σπουδαστής: Να είναι σε θέση να ορίζει και να αρχικοποιεί μεταβλητές και σταθερές Να έχει κατανοήσει της ιδιότητες και τους περιορισμούς των ακέραιων και πραγματικών μεταβλητών Να υλοποιεί αριθμητικές παραστάσεις και εκχωρήσεις Να εξοικειωθεί με την χρήση των τελεστών και την προτεραιότητα τους Να κατανοήσει την χρήση των τύπων δεδομένων και τις διαφορές τους

Περιεχόμενα ενότητας 1. Τύποι δεδομένων 2. Ακεραίου και Πραγματικού τύπου δεδομένα 3. Μέγεθος δεδομένων και ακρίβεια 4. Δηλώσεις μεταβλητών 5. Σταθερές 6. Συχνά λάθη με τις μεταβλητές 7. Ακέραιοι τύποι δεδομένων και υπερχείλιση 8. Τελεστές 9. Λογικοί τελεστές και αποτίμηση λογικών παραστάσεων 10. Προτεραιότητα τελεστών 11. Ο τύπος char 12. Ο τύπος int (Σύνοψη) 13. Ο τύπος float και ο τύπος double (Σύνοψη) 14. Ασκήσεις

Τύποι δεδομένων Ένας τύπος δεδομένων είναι ένα πεδίο τιμών καθώς και το σύνολο των πράξεων που επιτρέπεται στις τιμές αυτές Οι τύποι δεδομένων χωρίζονται σε δύο μεγάλες κατηγορίες: Βασικούς (fundamental) τύπους δεδομένων Integer types Floating Type Character types Παραγόμενους (derived) τύπους δεδομένων Arrays Pointers Structures Enumeration Με την χρήση διαφόρων τύπων δεδομένων επιτυγχάνεται καλύτερος έλεγχος του προγράμματος και οικονομία χώρου που καταλαμβάνουν οι μεταβλητές

Integer Ακεραίου τύπου Ο παρακάτω πίνακας εμφανίζει τους τύπους δεδομένων που είναι ακέραιοι το μέγεθος που καταλαμβάνουν στην μνήμη του υπολογιστή και το πεδίο τιμών που μπορεί να πάρει ο τύπος Tύπος Μέγεθος Τιμές char 1 byte -128 έως 127 ή 0 έως 255 unsigned char 1 byte 0 έως 255 signed char 1 byte -128 έως 127 int 2 ή 4 bytes -32,768 έως 32,767 ή -2,147,483,648 έως 2,147,483,647 unsigned int 2 ή 4 bytes 0 έως 65,535 or 0 έως 4,294,967,295 short 2 bytes -32,768 έως 32,767 unsigned short 2 bytes 0 έως 65,535 long 4 bytes -2,147,483,648 έως 2,147,483,647 unsigned long 4 bytes 0 έως 4,294,967,295

Floating - Πραγματικού τύπου (κινητής υποδιαστολής) Ο παρακάτω πίνακας εμφανίζει τους τύπους δεδομένων που είναι πραγματικοί το μέγεθος που καταλαμβάνουν στην μνήμη του υπολογιστή και το πεδίο τιμών που μπορεί να πάρει ο τύπος O long double είναι ο νεότερος τύπος για μεγάλη ακρίβεια Tύπος Μέγεθος Τιμές Ακρίβεια σε δεκαδικά ψηφία float 4 byte 1.2E-38 έως 3.4E+38 6 double 8 byte 2.3E-308 έως 1.7E+308 15 long double 10 byte 3.4E-4932 έως 1.1E+4932 19

Μέγεθος δεδομένων Η C εύκολα μπορεί να εμφανίσει το μέγεθος ( σε bytes) που καταλαμβάνει ένας τύπος δεδομένων ή μία μεταβλητής στην μνήμη Αυτό γίνεται με χρήση της συνάρτησης (τελεστή) sizeof

Ακρίβεια δεδομένων Επίσης μπορούμε να εμφανίσουμε την μεγαλύτερη, την μικρότερη και την ακρίβεια ενός τύπου πχ. του float

Δηλώσεις μεταβλητών (1) Δηλώνονται (ορίζονται) σε οποιοδήποτε σημείο του προγράμματος αρκεί να γίνει η δήλωση πριν από την χρήση Η δήλωση καθορίζει το τύπο της μεταβλητή» float a, b, c;» int fpa= 18, kefalaio=100000;» int totalfpa;» int ipoloipo;» ipoloipo=kefalaio-foros;» char c= Α

Δηλώσεις μεταβλητών (2) Στο παραπάνω παράδειγμα υπάρχουν δηλώσεις ακεραίων και πραγματικών μεταβλητών με ταυτόχρονη εκχώρηση τιμών Η ταυτόχρονη εκχώρηση τιμής, σε κάποιες περιπτώσεις xωρίς να είναι υποχρεωτική, λέγεται αρχικοποίηση (initialization) Δηλώσεις για μεταβλητές του ιδίου τύπου μπορούν να γίνουν στην ίδια γραμμή.

Μεταβλητές με σταθερή τιμή (1/3) Σε ένα πρόγραμμα υπάρχουν κάποιες τιμές που είναι σταθερές και δεν αλλάζουν (π=3.1515, g=9.81 ΦΠΑ=23 ) Εάν θέλουμε η τιμή μιας μεταβλητής να μην αλλάξει κατά την εκτέλεση τότε χρησιμοποιούμε το πρόθεμα const (από τη λέξη constant, σταθερά) πριν τον τύπο δεδομένων της μεταβλητής και ταυτόχρονα εκχωρείται και μία τιμή στην σταθερά (γίνεται αρχικοποίηση) Παράδειγμα» int main ( )» {» const int FPA=23;» const int BONUS = 3;» } Στο παραπάνω παράδειγμα σε περίπτωση που ο προγραμματιστής προσπαθήσει με μία εντολή να αλλάξει την τιμή ο επεξεργαστής εμφανίζει μήνυμα λάθους. Συνηθίζεται αυτού του τύπου οι σταθερές να έχουν ονόματα με κεφαλαία ώστε να γίνεται εύκολα ο διαχωρισμός τους από τις κανονικές μεταβλητές

Μεταβλητές με σταθερή τιμή (2/3) Το ίδιο επιτυγχάνεται και με την οδηγία #define προς τον preprocessor Ο προ-επεξεργαστής μας επιτρέπει να ορίσουμε συμβολοσειρές οι οποίες κατά την διάρκεια εκτέλεσης του, αντικαθίστανται με τις εκάστοτε τιμές.» #define FPA 18 //xoris ; sto telos kai xori ekxorisi» #define PI 3.1415926535897932384626433832795

Μεταβλητές με σταθερή τιμή (3/3) Παράδειγμα» int main ( ){» float rad,emvado;» const float PI=3.1415 ;» printf("dose aktina tou kiklou" );» scanf("%f", &rad);»» emvado = PI * rad * rad ;» printf("%.3f\n",emvado);»» return 0;» }

Συχνά λάθη με τις μεταβλητές (1/2) Χρήση μη ορισμένης μεταβλητής Ο ορισμός μπορεί να γίνει οπουδήποτε όμως μία μεταβλητή πρέπει να οριστεί πριν χρησιμοποιηθεί.» ekptosi= poso*0.12;» float poso=2000; Οι εντολές μεταγλωττίζονται από την αρχή προς το τέλος. Στην πρώτη εντολή ο compiler δεν αναγνωρίζει την μεταβλητή poso και για τον λόγο αυτό εμφανίζει μήνυμα λάθους.

Συχνά λάθη με τις μεταβλητές (2/2) Η αρχικοποίηση μίας μεταβλητής δεν είναι υποχρεωτική Όμως μόλις οριστεί μία μεταβλητή καταλαμβάνει κάποιο χώρος στην μνήμη. Αρχικό περιεχόμενο της μεταβλητής είναι ότι υπήρχε στο χώρο που κατέλαβε το οποίο είναι και απροσδιόριστο ή απρόβλεπτο Μερικοί compilers για να αποφύγουν τέτοια λάθη μηδενίζουν μία μεταβλητή που δεν έχει αρχικοποιηθεί Το αποτέλεσμα στο παρακάτω πρόγραμμα είναι απρόβλεπτο ή 0» float metra;» float axia=2500*metra;»» printf("axia= %f\n", axia );

Ακέραιοι τύποι δεδομένων και υπερχείλιση Ο ακέραιος τύπος έχει περιορισμένο εύρος αριθμών τους οποίους μπορεί να αποθηκεύσει. Όταν ο ακέραιος καταλαμβάνει 4 bytes το εύρος αυτό είναι από -2,147,483,648 έως 2,147,483,647 Για τα περισσότερα προβλήματα ή εφαρμογές το εύρος αυτό είναι αρκετό Αν η τιμή που προκύπτει είναι εκτός εύρους τότε έχουμε υπερχείλιση (overflow) αλλά δεν εμφανίζεται ΛΑΘΟΣ Η υπερχείλιση έχει σαν αποτέλεσμα η μεταβλητή να μην περιέχει το σωστό αποτέλεσμα και οφείλεται στον τρόπο που αναπαρίστανται οι αριθμοί στον υπολογιστή.

Παράδειγμα υπερχείλισης (1/2) Οι ακέραιοι έχουν μία κυκλική συμπεριφορά στον τρόποι αποθήκευσής τους στον υπολογιστή Στο παρακάτω παράδειγμα γίνεται χρήση του ακέραιου τύπου signed char και μετά του ακεραίου int

Παράδειγμα υπερχείλισης (2/2)

Τελεστές Ένας τελεστής (operator) είναι ένα σύμβολο ή μία λέξη της που αναπαριστά μία συγκεκριμένη διεργασία σε ένα ή περισσότερα δεδομένα. Τα δεδομένα καλούνται τελεστέοι (operands) και μπορούν να είναι μεταβλητές, σταθερές ή και κλήσεις συναρτήσεων. Οι τελεστές χρησιμοποιούνται για το σχηματισμό εκφράσεων (expressions). πχ a=b+c; C διαθέτει 6 κατηγορίες τελεστών. Οι κατηγορίες αυτές είναι: Αριθμητικοί ανάθεσης ή εκχώρησης συσχέτισης λογικοί δυαδικών ψηφίων και ειδικοί τελεστές

Αριθμητικοί τελεστές (1/2) Δυαδικοί (αφορούν δύο operands) +, -, *, /, % (τελεστής υπολοίπου) Οι τελεστές + και χρησιμοποιούνται και σαν μοναδιαίοι (unary) τελεστές πχ x=-4; y=-x; Όλοι αυτοί οι αριθμητικοί τελεστές έχουν προσεταιριστικότητα (associativity) Η προσεταιριστικότητα καθορίζει την φορά εκτέλεσης των πράξεων. Η προσεταιριστικότητα των αριθμητικών τελεστών είναι από αριστερά προς τα δεξιά.

Αριθμητικοί τελεστές (2/2) Ο τελεστής υπόλοιπου % Επιστρέφει το υπόλοιπο της ακέραιας διαίρεσης δύο ακεραίων (πρέπει υποχρεωτικά να είναι ακέραιοι αλλιώς ο compiler εμφανίζει μήνυμα λάθους) 3%3 το αποτέλεσμα είναι 0 4%3 το αποτέλεσμα είναι 1 5%3 το αποτέλεσμα είναι 2 6%3 το αποτέλεσμα είναι 0

Παράδειγμα Ένα πόσο που δίνεται σε Ευρώ σε πόσα νομίσματα των 200 των 50 των 10 και του ενός ευρώ αντιστοιχεί.

Πράξεις με ανάμειξη τύπων Το αποτέλεσμα της πράξης με ένα τελεστή εξαρτάται από τον τύπο των τελεστέων. Αν είναι ιδίου τύπου τότε το αποτέλεσμα είναι ίδιο ενώ αν είναι διαφορετικοί ο ποιο ασθενής τύπος προβιβάζεται στον πιο ισχιρό και το αποτέλεσμα είναι ίδιο και πάλι (πχ ο int προβιβάζεται σε float) Επομένως 10/4 η πράξη έχει σαν αποτέλεσμα το 2 10./4, 10/4., 10./4. έχει σαν αποτέλεσμα το 2.5

Τελεστής εκχώρησης Ο τελεστής εκχώρησης ή τελεστής ανάθεσης = χρησιμοποιείται για την εκχώρηση μίας τιμής σε μία μεταβλητή Υπάρχουν και άλλοι τελεστές εκχώρησης οι λεγόμενοι τελεστές σύνθετης εκχώρησης Ο τελεστής εκχώρησης έχει προσεταιριστικότητα από τα αριστερά προς το δεξιά δηλαδή εκτελούνται οι πράξεις στο δεύτερο μέλος και μετά το αποτέλεσμα εκχωρείται στο πρώτο» int x=5;» x=x+2; Στην δεύτερη εντολή αφού διαπιστωθεί ποια η τιμή της μεταβλητής, που είναι 5, προστίθεται το 2 στο 5 και μετά το αποτέλεσμα αντιγράφεται στην θέση της μνήμης που καταλαμβάνει η μεταβλητή x. Tώρα η τιμή της χ είναι 7. Επιτρέπεται να γίνεται πολλαπλή εκχώρηση σε κάποιες μεταβλητές» int x, y, z;» x=y=z=20;

Τελεστής εκχώρησης (Παρατηρήσεις I) Η μεταβλητή με την τιμή που εκχωρείται πρέπει να είναι του ιδίου τύπου δηλ. ακέραιος αριθμός πρέπει να εκχωρείται σε μεταβλητή ακεραίου τύπου κλπ Σε περίπτωση που υπάρχει ασυμβατότητα μεταξύ των δύο τελεστέων ο προγραμματιστής πρέπει να έχει υπόψη τα παρακάτω Εκχώρηση πραγματικού σε ακέραιο» int x=5.9; H τιμή της χ είναι 5 (χωρίς υποδιαστολή) δηλαδή αποκόπτονται τα δεκαδικά ψηφία Εκχώρηση ακέραιου σε πραγματικό» float x=5; H τιμή της χ είναι 5.0 δηλαδή η ακέραια τιμή 5 αποθηκεύεται σαν 5.0 (με υποδιαστολή) στην μεταβλητή

Τελεστής εκχώρησης (Παρατηρήσεις II) Παράδειγμα Αυτό που γίνεται στην παραπάνω περίπτωση είναι μία μετατροπή (conversion). Περισσότερα για μετατροπές θα δούμε σε επόμενη διάλεξη Η τιμή που εκχωρείται στην μεταβλητή πρέπει να είναι μέσα στο πεδίο τιμών που επιτρέπεται να πάρει η μεταβλητή (δηλαδή να χωρά αλλιώς ο αριθμός που θα εκχωρηθεί θα είναι λάθος χωρίς προειδοποίηση από την C» char c=127, d=128, e=129;» printf("%d %d %d\n",c, d, e); Στο παραπάνω παράδειγμα θα εμφανιστούν οι τιμές 127-127 -126 (Γιατί;)

Τελεστής ++ και - (1/2) Μοναδιαίοι (αφορούν ένα τελεστέο operand) τελεστές αύξησης και μείωσης ++, -- Ο τελεστής ++ αυξάνει μία μεταβλητή κατά 1 και ο -- την μειώνει κατά 1. Μοναδιαίοι Προπορευόμενοι (prefix) π.χ. ++x η αύξηση ή η ελάττωση γίνεται πριν να χρησιμοποιηθεί η τιμή της μεταβλητής στον υπολογισμό της τιμής της έκφρασης στην οποία συμμετέχει Παρελκόμενοι ( suffix) π.χ. x++ η αύξηση ή η ελάττωση γίνεται μετά τον υπολογισμό της τιμής της έκφρασης στην οποία συμμετέχει

Τελεστής ++ και - (2/2) Οι εκφράσεις x++ και ++x έχουν διαφορά μόνο όταν υπάρχει εκχώρηση τιμής σε μία μεταβλητή. Σε αυτήν την περίπτωση η μεταβλητή x αυξάνει μετά ή πριν την ανάθεση To ίδιο συμβαίνει και για τις εκφράσεις --x και x--

Παράδειγμα

Παρατηρήσεις (προσεταιριστικότητα) Προσεταιριστικότητα καθορίζει την σειρά εκτέλεσης τελεστών που είναι στο ίδιο επίπεδο προτεραιότητας +, -, * και / είναι αριστερής προσεταιριστικότητας (εφαρμόζεται από αριστερά προς τα δεξιά) Τελεστής ανάθεσης είναι δεξιάς προσεταιριστικότητας» num_1 = num_2 = 5 ; // ισοδυναμεί με num_1=(num_2=5)» m1=m2=m3=m4=10; // ισοδυναμεί με m1=(m2=(m3=(m4=10)))» int x=5;int y; y=x=x-2; // το y και το x έχουν τιμή 3

Σχεσιακοί τελεστές (1/3) Οι σχεσιακοί τελεστές (ή τελεστές σύγκρισης) χρησιμοποιούνται για συγκρίσεις που σχηματίζουν λογικές προτάσεις. Το αποτέλεσμα είναι μία λογική τιμή, είτε αληθής (true) είτε ψευδής (false). == ίσο!= διάφορο > μεγαλύτερο < μικρότερο >= μεγαλύτερο ή ίσο <= μικρότερο ή ίσο Το αποτέλεσμα μιας έκφρασης που περιλαμβάνει ένα τελεστή σύγκρισης, είναι αληθές (true) ή ψευδές (false). Η C αναπαριστά τις τιμές αυτές με ακέραια μεταβλητή όπου το μηδέν (0) αντιστοιχεί στην τιμή false και κάθε άλλη τιμή στην τιμή true (συνήθως όμως με 1).

Σχεσιακοί τελεστές (2/3) Επομένως η τιμή μιας έκφρασης που περιέχει τελεστή συσχέτισης είναι ακέραια 0 για false και 1 για true.» printf( %d\n, 1<5); //Εμφανίζει το 1» printf( %d\n, 1>5); //Εμφανίζει το 0

Σχεσιακοί τελεστές (3/3) Οι τελεστές συσχέτισης χρησιμοποιούνται συνήθως σε δομές ελέγχου για να γίνει έλεγχος μίας λογικής πρότασης. H επόμενη εντολή εξετάζει αν η μεταβλητή χ είναι αρνητική» if (x<0) Ο τελεστής εκχώρησης δεν πρέπει να χρησιμοποιείται αντί του τελεστή ισότητας. Σε τέτοιες περιπτώσεις το πρόγραμμα εκτελείται ενώ υπάρχει σοβαρό λάθος στην λογική του προγράμματος Το διάφορο στην C αναπαριστάται με το τελεστή!= και όχι με άλλους τελεστές που χρησιμοποιούνται στα μαθηματικά ή σε άλλες γλώσσες

Παράδειγμα 1 Ποιό το αποτέλεσμα του παρακάτω προγράμματος

Παράδειγμα 2 Ποιό το αποτέλεσμα του παρακάτω προγράμματος

Σύνθετες εκχωρήσεις Οι σύνθετες εκχωρήσεις γίνονται με χρήση των αντίστοιχων τελεστών (compound assignment operators) και συνδυάζουν ένα αριθμητικό τελεστή με την εκχώρηση (+=, -=, *=, /=, %= ) Αλλάζει η τιμή της μεταβλητής με πράξη που εφαρμόζεται στην τρέχουσα τιμή της μεταβλητής.

Λογικοί τελεστές Οι λογικοί τελεστές χρησιμοποιούνται για να σχηματίσουν λογικές προτάσεις! (not) && (and) (or) Ο τελεστής && έχει σαν αποτέλεσμα η λογική παράσταση να είναι αληθής μόνο όταν και τα δύο μέλη της παράστασης είναι αληθή. Σε όλες τις άλλες περιπτώσεις η παράσταση είναι ψευδής. Ο τελεστής έχει σαν αποτέλεσμα η λογική παράσταση να είναι ψευδής μόνο όταν και τα δύο μέλη της παράστασης είναι ψευδή. Σε όλες τις άλλες περιπτώσεις η παράσταση είναι αληθής. Ο τελεστής! αντιστρέφει την τιμή μίας λογικής παράστασης

Λογικοί τελεστές Πίνακας τιμών των λογικών τελεστών a b a && b a b false false false false false true false true true false false true true true true true

Αποτίμηση λογικών παραστάσεων (1/2) Ποιά η εκτίμηση της παρακάτω παράστασης» a=(2>5) && (2==2) && (7>5) H τιμή του a είναι 0 Κάποιος που έχει υπόψη του την λειτουργία του λογικού && δεν χρειάζεται να αποτιμήσει και τις 3 λογικές εκφράσεις, επειδή η πρώτη έκφραση (2>5) είναι ψευδής τότε δεν χρειάζεται να γίνει έλεγχος για τις υπόλοιπες εκφράσεις.

Αποτίμηση λογικών παραστάσεων (2/2) Ποια η εκτίμηση της παρακάτω παράστασης» a=(5>2) (2==2) (7>5) Η τιμή του a είναι 1 Πάλι εδώ δεν χρειάζεται να γίνει έλεγχος όλων των εκφράσεων επειδή το (5>2) Ο μεταγλωττιστής δουλεύει με αυτό τον τρόπο δηλαδή μόλις ένας όρος μπορεί να καθορίζει την τιμή μίας λογικής παράστασης ο μεταγλωττιστής δεν συνεχίζει στο υπόλοιπο μέρος. Η τεχνική αυτή αναφέρεται ως lazy evaluation

Σχεσιακοί και Λογικοί τελεστές - Παραδείγματα» (8 == 3) // είναι false.» (6 > 4) // είναι true.» (3!= 2) // είναι true.» (8 >= 8) // είναι true.» (3 < 3) // είναι false.» int k;» k=(7==5)&&(5>4);

Προτεραιότητα τελεστών 44

Εκφράσεις και Προτεραιότητα τελεστών (1/2) Οι πράξεις εκτελούνται σύμφωνα με την προτεραιότητα Πράξεις της ιδίας προτεραιότητας εκτελούνται σύμφωνα με την προσεταιριστικότα τους Επειδή οι παρενθέσεις () υπολογίζονται πρώτα (από τα αριστερά προς τα δεξιά) χρησιμοποιούνται παρενθέσεις για να αλλαχτεί η εκτέλεση των πράξεων Εάν υπάρχουν ένθετες παρενθέσεις υπολογίζονται πρώτα οι εσωτερικές» a=6/2+1;» a=6/(2+1);» b=a+2+6/2;» a= (a+2+6)/2;

Εκφράσεις και Προτεραιότητα τελεστών (2/2) Παράδειγμα H παρακάτω παράσταση» w= x*y*z+a/b c*d Μπορεί να γραφτεί και» W=(((x*y)*z) + (a/b)) (c*d) Η χωρίς να γίνεται υπερβολική χρήση παρενθέσεων» W=(x* y*z) + (a/b) (c*d)

Ο τύπος char Ο τύπος char χρησιμοποιείται για να αποθηκεύουμε χαρακτήρες.» int main ( )» {» char c ;» c = 'x' ;» } Στην C οι χαρακτήρες κωδικοποιούνται με αριθμούς χρησιμοποιώντας την κωδικοποίηση ASCII. Έχει 95 εκτυπώσιμους χαρακτήρες από 32 έως 126 Οι χαρακτήρες από 0 έως 31 είναι ειδικοί χαρακτήρες για τον έλεγχο των συσκευών εξόδου, πχ το 8 είναι το BACKSPACE, to 13 είναι το ENTER και το 27 είναι το ESC.

Πίνακας ASCII

Εμφάνιση χαρακτήρων printf και χαρακτήρες» #include < stdio.h>» int main ( ){» char c = 'a' ;» printf ("character %c is number %d in ASCII encoding\n", c, c);» } Το πρόγραμμα εμφανίζει :» character a is number 97 in ASCII encoding

Ο τύπος int (Σύνοψη) Ο τύπος int αποθηκεύει ακέραιες τιμής Το μέγεθος του εξαρτάται από την αρχιτεκτονική του υπολογιστή στον οποίο βρισκόμαστε Παλαιότερα ήταν 2 bytes και οι τις τιμές που μπορούσε να πάρει ήταν στο διάστημα [ 32768, 32767] Σε σύγχρονες αρχιτεκτονικές μπορεί να πάρει όλες τις τιμές στο διάστημα [ 2.147.483.648, 2.147.483.647] και καταλαμβάνει 4 bytes

Ο τύπος float και ο τύπος double (Σύνοψη) Είναι ένας τύπος για πραγματικούς αριθμούς. Στην ουσία οι αριθμοί αυτοί αναπαριστούνται κατά προσέγγιση Στα περισσότερα συστήματα ο τύπος float (αποθηκεύεται σε 4 bytes) δίνει ακρίβεια για 6 δεκαδικά ψηφία και το τύπος double (8 bytes) για περίπου 15. Ο τύπος long double (10 ή 12 bytes ανάλογα με το σύστημα) τυπικά δίνει ακρίβεια για 16 έως 30 δεκαδικά ψηφία που είναι πολύ περισσότερα από ότι απαιτείται για τις περισσότερες εφαρμογές. Λόγω του μεγέθους χρησιμοποιείται σπάνια. Προσοχή: H εντολή scanf πρέπει να έχει τον specifier %f για float και τον specifier %lf για double Αυτό θα αναλυθεί στην επόμενη διάλεξη

Άσκηση 1 Να εισάγεται ένας τριψήφιος ακέραιος θετικός αριθμός και να εμφανίζεται ο αντίστοιχος θετικός με ανάποδα τα ψηφία του αρχικού αριθμού

Άσκηση 2 Ποιό το αποτέλεσμα του παρακάτω προγράμματος

Άσκηση 3 Να εισάγεται ο αριθμός των δευτερολέπτων σε ένα πρόγραμμα σαν ένας ακέραιος θετικός αριθμός και να εμφανίζεται σε πόσες ώρες, λεπτά και δευτερόλεπτα αντιστοιχεί ο αριθμός αυτός. 54

Notice All the Issues Covered So Far» /*This program computes the volume (in liters) of a six-pack of sodacans and the total volume of a six-pack and a two-liter bottle.*/» int main(){» int cans_per_pack = 6;» const double CAN_VOLUME = 0.355; // Liters in a 12-ounce can» double total_volume = cans_per_pack * CAN_VOLUME;» cout << "A six-pack of 12-ounce cans contains "» << total_volume << " liters." << endl;» const double BOTTLE_VOLUME = 2; // Two-liter bottle» total_volume = total_volume + BOTTLE_VOLUME;» cout << "A six-pack and a two-liter bottle contain "» << total_volume << " liters." << endl;» return 0;» }

Εκφράσεις στη C Παραστάσεις Στη γλώσσα C m2 - n2 m*m - n*n ax2 + bx + c a*x*x + b*x + c -b + 4ac -b + 4 * a* c 2ab c+d ((-a)b) + ((-c)d) (2*a*b)/(c+d) -a*b + -c*d

Τέλος Ενότητας