3 η Διάλεξη C++ - Βασικοί τύποι δεδομένων Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ
Ο τύπος int Ο τύπος δεδομένων τύπου int αναφέρεται στα ακέραια μεγέθη. Σταθερές, μεταβλητές, παραστάσεις και συναρτήσεις τύπου int αποδίδουν ακέραιες τιμές Οι ακέραιες σταθερές δεν είναι τίποτα άλλο παρά ακέραιοι αριθμοί. Μια ακέραια σταθερά αποθηκεύεται στην μνήμη αφού μετατραπεί σε δυαδικό αριθμό. Οι σταθερές τύπου int μετατρέπονται σε δυαδικούς αριθμούς μήκους 4 byte (32 bit) τα 32 bit αριθμούνται από 0 έως 31. Το 31 bit δείχνει το πρόσημο και τα υπόλοιπα τον αριθμό: 1457 10 =10110110001 2 00000000 00000000 00000101 10110001 Με 4 Byte μπορούμε να αναπαραστήσουμε αριθμούς από -2.147.483.648 έως +2.147.483.647
Ο τύπος int Η c++ διαθέτει και εκτός του int και δύο άλλους τύπους ακεραίων : long int και short int (δεσμεύει 2 byte μνήμης και μπορεί να αναπαραστήσει αριθμούς από -32.768 μέχρι +32.767 Μια μεταβλητή τύπου int μπορεί να ορισθεί ότι δεν θα περιέχει πρόσημο χρησιμοποιώντας το πρσδιοριστικό unsigned Πχ: unsigned int a,b,c; Σε μεταβλητές τύπου unsigned μπορούν να αποθηκευτούν μόνο θετικοί ακέραιοι και αφού δεν δεσμεύεται το 32 Bit για το πρόσημο μπορούν να αναπαραστήσουν αριθμούς με 2πλασια απόλυτη τιμή από signed
Αριθμητικοί τελεστές Εκτός από του κλασικούς αριθμητικούς τελεστές η c++ διαθέτει και ορισμένους που δεν συναντώνται σε άλλες γλώσσες προγραμματισμού Τελεστής Περιγραφή + Πρόσθεση - Αφαίρεση * Πολλαπλασιασμός / Διαίρεση % Υπόλοιπο ακέραιας διαίρεσης ++ Αύξηση κατά 1 -- Μείωση κατά 1
Αριθμητικοί τελεστές Όπως κάθε παράσταση, έτσι και οι παραστάσεις με τους τελεστές ++ και επιστρέφουν μια τιμή : Όταν ο τελεστής είναι πριν από τη μεταβλητή, τότε πρώτα γίνεται η πράξη (αύξηση ή μείωση) και μετά επιστρέφεται η νέα τιμή της μεταβλητής. Παράδειγμα αν a=4; η παράσταση ++a αυξάνει το a κατά 1 και επιστρέφει τη τιμή 5 Όταν ο τελεστής είναι μετά τη μεταβλητή a++ ή a πρώτα επιστρέφεται η τιμή της μεταβλητής και μετά αυξάνεται ή μειώνεται κατά 1. Πχ αν a=4 τότε η παράσταση a++ επιστρέφει τη τιμή 4 και αυξάνει το a κατά 1
Χρήση συντμήσεων σε παραστάσεις Ο τελεστής ανάθεσης = μπορεί να συνδυαστεί με άλλους αριθμητικούς τελεστές για τη δημιουργία ορισμένων παραστάσεων: Σύντμηση x+=5 x-=5 x*=5 x/=5 x%=5 Αντίστοιχη παράσταση x=x+5 x=x-5 x=x*5 x=x/5 x=x%5
Ο τελεστής υπολοίπου % Ο τελεστής % υπολογίζει το υπόλοιπο μιας ακέραιας διαίρεσης: 10%4=2 5%4=1 5%5=0 Όταν ο διαιρέτης είναι μεγαλύτερος από το διαιρετέο, το υπόλοιπο είναι ο ίδιος ο διαιρετέος: 4%7=7 3%9=9
Δυαδικοί αριθμοί Η c++ δίνει τη δυνατότητα να χειριστούμε πληροφορίες σε επίπεδο δυαδικών αριθμών. Έχει τελεστές οι οποίοι επιδρούν σε μεμονωμένα bit ενός ακεραίου αριθμού. Κάθε δυαδικός αριθμός έχει ως βάση αρίθμησης το 2 όπως και οι δεκαδικοί το 10. Κάθε δυαδικός έχει έναν αντίστοιχο δεκαδικό και αντίστροφα,
Δυαδικοί αριθμοί Τα ψηφία ενός αριθμού δεκαδικού ή δυαδικού αποτελούν τους συντελεστές των δυνάμεων της βάσης των 10 ή 2 αντίστοιχα Συντελεστής Δύναμη του 10 Σύνολο 5 X 10 0 5 3 X 10 1 30 3 X 10 2 300 2 X 10 3 2000 Σύνολο 2335 Συντελεστής Δύναμη του 2 Σύνολο 1 x2 0 1 0 X2 1 0 0 X2 2 0 1 x2 3 8 Σύνολο 9
Δυαδικοί αριθμοί Μετατροπή δεκαδικού σε δυαδικό Έστω ο αριθμός 64 η διαδικασία μετατροπής τους σε δυαδικό είναι η εξής : Διαιρούμε τον αριθμό με τον 2 μέχρι να έχουμε πηλίκο 0 τα υπόλοιπα κάθε διαίρεσης αποτελούν τα ψηφία του δυαδικού αριθμού το τελευταίο υπόλοιπο αποτελεί το 1ψηφιο του 2κου : 64 2 Άρα (64) 10 =(1 0 0 0 0 0 0) 2 0 32 2 Αντίστροφα από δυαδικό σε δεκαδικό: 0 16 2 (1000000) 2 =0χ10 0 +0χ10 1 +0χ10 2 +0χ10 3 +0χ10 4 +0x10 5 +1x10 6 =(64) 2 0 8 2 0 4 2 0 2 2 0 1 2 1 0
Τελεστές bitwise Οι τελεστές bitwise επιτρέπουν στη c++ να χειρίζεται τους ακεραίους αριθμούς σε επίπεδο bit. Όλοι οι τελεστές bitwise έχουν δύο μέλη ένα αριστερό και ένα δεξιό (εκτός από τον τελεστή ~ «συμπλήρωμα»). Τα μέλη αυτή πρέπει να είναι ακέραιες παραστάσεις δηλαδή να αποδίδουν ακέραιες τιμές Υπάρχουν 6 τελεστές
Τελεστές bitwise &(bitwise AND) Εκτελεί την πράξη AND στα αντίστοιχα bit των 2 μελών (bitwise OR) 1&1->1 1&0->0 0&1->0 0&0->0 Εκτελεί την πράξη OR στα αντίστοιχα bit των 2 μελών 1 1->1 1 0->1 0 1->1 0 0->0 ^ (bitwise XOR) Εκτελεί την πράξη XOR στα αντίστοιχα bit των 2 μελών ~ (συμπλήρωμα) 1 1->0 1 0->1 0 1->1 0 0->0 Αντιστρέφει το bit του μέλους Α ~1->0 ~0->1
Τελεστές bitwise << (ολίσθηση αριστερά) Μετακινεί προς τα αριστερά όλα τα bit του μέλους Α τόσες θέσης όση η τιμή του μέλους Β. Σε κάθε μετατόπιση προς τα αριστερά το δεξιότερο bit παίρνει τη τιμή 0 >>(ολίσθηση δεξιά) Μετακινεί προς τα δεξιά όλα τα bit του μέλους Α τόσες θέσης όση η τιμή του μέλους Β. Σε κάθε μετατόπιση προς τα δεξιά το δεξιότερο bit χάνεται 166<<2 166=(10100110) 2 <<2 -> 1010011000=(664) 10 δηλαδή ουσιαστικά κάναμε πολλαπλασιασμό το 166 με το 4 166=(10100110) 2 >>2->00101001=(41) 10 δηλαδή διαιρέσαμε το 166 με το 4 και πήραμε μόνο το ακέραιο μέρος Παρατηρούμε ότι οι τελεστές ολίσθησης << και >> είναι ίδιο με τους τελεστές εισαγωγής και εξαγωγής που χρησιμοποιούνται στα αντικείμενα cin και cout αντίστοιχα. Αυτό επιτυγχάνεται με την υπερφόρτωση τελεστών (δυνατότητα του πολυμορφισμού που διέπει τη C++), τεχνική που επιτρέπει σε έναν τελεστή να επενεργεί με διαφορετικό τρόπο ανάλογα με τον τύπο του αντικειμένου που εφαρμόζεται
Τελεστές bitwise #include <iostream> using namespace std; main() { unsigned int a = 60; // 60 = 0011 1100 unsigned int b = 13; // 13 = 0000 1101 int c = 0; c = a & b; // 12 = 0000 1100 cout << "Line 1 - Value of c is : " << c << endl ; c = a b; // 61 = 0011 1101 cout << "Line 2 - Value of c is: " << c << endl ; c = a ^ b; // 49 = 0011 0001 cout << "Line 3 - Value of c is: " << c << endl ; c = ~a; // -61 = 1100 0011 cout << "Line 4 - Value of c is: " << c << endl ; c = a << 2; // 240 = 1111 0000 cout << "Line 5 - Value of c is: " << c << endl ; c = a >> 2; // 15 = 0000 1111 cout << "Line 6 - Value of c is: " << c << endl ; return 0; }
Προτεραιότητα τελεστών Από το μεγαλύτερο στο μικρότερο Επίπεδο Περιγραφή - όνομα Τελεστής Σειρά υπολογισμού 1 Ανάλυση εμβέλειας :: Αριστερά στα Δεξιά 2 Επιλογή μέλους, δείκτης, κλήση συναρτήσεων, αύξηση και μείωση κατάληξης 3 sizeof, αύξηση και μείωση προθέματος, συμπληρωματικό, AND, NOT, μοναδιαίο μείον και συν, διεύθυνση και εμφάνιση διεύθυνσης, new, new[], delete, delete[], μετατροπή, sizeof(). -> () ++ -- Αριστερά στα Δεξιά ++ -- ^! - + & * () Δεξιά στα Αριστερά 4 Επιλογή μέλους για δείκτη. * -> * Αριστερά στα Δεξιά 5 Πολλαπλασιασμός, διαίρεση, υπόλοιπο * / % Αριστερά στα Δεξιά 6 Πρόσθεση, αφαίρεση + - Αριστερά στα Δεξιά 7 Μετατόπιση << >> Αριστερά στα Δεξιά 8 Σχετική ανισότητα <<= >>= Αριστερά στα Δεξιά 9 Ισότητα, ανισότητα ==!= Αριστερά στα Δεξιά 10 Bit wise AND & Αριστερά στα Δεξιά 11 Bitwise XOR ^ Αριστερά στα Δεξιά
Προτεραιότητα τελεστών Επίπεδο Περιγραφή όνομα Τελεστής Σειρά υπολογισμού 12 Bitwise OR Αριστερά στα Δεξιά 13 Λογικό AND && Αριστερά στα Δεξιά 14 Λογικό OR Αριστερά στα Δεξιά 15 Υπό συνθήκη?: Δεξιά στα αριστερά 16 Τελεστές δήλωσης = *= /= %= +=.= <<= >>= &= = ^= 17 Τελεστής throw throw Δεξιά στα αριστερά 18 κόμμα, Αριστερά στα Δεξιά Περισσότερες πληροφορίες μπορείτε να βρείτε στο παρακάτω σύνδεσμο: http://www.cplusplus.com/doc/tutorial/operators/ Για να αλλάξει η σειρά εκτέλεσης των πράξεων χρησιμοποιούμε παρενθέσεις ()
Παράδειγμα x=100 y=4 Παράσταση Τιμή του x Τιμή του y Τιμή της παράστασης y*x++; 101 4 400 (4*100) +xx*--y; 101 3 303(101*3) x-- + ++y; 99 5 105 (100+5) --x*2; 99 4 198(99*2) x=x>y++; 1 5 1 (x<y) (y>5); 100 4 0 ++xx>100; 101 4 1 x++>100; 101 4 0
Ο τύπος δεδομένων float Οι σταθερές τύπου float είναι δεκαδικοί αριθμοί: 155.25 155.0 155. 0.5 (πρέπει να περιέχουν το χαρακτήρα (.) Υπάρχουν 3 τύποι μεταβλητών τύπου float: float : float a,b,c; double float : double a,b,c; long float : long double a,b,c; Η διαφορά μεταξύ των τριών τύπων float βρίσκεται στην ακρίβεια των δεκαδικών ψηφίων
Ο τύπος δεδομένων float Οι διαθέσιμοι τελεστές μεταξύ δεδομένων float είναι πιο περιορισμένοι σε σχέση με τους τελεστές που εφαρμόζονται σε δεδομένα τύπου Int και char. Οι τελεστές %, ++ και δεν εφαρμόζονται σε δεδομένα τύπου float. Μερικοί όμως μεταγλωττιστές της C++ (όπως ο DEV C++) καταστρατηγούν το πρότυπο ANSI και επιτρέπουν σε μεταβλητές τύπου float τη χρήση των τελεστών ++ και --
Χειριστές του αντικειμένου cout Για να επιτύχουμε μορφοποιημένη έξοδο αριθμών, χρησιμοποιούμε ειδικούς χειριστές του cout: Ο χειριστής setw(n) χρησιμοποιείται για τον καθορισμό των θέσεων που θα καταλάβει η αμέσως επόμενη έξοδος του cout: cout<<setw(10)<<a<<endl; Θα έχει σαν αποτέλεσμα να εμφανιστεί το περιεχόμενο της μεταβλητής a σε ένα χώρο 10 θέσεων στην οθόνη. Για να χρησιμοποιήσουμε κάποιο χειριστή που χρησιμοποιεί παραμέτρους πρέπει να δηλώσουμε : #include <iomanip>
Χειριστές του αντικειμένου cout Άλλοι χειριστές : setprecision(3) : καθορίζει όλες οι επόμενες έξοδοι του αντικειμένου cout που αφορούν σε αριθμητικές τιμές να εμφανίζονται με 3 δεκαδικά ψηφία. fixed: Καθορίζει ώστε όλες οι επέμενες έξοδοι του cout που αφορούν αριθμητικές τιμές να εμφανίζονται με τον κλασσικό τρόπο και όχι σε εκθετική ή άλλη μορφή. Ο fixed δεν δέχεται παράμετρο και χρησιμοποιείται πάντα σε συνδυασμό με τον χειριστή setprecision()
Χειριστές του αντικειμένου cout #include <iostream> //4.1 #include <iomanip> using namespace std; main() { } float a,b; a=21.234; b=5467.1; cout << setw(10) << setprecision(3) << fixed << a << endl; cout << setw(10) << setprecision(3) << fixed << b << endl; system("pause");
Η συνάρτηση pow() H C++ δεν διαθέτει τελεστή ύψωσης σε δύναμη. Η ύψωση σε δύναμη γίνεται συνάρτηση pow(a,b) ή οποία περιέχεται στη βιβλιοθήκη cmath: #include <iostream> #include <iomanip> #include <cmath> using namespace std; main() { double a,b,c; a=4; b=5; c=pow(a,b); cout << c << endl; system("pause"); }
Μετατροπή τύπου Όταν χρησιμοποιούμε τον τελεστή ανάθεσης με δεδομένα διαφορετικού τύπου, η C++ μετατρέπει το αποτέλεσμα της παράστασης που βρίσκεται δεξιά του στον τύπο της μεταβλητής αριστερά του: (4.2) #include <iostream> #include <iomanip> using namespace std; main() { } float a; double d; int i; int k; a=12.345; i=a; cout << i << endl; k=100; d=k; system("pause"); cout << setw(10) << setprecision(3) << fixed << d << endl;
Μετατροπή τύπου Όταν μετατρέπονται δεδομένα υψηλότερης ιεραρχίας (με περισσότερα byte) σε δεδομένα χαμηλότερης ιεραρχίας (λιγότερα byte), η μετατροπή μπορεί να επιφέρει απώλεια πληροφοριών (πχ απώλεια δεκαδικών ψηφίων) Πέρα από την έμμεση μετατροπή τύπου η C++ μας δίνει τη δυνατότητα να επιβάλουμε, ανά πάσα στιγμή, τη μετατροπή τύπου μεταβλητής ή παράστασης με μια τεχνική η οποία καλείται type casting και θα την δούμε αργότερα
Ο τύπος char Μια σταθερά τύπου char είναι ένας χαρακτήρας που περικλείεται σε ' ' : a='r' H C++ χειρίζεται τους χαρακτήρες σαν αριθμούς. Αυτό σημαίνει ότι μπορούν να συμμετέχουν σε αριθμητικές παραστάσεις (κάθε χαρακτήρας μετατρέπεται σε ένα αριθμό σύμφωνα με ένα καθορισμένο πρότυπο μετατροπής. Το πρότυπο αυτό ονομάζεται πίνακας ASCII): cout<< A +1 θα δώσει 66 γιατί ο κωδικός του A είναι 65 στο ASCII Πληροφορίες για τον πίνακα ASCII : http://www.asciitable.com/
Χαρακτήρες διαφυγής Εκτός από τους εκτυπώσιμους χαρακτήρες ο πίνακας ASCII περιέχει και χαρακτήρες οι οποίοι δεν εμφανίζουν τίποτα στη οθόνη αλλά ελέγχουν ορισμένες από τις λειτουργίες της. Οι χαρακτήρες αυτοί ονομάζονται χαρακτήρες διαφυγής δεν αντιστοιχούν σε κάποιο από τα πλήκτρα του πληκτρολογίου και χρησιμοποιούνται σε συνδυασμό με τον χαρακτήρα \ Χαρακτήρας διαφυγής Ενέργεια \n New line (νέα γραμμή) \b Backspace (μια θέση πίσω) \f Form feed (νέα σελίδα) \r Carriage return(αρχή γραμμής) \t Tab (επόμενη στηλοθετημένη στήλη) \\ Backslah (ο χαρακτήρας ανάποδη κάθετος) \ Τα απλά εισαγωγικά \ Διπλά εισαγωγικά \0 Χαρακτήρας τερματισμού
Οι μεταβλητές char - getch(), putch() Οι μεταβλητές τύπου char δηλώνονται: char a,b,metabliti; Όπως και τις σταθερές char έτσι και οι μεταβλητές χειρίζονται σας αριθμοί από τη C++ Οι συναρτήσεις getch(), και putch() αποτελούν κληρονομιά από τη C και αποτελούν έναν άλλο τρόπο για την είσοδο και έξοδο χαρακτήρων. Για να μπορέσουμε να τις χρησιμοποιήσουμε πρέπει να συμπεριλάβουμε τη βιβλιοθήκη conio.h : #include <conio.h>
getch(), putch() getch(): αποτελεί εναλλακτικό τρόπο ανάγνωσης χαρακτήρα από το πληκτρολόγιο. Η συνάρτηση περιμένει να πατηθεί ένας χαρακτήρας, δεν τον εμφανίζει και δεν περιμένει πάτημα του πλήκτρου enter: char ch; ch=getch(); putch(ch): η συνάρτηση εμφανίζει ένα χαρακτήρα στην οθόνη. Η παράμετρος ch πρέπει να είναι τύπου char ή τύπου int και ορίζει τον ASCII κωδικό του χαρακτήρα. Ο χαρακτήρας εμφανίζεται στη θέση που βρίσκεται ο κερσορας, στην περίπτωση που είναι τύπου int (4 byte) o χαρακτήρας που θα εμφανιστεί καθορίζεται από το πρώτο byte
Συμβολοσειρές Μια συμβολοσειρά στη C++ είναι ένα σύνολο χαρακτήρων μέσα σε διπλά εισαγωγικά : ΧΡΗΣΤΟΣ 45 Μια συμβολοσειρά αποθηκεύεται στη μνήμη σε συνεχόμενες θέσεις (μία για κάθε χαρακτήρα) ξεκινώντας από μια συγκεκριμένη διεύθυνση. Ο μεταγλωττιστής της C++ τοποθετεί τον τερματικό χαρακτήρα \0 στο τέλος κάθε συνόλου χαρακτήρων, σηματοδοτώντας το τέλος της συμβολοσειράς. Η τιμή μιας συμβολοσειράς (string) είναι η αρχική διεύθυνση της μνήμης όπου αποθηκεύτηκε η συμβολοσειρά και όχι οι ίδιοι οι χαρακτήρες. Η C++ χειρίζεται κάθε συμβολοσειρά σαν αριθμό και συγκεκριμένα σαν μια διεύθυνση. Ο χειρισμός των αλφαριθμητικών γίνεται από ειδικές συναρτήσεις, η κλάση string που περιέχεται στη καθιερωμένη βιβλιοθήκη της C++ μας δίνει τη δυνατότητα εύκολου χειρισμού των συμβολοσειρών
Ο Τύπος wchar_t Ο πίνακας ASCII μπορεί να κωδικοποιήσει μέχρι 255 χαρακτήρες η ανάγκη για τη κωδικοποίηση περισσότερων χαρακτήρων (πχ αλφάβητα γλωσσών) οδήγησε στην ανάπτυξη του προτύπου UNICODE Ο τύπος char της C++ υποστηρίζει χαρακτήρες που κωδικοποιούνται με ένα μόνο byte. Για να χειριστούμε χαρακτήρες που απαιτούνται περισσότερα byte (2 ή 4) η C++ διαθέτει τον τύπο δεδομένων wchar_t. Συνήθως σε περιβάλλοντα Linux/Unix το μέγεθος του τύπου wchart_t είναι 4 byte ενώ στα windows 2 byte
Παραδείγματα Το επόμενο πρόγραμμα διαβάζει ένα χαρακτήρα, χρησιμοποιώντας τη συνάρτηση getch(), και τον εμφανίζει στην οθόνη. (4p4) #include <iostream> #include <conio.h> using namespace std; main() { char c; cout << "Pliktrologiste ena xaraktira:"; c = getch(); cout << c << endl; system("pause"); }
Παραδείγματα Το επόμενο πρόγραμμα διαβάζει ένα χαρακτήρα και τυπώνει το κωδικό ASCII (4p6) #include <iostream> #include <conio.h> using namespace std; main() { char c; int a; cout << "Pliktrologiste enan xaraktira:"; c = getch(); a = c; cout << "\no ASCII kodikos toy " << c << " einai " << a <<endl; system("pause"); }
Παραδείγματα Το επόμενο πρόγραμμα περιμένει το πάτημα ενός χαρακτήρα και ελέγχει αν είναι Λατινικός κεφαλαίος ή όχι: (4p7) #include <iostream> using namespace std; main() { char c; cout << "Pliktroloiste ena xaraktira:"; cin >> c; if ('Á'<=c && c<='z') { cout <<"O xaraktiras einai latinikos kefalaios\n"; } else { cout <<"O xaraktiras den einai latinikos kefalaios\n"; } system("pause"); }
Παραδείγματα #include <iostream> using namespace std; main() { char ch,let; int a,b=4; ch='a'; let='b'; a=b+ch+let; ch++; cout << "a="<<a<<" ch="<<ch<<endl; system("pause"); }
Ο τύπος bool Ο τύπος δεδομένω bool αφορά λογικά δεδομένα με τιμή True (1) ή False(0) Ορίζονται ως εξής: bool a,b,metavliti; int a=10,b=20; bool c; c=a>b; Το b θα πάρει τι τιμή 0 (false) Στην περίπτωση που σε μια μεταβλητή τύπου bool ανατεθεί το αποτέλεσμα μιας αριθμητικής παράστασης, τότε αν η τιμή της παράστασης είναι 0 η μεταβλητή παίρνει τη τιμή 0 (False) αλλιώς παίρνει τη τιμή 1 (True)
Αυτόματη μετατροπή τύπου σε σταθερές Με τον όρο σταθερά όπως έχουμε πει εννοούμε συγκεκριμένες τιμές που δεν αλλάζουν στο πρόγραμμα μας. Σταθερά χαρακτήρα- ακέραια σταθερά- σταθερά κινητής υποδιαστολής Γενικά ισχύει: Σε ένα περιβάλλον 32bit η C++ μετατρέπει όλες τις ακέραιες σταθερές σε τύπου int (4byte) Στη C++ όλες οι σταθερές κινητής υποδιαστολής μετατρέπονται σε τύπου double Για να παρακάμψουμε τη παραπάνω μετατροπή μετά τη σταθερά βάζουμε ένα επίθεμα: L πχ 12L /* long integer U πχ 12U /* unsigned integer UL πχ 12UL /*unsigned long integer F πχ 12.34F /*float L πχ 12.34L /*long double Double : 12.34
Δεκαεξαδικές και οκταδικές σταθερές Το δεκαεξαδικό σύστημα αρίθμησης έχει ως βάση τον αριθμό 16 αντί του 10, και περιλαμβάνει 16 ψηφία : Τα ψηφία από το 0 μέχρι το 9 και τα γράμματα από το Α μέχρι το F (τα οποία χρησιμοποιούνται για τους αριθμούς 10 έως 15) (64) 10 =(40) 16 η μετατροπή γίνεται με παρόμοιο τρόπο όπως είδαμε για μετατροπή στο δυαδικό μόνο που τώρα διαιρούμε με το δεκαέξι Μια δεκαεξαδική σταθερά πρέπει να αρχίζει με 0x (μηδέν και λατινικό x): 0xFF (15*16 1 + 15*16 0 )=(255) 10
Δεκαεξαδικές και οκταδικές σταθερές Το οκταδικό σύστημα αρίθμησης έχει ως βάση των αριθμό 8 και περιλαμβάνει τα ψηφία από 0 μέχρι 7 (64) 10 =(100) 8 (100) 8 (0*8 0 +0*8 1 +1*8 2 ) 10 =64 Μια οκταδική σταθερά πρέπει να αρχίζει από 0 (μηδέν): (010) 8 = (9) 10 (022) 8 = (18) 10
Παραδείγματα Το επόμενο πρόγραμμα διαβάζει 2 αριθμούς τους συγκρίνει και καταχωρίζει το αποτέλεσμα σε μια μεταβλητή: main() { int a,b; bool c; cout<< Δώσε δυο αριθμούς: ; cin>>a>>b; c=a==b; /*η μεταβλητή c παίρνει την τιμή true ή false ανάλογα αν είναι ίση ή όχι η a */ και b if (ap) else } cout<< Ίσοι\n ; cout<< Άνισοι\n ;
Παραδείγματα Το επόμενο πρόγραμμα μετατρέπει το αποτέλεσμα μιας αριθμητικής παράστασης σε δεδομένα τύπου bool main() { int a,b; bool ap1, ap2; a=b=44; ap1=a+b; /* Η ap1 παίρνει τη τιμή true (1) αφού a+b είναι διάφορο του 0*/ ap2=a-b; /* Η ap0 παίρνει τη τιμή false (0) αφού a-b= 0*/ cout<< ap1= <<ap1<<endl; cout<< ap2= <<ap2<<endl; }
Παραδείγματα X=100 Παράσταση X Τιμή παράστασης x++ 101 100 +xx 101 101 x-- 99 100 -xx 99 99
Παραδείγματα Να γραφεί πρόγραμμα το οποίο ζητάει την ακτίνα ενός κύκλου, και κατόπιν υπολογίζει και εμφανίζει το εμβαδό του με διπλή ακρίβεια. #include <iostream> #include <cmath> #define pi 3.141592 using namespace std; main() { double r,e; cout << "Dose aktina :"; cin >> r; e=pow(r,2)*pi; cout << "To emvadon kykloy aktinas " << r << " einai " << e << endl; system("pause"); }
Παραδείγματα Να γραφεί πρόγραμμα το οποίο να υπολογίζει το Μ.Ο. 2 δεκαδικών αριθμών και να τον εμφανίζει με 2 δεκαδικά ψηφία καταλαμβάνοντας 7 θέσεις στην οθόνη: #include <iostream> #include <iomanip> using namespace std; main() { float a,b,mo; cin >> a >> b; mo=(a+b)/2; cout << "MO=" << setw(7) << setprecision(2) << fixed << mo << endl; system("pause"); }