Διαδρομές
/
Swift
Swift
/
Ασκήσεις
/
Χρεώσεις ελεύθερου επαγγελματία
Χρεώσεις ελεύθερου επαγγελματία

Χρεώσεις ελεύθερου επαγγελματία

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

Εισαγωγή

Αριθμοί

Η Swift παρέχει δύο βασικές κατηγορίες αριθμών: τους ακέραιους και τους αριθμούς κινητής υποδιαστολής.

Μπορείς να εισάγεις κάτω παύλες στα αριθμητικά λεκτικά για να βελτιώσεις την αναγνωσιμότητα: το 1_000_000 είναι ίδιο με το 1000000. Τα λεκτικά κινητής υποδιαστολής μπορούν να γραφτούν σε δεκαδική ή εκθετική μορφή.

Στις περισσότερες περιπτώσεις, χρησιμοποιείς τον Int για τους ακέραιους και τον Double για τους αριθμούς κινητής υποδιαστολής:

let speed: Int = 42                           // Explicit Int
let pi: Double = 3.14                         // Explicit Double
let giga: Double = 1_000_000_000              // Double with readability underscores
let plancksConstant: Double = 6.62607015e-34  // Double in scientific notation

Αριθμητικοί τελεστές

Η Swift παρέχει τους τυπικούς αριθμητικούς τελεστές για αριθμητικούς υπολογισμούς:

Τελεστής Περιγραφή Παράδειγμα
+ Πρόσθεση το 4 + 6 δίνει 10
- Αφαίρεση το 15 - 10 δίνει 5
* Πολλαπλασιασμός το 2 * 3 δίνει 6
Caution

Η Swift είναι ασφαλής ως προς τους τύπους και δεν επιτρέπει την ανάμιξη διαφορετικών αριθμητικών τύπων σε αριθμητικές πράξεις. Δεν μπορείς να προσθέσεις ή να πολλαπλασιάσεις απευθείας ένα Int και ένα Double. Πρέπει πρώτα να μετατρέψεις τον έναν τύπο ώστε να ταιριάζει με τον άλλον.

Διαίρεση

Ο τελεστής / εκτελεί τη διαίρεση. Όταν και οι δύο τελεστέοι είναι ακέραιοι, η ακέραια διαίρεση αποκόπτει τυχόν κλασματικό υπόλοιπο:

5.0 / 2.0 // 2.5 (Double division)
5 / 2     // 2 (integer division truncates the remainder)

Η διαίρεση ενός μη μηδενικού αριθμού κινητής υποδιαστολής με το μηδέν δίνει inf ή -inf. Η διαίρεση του 0.0 με το 0.0 παράγει nan (όχι αριθμός). Αντίθετα, η διαίρεση ενός ακέραιου με το μηδέν προκαλεί σφάλμα κατά τη μεταγλώττιση ή κατά την εκτέλεση:

print(5.0 / 0.0)  // Prints inf
print(-5.0 / 0.0) // Prints -inf
print(0.0 / 0.0)  // Prints nan

// The following line will not compile:
// print(5 / 0) // Error: Division by zero

Τελεστής υπολοίπου

Ο τελεστής υπολοίπου (%) υπολογίζει το υπόλοιπο που απομένει μετά τη διαίρεση δύο ακεραίων:

5 % 2  // 1
-5 % 2 // -1

// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
Note

Στη Swift, το % είναι ένας γνήσιος τελεστής υπολοίπου και όχι τελεστής modulo. Το αποτέλεσμα παίρνει πάντα το πρόσημο του πρώτου τελεστέου (του διαιρετέου), ανεξάρτητα από το πρόσημο του δεύτερου τελεστέου:

5 % -2  // 1
-5 % 2  // -1

Στρογγυλοποίηση αριθμών κινητής υποδιαστολής

Μπορείς να στρογγυλοποιήσεις έναν αριθμό κινητής υποδιαστολής χρησιμοποιώντας τη μέθοδο rounded(). Από προεπιλογή, η rounded() στρογγυλοποιεί στον πλησιέστερο ακέραιο. Μπορείς επίσης να δώσεις έναν συγκεκριμένο κανόνα στρογγυλοποίησης, όπως .up ή .down:

let x = 3.14
let y = x.rounded()      // 3.0
let w = x.rounded(.down) // 3.0
let z = x.rounded(.up)   // 4.0

Εξαγωγή τύπου

Όταν δηλώνεις μια αριθμητική σταθερά ή μεταβλητή χωρίς επισημείωση τύπου, η Swift συμπεραίνει τον τύπο της:

  • Οι ακέραιοι αριθμοί έχουν από προεπιλογή τύπο Int.
  • Οι αριθμοί με υποδιαστολή έχουν από προεπιλογή τύπο Double.
let x = 42         // Inferred as Int
let y = 42.0       // Inferred as Double
let z: Double = 42 // Explicitly typed as Double

Μετατροπή τύπου

Για να κάνεις πράξεις ανάμεσα σε τιμές διαφορετικών τύπων, μετέτρεψε τη μία τιμή χρησιμοποιώντας αρχικοποιητές τύπου όπως Double(_:) ή Int(_:):

let integerCount = 42
let floatingCount = Double(integerCount)
print(floatingCount) // Prints 42.0

let pi = 3.14
let integerPi = Int(pi)
print(integerPi) // Prints 3 (fractional part is truncated)

Οδηγίες

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

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

Ένας πελάτης επικοινωνεί με τον freelancer για να ρωτήσει για τις χρεώσεις του. Ο freelancer εξηγεί ότι δουλεύει 8 ώρες την ημέρα. Ωστόσο, ο freelancer γνωρίζει μόνο την ωριαία χρέωσή του για το έργο. Βοήθησέ τον να υπολογίσει μια ημερήσια χρέωση με δεδομένη την ωριαία χρέωση.

Υλοποίησε τη συνάρτηση dailyRateFrom(hourlyRate:), η οποία παίρνει το όρισμα hourlyRate που περιέχει την ωριαία χρέωση του freelancer.
Η συνάρτηση πρέπει να επιστρέφει την ημερήσια χρέωση με βάση την ωριαία χρέωση.

dailyRateFrom(hourlyRate: 60)
// Returns 480.0

Η ημερήσια χρέωση που επιστρέφεται πρέπει να είναι Double.

2. Υπολόγισε τη μηνιαία χρέωση, με δεδομένες την ωριαία χρέωση και μια έκπτωση

Μερικές φορές, ένας πελάτης ενδιαφέρεται να προσλάβει τον freelancer για μεγαλύτερο χρονικό διάστημα. Ο freelancer είναι πρόθυμος να κάνει έκπτωση στον πελάτη, αλλά μόνο αν ο πελάτης τον προσλάβει για τουλάχιστον έναν μήνα. Συνολικά υπάρχουν 22 εργάσιμες ημέρες. Βοήθησε τον freelancer να υπολογίσει τη μηνιαία χρέωσή του, με δεδομένες την ωριαία χρέωση και το ποσοστό έκπτωσης που είναι διατεθειμένος να εφαρμόσει στη σταθερή τιμή, στρογγυλοποιημένο στον πλησιέστερο ακέραιο αριθμό.

Υλοποίησε τη συνάρτηση monthlyRateFrom(hourlyRate:withDiscount:), η οποία παίρνει τα ορίσματα hourlyRate που περιέχει την ωριαία χρέωση του freelancer, και withDiscount που περιέχει την έκπτωση που είναι διατεθειμένος να δώσει ο freelancer στον πελάτη. Η συνάρτηση πρέπει να επιστρέφει τη μηνιαία χρέωση στρογγυλοποιημένη στον πλησιέστερο ακέραιο αριθμό.

monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129

3. Υπολόγισε τον αριθμό των εργάσιμων ημερών με δεδομένα έναν προϋπολογισμό, την ωριαία χρέωση και την έκπτωση

Μια άλλη μέρα, ένας υπεύθυνος έργου προτείνει στον freelancer να δουλέψει σε ένα έργο με σταθερό προϋπολογισμό. Με δεδομένο τον σταθερό προϋπολογισμό και την ωριαία χρέωση του freelancer, βοήθησέ τον να υπολογίσει πόσες ημέρες θα δουλέψει μέχρι να εξαντληθεί ο προϋπολογισμός. Λάβε υπόψη ότι σε αυτό το σενάριο ο freelancer είναι πάντα πρόθυμος να δώσει την έκπτωση, ανεξάρτητα από τον αριθμό των ημερών πρόσληψης. Το αποτέλεσμα πρέπει να είναι στρογγυλοποιημένο προς τα κάτω στον πλησιέστερο ακέραιο αριθμό.

Υλοποίησε τη συνάρτηση workdaysIn(budget:hourlyRate:withDiscount:), η οποία παίρνει τα ορίσματα:

  • budget που περιέχει τον προϋπολογισμό για το έργο.
  • hourlyRate που περιέχει την ωριαία χρέωση του freelancer.
  • withDiscount που περιέχει την έκπτωση που είναι διατεθειμένος να δώσει ο freelancer στον πελάτη.

Η συνάρτηση πρέπει να επιστρέφει τον αριθμό των εργάσιμων ημερών που θα δουλέψει ο freelancer στο έργο, στρογγυλοποιημένο προς τα κάτω.

workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Swift Exercism

Έτοιμος να ξεκινήσεις την άσκηση Χρεώσεις ελεύθερου επαγγελματία;

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