Percursos
/
Go
Go
/
Exercícios
/
Montagem de automóveis
Montagem de automóveis

Montagem de automóveis

Exercício de aprendizagem

Introdução

Números

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.

Operadores aritméticos

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++).

Converter entre tipos

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)

Operações aritméticas com tipos diferentes

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)

Instruções

Neste exercício vais escrever código para analisar a produção numa fábrica de automóveis.

1. Calcula o número de carros funcionais produzidos por hora

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.

2. Calcula o número de carros funcionais produzidos por minuto

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.

3. Calcula o custo de produção

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.

Editar via GitHub A ligação abre numa nova janela ou separador
Go Exercism

Estás pronto para começar Montagem de automóveis?

Inscreve-te no Exercism para aprenderes e dominares Go com 34 conceitos165 exercícios, e mentoria humana real, tudo grátis.