Go contiene tipi numerici di base che possono rappresentare insiemi di valori interi o in virgola mobile. Esistono tipi diversi a seconda della dimensione del valore richiesto e dell'architettura del computer su cui gira l'applicazione (ad esempio a 32 bit e a 64 bit).
Ai fini di questo esercizio avrai a che fare solo con:
int: ad esempio 0, 255, 2147483647.
Un intero con segno di almeno 32 bit di dimensione (intervallo di valori: da -2147483648 a 2147483647).
Ma questo dipenderà dall'architettura del sistema.
La maggior parte dei computer moderni è a 64 bit, quindi int sarà di 64 bit di dimensione (intervallo di valori: da -9223372036854775808 a 9223372036854775807).
float64: ad esempio 0.0, 3.14.
Contiene l'insieme di tutti i numeri in virgola mobile a 64 bit.
uint: ad esempio 0, 255.
Un intero senza segno della stessa dimensione di int (intervallo di valori: da 0 a 4294967295 per 32 bit e da 0 a 18446744073709551615 per 64 bit)
I numeri possono essere convertiti in altri tipi numerici tramite la conversione di tipo.
Go supporta molti operatori aritmetici standard:
| Operatore | Esempio |
|---|---|
+ |
4 + 6 == 10 |
- |
15 - 10 == 5 |
* |
2 * 3 == 6 |
/ |
13 / 3 == 4 |
% |
13 % 3 == 1 |
Per la divisione tra interi, il resto viene scartato (ad esempio 5 / 2 == 2).
Go ha un'assegnazione abbreviata per gli operatori sopra (ad esempio a += 5 è la forma breve di a = a + 5).
Go supporta anche le istruzioni di incremento e decremento ++ e -- (ad esempio a++).
La conversione tra tipi avviene tramite una funzione con il nome del tipo in cui convertire. Ad esempio:
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)
In molti linguaggi puoi eseguire operazioni aritmetiche su variabili di tipi diversi, ma in Go questo dà un errore. Ad esempio:
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)
In questo esercizio scriverai del codice per analizzare la produzione in una fabbrica di auto.
Le auto vengono prodotte su una catena di montaggio. La catena di montaggio ha una certa velocità, che può essere modificata. Più veloce è la catena di montaggio, più auto vengono prodotte. Tuttavia, cambiare la velocità della catena di montaggio cambia anche il numero di auto prodotte correttamente, cioè le auto senza errori nella loro produzione.
Implementa una funzione che riceve il numero di auto prodotte all'ora ed il tasso di successo e calcola il numero di auto prodotte correttamente all'ora.
Il tasso di successo è espresso come percentuale, da 0 a 100:
CalculateWorkingCarsPerHour(1547, 90)
// => 1392.3
Nota: il valore restituito deve essere un float64.
Implementa una funzione che riceve il numero di auto prodotte all'ora ed il tasso di successo e calcola quante auto vengono prodotte correttamente ogni minuto:
CalculateWorkingCarsPerMinute(1105, 90)
// => 16
Nota: il valore restituito deve essere un int.
Di norma, produrre ogni auto singolarmente costa $10,000, indipendentemente dal fatto che sia prodotta correttamente o meno. Con un po' di pianificazione, però, 10 auto possono essere prodotte insieme per $95,000.
Ad esempio, 37 auto possono essere prodotte nel modo seguente: 37 = 3 x gruppi da dieci + 7 auto singole
Quindi il costo per 37 auto è: 3*95,000+7*10,000=355,000
Implementa la funzione CalculateCost che calcola il costo di produzione di un certo numero di auto, indipendentemente dal fatto che siano prodotte correttamente:
CalculateCost(37)
// => 355000
CalculateCost(21)
// => 200000
Nota: il valore restituito deve essere un uint.
Iscriviti a Exercism per imparare e padroneggiare Go con 34 concetti165 esercizi e il mentoring di persone reali, tutto gratis.