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 seinen Kunden über die Preise für bestimmte Projekte zu kommunizieren. Du schreibst ein paar Hilfsfunktionen, um die Kosten für die Kunden schnell zu berechnen.

1. Berechne den Tagessatz anhand eines Stundensatzes

Ein Kunde kontaktiert den Freelancer, um sich nach seinen Sätzen zu erkundigen. Der Freelancer erklärt, dass er 8 Stunden am Tag arbeitet. Allerdings kennt der Freelancer nur seinen Stundensatz für das Projekt. Hilf ihm, einen Tagessatz anhand eines Stundensatzes zu schätzen.

Implementiere die Funktion dailyRateFrom(hourlyRate:), die das Argument hourlyRate entgegennimmt, das den Stundensatz des Freelancers enthält.
Die Funktion soll den Tagessatz basierend auf dem Stundensatz zurückgeben.

dailyRateFrom(hourlyRate: 60)
// Returns 480.0

Der zurückgegebene Tagessatz sollte ein Double sein.

2. Berechne den Monatssatz anhand eines Stundensatzes und eines Rabatts

Manchmal möchte ein Kunde den Freelancer für einen längeren Zeitraum engagieren. Der Freelancer ist bereit, dem Kunden einen Rabatt zu gewähren, aber nur, wenn der Kunde ihn für mindestens einen Monat engagiert. Insgesamt gibt es 22 Arbeitstage. Hilf dem Freelancer, seinen Monatssatz anhand seines Stundensatzes und des Prozentsatzes zu berechnen, den er als Rabatt auf den Pauschalpreis gewähren möchte, gerundet auf die nächste ganze Zahl.

Implementiere die Funktion monthlyRateFrom(hourlyRate:withDiscount:). Sie nimmt die Argumente hourlyRate, das den Stundensatz des Freelancers enthält, und withDiscount, das den Rabatt enthält, den der Freelancer dem Kunden gewähren möchte, entgegen.
Die Funktion soll den Monatssatz gerundet auf die nächste ganze Zahl zurückgeben.

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

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

Eines Tages bietet ein Projektmanager dem Freelancer an, an einem Projekt mit einem festen Budget zu arbeiten. Hilf ihm, anhand des festen Budgets und des Stundensatzes des Freelancers die Anzahl der Tage zu berechnen, die er arbeiten würde, bis das Budget aufgebraucht ist. Berücksichtige, dass der Freelancer in diesem Szenario immer bereit ist, den Rabatt zu gewähren, unabhängig von der Anzahl der gebuchten Tage. Das Ergebnis muss auf die nächste ganze Zahl abgerundet werden.

Implementiere die Funktion workdaysIn(budget:hourlyRate:withDiscount:), die die folgenden Argumente entgegennimmt:

  • budget, das das Budget für das Projekt enthält.
  • hourlyRate, das den Stundensatz des Freelancers enthält.
  • withDiscount, das den Rabatt enthält, den der Freelancer dem Kunden gewähren möchte.

Die Funktion soll die Anzahl der Arbeitstage zurückgeben, die der Freelancer am Projekt arbeiten wird, abgerundet.

workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
Ü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.