Tracks
/
C++
C++
/
Übungen
/
Lasagne
Lasagne

Lasagne

Lernübung

Einführung

Grundlagen

Zum Einstieg in die C++-Reise beginnen wir mit Variablen, Funktionsaufrufen und Kommentaren.

Kommentare

Kommentare gibt es in zwei Varianten: einzeilig und mehrzeilig. Alles, was nach // in derselben Zeile steht, wird vom Compiler ignoriert. Mehrzeilige Kommentare werden auch als C-Stil-Kommentare bezeichnet. Sie werden von /* und */ umschlossen. Alles, was dazwischen steht, wird ebenfalls ignoriert.

Variablen

C++ ist eine typisierte Sprache. Alle Typen müssen zur Kompilierzeit bekannt sein, und du musst sie in der Regel explizit angeben. Der Typ einer Variablen kann sich nicht ändern. Eine Variable vom Typ Ganzzahl mit dem Namen years kann so deklariert werden:

int years;

Es ist gute Praxis, Variablen bei der Deklaration zu initialisieren. C++ bietet verschiedene Mechanismen dafür. Die Version mit den geschweiften Klammern entspricht eher modernem C++, aber die Version mit dem Gleichheitszeichen ist ebenfalls sehr verbreitet.

int tomatoes{80};
int potatoes = 40;
Caution

C++ erlaubt es tatsächlich, uninitialisierte Variablen zu verwenden. Bis die Variable bewusst gesetzt wird, ist sie undefiniert und kann irgendetwas enthalten. Um Fehler durch Verwendung vor dem Setzen und undefiniertes Verhalten zu vermeiden, solltest du immer initialisieren. Undefiniertes Verhalten kann dein Programm im ungünstigsten Moment zum Absturz bringen, obwohl es vorher einwandfrei lief. Man kann es nicht oft genug betonen: Vermeide undefiniertes Verhalten um jeden Preis.

Arithmetische Operationen

Arithmetische Operatoren wie *, + oder - können Teil eines Ausdrucks wie 3 * 2 oder tomatoes + potatoes sein.

Variablen aktualisieren

Du kannst Variablen neu zuweisen, solange sie ihren Typ behalten:

tomatoes = tomatoes - 5; // tomatoes is now 75
potatoes = (32 * 2) + 11; // potatoes is now 75 as well

Funktionen

Funktionen haben einen Namen, einen Rückgabetyp und eine (möglicherweise leere) Parameterliste. Ein Beispiel für eine Funktion namens always_fortyseven, die immer 47 zurückgeben würde, sieht so aus:

int always_fortyseven() {
    return 47;
}

Hier ist vip_fee, die einen Parameter hat:

int vip_fee(int standard_fee) {
    /*
    vip_fee calculates the vip fee based on the standard_fee.
    */
    int vip_multi{3};
    return standard_fee * vip_multi;
}

Oder total_fee, eine Funktion mit drei Parametern und einem Aufruf einer anderen Funktion.

int total_fee(int vips, int adults, int kids) {
    /*
    total_fee calculates the total price for a group of VIP and adult guests with kids.
    Kids get a flat discount on the standard fee.
    VIP guest fees are calculated by calling vip_fee.
    */
    int standard_fee{30};
    int kids_discount{15};

    int kids_total_fee = kids * (standard_fee - kids_discount);
    int vips_total_fee = vips * vip_fee(standard_fee);
    int adult_total_fee = adults * standard_fee;

    return vips_total_fee + adult_total_fee + kids_total_fee;
}

Funktionen in C++ geben nicht den Wert der letzten Anweisung zurück, wie in einigen anderen Sprachen. Das Schlüsselwort return ist erforderlich, damit der Code kompiliert.

Whitespace

Whitespace wird zum Formatieren von Quellcode verwendet und umfasst Leerzeichen, Tabulatoren oder Zeilenumbrüche. Da der Compiler unnötigen Whitespace ignoriert, kannst du ihn verwenden, um deinen Code zu strukturieren. Ein kluger Einsatz von Whitespace kann die Lesbarkeit deines Codes verbessern. Es gibt verschiedene Formatierungsstandards, aber sie sind alle konventionell und werden nicht vom Compiler erzwungen.

// Formatting makes it easier to find bugs

int eggs_yolks =  3;
int      yeast = 15;

int flour=500;int sugar=200;// compact, but difficult to read

Anleitung

Lucians Freundin ist auf dem Weg nach Hause und er hat noch kein Abendessen zum Hochzeitstag gekocht!

In dieser Übung schreibst du etwas Code, der Lucian dabei hilft, eine exquisite Lasagne aus seinem Lieblingskochbuch zu kochen.

Du hast vier Aufgaben, die sich alle mit der Zeit beschäftigen, die für das Kochen der Lasagne draufgeht.

1. Definiere die erwartete Backzeit in Minuten

Definiere die Funktion ovenTime(), die keine Argumente entgegennimmt und zurückgibt, wie viele Minuten die Lasagne im Ofen bleiben sollte. Laut Kochbuch beträgt die erwartete Backzeit 40 Minuten:

ovenTime();
// => 40

2. Berechne die verbleibende Backzeit in Minuten

Definiere die Funktion remainingOvenTime(int actualMinutesInOven), die die tatsächlichen Minuten, die die Lasagne schon im Ofen war, als Argument entgegennimmt und zurückgibt, wie viele Minuten die Lasagne noch im Ofen bleiben muss. Dabei gehst du von der erwarteten Backzeit aus der vorigen Aufgabe aus.

remainingOvenTime(30);
// => 10

3. Berechne die Vorbereitungszeit in Minuten

Definiere die Funktion preparationTime(int numberOfLayers), die die Anzahl der Schichten, die du der Lasagne hinzugefügt hast, als Argument entgegennimmt und zurückgibt, wie viele Minuten du für die Vorbereitung der Lasagne gebraucht hast. Dabei dauert jede Schicht 2 Minuten.

preparationTime(2);
// => 4

4. Berechne die verstrichene Zeit in Minuten

Definiere die Funktion elapsedTime(int numberOfLayers, int actualMinutesInOven), die zwei Argumente entgegennimmt: Das erste Argument ist die Anzahl der Schichten, die du der Lasagne hinzugefügt hast, und das zweite Argument ist die Anzahl der Minuten, die die Lasagne schon im Ofen war. Die Funktion soll zurückgeben, wie viele Minuten du mit dem Kochen der Lasagne verbracht hast, also die Summe aus der Vorbereitungszeit und der Zeit, die die Lasagne bis zu diesem Moment im Ofen war.

elapsedTime(3, 20);
// => 26
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
C++ Exercism

Bereit, mit Lasagne zu starten?

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