Os tipos de números incorporados em C++ dividem-se em inteiros e números de vírgula flutuante.
Os inteiros são números sem parte fracionária, como 0, 691 ou -2.
Os números de vírgula flutuante são números com parte decimal, como 6.02214076, 0.1 ou -1.616.
O exemplo seguinte mostra a declaração e a inicialização de quatro variáveis diferentes
int m_morales{9241}; // base 10: 0-9
int a_apaec{0x24CD}; // base 16: 0-9 and A-F
int m_gargan{0b10010000011001}; // base 2: 0-1
int b_reilly{022031}; // base 8: 0-7
// Leading with a 0 not the letter o.
Quando atribuis um valor a uma variável int, podes fazê-lo diretamente com um literal.
Um literal é um número escrito diretamente no código, como 9241.
Existem literais inteiros diferentes para várias bases de representação.
Os literais inteiros decimais são os mais comuns e usam os algarismos 0 a 9.
Ao acrescentar um prefixo especial, como 0x, é possível usar outras bases.
O exemplo acima mostra o número 9241 nas suas quatro representações e prefixos.
Todas as variáveis são inicializadas com o mesmo valor.
Para mais detalhes sobre os diferentes sistemas de representação, dá uma vista de olhos a um pequeno tutorial.
Podes usar um apóstrofo para separar algarismos e facilitar a leitura.
9'241 é o mesmo que 0b0100'100'0001'1001 ou 92'4'1.
Os literais de vírgula flutuante existem em dois formatos.
Além da forma intuitiva 0.0024, é possível usar a sua notação científica 2.4e-3.
O tipo de vírgula flutuante mais comum é double.
C++ suporta +, -, *, /, ( e ) e % para formar expressões.
O resultado da operação entre dois inteiros também é um inteiro.
5 / 2 devolve 2.
Quando um dos tipos envolvidos é de vírgula flutuante, o resultado também é de vírgula flutuante.
5.0 / 2 e 5 / 2.0 devolvem 2.5.
% é o operador de resto e devolve o resto de uma divisão inteira: 5%3 é 2.
O operador de atribuição atribui um literal a uma variável. Acontece sempre da direita para a esquerda e nunca ao contrário.
int length = 5;
int width = 2;
length = width;
Aqui, o valor inteiro 5 é atribuído à variável length.
Depois, o valor inteiro 2 é atribuído à variável width.
Por fim, o valor de width é copiado para a variável length e o valor anterior, 5, perde-se.
Tem também em conta que só estamos a atribuir o valor de width a length no momento da operação de atribuição.
Por isso, se o valor de width mudar mais tarde, isso não afeta o valor que length tem.
O operador de atribuição pode combinar-se com os outros operadores (aritméticos e bit a bit), dando origem aos operadores de compound assignment +=, -=, *=, /=, %=.
Estes operadores modificam o valor atual de uma variável ao realizar uma operação sobre ele.
// we start with 0 people
int people{};
// we need 0 eggs
int eggs{};
// two people joined:
people += 2;
// people is now 2
// let's add 3 eggs per person
eggs += 3 * people;
// eggs is now 6
As variáveis people e eggs são inicializadas a 0.
Depois, somamos o valor inteiro 2 ao valor existente 0 da variável people e atribuímo-lo de volta a people.
Agora, people passa a ser 2.
Mais tarde, somamos 3 ovos por cada pessoa, o que dá 6 ovos no total.
Agora somamos este 6 ao valor existente 0 da variável eggs e atribuímo-lo de volta a eggs.
eggs passa a ser 6.
As expressões equivalentes seriam people = people + 2 e eggs = eggs + (3 * people).
Neste exercício, vais escrever código para ajudar um freelancer a comunicar com um gestor de projeto. A tua tarefa é criar alguns utilitários para calcular rapidamente valores diários e mensais, opcionalmente com um desconto.
Vamos primeiro estabelecer algumas regras entre o freelancer e o gestor de projeto:
Por vezes, o freelancer oferece-se para aplicar um desconto no valor diário (por exemplo, para os clientes mais fiéis ou para clientes sem fins lucrativos).
Os descontos são representados por números fracionários que representam percentagens, por exemplo, 25.0 (25%).
Implementa uma função chamada daily_rate que calcula o valor diário a partir de um valor por hora recebido como parâmetro.
O contrato define que um dia tem 8 horas faturáveis.
daily_rate(60)
// => 480.0
O valor diário devolvido deve ser do tipo double.
Implementa uma função apply_discount que calcula o preço depois de aplicar um desconto.
Deve aceitar dois parâmetros: o preço original e a taxa de desconto em percentagem.
apply_discount(150, 10)
// => 135.0
O valor devolvido deve ser sempre do tipo double, sem qualquer arredondamento.
Implementa uma função monthly_rate que calcula o valor mensal com desconto.
Deve ter dois parâmetros: um valor por hora e o desconto em percentagem.
monthly_rate(77, 10.5)
// => 12130
O valor mensal devolvido deve ser arredondado para cima, para o número inteiro mais próximo.
Implementa uma função days_in_budget que recebe um orçamento, um valor por hora e um desconto, e calcula quantos dias completos de trabalho isso cobre.
days_in_budget(20'000, 80, 11.0)
// => 35
O número de dias devolvido deve ser arredondado para baixo, para o número inteiro mais próximo.
Inscreve-te no Exercism para aprenderes e dominares C++ com 19 conceitos100 exercícios, e mentoria humana real, tudo grátis.