Η Go περιέχει βασικούς αριθμητικούς τύπους που μπορούν να αναπαραστήσουν σύνολα τιμών, είτε ακεραίων είτε κινητής υποδιαστολής. Υπάρχουν διαφορετικοί τύποι ανάλογα με το μέγεθος της τιμής που χρειάζεσαι και την αρχιτεκτονική του υπολογιστή όπου τρέχει η εφαρμογή (π.χ. 32 bit και 64 bit).
Για τις ανάγκες αυτής της άσκησης θα ασχοληθείς μόνο με:
int: π.χ. 0, 255, 2147483647.
Ένας ακέραιος με πρόσημο που έχει μέγεθος τουλάχιστον 32 bit (εύρος τιμών: -2147483648 έως 2147483647).
Ωστόσο, αυτό εξαρτάται από την αρχιτεκτονική του συστήματος.
Οι περισσότεροι σύγχρονοι υπολογιστές είναι 64 bit, επομένως ο int θα έχει μέγεθος 64 bit (εύρος τιμών: -9223372036854775808 έως 9223372036854775807).
float64: π.χ. 0.0, 3.14.
Περιέχει το σύνολο όλων των αριθμών κινητής υποδιαστολής 64 bit.
uint: π.χ. 0, 255.
Ένας ακέραιος χωρίς πρόσημο που έχει το ίδιο μέγεθος με τον int (εύρος τιμών: 0 έως 4294967295 για 32 bit και 0 έως 18446744073709551615 για 64 bit)
Οι αριθμοί μπορούν να μετατραπούν σε άλλους αριθμητικούς τύπους μέσω μετατροπής τύπων.
Η Go υποστηρίζει πολλούς από τους καθιερωμένους αριθμητικούς τελεστές:
| Τελεστής | Παράδειγμα |
|---|---|
+ |
4 + 6 == 10 |
- |
15 - 10 == 5 |
* |
2 * 3 == 6 |
/ |
13 / 3 == 4 |
% |
13 % 3 == 1 |
Για την ακέραια διαίρεση, το υπόλοιπο απορρίπτεται (π.χ. 5 / 2 == 2).
Η Go έχει συντομευμένη εκχώρηση για τους παραπάνω τελεστές (π.χ. το a += 5 είναι συντομογραφία του a = a + 5).
Η Go υποστηρίζει επίσης τις εντολές αύξησης και μείωσης ++ και -- (π.χ. a++).
Η μετατροπή μεταξύ τύπων γίνεται μέσω μιας συνάρτησης με το όνομα του τύπου στον οποίο θέλεις να μετατρέψεις. Για παράδειγμα:
var x int = 42 // x has type int
f := float64(x) // f has type float64 (ie. 42.0)
var y float64 = 11.9 // y has type float64
i := int(y) // i has type int (ie. 11)
Σε πολλές γλώσσες μπορείς να εκτελέσεις αριθμητικές πράξεις σε μεταβλητές διαφορετικών τύπων, αλλά στην Go αυτό προκαλεί σφάλμα. Για παράδειγμα:
var x int = 42
// this line produces an error
value := float32(2.0) * x // invalid operation: mismatched types float32 and int
// you must convert int type to float32 before performing arithmetic operation
value := float32(2.0) * float32(x)
Σε αυτή την άσκηση θα γράψεις κώδικα για να αναλύσεις την παραγωγή σε ένα εργοστάσιο αυτοκινήτων.
Τα αυτοκίνητα παράγονται σε μια γραμμή συναρμολόγησης. Η γραμμή συναρμολόγησης έχει μια συγκεκριμένη ταχύτητα, η οποία μπορεί να αλλάξει. Όσο πιο γρήγορη είναι η ταχύτητα της γραμμής συναρμολόγησης, τόσο περισσότερα αυτοκίνητα παράγονται. Ωστόσο, η αλλαγή της ταχύτητας της γραμμής συναρμολόγησης αλλάζει και τον αριθμό των αυτοκινήτων που παράγονται επιτυχώς, δηλαδή των αυτοκινήτων χωρίς κανένα σφάλμα στην παραγωγή τους.
Υλοποίησε μια συνάρτηση που δέχεται τον αριθμό των αυτοκινήτων που παράγονται ανά ώρα και το ποσοστό επιτυχίας και υπολογίζει τον αριθμό των επιτυχημένων αυτοκινήτων που παράγονται ανά ώρα.
Το ποσοστό επιτυχίας δίνεται ως ποσοστό, από 0 έως 100:
CalculateWorkingCarsPerHour(1547, 90)
// => 1392.3
Σημείωση: η τιμή επιστροφής πρέπει να είναι float64.
Υλοποίησε μια συνάρτηση που δέχεται τον αριθμό των αυτοκινήτων που παράγονται ανά ώρα και το ποσοστό επιτυχίας και υπολογίζει πόσα αυτοκίνητα παράγονται επιτυχώς κάθε λεπτό:
CalculateWorkingCarsPerMinute(1105, 90)
// => 16
Σημείωση: η τιμή επιστροφής πρέπει να είναι int.
Κάθε αυτοκίνητο κοστίζει κανονικά 10.000 δολάρια για να παραχθεί μεμονωμένα, ανεξάρτητα από το αν είναι επιτυχημένο ή όχι. Με λίγο προγραμματισμό όμως, 10 αυτοκίνητα μπορούν να παραχθούν μαζί για 95.000 δολάρια.
Για παράδειγμα, 37 αυτοκίνητα μπορούν να παραχθούν με τον εξής τρόπο: 37 = 3 x ομάδες των δέκα + 7 μεμονωμένα αυτοκίνητα
Άρα το κόστος για 37 αυτοκίνητα είναι: 3*95.000+7*10.000=355.000
Υλοποίησε τη συνάρτηση CalculateCost που υπολογίζει το κόστος παραγωγής ενός αριθμού αυτοκινήτων, ανεξάρτητα από το αν είναι επιτυχημένα:
CalculateCost(37)
// => 355000
CalculateCost(21)
// => 200000
Σημείωση: η τιμή επιστροφής πρέπει να είναι uint.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Go με 34 έννοιες165 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.