Διαδρομές
/
C#
C#
/
Ασκήσεις
/
Ο υπερπληθωρισμός χτυπά τη Hyperia
Ο υπερπληθωρισμός χτυπά τη Hyperia

Ο υπερπληθωρισμός χτυπά τη Hyperia

Άσκηση εκμάθησης

Εισαγωγή

Υπερχείλιση

Η αριθμητική υπερχείλιση συμβαίνει όταν ένας υπολογισμός, όπως μια αριθμητική πράξη ή μια μετατροπή τύπου, καταλήγει σε μια τιμή μεγαλύτερη από τη χωρητικότητα του τύπου που τη λαμβάνει.

Οι εκφράσεις τύπου int και long, καθώς και οι αντίστοιχες ανυπόγραφες εκφράσεις τους, θα αναδιπλωθούν σιωπηλά σε αυτές τις περιπτώσεις.

Η συμπεριφορά των υπολογισμών ακεραίων μπορεί να τροποποιηθεί με τη χρήση της λέξης-κλειδιού checked. Όταν προκύψει υπερχείλιση μέσα σε ένα μπλοκ checked, πετιέται ένα στιγμιότυπο της OverflowException.

int one = 1;
checked
{
    int expr = int.MaxValue + one;   // OverflowException is thrown
}

// or

int expr2 = checked(int.MaxValue + one);     // OverflowException is thrown

Οι εκφράσεις τύπου float και double θα πάρουν μια ειδική τιμή, το άπειρο.

Οι εκφράσεις τύπου decimal θα πετάξουν ένα στιγμιότυπο της OverflowException.

Οδηγίες

Η χώρα Hyperia έχει τα προβλήματά της. Ειδικότερα, ο πληθωρισμός έχει ξεφύγει από κάθε έλεγχο. Σε έφεραν με αεροπλάνο για να αναλάβεις σύμβαση στην κεντρική τράπεζα.

1. Εκτύπωσε τις ονομαστικές αξίες των χαρτονομισμάτων

Για να απλοποιήσει την εσωτερική της διαχείριση, η κεντρική τράπεζα έχει χωρίσει κάθε ονομαστική αξία σε μέρη: μια βάση που μένει σχετικά αμετάβλητη και έναν πολλαπλασιαστή (τον ίδιο για όλες τις ονομαστικές αξίες) που μπορεί να αλλάζει κάθε χρόνο, κάθε εβδομάδα ή ακόμα και κάθε μέρα.

Όταν εκτυπώνονται, οι ονομαστικές αξίες στα χαρτονομίσματα είναι το γινόμενο της βάσης και του πολλαπλασιαστή.

Την εποχή που καθιερώθηκε αυτό το σύστημα, το μικρότερο χαρτονόμισμα είχε ήδη ονομαστική αξία 10,000,000. Ο πίνακας παρακάτω δείχνει την κατάσταση (για τις 3 πρώτες ονομαστικές αξίες) όταν πρωτοκαθιερώθηκε το σύστημα. Τα πράγματα έχουν χειροτερέψει πολύ από τότε, και δεν αλλάζει μόνο ο πολλαπλασιαστής αλλά και η βάση.

Βάση Πολλαπλασιαστής Ονομαστική αξία
10,000 1,000 10,000,000
50,000 1,000 50,000,000
100,000 1,000 100,000,000
... 1,000 ...

Συνοψίζοντας, αυτό σημαίνει ότι ονομαστική αξία = βάση * πολλαπλασιαστής.

Υλοποίησε τη μέθοδο CentralBank.DisplayDenomination(), η οποία δέχεται τη βάση και τον πολλαπλασιαστή και επιστρέφει μια συμβολοσειρά με το γινόμενό τους (βάση * πολλαπλασιαστής). Η αριθμητική συμβολοσειρά που επιστρέφεται δεν πρέπει να είναι μορφοποιημένη.

Αν η πράξη του πολλαπλασιασμού προκαλέσει υπερχείλιση, τότε θα πρέπει να επιστραφεί η συμβολοσειρά "*** Too Big ***".

CentralBank.DisplayDenomination(10000L, 1000L);
// => "10000000"
CentralBank.DisplayDenomination(long.MaxValue / 2, 10000L);
// => "*** Too Big ***"

2. Εμφάνισε το ΑΕΠ για τη Hyperia

Η κεντρική τράπεζα χρησιμοποιεί την ίδια λογική του πολλαπλασιαστή για να καταγράφει το ΑΕΠ στο εσωτερικό της. Τα στατιστικά καταγράφονται σε μια ονομαστική αξία βάσης και μετά κλιμακώνονται με τη βοήθεια του πολλαπλασιαστή.

Υλοποίησε τη μέθοδο CentralBank.DisplayGDP(), η οποία δέχεται το ΑΕΠ βάσης και τον τρέχοντα πολλαπλασιαστή και επιστρέφει το ΑΕΠ ως συμβολοσειρά.

Αν το ΑΕΠ δεν μπορεί να υπολογιστεί, τότε επιστρέφεται το "*** Too Big ***".

CentralBank.DisplayGDP(555f, 10000f);
// => "5550000"
CentralBank.DisplayGDP(float.MaxValue / 2, 10000f);
// => "*** Too Big ***"

3. Εμφάνισε τον μισθό του επικεφαλής οικονομολόγου

Το αφεντικό σου στην τράπεζα θέλει να βεβαιωθεί ότι δεν θα υπάρξουν προβλήματα την ώρα της μισθοδοσίας.

Υλοποίησε τη μέθοδο CentralBank.DisplayChiefEconomistSalary(), η οποία δέχεται έναν μισθό εκφρασμένο σε μονάδες βάσης (όπως παραπάνω) και έναν πολλαπλασιαστή και επιστρέφει μια συμβολοσειρά που περιέχει το γινόμενο.

Αν ο μισθός δεν μπορεί να υπολογιστεί, τότε επιστρέφεται το "*** Much Too Big ***".

CentralBank.DisplayChiefEconomistSalary(555000m, 10000m);
// => "5550000000"
CentralBank.DisplayChiefEconomistSalary(555000m, decimal.MaxValue / 2L);
// => "*** Much Too Big ***"
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
C# Exercism

Έτοιμος να ξεκινήσεις την άσκηση Ο υπερπληθωρισμός χτυπά τη Hyperia;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις C# με 62 έννοιες178 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.