Διαδρομές
/
Crystal
Crystal
/
Ασκήσεις
/
Ο τόκος έχει ενδιαφέρον
Ο τόκος έχει ενδιαφέρον

Ο τόκος έχει ενδιαφέρον

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

Εισαγωγή

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

Βρόχοι while

Ο βρόχος while είναι μια δομή ελέγχου που επιτρέπει σε κώδικα να εκτελείται ξανά και ξανά, με βάση μια συνθήκη. Ο κώδικας μέσα σε έναν βρόχο while συνεχίζει να εκτελείται όσο η συνθήκη αποτιμάται ως truthy. Οι βρόχοι while χρησιμοποιούνται συχνά όταν δεν ξέρεις από πριν πόσες επαναλήψεις θα χρειαστούν, αλλά μπορείς να τους χρησιμοποιήσεις όπου χρειάζεσαι βρόχο.

Η συνθήκη αποτιμάται πριν εκτελεστεί ο κώδικας μέσα στον βρόχο. Αυτό σημαίνει ότι, αν η συνθήκη είναι ψευδής, ο κώδικας μέσα στον βρόχο δεν θα εκτελεστεί ποτέ.

i = 0
while i < 3
  puts i
  i += 1
end

# Output:
# 0
# 1
# 2

Όταν θέλεις να διατρέξεις μια συμβολοσειρά, μπορείς να κάνεις βρόχο με βάση το μήκος της.

str = "Hello"
i = 0
while i < str.size
  puts str[i]
  i += 1
end

# Output:
# H
# e
# l
# l
# o

Βρόχοι until

Οι until βρόχοι λειτουργούν όπως οι βρόχοι while, με τη διαφορά ότι ο κώδικας μέσα στον βρόχο συνεχίζει να εκτελείται μέχρι η συνθήκη να αποτιμηθεί ως truthy. Είναι η ίδια διαφορά που υπάρχει ανάμεσα στο if και στο unless.

i = 0
until i == 3
  puts i
  i += 1
end

Ατέρμονοι βρόχοι

Ένα συχνό σφάλμα με τους βρόχους while είναι να μπεις σε έναν "ατέρμονο βρόχο", από τον οποίο δεν βγαίνεις ποτέ. Ένας ατέρμονος βρόχος μπορεί να προκληθεί από μια συνθήκη που δεν αποτιμάται ποτέ ως truthy ή falsey. Αυτό συνήθως οφείλεται σε λάθος του προγραμματιστή, για παράδειγμα όταν ξεχνάς να αυξήσεις τη μεταβλητή του βρόχου. Μερικές φορές όμως, ο ατέρμονος βρόχος είναι ο πιο ξεκάθαρος τρόπος να υλοποιήσεις τη λογική του προγράμματος. Ή μπορεί να είναι απαραίτητο ο βρόχος να τρέχει για πάντα. Για παράδειγμα, ένας διακομιστής HTTP περιμένει μια εισερχόμενη σύνδεση, την εξυπηρετεί και μετά περιμένει την επόμενη.

break

Με τη λέξη-κλειδί break μπορείς να βγεις νωρίτερα από έναν βρόχο. Αυτό είναι βολικό όταν θέλεις να βγεις νωρίτερα από έναν βρόχο κάτω από ορισμένες συνθήκες.

i = 0
while i <= 3
  puts i
  i += 1
  if i == 2
    break
  end
end

# Output:
# 0
# 1

next

Με τη λέξη-κλειδί next μπορείς να προχωρήσεις κατευθείαν στην επόμενη επανάληψη ενός βρόχου. Αυτό είναι βολικό όταν θέλεις να παραλείψεις συγκεκριμένες επαναλήψεις ενός βρόχου.

i = 0
while i <= 3
  i += 1
  if i == 2
    next
  end
  puts i
end

# Output:
# 1
# 3

Τύποι μέσα σε βρόχο

Ο τύπος μιας μεταβλητής μπορεί να διαφέρει μέσα σε έναν βρόχο. Στο παρακάτω παράδειγμα, ο τύπος της a είναι Int32 | String, επειδή στο πρώτο μέρος του βρόχου μπορεί να είναι Int32 ή String. Η μεταβλητή a έχει τον τύπο Int32 | String μόνο στο πρώτο μέρος του βρόχου, αφού όταν ξεκινά ο βρόχος περιέχει Int32 και στη δεύτερη επανάληψη περιέχει String. Θα εξηγήσουμε αναλυτικά αυτό το σύστημα πολλαπλών τύπων αργότερα. Επειδή όμως είμαστε σίγουροι ότι στο δεύτερο μέρος του βρόχου θα περιέχει μόνο String, ο τύπος της a είναι String στο δεύτερο μέρος του βρόχου. Κατά την εκτέλεση, δεν θα περιέχει ποτέ ταυτόχρονα Int32 και String.

i = 0
a = 4
while i < 3
  p typeof(a)
  # => Int32 | String
  a = "4"
  p typeof(a)
  # => String
  i += 1
end

Στην Crystal, μια μέθοδος επιστρέφει την τιμή της τελευταίας της έκφρασης. Μερικές φορές όμως χρειάζεται να επιστρέψεις μια τιμή πριν από την τελευταία έκφραση. Γι' αυτό υπάρχει η λέξη-κλειδί return, που επιστρέφει την τιμή της έκφρασης που ακολουθεί. Ο κώδικας που γράφεται μετά από ένα return δεν εκτελείται.

def speed_limit(road_number)
    if road_number == 1
        return 50
        puts "This will not be executed"
    elsif road_number == 2
        return 80
        puts "This will not be executed"
    end
    100
end

p speed_limit(1) # => 50
p speed_limit(2) # => 80
p speed_limit(3) # => 100
Note

Όταν η τελευταία έκφραση μιας μεθόδου είναι η τιμή που πρέπει να επιστραφεί, παράλειψε τη λέξη-κλειδί return.

Οδηγίες

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

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

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

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

Υλοποίησε τη μέθοδο SavingsAccount.interest_rate() που παίρνει ως όρισμα ένα υπόλοιπο. Η μέθοδος πρέπει να επιστρέφει το επιτόκιο για το δεδομένο υπόλοιπο.

SavingsAccount.interest_rate(200.75)
# => 0.5

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

Υλοποίησε τη μέθοδο SavingsAccount.interest() που παίρνει ως όρισμα ένα υπόλοιπο. Η μέθοδος πρέπει να επιστρέφει τον τόκο για το δεδομένο υπόλοιπο.

SavingsAccount.interest(200.75)
# => 1.00375

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

Υλοποίησε τη μέθοδο SavingsAccount.annual_balance_update() που παίρνει ως όρισμα ένα υπόλοιπο. Η μέθοδος πρέπει να επιστρέφει το υπόλοιπο μετά από ένα χρόνο.

SavingsAccount.annual_balance_update(200.75)
# => 201.75375

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

Υλοποίησε τη μέθοδο SavingsAccount.years_before_desired_balance() που παίρνει ως ορίσματα ένα υπόλοιπο και ένα υπόλοιπο-στόχο. Η μέθοδος πρέπει να επιστρέφει τον αριθμό των χρόνων που θα χρειαζόταν για να φτάσεις στο υπόλοιπο-στόχο.

balance = 200.75
target_balance = 214.88
SavingsAccount.years_before_desired_balance(balance, target_balance)
# => 14
Note

Όταν εφαρμόζεις απλό τόκο σε ένα αρχικό κεφάλαιο, το υπόλοιπο πολλαπλασιάζεται με το επιτόκιο και το γινόμενο των δύο είναι το ποσό του τόκου.

Ο σύνθετος τόκος, από την άλλη, εφαρμόζεται σε επαναλαμβανόμενη βάση. Σε κάθε εφαρμογή, το ποσό του τόκου υπολογίζεται και προστίθεται στο αρχικό κεφάλαιο, ώστε οι επόμενοι υπολογισμοί τόκου να γίνονται πάνω σε μεγαλύτερο αρχικό κεφάλαιο.

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

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

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