I tipi numerici predefiniti in C++ si possono dividere in interi e numeri in virgola mobile.
Gli interi sono numeri senza parte frazionaria, come 0, 691 o -2.
I numeri in virgola mobile sono numeri con un punto decimale, come 6.02214076, 0.1 o -1.616.
L'esempio seguente mostra la dichiarazione e l'inizializzazione di quattro variabili diverse
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 assegni un valore a una variabile int, puoi farlo direttamente con un letterale.
Un letterale è un numero scritto direttamente nel codice, come 9241.
Esistono letterali interi diversi per le varie basi di rappresentazione.
I letterali interi decimali sono i più comuni e usano le cifre da 0 a 9.
Aggiungendo un prefisso speciale, come 0x, è possibile usare altre basi.
L'esempio qui sopra mostra il numero 9241 nelle sue quattro rappresentazioni con i relativi prefissi.
Tutte le variabili sono inizializzate allo stesso valore.
Per maggiori dettagli sui diversi sistemi di rappresentazione, dai un'occhiata a un piccolo tutorial.
Puoi usare un apostrofo per separare le cifre e migliorare la leggibilità.
9'241 equivale a 0b0100'100'0001'1001 o a 92'4'1.
I letterali in virgola mobile si presentano in due forme.
Oltre alla forma intuitiva 0.0024, è possibile usare la sua notazione scientifica 2.4e-3.
Il tipo in virgola mobile più comune è double.
C++ supporta +, -, *, /, ( e ) e % per formare espressioni.
Anche il risultato dell'operazione tra due interi è un intero.
5 / 2 restituisce 2.
Quando uno dei tipi coinvolti è in virgola mobile, anche il risultato sarà in virgola mobile.
5.0 / 2 e 5 / 2.0 restituiscono 2.5.
% è l'operatore modulo e restituisce il resto di una divisione intera: 5%3 fa 2.
L'operatore di assegnazione assegna a una variabile un letterale. L'assegnazione avviene sempre da destra verso sinistra, mai al contrario.
int length = 5;
int width = 2;
length = width;
Qui il valore intero 5 viene assegnato alla variabile length.
Poi il valore intero 2 viene assegnato alla variabile width.
Infine il valore di width viene copiato nella variabile length e il precedente valore 5 va perso.
Considera anche che, al momento dell'operazione di assegnazione, stiamo solo assegnando il valore di width a length.
Di conseguenza, se in un momento successivo il valore di width cambia, questo non influenzerà il valore assunto da length.
L'operatore di assegnazione può essere combinato con gli altri operatori (aritmetici e bit a bit), dando origine agli operatori di compound assignment +=, -=, *=, /=, %=.
Questi operatori modificano il valore corrente di una variabile eseguendo su di esso un'operazione.
// 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
Le variabili people e eggs sono inizializzate a 0.
Poi aggiungiamo il valore intero 2 al valore esistente 0 della variabile people e riassegniamo il risultato a people.
Ora people diventa 2.
Successivamente aggiungiamo 3 uova per ogni persona, che in totale fanno 6 uova.
Ora aggiungiamo questo 6 al valore esistente 0 della variabile eggs e riassegniamo il risultato a eggs.
Ora eggs sarà 6.
L'espressione equivalente sarebbe people = people + 2 e eggs = eggs + (3 * people).
In questo esercizio, scriverai del codice per aiutare un freelance a comunicare con un project manager. Il tuo compito è fornire alcune funzioni di utilità per calcolare rapidamente tariffe giornaliere e mensili, opzionalmente con uno sconto specificato.
Stabiliamo prima alcune regole tra il freelance e il project manager:
A volte, il freelance propone di applicare uno sconto sulla propria tariffa giornaliera (ad esempio per i clienti più fedeli o per i clienti senza scopo di lucro).
Gli sconti sono modellati come numeri frazionari che rappresentano percentuali, ad esempio 25.0 (25%).
Implementa una funzione chiamata daily_rate per calcolare la tariffa giornaliera data una tariffa oraria come parametro.
Il contratto definisce che un giorno ha 8 ore fatturabili.
daily_rate(60)
// => 480.0
La tariffa giornaliera restituita deve essere di tipo double.
Implementa una funzione apply_discount per calcolare il prezzo dopo uno sconto.
Deve accettare due parametri: il prezzo originale e la percentuale di sconto.
apply_discount(150, 10)
// => 135.0
Il valore restituito deve essere sempre di tipo double, non arrotondato in alcun modo.
Implementa una funzione monthly_rate per calcolare la tariffa mensile scontata.
Deve avere due parametri, una tariffa oraria e la percentuale di sconto.
monthly_rate(77, 10.5)
// => 12130
La tariffa mensile restituita deve essere arrotondata per eccesso (prendi il valore ceiling) all'intero più vicino.
Implementa una funzione days_in_budget che accetta un budget, una tariffa oraria e uno sconto, e calcola quanti giorni di lavoro completi copre.
days_in_budget(20'000, 80, 11.0)
// => 35
Il numero di giorni restituito deve essere arrotondato per difetto (prendi il valore floor) all'intero più vicino.
Iscriviti a Exercism per imparare e padroneggiare C++ con 19 concetti100 esercizi e il mentoring di persone reali, tutto gratis.