Go tem tipos numéricos básicos que conseguem representar conjuntos de valores inteiros ou de vírgula flutuante. Existem tipos diferentes consoante o tamanho do valor de que precisas e a arquitetura do computador onde a aplicação está a ser executada (por exemplo, 32 bits e 64 bits).
Para efeitos deste exercício, vais lidar apenas com:
int: por exemplo, 0, 255, 2147483647.
Um inteiro com sinal que ocupa pelo menos 32 bits (intervalo de valores: -2147483648 a 2147483647).
Mas isto depende da arquitetura do sistema.
A maioria dos computadores modernos é de 64 bits, pelo que int terá 64 bits de tamanho (intervalo de valores: -9223372036854775808 a 9223372036854775807).
float64: por exemplo, 0.0, 3.14.
Contém o conjunto de todos os números de vírgula flutuante de 64 bits.
uint: por exemplo, 0, 255.
Um inteiro sem sinal que tem o mesmo tamanho que int (intervalo de valores: 0 a 4294967295 para 32 bits e 0 a 18446744073709551615 para 64 bits)
Os números podem ser convertidos noutros tipos numéricos através da conversão de tipos.
Go suporta muitos operadores aritméticos padrão:
| Operador | Exemplo |
|---|---|
+ |
4 + 6 == 10 |
- |
15 - 10 == 5 |
* |
2 * 3 == 6 |
/ |
13 / 3 == 4 |
% |
13 % 3 == 1 |
Na divisão inteira, o resto é descartado (por exemplo, 5 / 2 == 2).
Go tem atribuições abreviadas para os operadores acima (por exemplo, a += 5 é uma forma abreviada de a = a + 5).
Go também suporta as instruções de incremento e decremento ++ e -- (por exemplo, a++).
A conversão entre tipos faz-se através de uma função com o nome do tipo para o qual queres converter. Por exemplo:
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)
Em muitas linguagens, podes realizar operações aritméticas com variáveis de tipos diferentes, mas em Go isso dá um erro. Por exemplo:
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)
Neste exercício vais escrever código para analisar a produção numa fábrica de automóveis.
Os carros são produzidos numa linha de montagem. A linha de montagem tem uma certa velocidade, que pode ser alterada. Quanto maior for a velocidade da linha de montagem, mais carros são produzidos. No entanto, alterar a velocidade da linha de montagem também muda o número de carros produzidos com sucesso, ou seja, carros sem erros na sua produção.
Implementa uma função que recebe o número de carros produzidos por hora e a taxa de sucesso e calcula o número de carros produzidos com sucesso por hora.
A taxa de sucesso é dada em percentagem, de 0 a 100:
CalculateWorkingCarsPerHour(1547, 90)
// => 1392.3
Nota: o valor devolvido deve ser um float64.
Implementa uma função que recebe o número de carros produzidos por hora e a taxa de sucesso e calcula quantos carros são produzidos com sucesso a cada minuto:
CalculateWorkingCarsPerMinute(1105, 90)
// => 16
Nota: o valor devolvido deve ser um int.
Cada carro custa normalmente $10,000 a produzir individualmente, independentemente de ter sucesso ou não. Mas, com um pouco de planeamento, 10 carros podem ser produzidos em conjunto por $95,000.
Por exemplo, 37 carros podem ser produzidos da seguinte forma: 37 = 3 x grupos de dez + 7 carros individuais
Assim, o custo de 37 carros é: 3*95,000+7*10,000=355,000
Implementa a função CalculateCost que calcula o custo de produção de um determinado número de carros, independentemente de terem sucesso ou não:
CalculateCost(37)
// => 355000
CalculateCost(21)
// => 200000
Nota: o valor devolvido deve ser um uint.
Inscreve-te no Exercism para aprenderes e dominares Go com 34 conceitos165 exercícios, e mentoria humana real, tudo grátis.