Percursos
/
Swift
Swift
/
Exercícios
/
A compra enervante de um veículo
A compra enervante de um veículo

A compra enervante de um veículo

Exercício de aprendizagem

Introdução

Operadores de comparação

Os operadores de comparação comparam dois valores do mesmo tipo e devolvem um valor Bool (true ou false). Se tentares comparar valores de tipos diferentes, o compilador dá um erro.

Os operadores de comparação padrão em Swift são:

Operador Descrição Exemplo
== Igual a 1 == 1 (true)
!= Diferente de 1 != 2 (true)
< Menor que 4 < 5 (true)
<= Menor ou igual a 4 <= 4 (true)
> Maior que 3 > 1 (true)
>= Maior ou igual a 2 >= 2 (true)

Condicionais if e else

Uma instrução condicional executa código consoante uma condição seja avaliada como true ou false. A condicional mais comum é a instrução if, que só executa um bloco de código quando a sua condição é true. Escreve uma instrução if com a palavra-chave if, seguida da condição e do bloco de código entre chavetas:

let wheelCount = 4
if wheelCount == 4 {
    print("Your vehicle is a car")
}
// Prints "Your vehicle is a car"

Podes combinar o if com uma cláusula else para executar código alternativo quando a condição é false:

let precipitationInMM = 0.5
if precipitationInMM > 0.5 {
    print("You will need an umbrella")
} else {
    print("You will not need an umbrella")
}
// Prints "You will not need an umbrella"

Para testar várias condições em sequência, encadeia as instruções com else if. Uma instrução if não precisa de um ramo else, mas podes incluí-lo para tratar os casos em que nenhuma das condições se verifica:

let favoriteFruit = "Apple"

if favoriteFruit == "Banana" {
    print("Your favorite fruit is a banana")
} else if favoriteFruit == "Orange" {
    print("Your favorite fruit is an orange")
} else if favoriteFruit == "Apple" {
    print("Your favorite fruit is an apple")
} else {
    print("Your favorite fruit is not a banana, orange, or apple")
}
// Prints "Your favorite fruit is an apple"

Expressões if

No Swift moderno, as instruções if também podem ser usadas como expressões que produzem um valor. Cada ramo é avaliado como um valor, o que facilita atribuir resultados de forma condicional:

let cpuBits = 32
let architecture = if cpuBits == 64 {
    "x86_64"
} else {
    "x86_32"
}

print(architecture)
// Prints "x86_32"

Operador ternário

O operador condicional ternário é uma forma abreviada e concisa de uma expressão if-else. Avalia uma condição e devolve um de dois valores, consoante essa condição seja true ou false.

O operador usa três partes: condition ? trueExpression : falseExpression. Se condition for avaliada como true, avalia-se e devolve-se trueExpression; caso contrário, avalia-se e devolve-se falseExpression.

O operador ternário é ideal para escolhas simples, numa única linha:

let showFahrenheit = true
let temperatureInCelsius = 30

let temperature = showFahrenheit ? temperatureInCelsius * 9 / 5 + 32 : temperatureInCelsius
print(temperature)
// Prints 86

O exemplo acima é o equivalente compacto de:

let showFahrenheit = true
let temperatureInCelsius = 30

let temperature = if showFahrenheit {
    temperatureInCelsius * 9 / 5 + 32
} else {
    temperatureInCelsius
}

Instruções

Neste exercício, vais escrever algum código para te ajudar a preparar-te para comprar um veículo.

Tens três tarefas: uma para determinar se vais precisar de ajuda para escolher entre dois veículos, outra para determinar que carta de condução vais precisar e outra para estimar o preço aceitável de um veículo usado.

1. Calcula se consegues pagar as prestações mensais de um determinado carro

Os stands de automóveis da tua cidade estão todos com uma promoção de cinco anos e 0% de juros, que gostarias de aproveitar. Mas não tens a certeza se consegues suportar as prestações mensais do carro que queres.

A prestação mensal é o preço total do carro dividido pelo número de meses do período de cinco anos.

Implementa a função canIBuy(vehicle:price:monthlyBudget:), que recebe os seguintes argumentos:

  • vehicle: o nome do veículo que queres comprar.
  • price: o preço do veículo que queres comprar.
  • monthlyBudget: a quantia de dinheiro que consegues pagar todos os meses.

A função deve devolver a seguinte mensagem, de acordo com as seguintes condições:

  • Se a prestação mensal do veículo for menor ou igual ao orçamento mensal, devolve a mensagem "Yes! I'm getting a <vehicle>".
  • Se a prestação mensal do veículo for superior ao teu orçamento mensal em até 10% (inclusive), devolve a mensagem "I'll have to be frugal if I want a <vehicle>".
  • Se a prestação mensal do veículo for mais de 10% superior ao teu orçamento mensal, devolve a mensagem "Darn! No <vehicle> for me".
canIBuy(vehicle: "1974 Ford Pinto", price: 516.32, monthlyBudget: 100.00)
// returns "Yes! I'm getting a 1974 Ford Pinto"
canIBuy(vehicle: "2011 Bugatti Veyron", price: 2_250_880.00, monthlyBudget: 10000.00)
// returns "Darn! No 2011 Bugatti Veyron for me"
canIBuy(vehicle: "2020 Indian FTR 1200", price: 12_500, monthlyBudget: 200)
// returns "I'll have to be frugal if I want a 2020 Indian FTR 1200"

2. Determina o tipo de carta de condução de que vais precisar

Decidiste comprar um veículo usado e precisas de determinar que tipo de carta de condução vais precisar para o conduzir.

Implementa a função licenseType(numberOfWheels:), que recebe o argumento numberOfWheels, o número de rodas do veículo que queres comprar.

A função deve devolver a seguinte mensagem, de acordo com as seguintes condições:

  • Se o número de rodas for 2 ou 3, devolve a mensagem "You will need a motorcycle license for your vehicle".
  • Se o número de rodas for 4 ou 6, devolve a mensagem "You will need an automobile license for your vehicle".
  • Se o número de rodas for 18, devolve a mensagem "You will need a commercial trucking license for your vehicle".
  • Se o número for qualquer outro, devolve a mensagem "We do not issue licenses for those types of vehicles".
licenseType(numberOfWheels: 2)
// returns "You will need a motorcycle license for your vehicle"
licenseType(numberOfWheels: 6)
// returns "You will need an automobile license for your vehicle"
licenseType(numberOfWheels: 18)
// returns "You will need a commercial trucking license for your vehicle"
licenseType(numberOfWheels: 0)
// returns "We do not issue licenses for those types of vehicles"

3. Calcula uma estimativa do preço de um veículo usado

Agora que já tomaste a tua decisão, queres ter a certeza de que consegues um preço justo no stand. Como estás interessado em comprar um veículo usado, o preço depende da idade do veículo. Para uma estimativa aproximada, assume que, se o veículo tiver menos de 3 anos, custa 80% do preço original que tinha quando era novo. Se tiver pelo menos 10 anos, custa 50%. Se o veículo tiver pelo menos 3 anos mas não mais de 10 anos, custa 70% do preço original.

Implementa a função calculateResellPrice(originalPrice:yearsOld:), que recebe os argumentos originalPrice, que contém o preço original do veículo, e yearsOld, que contém a idade do veículo em anos. A função deve devolver o preço de revenda do veículo.

calculateResellPrice(originalPrice: 1000, yearsOld: 1)
// returns 800
calculateResellPrice(originalPrice: 1000, yearsOld: 5)
// returns 700
calculateResellPrice(originalPrice: 1000, yearsOld: 15)
// returns 500
Editar via GitHub A ligação abre numa nova janela ou separador
Swift Exercism

Estás pronto para começar A compra enervante de um veículo?

Inscreve-te no Exercism para aprenderes e dominares Swift com 35 conceitos116 exercícios, e mentoria humana real, tudo grátis.