Tracks
/
Swift
Swift
/
Übungen
/
Freelancer-Sätze
Freelancer-Sätze

Freelancer-Sätze

Lernübung

Einführung

Zahlen

Swift kennt zwei Hauptkategorien von Zahlen: Ganzzahlen und Gleitkommazahlen.

  • Ganzzahlen stehen für ganze Zahlen ohne Bruchteil, zum Beispiel 0, 1, -1, 42 und -273.
  • Gleitkommazahlen stehen für Zahlen mit einem Bruchteil, zum Beispiel 0.0, 3.14 und -1.36969e-10.

Um Zahlenliterale besser lesen zu können, darfst du Unterstriche einfügen: 1_000_000 ist dasselbe wie 1000000. Gleitkomma-Literale kannst du in Dezimal- oder Exponentialschreibweise schreiben.

In den meisten Fällen nimmst du Int für Ganzzahlen und Double für Gleitkommazahlen:

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

Rechenoperatoren

Swift bietet dir die üblichen Rechenoperatoren für numerische Berechnungen:

Operator Beschreibung Beispiel
+ Addition 4 + 6 ergibt 10
- Subtraktion 15 - 10 ergibt 5
* Multiplikation 2 * 3 ergibt 6
Caution

Swift ist typsicher und erlaubt es nicht, verschiedene numerische Typen in Rechenoperationen zu mischen. Du kannst einen Int-Wert und einen Double-Wert nicht direkt addieren oder multiplizieren; du musst zuerst einen der beiden Typen in den anderen umwandeln.

Division

Mit dem Operator / dividierst du. Wenn beide Operanden Ganzzahlen sind, schneidet die Ganzzahldivision den Bruchrest ab:

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

Teilst du eine Gleitkommazahl ungleich null durch null, erhältst du inf oder -inf. Die Division von 0.0 durch 0.0 ergibt nan (keine Zahl). Eine Ganzzahl durch null zu teilen führt dagegen zu einem Fehler zur Kompilierzeit oder zur Laufzeit:

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

Restoperator

Der Restoperator (%) berechnet den Rest, der beim Teilen zweier Ganzzahlen übrig bleibt:

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

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

In Swift ist % ein echter Rest-Operator und kein Modulo-Operator. Das Ergebnis trägt immer das Vorzeichen des ersten Operanden (des Dividenden), unabhängig vom Vorzeichen des zweiten Operanden:

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

Gleitkommazahlen runden

Eine Gleitkommazahl rundest du mit der Methode rounded(). Standardmäßig rundet rounded() auf die nächste Ganzzahl. Du kannst auch eine bestimmte Rundungsregel angeben, zum Beispiel .up oder .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

Typinferenz

Wenn du eine numerische Konstante oder Variable ohne Typannotation deklarierst, leitet Swift ihren Typ ab:

  • Ganze Zahlen sind standardmäßig Int.
  • Zahlen mit Dezimalpunkt sind standardmäßig Double.
let x = 42         // Inferred as Int
let y = 42.0       // Inferred as Double
let z: Double = 42 // Explicitly typed as Double

Typumwandlung

Um mit Werten unterschiedlicher Typen zu rechnen, wandelst du einen Wert mit Typ-Initialisierern wie Double(_:) oder Int(_:) um:

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)

Anleitung

In dieser Übung schreibst du Code, der einem Freelancer hilft, mit einem Projektmanager zu kommunizieren. Deine Aufgabe ist es, ein paar Hilfsfunktionen bereitzustellen, um schnell Tages- und Monatssätze zu berechnen, optional mit einem gegebenen Rabatt.

Zuerst legen wir ein paar Regeln zwischen dem Freelancer und dem Projektmanager fest:

  • Der Tagessatz ist das 8-Fache des Stundensatzes.
  • Ein Monat hat 22 abrechenbare Tage.

Manchmal bietet der Freelancer an, einen Rabatt auf seinen Tagessatz zu gewähren (zum Beispiel für seine treuesten Kunden oder gemeinnützige Kunden).

Rabatte werden als Bruchzahlen modelliert, die Prozentsätze darstellen, zum Beispiel 25.0 (25 %).

1. Berechne den Tagessatz anhand eines Stundensatzes

Implementiere eine Funktion namens dailyRateFrom, um den Tagessatz anhand eines Stundensatzes als Parameter zu berechnen. Der Vertrag legt fest, dass ein Tag 8 abrechenbare Stunden hat.

dailyRateFrom(hourlyRate: 60)
// Returns 480.0

Der zurückgegebene Tagessatz sollte ein Double sein.

2. Berechne den Monatssatz anhand eines Stundensatzes und eines Rabatts

Implementiere eine Funktion monthlyRateFrom, um den rabattierten Monatssatz zu berechnen. Sie nimmt zwei Parameter entgegen, einen Stundensatz und den Rabatt in Prozent.

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

Der zurückgegebene Monatssatz sollte auf die nächste ganze Zahl aufgerundet werden.

3. Berechne die Anzahl der vollständigen Arbeitstage anhand von Budget, Stundensatz und Rabatt

Implementiere eine Funktion workdaysIn, die ein Budget, einen Stundensatz und einen Rabatt entgegennimmt und berechnet, wie viele vollständige Arbeitstage damit abgedeckt sind.

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

Die zurückgegebene Anzahl an Tagen sollte auf die nächste ganze Zahl abgerundet werden.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Swift Exercism

Bereit, mit Freelancer-Sätze zu starten?

Melde dich bei Exercism an, um Swift mit 35 Konzepte116 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.