Track
/
Swift
Swift
/
Esercizi
/
Tariffe da freelance
Tariffe da freelance

Tariffe da freelance

Esercizio di apprendimento

Introduzione

Numeri

Swift fornisce due categorie principali di numeri: i numeri interi e i numeri in virgola mobile.

  • I numeri interi rappresentano numeri privi di parte frazionaria, come 0, 1, -1, 42 e -273.
  • I numeri in virgola mobile rappresentano numeri con una parte frazionaria, come 0.0, 3.14 e -1.36969e-10.

Puoi inserire dei trattini bassi nei letterali numerici per migliorarne la leggibilità: 1_000_000 è identico a 1000000. I letterali in virgola mobile si possono scrivere in notazione decimale o esponenziale.

Nella maggior parte dei casi, usi Int per i numeri interi e Double per i numeri in virgola mobile:

let speed: Int = 42                           // Explicit Int
let pi: Double = 3.14                         // Explicit Double
let giga: Double = 1_000_000_000              // Double with readability underscores
let plancksConstant: Double = 6.62607015e-34  // Double in scientific notation

Operatori aritmetici

Swift fornisce i operatori aritmetici standard per i calcoli numerici:

Operatore Descrizione Esempio
+ Addizione 4 + 6 vale 10
- Sottrazione 15 - 10 vale 5
* Moltiplicazione 2 * 3 vale 6
Caution

Swift è type-safe e non permette di mescolare tipi numerici diversi nelle operazioni aritmetiche. Non puoi sommare o moltiplicare direttamente un Int e un Double: devi prima convertire un tipo per farlo corrispondere all'altro.

Divisione

L'operatore / esegue la divisione. Quando entrambi gli operandi sono numeri interi, la divisione intera tronca l'eventuale parte frazionaria:

5.0 / 2.0 // 2.5 (Double division)
5 / 2     // 2 (integer division truncates the remainder)

Dividere un numero in virgola mobile diverso da zero per zero dà come risultato inf o -inf. Dividere 0.0 per 0.0 produce nan (Not a Number). Al contrario, dividere un numero intero per zero causa un errore in fase di compilazione o di esecuzione:

print(5.0 / 0.0)  // Prints inf
print(-5.0 / 0.0) // Prints -inf
print(0.0 / 0.0)  // Prints nan

// The following line will not compile:
// print(5 / 0) // Error: Division by zero

Operatore resto

L'operatore resto (%) calcola il resto che rimane dopo aver diviso due numeri interi:

5 % 2  // 1
-5 % 2 // -1

// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
Note

In Swift, % è un vero operatore di resto, non un operatore modulo. Il risultato prende sempre il segno del primo operando (il dividendo), indipendentemente dal segno del secondo operando:

5 % -2  // 1
-5 % 2  // -1

Arrotondare i numeri in virgola mobile

Puoi arrotondare un numero in virgola mobile usando il metodo rounded(). Per impostazione predefinita, rounded() arrotonda all'intero più vicino. Puoi anche specificare una regola di arrotondamento, come .up o .down:

let x = 3.14
let y = x.rounded()      // 3.0
let w = x.rounded(.down) // 3.0
let z = x.rounded(.up)   // 4.0

Inferenza di tipo

Quando dichiari una costante o una variabile numerica senza annotazione di tipo, Swift ne deduce il tipo:

  • I numeri interi sono di tipo Int per impostazione predefinita.
  • I numeri con un punto decimale sono di tipo Double per impostazione predefinita.
let x = 42         // Inferred as Int
let y = 42.0       // Inferred as Double
let z: Double = 42 // Explicitly typed as Double

Conversione di tipo

Per eseguire operazioni tra valori di tipi diversi, converti un valore usando gli inizializzatori di tipo come Double(_:) o Int(_:):

let integerCount = 42
let floatingCount = Double(integerCount)
print(floatingCount) // Prints 42.0

let pi = 3.14
let integerPi = Int(pi)
print(integerPi) // Prints 3 (fractional part is truncated)

Istruzioni

In questo esercizio scriverai del codice per aiutare un freelancer a comunicare con un project manager. Il tuo compito è fornire alcune funzioni ausiliarie per calcolare rapidamente le tariffe giornaliere e mensili, facoltativamente con uno sconto dato.

Stabiliamo prima alcune regole tra il freelancer e il project manager:

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

A volte il freelancer si offre 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 a partire da una tariffa oraria

Implementa una funzione chiamata dailyRateFrom per calcolare la tariffa giornaliera a partire da una tariffa oraria presa come parametro. Il contratto definisce che un giorno ha 8 ore fatturabili.

dailyRateFrom(hourlyRate: 60)
// Returns 480.0

La tariffa giornaliera restituita dovrebbe essere un Double.

2. Calcola la tariffa mensile, a partire da una tariffa oraria e da uno sconto

Implementa una funzione monthlyRateFrom per calcolare la tariffa mensile scontata. Prende due parametri: una tariffa oraria e lo sconto in percentuale.

monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129

La tariffa mensile restituita dovrebbe essere arrotondata per eccesso (prendi il valore ceiling) al numero intero più vicino.

3. Calcola il numero di giorni lavorativi completi a partire da un budget, una tariffa oraria e uno sconto

Implementa una funzione workdaysIn che prende un budget, una tariffa oraria e uno sconto, e calcola quanti giorni completi di lavoro coprono.

workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0

Il numero di giorni restituito dovrebbe essere arrotondato per difetto (prendi il valore floor) al numero intero inferiore.

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

Vuoi iniziare Tariffe da freelance?

Iscriviti a Exercism per imparare e padroneggiare Swift con 35 concetti116 esercizi e il mentoring di persone reali, tutto gratis.