Lasanha

Lasanha

Exercício de aprendizagem

Introdução

Noções básicas

Para iniciar a viagem pelo C++, vamos começar com variáveis, chamadas de funções e comentários.

Comentários

Há dois tipos de comentários: de uma linha e de várias linhas. Tudo o que vem depois de // na mesma linha é ignorado pelo compilador. Os comentários de várias linhas também são conhecidos como comentários ao estilo C. São delimitados por /* e */. Tudo o que fica entre eles também é ignorado.

Variáveis

O C++ é uma linguagem com tipos. Todos os tipos têm de ser conhecidos em tempo de compilação e, regra geral, tens de os indicar explicitamente. O tipo de uma variável não pode mudar. Uma variável inteira com o nome years pode ser declarada assim:

int years;

É boa prática inicializar as variáveis na declaração. O C++ oferece diferentes mecanismos para o fazer. A versão com chavetas está mais alinhada com o C++ moderno, mas a versão com o sinal de igual também é muito comum.

int tomatoes{80};
int potatoes = 40;
Caution

O C++ permite, de facto, usar variáveis não inicializadas. Enquanto não atribuíres um valor à variável de forma deliberada, esta fica indefinida e pode conter qualquer coisa. Para evitares erros de utilização antes da atribuição e comportamentos indefinidos, é aconselhável inicializar sempre. Um comportamento indefinido pode fazer o teu programa rebentar no pior momento possível, mesmo quando antes estava a correr bem. Nunca é demais repetir: evita comportamentos indefinidos a todo o custo.

Operações aritméticas

Os operadores aritméticos como *, + ou - podem fazer parte de uma expressão como 3 * 2 ou tomatoes + potatoes.

Atualizar variáveis

Podes reatribuir variáveis, desde que mantenham o tipo:

tomatoes = tomatoes - 5; // tomatoes is now 75
potatoes = (32 * 2) + 11; // potatoes is now 75 as well

Funções

As funções têm um nome, um tipo de retorno e uma lista de parâmetros (possivelmente vazia). Um exemplo de uma função chamada always_fortyseven, que devolveria sempre 47, seria assim:

int always_fortyseven() {
    return 47;
}

Eis a vip_fee, que tem um parâmetro:

int vip_fee(int standard_fee) {
    /*
    vip_fee calculates the vip fee based on the standard_fee.
    */
    int vip_multi{3};
    return standard_fee * vip_multi;
}

Ou a total_fee, uma função com três parâmetros e uma chamada a outra função.

int total_fee(int vips, int adults, int kids) {
    /*
    total_fee calculates the total price for a group of VIP and adult guests with kids.
    Kids get a flat discount on the standard fee.
    VIP guest fees are calculated by calling vip_fee.
    */
    int standard_fee{30};
    int kids_discount{15};

    int kids_total_fee = kids * (standard_fee - kids_discount);
    int vips_total_fee = vips * vip_fee(standard_fee);
    int adult_total_fee = adults * standard_fee;

    return vips_total_fee + adult_total_fee + kids_total_fee;
}

Em C++, as funções não devolvem o valor da última instrução, ao contrário do que acontece noutras linguagens. A palavra-chave return é obrigatória para o código compilar.

Espaços em branco

Os espaços em branco são usados para formatar o código-fonte e incluem espaços, tabulações e mudanças de linha. Como o compilador ignora os espaços em branco desnecessários, podes usá-los para estruturar o teu código. Um uso inteligente dos espaços em branco pode melhorar a legibilidade do teu código. Existem diferentes normas de formatação, mas são todas convencionais e não são impostas pelo compilador.

// Formatting makes it easier to find bugs

int eggs_yolks =  3;
int      yeast = 15;

int flour=500;int sugar=200;// compact, but difficult to read

Instruções

A namorada do Lucian está a caminho de casa e ele ainda não preparou o jantar de aniversário deles!

Neste exercício, vais escrever algum código para ajudar o Lucian a cozinhar uma lasanha requintada, seguindo o livro de receitas preferido dele.

Tens quatro tarefas, todas relacionadas com o tempo gasto a cozinhar a lasanha.

1. Define o tempo de forno esperado em minutos

Define a função ovenTime(), que não recebe argumentos e devolve quantos minutos a lasanha deve estar no forno. Segundo o livro de receitas, o tempo de forno esperado é de 40 minutos:

ovenTime();
// => 40

2. Calcula o tempo restante de forno em minutos

Define a função remainingOvenTime(int actualMinutesInOven), que recebe como argumento os minutos que a lasanha já esteve no forno e devolve quantos minutos a lasanha ainda tem de permanecer no forno, com base no tempo de forno esperado em minutos da tarefa anterior.

remainingOvenTime(30);
// => 10

3. Calcula o tempo de preparação em minutos

Define a função preparationTime(int numberOfLayers), que recebe como argumento o número de camadas que adicionaste à lasanha e devolve quantos minutos gastaste a preparar a lasanha, partindo do princípio de que cada camada demora 2 minutos a preparar.

preparationTime(2);
// => 4

4. Calcula o tempo decorrido em minutos

Define a função elapsedTime(int numberOfLayers, int actualMinutesInOven), que recebe dois argumentos: o primeiro é o número de camadas que adicionaste à lasanha e o segundo é o número de minutos que a lasanha já esteve no forno. A função deve devolver quantos minutos trabalhaste a cozinhar a lasanha. Esse valor é a soma do tempo de preparação em minutos com o tempo, em minutos, que a lasanha já passou no forno até ao momento.

elapsedTime(3, 20);
// => 26
Editar via GitHub A ligação abre numa nova janela ou separador
C++ Exercism

Estás pronto para começar Lasanha?

Inscreve-te no Exercism para aprenderes e dominares C++ com 19 conceitos100 exercícios, e mentoria humana real, tudo grátis.