Διαδρομές
/
C++
C++
/
Ασκήσεις
/
Το ενδιαφέρον έχει ενδιαφέρον
Το ενδιαφέρον έχει ενδιαφέρον

Το ενδιαφέρον έχει ενδιαφέρον

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

Εισαγωγή

Βρόχοι

Με τους βρόχους εκτελείς κάποια λογική επανειλημμένα. Οι δύο πιο συνηθισμένοι τύποι είναι ο while loop (αόριστη επανάληψη) και ο for loop (ορισμένη ή μετρημένη επανάληψη). Υπάρχει επίσης ο βρόχος for each, που θα συναντήσεις σε επόμενη έννοια.

Γενική σύνταξη

Ο for loop αποτελείται από μια κεφαλίδα και ένα μπλοκ κώδικα που περιέχει το σώμα του βρόχου μέσα σε άγκιστρα. Η κεφαλίδα αποτελείται από 3 στοιχεία που χωρίζονται με άνω τελείες ;: τη δήλωση αρχικοποίησης, τη συνθήκη και μια ακόμη έκφραση. Καθένα από αυτά μπορεί να είναι κενό.

for (init_statement; condition; expression) {
  some_statement;
}
  • Το στοιχείο init_statement είναι κώδικας που εκτελείται μόνο μία φορά πριν ξεκινήσει ο βρόχος.
  • Το στοιχείο condition πρέπει να είναι μια έκφραση που αποτιμάται σε boolean και ελέγχει πότε πρέπει να σταματήσει ο βρόχος. Ο κώδικας μέσα στον βρόχο θα εκτελείται όσο αυτή η συνθήκη αποτιμάται σε true. Μόλις αυτή η έκφραση αποτιμηθεί σε false, δεν θα εκτελεστεί άλλη επανάληψη του βρόχου.
  • Το στοιχείο expression είναι κώδικας που θα εκτελείται στο τέλος κάθε επανάληψης.

Ο while loop εκτελεί το σώμα του όσο ο έλεγχος της συνθήκης του είναι true. Το παρακάτω απόσπασμα κώδικα δείχνει πώς να μετατρέψεις έναν for σε while loop.

init_statement;
while(condition) {
    some_statement;
    expression;
}

Παρένθεση: Αυξήσεις και μειώσεις

Όταν δουλεύεις με βρόχους, συχνά χρειάζεται να προσθέσεις 1 ή να αφαιρέσεις 1 από μια μεταβλητή μετρητή που παρακολουθεί τις επαναλήψεις. Αυτό είναι τόσο συνηθισμένο, που οι ενέργειες αύξησης/μείωσης έχουν ειδικούς τελεστές: ++ και --.

Υπάρχουν σε προθεματική και σε επιθεματική μορφή. Η προθεματική μορφή αλλάζει τη μεταβλητή πριν από τη χρήση της στην εντολή και η επιθεματική μετά. Τις περισσότερες φορές μάλλον θέλεις την προθεματική μορφή.

int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3

Βρόχοι for - Ένα παράδειγμα

Το μέρος init συνήθως ορίζει μια μεταβλητή μετρητή, η συνθήκη ελέγχει αν ο βρόχος πρέπει να συνεχιστεί ή να σταματήσει και το μέρος post συνήθως αυξάνει τον μετρητή στο τέλος κάθε επανάληψης.

int sum{0};
for (int i{1}; i < 10; ++i) {
  sum += i;
}

Αυτός ο βρόχος θα αθροίσει τους αριθμούς από το 1 έως το 9 (συμπεριλαμβανομένου του 9).

break και continue

Μέσα στο σώμα ενός βρόχου, μπορείς να χρησιμοποιήσεις τη λέξη-κλειδί break για να σταματήσεις εντελώς την εκτέλεση του βρόχου:

int sum{2};
while(true) {
    sum *= 2;
    if (sum > 1000)
        break;
}
// sum is now 1024

Αντίθετα, η λέξη-κλειδί continue σταματά μόνο την εκτέλεση της τρέχουσας επανάληψης και συνεχίζει με την επόμενη:

int equal_sum{0};
for (int i{1}; i < 7; ++i) {
  if  (i%2 == 1) {
    continue;
  }
  equal_sum += i;
}
// equal_sum is now 12
Note

Συνήθως είναι πιο εύκολο να καταλάβεις τη λογική του βρόχου, όταν η χρήση των break και continue περιορίζεται στο ελάχιστο ή αποφεύγεται εντελώς. Και οι δύο λέξεις-κλειδιά παρακάμπτουν ορισμένα σημεία του κώδικα και συχνά κάνουν πιο δύσκολο να παρακολουθήσεις τη ροή.

Οδηγίες

Σε αυτή την άσκηση, θα δουλέψεις με λογαριασμούς ταμιευτηρίου. Κάθε χρόνο, το υπόλοιπο του λογαριασμού ταμιευτηρίου σου ενημερώνεται με βάση το επιτόκιό του. Το επιτόκιο που σου δίνει η τράπεζά σου εξαρτάται από το ποσό των χρημάτων στον λογαριασμό σου (το υπόλοιπό του):

  • 3.213% για υπόλοιπο μικρότερο από 0 δολάρια (το υπόλοιπο γίνεται πιο αρνητικό).
  • 0.5% για υπόλοιπο μεγαλύτερο ή ίσο με 0 δολάρια και μικρότερο από 1000 δολάρια.
  • 1.621% για υπόλοιπο μεγαλύτερο ή ίσο με 1000 δολάρια και μικρότερο από 5000 δολάρια.
  • 2.475% για υπόλοιπο μεγαλύτερο ή ίσο με 5000 δολάρια.

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

1. Υπολόγισε το επιτόκιο

Υλοποίησε τη συνάρτηση interest_rate για να υπολογίσεις το επιτόκιο με βάση το δεδομένο υπόλοιπο:

interest_rate(200.75);
// => 0.5

2. Υπολόγισε τον τόκο

Υλοποίησε τη συνάρτηση yearly_interest για να υπολογίσεις τον τόκο με βάση το δεδομένο υπόλοιπο:

yearly_interest(200.75):
// => 1.003750

3. Υπολόγισε την ετήσια ενημέρωση του υπολοίπου

Υλοποίησε τη συνάρτηση annual_balance_update για να υπολογίσεις την ετήσια ενημέρωση του υπολοίπου, λαμβάνοντας υπόψη το επιτόκιο:

annual_balance_update(200.75);
// => 201.75375

4. Υπολόγισε τα χρόνια μέχρι να φτάσεις στο επιθυμητό υπόλοιπο

Υλοποίησε τη συνάρτηση years_until_desired_balance για να υπολογίσεις τον ελάχιστο αριθμό ετών που χρειάζονται για να φτάσεις στο επιθυμητό υπόλοιπο, λαμβάνοντας υπόψη ότι κάθε χρόνο ο τόκος προστίθεται στο υπόλοιπο. Αυτό σημαίνει ότι το υπόλοιπο μετά από ένα χρόνο είναι: αρχικό υπόλοιπο + τόκος για το αρχικό υπόλοιπο. Το υπόλοιπο μετά τον δεύτερο χρόνο είναι το υπόλοιπο μετά τον ένα χρόνο + τόκος για το υπόλοιπο μετά τον ένα χρόνο. Και ούτω καθεξής, μέχρι το υπόλοιπο του τρέχοντος έτους να είναι μεγαλύτερο ή ίσο με το υπόλοιπο-στόχο.

double balance {200.75};
double targetBalance {214.88};
years_until_desired_balance(balance, targetBalance)
// => 14

Σημείωσε ότι η τιμή που επιστρέφεται είναι int.

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
C++ Exercism

Έτοιμος να ξεκινήσεις την άσκηση Το ενδιαφέρον έχει ενδιαφέρον;

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