Λαζάνια

Λαζάνια

Άσκηση εκμάθησης

Εισαγωγή

Τα βασικά

Για να ξεκινήσουμε το ταξίδι της C++, αρχίζουμε με μεταβλητές, κλήσεις συναρτήσεων και σχόλια.

Σχόλια

Τα σχόλια υπάρχουν σε δύο μορφές: μονόγραμμα και πολύγραμμα. Ό,τι ακολουθεί το // στην ίδια γραμμή αγνοείται από τον μεταγλωττιστή. Τα πολύγραμμα σχόλια είναι επίσης γνωστά ως σχόλια τύπου C. Περιβάλλονται από /* και */. Ό,τι βρίσκεται ανάμεσά τους αγνοείται επίσης.

Μεταβλητές

Η C++ είναι μια γλώσσα με τύπους. Όλοι οι τύποι πρέπει να είναι γνωστοί σε χρόνο μεταγλώττισης, και συνήθως χρειάζεται να τους δηλώνεις ρητά. Ο τύπος μιας μεταβλητής δεν μπορεί να αλλάξει. Μια ακέραια μεταβλητή με το όνομα years μπορεί να δηλωθεί έτσι:

int years;

Είναι καλή πρακτική να αρχικοποιείς τις μεταβλητές κατά τη δήλωσή τους. Η C++ προσφέρει διαφορετικούς μηχανισμούς για αυτό. Η έκδοση με τα άγκιστρα είναι πιο κοντά στη σύγχρονη C++, αλλά και η έκδοση με το σύμβολο ίσον είναι πολύ συνηθισμένη.

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

Η C++ επιτρέπει τη χρήση μη αρχικοποιημένων μεταβλητών. Μέχρι να οριστεί σκόπιμα η μεταβλητή, η τιμή της είναι απροσδιόριστη και μπορεί να περιέχει οτιδήποτε. Για να αποφεύγεις σφάλματα χρήσης πριν από την αρχικοποίηση και μη καθορισμένη συμπεριφορά, καλό είναι να αρχικοποιείς πάντα. Η μη καθορισμένη συμπεριφορά μπορεί να κάνει το πρόγραμμά σου να καταρρεύσει στην χειρότερη δυνατή στιγμή, ενώ προηγουμένως έτρεχε μια χαρά. Δεν μπορούμε να το τονίσουμε αρκετά: απόφευγε τη μη καθορισμένη συμπεριφορά με κάθε κόστος.

Αριθμητικές πράξεις

Αριθμητικοί τελεστές όπως *, + ή - μπορούν να αποτελούν μέρος μιας έκφρασης όπως 3 * 2 ή tomatoes + potatoes.

Ενημέρωση μεταβλητών

Μπορείς να αναθέσεις ξανά τιμές σε μεταβλητές, αρκεί να διατηρούν τον τύπο τους:

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

Συναρτήσεις

Οι συναρτήσεις έχουν ένα όνομα, έναν τύπο επιστροφής και μια (πιθανώς κενή) λίστα παραμέτρων. Ένα παράδειγμα συνάρτησης με το όνομα always_fortyseven που θα επέστρεφε πάντα 47 θα έμοιαζε κάπως έτσι:

int always_fortyseven() {
    return 47;
}

Ορίστε η vip_fee, που έχει μία παράμετρο:

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;
}

Ή η total_fee, μια συνάρτηση με τρεις παραμέτρους και μια κλήση σε άλλη συνάρτηση.

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;
}

Οι συναρτήσεις στη C++ δεν επιστρέφουν την τιμή της τελευταίας εντολής όπως σε κάποιες άλλες γλώσσες. Η λέξη-κλειδί return είναι απαραίτητη για να μεταγλωττιστεί ο κώδικας.

Κενά διαστήματα

Τα κενά διαστήματα χρησιμοποιούνται για τη μορφοποίηση του πηγαίου κώδικα και περιλαμβάνουν κενά, tab ή αλλαγές γραμμής. Επειδή ο μεταγλωττιστής αγνοεί τα περιττά κενά, μπορείς να τα χρησιμοποιήσεις για να δομήσεις τον κώδικά σου. Η έξυπνη χρήση των κενών μπορεί να βελτιώσει την αναγνωσιμότητα του κώδικά σου. Υπάρχουν διαφορετικά πρότυπα μορφοποίησης, αλλά όλα είναι συμβατικά και δεν επιβάλλονται από τον μεταγλωττιστή.

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

Οδηγίες

Η κοπέλα του Lucian γυρίζει σπίτι και εκείνος δεν έχει μαγειρέψει το επετειακό τους δείπνο!

Σε αυτή την άσκηση, θα γράψεις λίγο κώδικα για να βοηθήσεις τον Lucian να μαγειρέψει μια εξαίσια λαζάνια από το αγαπημένο του βιβλίο μαγειρικής.

Έχεις τέσσερις εργασίες, όλες σχετικές με τον χρόνο που χρειάζεται για το μαγείρεμα της λαζάνια.

1. Όρισε τον αναμενόμενο χρόνο στον φούρνο σε λεπτά

Όρισε τη συνάρτηση ovenTime() που δεν παίρνει κανένα όρισμα και επιστρέφει πόσα λεπτά πρέπει να μείνει η λαζάνια στον φούρνο. Σύμφωνα με το βιβλίο μαγειρικής, ο αναμενόμενος χρόνος στον φούρνο είναι 40 λεπτά:

ovenTime();
// => 40

2. Υπολόγισε τον υπόλοιπο χρόνο στον φούρνο σε λεπτά

Όρισε τη συνάρτηση remainingOvenTime(int actualMinutesInOven) που παίρνει ως όρισμα τα πραγματικά λεπτά που βρίσκεται η λαζάνια στον φούρνο και επιστρέφει πόσα λεπτά πρέπει ακόμη να μείνει η λαζάνια στον φούρνο, με βάση τον αναμενόμενο χρόνο σε λεπτά από την προηγούμενη εργασία.

remainingOvenTime(30);
// => 10

3. Υπολόγισε τον χρόνο προετοιμασίας σε λεπτά

Όρισε τη συνάρτηση preparationTime(int numberOfLayers) που παίρνει ως όρισμα τον αριθμό των στρώσεων που πρόσθεσες στη λαζάνια και επιστρέφει πόσα λεπτά χρειάστηκες για να προετοιμάσεις τη λαζάνια, υποθέτοντας ότι κάθε στρώση σου παίρνει 2 λεπτά για να ετοιμαστεί.

preparationTime(2);
// => 4

4. Υπολόγισε τον χρόνο που έχει περάσει σε λεπτά

Όρισε τη συνάρτηση elapsedTime(int numberOfLayers, int actualMinutesInOven) που παίρνει δύο ορίσματα: το πρώτο όρισμα είναι ο αριθμός των στρώσεων που πρόσθεσες στη λαζάνια και το δεύτερο όρισμα είναι ο αριθμός των λεπτών που βρίσκεται η λαζάνια στον φούρνο. Η συνάρτηση πρέπει να επιστρέφει πόσα λεπτά έχεις δουλέψει για το μαγείρεμα της λαζάνια, δηλαδή το άθροισμα του χρόνου προετοιμασίας σε λεπτά και του χρόνου σε λεπτά που έχει περάσει η λαζάνια στον φούρνο τη δεδομένη στιγμή.

elapsedTime(3, 20);
// => 26
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
C++ Exercism

Έτοιμος να ξεκινήσεις την άσκηση Λαζάνια;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις C++ με 19 έννοιες100 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.