Οι ενσωματωμένοι αριθμητικοί τύποι της C++ χωρίζονται σε ακέραιους και σε αριθμούς κινητής υποδιαστολής.
Οι ακέραιοι είναι αριθμοί χωρίς δεκαδικό μέρος, όπως το 0, το 691 ή το -2.
Οι αριθμοί κινητής υποδιαστολής έχουν υποδιαστολή, όπως το 6.02214076, το 0.1 ή το -1.616.
Το παρακάτω παράδειγμα δείχνει τη δήλωση και την αρχικοποίηση τεσσάρων διαφορετικών μεταβλητών.
int m_morales{9241}; // base 10: 0-9
int a_apaec{0x24CD}; // base 16: 0-9 and A-F
int m_gargan{0b10010000011001}; // base 2: 0-1
int b_reilly{022031}; // base 8: 0-7
// Leading with a 0 not the letter o.
Όταν αναθέτεις μια τιμή σε μια μεταβλητή int, μπορείς να το κάνεις απευθείας με ένα literal.
Ένα literal είναι ένας καρφωτός αριθμός, όπως το 9241.
Υπάρχουν διαφορετικά ακέραια literals για διάφορες βάσεις αναπαράστασης.
Τα δεκαδικά ακέραια literals είναι τα πιο συνηθισμένα και χρησιμοποιούν τα ψηφία 0 έως 9.
Προσθέτοντας ένα ειδικό πρόθεμα, όπως το 0x, μπορείς να χρησιμοποιήσεις και άλλες βάσεις.
Το παραπάνω παράδειγμα δείχνει τον αριθμό 9241 στις τέσσερις αναπαραστάσεις και τα προθέματά του.
Όλες οι μεταβλητές αρχικοποιούνται στην ίδια τιμή.
Για περισσότερες λεπτομέρειες σχετικά με τα διάφορα συστήματα αναπαράστασης, ρίξε μια ματιά σε έναν σύντομο οδηγό.
Μπορείς να χρησιμοποιήσεις μια απόστροφο για να χωρίσεις τα ψηφία και να διαβάζονται πιο εύκολα.
Το 9'241 είναι το ίδιο με το 0b0100'100'0001'1001 ή το 92'4'1.
Τα literals κινητής υποδιαστολής υπάρχουν σε δύο μορφές.
Εκτός από το διαισθητικό 0.0024, μπορείς να χρησιμοποιήσεις και την επιστημονική του σημειογραφία 2.4e-3.
Ο πιο συνηθισμένος τύπος κινητής υποδιαστολής είναι ο double.
Η C++ υποστηρίζει τους +, -, *, /, ( και ) και % για να σχηματίσεις παραστάσεις.
Το αποτέλεσμα της πράξης ανάμεσα σε δύο ακέραιους είναι επίσης ακέραιος.
Το 5 / 2 θα επιστρέψει 2.
Όταν ένας από τους τύπους που εμπλέκονται είναι τύπου κινητής υποδιαστολής, το αποτέλεσμα θα είναι επίσης κινητής υποδιαστολής.
Τα 5.0 / 2 και 5 / 2.0 θα επιστρέψουν 2.5.
Το % είναι ο τελεστής υπολοίπου και επιστρέφει το υπόλοιπο μιας ακέραιας διαίρεσης: το 5%3 είναι 2.
Ο τελεστής ανάθεσης αναθέτει ένα literal σε μια μεταβλητή. Η ανάθεση γίνεται πάντα από τα δεξιά προς τα αριστερά και ποτέ αντίστροφα.
int length = 5;
int width = 2;
length = width;
Εδώ η ακέραια τιμή 5 ανατίθεται στη μεταβλητή length.
Έπειτα, η ακέραια τιμή 2 ανατίθεται στη μεταβλητή width.
Τέλος, η τιμή του width αντιγράφεται στη μεταβλητή length και η προηγούμενη τιμή 5 χάνεται.
Σκέψου επίσης ότι τη στιγμή της ανάθεσης αντιγράφουμε στη length μόνο την τιμή του width.
Επομένως, αν η τιμή του width αλλάξει αργότερα, δεν θα επηρεάσει την τιμή που παίρνει το length.
Ο τελεστής ανάθεσης μπορεί να συνδυαστεί με τους άλλους τελεστές (αριθμητικούς και bitwise), γνωστούς ως τελεστές compound assignment: +=, -=, *=, /=, %=.
Αυτοί οι τελεστές τροποποιούν την τρέχουσα τιμή μιας μεταβλητής εκτελώντας μια πράξη πάνω της.
// we start with 0 people
int people{};
// we need 0 eggs
int eggs{};
// two people joined:
people += 2;
// people is now 2
// let's add 3 eggs per person
eggs += 3 * people;
// eggs is now 6
Οι μεταβλητές people και eggs αρχικοποιούνται στο 0.
Στη συνέχεια, προσθέτουμε την ακέραια τιμή 2 στην υπάρχουσα τιμή 0 της μεταβλητής people και την αναθέτουμε πίσω στο people.
Το people γίνεται τώρα 2.
Αργότερα, προσθέτουμε 3 αυγά για κάθε άτομο, που βγαίνουν 6 αυγά συνολικά.
Τώρα προσθέτουμε αυτό το 6 στην υπάρχουσα τιμή 0 της μεταβλητής eggs και την αναθέτουμε πίσω στο eggs.
Το eggs θα είναι τώρα 6.
Η ισοδύναμη παράσταση θα ήταν people = people + 2 και eggs = eggs + (3 * people).
Σε αυτή την άσκηση, θα γράψεις κώδικα για να βοηθήσεις έναν ελεύθερο επαγγελματία να επικοινωνεί με έναν project manager. Ο στόχος σου είναι να παρέχεις μερικά βοηθητικά εργαλεία για να υπολογίζεις γρήγορα την ημερήσια και τη μηνιαία χρέωση, προαιρετικά με μια δεδομένη έκπτωση.
Πρώτα, ορίζουμε μερικούς κανόνες ανάμεσα στον ελεύθερο επαγγελματία και τον project manager:
Μερικές φορές, ο ελεύθερος επαγγελματίας προσφέρεται να εφαρμόσει μια έκπτωση στην ημερήσια χρέωσή του (για παράδειγμα, για τους πιο πιστούς πελάτες του ή για πελάτες μη κερδοσκοπικών οργανώσεων).
Οι εκπτώσεις αναπαρίστανται ως δεκαδικοί αριθμοί που εκφράζουν ποσοστά, για παράδειγμα, 25.0 (25%).
Υλοποίησε μια συνάρτηση με το όνομα daily_rate που να υπολογίζει την ημερήσια χρέωση, παίρνοντας ως παράμετρο μια ωριαία χρέωση.
Το συμβόλαιο ορίζει ότι μια μέρα έχει 8 χρεώσιμες ώρες.
daily_rate(60)
// => 480.0
Η ημερήσια χρέωση που επιστρέφεται πρέπει να είναι τύπου double.
Υλοποίησε μια συνάρτηση apply_discount που να υπολογίζει την τιμή μετά από μια έκπτωση.
Θα πρέπει να δέχεται δύο παραμέτρους: την αρχική τιμή και το ποσοστό έκπτωσης.
apply_discount(150, 10)
// => 135.0
Η τιμή που επιστρέφεται πρέπει να είναι πάντα τύπου double, χωρίς καμία στρογγυλοποίηση.
Υλοποίησε μια συνάρτηση monthly_rate που να υπολογίζει τη μηνιαία χρέωση με έκπτωση.
Θα πρέπει να έχει δύο παραμέτρους, μια ωριαία χρέωση και την έκπτωση σε ποσοστό.
monthly_rate(77, 10.5)
// => 12130
Η μηνιαία χρέωση που επιστρέφεται πρέπει να στρογγυλοποιείται προς τα πάνω (δηλαδή με οροφή) στον πλησιέστερο ακέραιο.
Υλοποίησε μια συνάρτηση days_in_budget που παίρνει έναν προϋπολογισμό, μια ωριαία χρέωση και μια έκπτωση, και υπολογίζει πόσες πλήρεις μέρες εργασίας καλύπτει.
days_in_budget(20'000, 80, 11.0)
// => 35
Ο αριθμός των ημερών που επιστρέφεται πρέπει να στρογγυλοποιείται προς τα κάτω (δηλαδή με δάπεδο) στον αμέσως μικρότερο ακέραιο.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις C++ με 19 έννοιες100 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.