Go contiene tipos numéricos básicos que pueden representar conjuntos de valores enteros o de coma flotante. Hay distintos tipos en función del tamaño del valor que necesites y de la arquitectura del ordenador en el que se ejecute la aplicación (p. ej., 32 bits y 64 bits).
Para este ejercicio solo vas a tratar con:
int: p. ej., 0, 255, 2147483647.
Un entero con signo que ocupa al menos 32 bits (rango de valores: -2147483648 a 2147483647).
Pero esto dependerá de la arquitectura del sistema.
La mayoría de los ordenadores modernos son de 64 bits, por lo que int ocupará 64 bits (rango de valores: -9223372036854775808 a 9223372036854775807).
float64: p. ej., 0.0, 3.14.
Contiene el conjunto de todos los números de coma flotante de 64 bits.
uint: p. ej., 0, 255.
Un entero sin signo que tiene el mismo tamaño que int (rango de valores: 0 a 4294967295 para 32 bits y 0 a 18446744073709551615 para 64 bits)
Los números se pueden convertir a otros tipos numéricos mediante la conversión de tipos.
Go admite muchos operadores aritméticos estándar:
| Operador | Ejemplo |
|---|---|
+ |
4 + 6 == 10 |
- |
15 - 10 == 5 |
* |
2 * 3 == 6 |
/ |
13 / 3 == 4 |
% |
13 % 3 == 1 |
En la división entera se descarta el residuo (p. ej., 5 / 2 == 2).
Go tiene asignación abreviada para los operadores anteriores (p. ej., a += 5 es una forma abreviada de a = a + 5).
Go también admite las instrucciones de incremento y decremento ++ y -- (p. ej., a++).
La conversión entre tipos se realiza mediante una función con el nombre del tipo al que te quieres convertir. Por ejemplo:
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)
En muchos lenguajes puedes realizar operaciones aritméticas con variables de distintos tipos, pero en Go esto da un error. Por ejemplo:
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)
En este ejercicio vas a escribir código para analizar la producción en una fábrica de coches.
Los coches se producen en una cadena de montaje. La cadena de montaje tiene una velocidad determinada, que se puede cambiar. Cuanto mayor es la velocidad de la cadena de montaje, más coches se producen. Sin embargo, cambiar la velocidad de la cadena de montaje también cambia el número de coches que se producen con éxito, es decir, coches sin ningún error en su producción.
Implementa una función que reciba el número de coches producidos por hora y la tasa de éxito, y calcule el número de coches producidos con éxito por hora.
La tasa de éxito se da como un porcentaje, de 0 a 100:
CalculateWorkingCarsPerHour(1547, 90)
// => 1392.3
Nota: el valor devuelto debe ser un float64.
Implementa una función que reciba el número de coches producidos por hora y la tasa de éxito, y calcule cuántos coches se producen con éxito cada minuto:
CalculateWorkingCarsPerMinute(1105, 90)
// => 16
Nota: el valor devuelto debe ser un int.
Normalmente, producir cada coche por separado cuesta 10.000 $, independientemente de si tiene éxito o no. Pero con un poco de planificación, se pueden producir 10 coches juntos por 95.000 $.
Por ejemplo, 37 coches se pueden producir de la siguiente manera: 37 = 3 x grupos de diez + 7 coches individuales
Así que el coste de 37 coches es: 3*95.000+7*10.000=355.000
Implementa la función CalculateCost que calcula el coste de producir un número de coches, independientemente de si tienen éxito o no:
CalculateCost(37)
// => 355000
CalculateCost(21)
// => 200000
Nota: el valor devuelto debe ser un uint.
Regístrate en Exercism para aprender y dominar Go con 34 conceptos165 ejercicios y mentoría humana real, todo gratis.