Kurzusok
/
Swift
Swift
/
Feladatok
/
Szabadúszói díjak
Szabadúszói díjak

Szabadúszói díjak

Tanulófeladat

Bevezetés

Számok

A Swiftnek két fő számtípusa van: az egészek és a lebegőpontos számok.

  • Az egész számok olyan számok, amelyeknek nincs törtrészük, például 0, 1, -1, 42 és -273.
  • A lebegőpontos számok olyan számok, amelyeknek törtrészük van, például 0.0, 3.14 és -1.36969e-10.

A számkonstansokba aláhúzásjeleket szúrhatsz be, hogy átláthatóbbak legyenek: az 1_000_000 ugyanaz, mint a 1000000. A lebegőpontos literálok tizedes vagy exponenciális jelöléssel is felírhatók.

A legtöbb esetben az egészekhez Int-et, a lebegőpontos számokhoz pedig Double-t használsz:

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

Aritmetikai operátorok

A Swift szabványos aritmetikai operátorokat biztosít a numerikus számításokhoz:

Operátor Leírás Példa
+ Összeadás 4 + 6 értéke 10
- Kivonás 15 - 10 értéke 5
* Szorzás 2 * 3 értéke 6
Caution

A Swift típusbiztos, és nem engedi meg a különböző számtípusok keverését az aritmetikai műveletekben. Egy Int és egy Double értéket nem adhatsz össze vagy szorozhatsz össze közvetlenül; először az egyik típust a másikhoz kell alakítanod.

Osztás

A / operátor az osztást végzi. Ha mindkét operandus egész szám, az egészosztás levágja a törtrészt:

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

Ha egy nem nulla lebegőpontos számot osztasz nullával, az eredmény inf vagy -inf lesz. A 0.0 0.0-val való osztásának eredménye nan (nem szám). Ezzel szemben, ha egy egész számot osztasz nullával, az fordítási vagy futásidejű hibát okoz:

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

Maradék operátor

A maradék operátor (%) azt a maradékot számítja ki, amely két egész szám osztása után megmarad:

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

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

A Swiftben a % valódi maradék operátor, nem modulo operátor. Az eredmény mindig az első operandus (az osztandó) előjelét veszi fel, függetlenül a második operandus előjelétől:

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

Lebegőpontos számok kerekítése

Egy lebegőpontos számot a rounded() metódussal kerekíthetsz. Alapértelmezés szerint a rounded() a legközelebbi egész számra kerekít. Egy konkrét kerekítési szabályt is megadhatsz, például a .up vagy a .down értéket:

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

Típuskövetkeztetés

Amikor egy numerikus konstanst vagy változót típusannotáció nélkül deklarálsz, a Swift kikövetkezteti a típusát:

  • Az egész számok alapértelmezett típusa Int.
  • A tizedespontot tartalmazó számok alapértelmezett típusa Double.
let x = 42         // Inferred as Int
let y = 42.0       // Inferred as Double
let z: Double = 42 // Explicitly typed as Double

Típuskonverzió

Ahhoz, hogy különböző típusú értékekkel végezz műveleteket, alakítsd át az egyik értéket például a Double(_:) vagy az Int(_:) konstruktorral:

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)

Utasítások

Ebben a feladatban olyan kódot írsz, amely segít egy szabadúszónak egyeztetni az ügyfeleivel bizonyos projektek árairól. Néhány segédfüggvényt írsz, amelyekkel gyorsan kiszámíthatod az ügyfelek költségeit.

1. Számítsd ki a napi díjat egy óradíj alapján

Egy ügyfél felveszi a kapcsolatot a szabadúszóval, hogy érdeklődjön a díjairól. A szabadúszó elmagyarázza, hogy napi 8 órát dolgozik. A szabadúszó azonban csak az óradíját ismeri a projekthez. Segíts neki megbecsülni a napi díjat az óradíj alapján.

Valósítsd meg a dailyRateFrom(hourlyRate:) függvényt, amely a hourlyRate argumentumot kapja, ez tartalmazza a szabadúszó óradíját.
A függvény az óradíj alapján adja vissza a napi díjat.

dailyRateFrom(hourlyRate: 60)
// Returns 480.0

A visszaadott napi díj Double legyen.

2. Számítsd ki a havi díjat egy óradíj és egy kedvezmény alapján

Néha előfordul, hogy egy ügyfél hosszabb időre szeretné felbérelni a szabadúszót. A szabadúszó hajlandó kedvezményt adni az ügyfélnek, de csak akkor, ha az ügyfél legalább egy hónapra felbérli. Összesen 22 munkanap van. Segíts a szabadúszónak kiszámítani a havi díját az óradíja és az átalánydíjból adott kedvezmény százaléka alapján, a legközelebbi egész számra kerekítve.

Valósítsd meg a monthlyRateFrom(hourlyRate:withDiscount:) függvényt, amely a következő argumentumokat kapja: hourlyRate, ez tartalmazza a szabadúszó óradíját, és withDiscount, ez tartalmazza azt a kedvezményt, amit a szabadúszó hajlandó adni az ügyfélnek. A függvény a legközelebbi egész számra kerekített havi díjat adja vissza.

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

3. Számítsd ki a munkanapok számát egy költségvetés, az óradíj és a kedvezmény alapján

Egy másik nap egy projektmenedzser felajánlja a szabadúszónak, hogy dolgozzon egy fix költségvetésű projekten. A fix költségvetés és a szabadúszó óradíja alapján segíts kiszámítani, hány napot dolgozna, amíg a költségvetés ki nem merül. Vedd figyelembe, hogy ebben a forgatókönyvben a szabadúszó mindig hajlandó megadni a kedvezményt, függetlenül a bérelt napok számától. Az eredményt mindenképpen lefelé kell kerekíteni a legközelebbi egész számra.

Valósítsd meg a workdaysIn(budget:hourlyRate:withDiscount:) függvényt, amely a következő argumentumokat kapja:

  • budget, ez tartalmazza a projekt költségvetését.
  • hourlyRate, ez tartalmazza a szabadúszó óradíját.
  • withDiscount, ez tartalmazza azt a kedvezményt, amit a szabadúszó hajlandó adni az ügyfélnek.

A függvény a lefelé kerekített munkanapok számát adja vissza, amennyit a szabadúszó a projekten dolgozni fog.

workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Swift Exercism

Készen állsz elkezdeni a(z) Szabadúszói díjak feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Swift nyelvet 35 fogalom116 feladat segítségével, valódi emberi mentorálással, mindez ingyen.