Διαδρομές
/
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 να συνεννοηθεί με έναν υπεύθυνο έργου. Το καθήκον σου είναι να παρέχεις μερικά βοηθητικά εργαλεία για να υπολογίζεις γρήγορα τις ημερήσιες και τις μηνιαίες χρεώσεις, προαιρετικά με μια δεδομένη έκπτωση.

Πρώτα ορίζουμε μερικούς κανόνες ανάμεσα στον freelancer και στον υπεύθυνο έργου:

  • Η ημερήσια χρέωση είναι 8 φορές η ωριαία χρέωση.
  • Ένας μήνας έχει 22 τιμολογήσιμες ημέρες.

Μερικές φορές, ο freelancer προσφέρεται να εφαρμόσει έκπτωση στην ημερήσια χρέωσή του (για παράδειγμα για τους πιο πιστούς πελάτες του ή για πελάτες μη κερδοσκοπικών οργανισμών).

Οι εκπτώσεις αναπαριστώνται ως δεκαδικοί αριθμοί που αντιπροσωπεύουν ποσοστά, για παράδειγμα, 25.0 (25%).

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

Υλοποίησε μια συνάρτηση με το όνομα dailyRateFrom για να υπολογίσεις την ημερήσια χρέωση, με δεδομένη την ωριαία χρέωση ως παράμετρο. Το συμβόλαιο ορίζει ότι μια ημέρα έχει 8 τιμολογήσιμες ώρες.

dailyRateFrom(hourlyRate: 60)
// Returns 480.0

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

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

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

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

Η μηνιαία χρέωση που επιστρέφεται πρέπει να είναι στρογγυλοποιημένη προς τα πάνω (να παίρνεις την οροφή) στον πλησιέστερο ακέραιο.

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

Υλοποίησε μια συνάρτηση workdaysIn που παίρνει έναν προϋπολογισμό, μια ωριαία χρέωση και μια έκπτωση, και υπολογίζει πόσες πλήρεις ημέρες εργασίας καλύπτονται.

workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0

Ο αριθμός των ημερών που επιστρέφεται πρέπει να είναι στρογγυλοποιημένος προς τα κάτω (να παίρνεις το δάπεδο) στον αμέσως μικρότερο ακέραιο.

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

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

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