Tracks
/
C++
C++
/
Übungen
/
Freelancer-Sätze
Freelancer-Sätze

Freelancer-Sätze

Lernübung

Einführung

Die eingebauten Zahlentypen in C++ lassen sich in Ganzzahlen und Gleitkommazahlen unterteilen. Ganzzahlen sind Zahlen ohne Nachkommastellen wie 0, 691 oder -2. Gleitkommazahlen sind Zahlen mit einem Dezimalpunkt wie 6.02214076, 0.1 oder -1.616.

Ganzzahlen

Das folgende Beispiel zeigt die Deklaration und Initialisierung von vier verschiedenen Variablen.

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.

Wenn du einer int-Variable einen Wert zuweist, kannst du das direkt mit einem Literal tun. Ein Literal ist eine fest codierte Zahl wie 9241. Für verschiedene Basen der Darstellung gibt es unterschiedliche Literale für Ganzzahlen. Dezimale Literale für Ganzzahlen sind am gebräuchlichsten und verwenden die Ziffern 0 bis 9. Durch Hinzufügen eines speziellen Präfixes wie 0x kannst du andere Basen verwenden. Das obige Beispiel zeigt die Zahl 9241 in ihren vier Darstellungen und Präfixen. Alle Variablen werden mit demselben Wert initialisiert.

Weitere Details zu den verschiedenen Darstellungssystemen findest du in einem kleinen Tutorial.

Du kannst einen Apostroph verwenden, um Ziffern zur besseren Lesbarkeit zu trennen. 9'241 ist dasselbe wie 0b0100'100'0001'1001 oder 92'4'1.

Gleitkommazahlen

Gleitkomma-Literale gibt es in zwei Varianten. Neben der intuitiven 0.0024 kannst du auch die wissenschaftliche Notation 2.4e-3 verwenden. Der gebräuchlichste Gleitkommatyp ist double.

Arithmetik

C++ unterstützt +, -, *, /, ( und ) und %, um Ausdrücke zu bilden. Das Ergebnis der Operation zwischen zwei Ganzzahlen ist ebenfalls eine Ganzzahl. 5 / 2 gibt 2 zurück. Wenn einer der beteiligten Typen ein Gleitkommatyp ist, ist das Ergebnis ebenfalls vom Typ Gleitkommazahl. 5.0 / 2 und 5 / 2.0 geben 2.5 zurück. % ist der Restoperator und gibt den Rest einer Ganzzahldivision zurück: 5%3 ist 2.

Zuweisungsoperator

Der Zuweisungsoperator weist einer Variablen ein Literal zu. Er funktioniert immer von rechts nach links, niemals umgekehrt.

int length = 5;
int width = 2;
length = width;

Hier wird der Ganzzahlwert 5 der Variablen length zugewiesen. Dann wird der Ganzzahlwert 2 der Variablen width zugewiesen. Schließlich wird der Wert von width in die Variable length kopiert, und der frühere Wert 5 geht verloren. Beachte außerdem, dass wir den Wert von width nur im Moment der Zuweisung der Variablen length zuweisen. Wenn sich der Wert von width später ändert, wirkt sich das daher nicht auf den Wert aus, den length angenommen hat.

Der Zuweisungsoperator kann mit den anderen Operatoren (Arithmetik und Bitoperationen) kombiniert werden. Bekannt sind sie als compound assignment-Operatoren: +=, -=, *=, /=, %=. Diese Operatoren ändern den aktuellen Wert einer Variablen, indem sie eine Operation auf ihn anwenden.

// 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

Die Variablen people und eggs werden mit 0 initialisiert. Dann addieren wir den Ganzzahlwert 2 zu dem vorhandenen Wert 0 der Variablen people und weisen es wieder people zu. people ist jetzt 2. Später addieren wir 3 Eier für jede Person, was insgesamt 6 Eier ergibt. Jetzt addieren wir diese 6 zu dem vorhandenen Wert 0 der Variablen eggs und weisen es wieder eggs zu. eggs ist jetzt 6. Der äquivalente Ausdruck wäre people = people + 2 und eggs = eggs + (3 * people).

Anleitung

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

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

  • Der Tagessatz beträgt das Achtfache 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 für gemeinnützige Kunden).

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

1. Berechne den Tagessatz bei gegebenem Stundensatz

Implementiere eine Funktion namens daily_rate, um den Tagessatz bei gegebenem Stundensatz als Parameter zu berechnen. Der Vertrag legt fest, dass ein Tag 8 abrechenbare Stunden hat.

daily_rate(60)
// => 480.0

Der zurückgegebene Tagessatz sollte vom Typ double sein.

2. Berechne einen rabattierten Preis

Implementiere eine Funktion apply_discount, um den Preis nach einem Rabatt zu berechnen. Sie sollte zwei Parameter akzeptieren: den ursprünglichen Preis und den Rabattsatz in Prozent.

apply_discount(150, 10)
// => 135.0

Der zurückgegebene Wert sollte immer vom Typ double sein und in keiner Weise gerundet werden.

3. Berechne den Monatssatz bei gegebenem Stundensatz und Rabatt

Implementiere eine Funktion monthly_rate, um den rabattierten Monatssatz zu berechnen. Sie sollte zwei Parameter haben: einen Stundensatz und den Rabatt in Prozent.

monthly_rate(77, 10.5)
// => 12130

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

4. Berechne die Anzahl der vollständigen Arbeitstage bei gegebenem Budget, Stundensatz und Rabatt

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

days_in_budget(20'000, 80, 11.0)
// => 35

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

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

Bereit, mit Freelancer-Sätze zu starten?

Melde dich bei Exercism an, um C++ mit 19 Konzepte100 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.