Track
/
C++
C++
/
Esercizi
/
Tariffe da freelance
Tariffe da freelance

Tariffe da freelance

Esercizio di apprendimento

Introduzione

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.

Interi

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.

Numeri in virgola mobile

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.

Aritmetica

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.

Operatore di assegnazione

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).

Istruzioni

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:

  • La tariffa giornaliera è 8 volte la tariffa oraria.
  • Un mese ha 22 giorni fatturabili.

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%).

1. Calcola la tariffa giornaliera data una tariffa oraria

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.

2. Calcola un prezzo scontato

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.

3. Calcola la tariffa mensile, data una tariffa oraria e uno sconto

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.

4. Calcola il numero di giorni lavorativi completi dato un budget, una tariffa oraria e uno sconto

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.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
C++ Exercism

Vuoi iniziare Tariffe da freelance?

Iscriviti a Exercism per imparare e padroneggiare C++ con 19 concetti100 esercizi e il mentoring di persone reali, tutto gratis.