Lasagna

Lasagna

Exercício de aprendizagem

Introdução

Noções básicas

Para começar a jornada em C++, vamos partir de variáveis, chamadas de função e comentários.

Comentários

Existem 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. Comentários de várias linhas também são conhecidos como comentários no estilo C. Eles ficam entre /* e */. Tudo o que estiver entre eles também será ignorado.

Variáveis

C++ é uma linguagem tipada. Todos os tipos precisam ser conhecidos em tempo de compilação, e você geralmente precisa declará-los 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;

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

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

C++ permite sim usar variáveis não inicializadas. Enquanto a variável não for definida de propósito, ela é indefinida e pode conter qualquer coisa. Para evitar erros de uso antes da definição e comportamento indefinido, é aconselhável sempre inicializar. O comportamento indefinido pode travar o seu programa no pior momento possível, mesmo que ele estivesse funcionando bem até então. Não dá para enfatizar o suficiente: evite comportamento indefinido a todo custo.

Operações aritméticas

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

Atualizando variáveis

Você pode reatribuir variáveis, desde que elas mantenham o tipo:

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

Funções

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

int always_fortyseven() {
    return 47;
}

Aqui está 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 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 retornam o valor da última instrução como em algumas outras linguagens. A palavra-chave return é obrigatória para que o código compile.

Espaços em branco

Espaços em branco são usados para formatar o código-fonte e incluem espaços, tabulações e quebras de linha. Como o compilador ignora espaços em branco desnecessários, você pode usá-los para estruturar o seu código. Um uso inteligente de espaços em branco pode melhorar a legibilidade do seu código. Existem diferentes padrões de formatação, mas todos eles são convenções e não são impostos 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 de Lucian está voltando para casa e ele ainda não preparou o jantar de aniversário de namoro deles!

Neste exercício, você vai escrever um código para ajudar o Lucian a preparar uma lasanha caprichada, seguindo o livro de receitas favorito dele.

Você tem quatro tarefas, todas relacionadas ao tempo gasto preparando a lasanha.

1. Defina o tempo esperado no forno, em minutos

Defina a função ovenTime() que não recebe nenhum argumento e retorna quantos minutos a lasanha deve ficar no forno. De acordo com o livro de receitas, o tempo esperado no forno é de 40 minutos:

ovenTime();
// => 40

2. Calcule o tempo restante no forno, em minutos

Defina a função remainingOvenTime(int actualMinutesInOven) que recebe como argumento os minutos que a lasanha já passou no forno e retorna quantos minutos a lasanha ainda precisa ficar no forno, com base no tempo esperado no forno, em minutos, da tarefa anterior.

remainingOvenTime(30);
// => 10

3. Calcule o tempo de preparo, em minutos

Defina a função preparationTime(int numberOfLayers) que recebe como argumento o número de camadas que você adicionou à lasanha e retorna quantos minutos você gastou preparando a lasanha, considerando que cada camada leva 2 minutos para preparar.

preparationTime(2);
// => 4

4. Calcule o tempo decorrido, em minutos

Defina a função elapsedTime(int numberOfLayers, int actualMinutesInOven) que recebe dois argumentos: o primeiro é o número de camadas que você adicionou à lasanha, e o segundo é o número de minutos que a lasanha está no forno. A função deve retornar quantos minutos você trabalhou no preparo da lasanha, que é a soma do tempo de preparo, em minutos, com o tempo, em minutos, que a lasanha passou no forno até o momento.

elapsedTime(3, 20);
// => 26
Editar via GitHub O link abre em uma nova janela ou aba
C++ Exercism

Tudo pronto para começar Lasagna?

Crie sua conta no Exercism para aprender e dominar C++ com 19 conceitos100 exercícios e mentoria humana de verdade, tudo de graça.