C# COMPLETE COURSE
ΕΝΟΤΗΤΑ 7 - THEORY REVIEW
INTRODUCTION
Σε αυτό το δωρεάν μάθημα C# θα αναλύσουμε ένα ολοκληρωμένο πρόγραμμα το οποίο περιέχει αρκετά στοιχεία από την θεωρία που έχουμε καλύψει μέχρι τώρα. Πιο συγκεκριμένα, θα δούμε πως μπορούμε να χρησιμοποιήσουμε μερικούς από τους arithmetic operators για να διαιρέσουμε τα δευτερόλεπτα σε ημέρες, ώρες, λεπτά, και δευτερόλεπτα. Το πρόγραμμα μπορεί να είναι απλό στη δομή και στη λογική του είναι όμως ένα πρώτο βήμα στην δημιουργία ολοκληρωμένων εφαρμογών.
WHAT WE NEED TO UNDERSTAND
Σε κάθε πρόγραμμα, όσο απλό ή πολύπλοκο, το πρώτο βήμα είναι να κατανοήσουμε τι ακριβώς μας ζητείται να δημιουργήσουμε. Όσο καλός προγραμματιστής και αν είναι κάποιος, δεν θα μπορέσει να καλύψει τις ανάγκες του εκάστοτε πελάτη εάν δεν καταλάβει στον απόλυτο βαθμό τις απαιτήσεις της εφαρμογής. Στο δικό μας παράδειγμα, θα δεχτούμε ένα μεγάλο ακέραιο αριθμό που θα αντιπροσωπεύει δευτερόλεπτα. Αυτό που πρέπει να πετύχουμε είναι να δείξουμε σε πόσες ημέρες, ώρες, λεπτά και δευτερόλεπτα αντιστοιχούν.
Το δεύτερο βήμα είναι να καταλάβουμε τον αλγόριθμο ή αλγόριθμούς που θα χρειαστούμε για να κάνουμε τις απαραίτητες πράξεις. Με άλλα λόγια ξέρουμε πως να βρίσκουμε ημέρες από δευτερόλεπτα; άν όχι τότε θα πρέπει να βρούμε πως εκτελείται αυτή η πράξη και μετά να προχωρήσουμε στην ανάπτυξη του κώδικα.
SECONDS TO DAYS-HOURS-MINUTES-SECONDS CONVERTER
Θεωρώ ότι θα είναι ευκολότερο να γράψουμε πρώτα όλο τον κώδικα και να δούμε το αποτέλεσμα και μετά να το αναλύσουμε γραμμή προς γραμμή.
Program.cs
Output
Το πρόγραμμα μας ξεκινάει με την δήλωση μιας μεταβλητής που ορίζει τον αριθμό των δευτερολέπτων που πρέπει να διαιρέσουμε.
int seconds = 288970;
Μετά δημιουργούμε ένα αντίγραφο της αρχικής τιμής αναθέτοντας την σε μια δεύτερη μεταβλητή.
int remaining_seconds = seconds;
Ύστερα δημιουργούμε μια μεταβλητή που αντιπροσωπεύει τα δευτερόλεπτα που υπάρχουν σε ένα λεπτό.
int seconds_per_minute = 60;
Ακολουθούμε την ίδια λογική για να αντιπροσωπεύσουμε τα δευτερόλεπτα που υπάρχουν σε μια ώρα και μια μέρα αντίστοιχα.
int seconds_per_hour = 60 * 60;
int seconds_per_day = 24 * 60 * 60;
Ο λόγος που αναθέτουμε αυτές τις τιμές στις μεταβλητές στην αρχή του προγράμματος μας είναι γιατί θα είναι πιο εύκολα κατανοητός και μαζεμένος ο κώδικας μας όταν κάνουμε πράξεις με μεταβλητές παρά όταν εκτελούμε όλους αυτούς τους πολλαπλασιασμούς με τους αριθμούς.
Η πρώτη μας πράξη είναι η διαίρεση ανάμεσα στο συνολικό αριθμό των δευτερολέπτων και τα δευτερόλεπτα που περιέχονται σε μια ημέρα. Η διαίρεση γίνεται ανάμεσα στο αντίγραφο των δευτερολέπτων που δημιουργήσαμε και την seconds_per_day έτσι ώστε να παραμείνει άθικτος ο αρχικός αριθμός των δευτερολέπτων. Στην μεταβλητή days θα ανατεθεί το αποτέλεσμα της διαίρεσης που στην ουσία είναι ο αριθμός των ημερών που περιέχεται στον αριθμό των δευτερολέπτων που μας δόθηκαν.
int days = remaining_seconds / seconds_per_day;
Αφού υπολογίσαμε τις ημέρες, θα πρέπει τώρα να υπολογίσουμε πόσα δευτερόλεπτα μας έχουν απομείνει που δεν είναι αρκετά να μετατραπούν σε ημέρες όμως μπορούν να μετατραπούν σε ώρες. Αφαιρούμε λοιπόν από τον αρχικό αριθμό των δευτερολέπτων των αριθμό των ημερών αφού τις μετατρέπουμε σε δευτερόλεπτα έτσι ώστε να γίνει η αφαίρεση με ίδιες μονάδες. Το αποτέλεσμα της αφαίρεσης το αναθέτουμε στην ίδια μεταβλητή.
remaining_seconds -= days * seconds_per_day;
Τώρα που έχουμε τον υπόλοιπο αριθμό των δευτερολέπτων, αφού αφαιρέσαμε τις ημέρες, τον διαιρούμε με τον αριθμό των δευτερολέπτων που περιέχονται σε μια ώρα. Το αποτέλεσμα το αναθέτουμε στην μεταβλητή hours.
int hours = remaining_seconds / seconds_per_hour;
Αφαιρούμε για άλλη μια φορά από τον ολικό αριθμό των δευτερολέπτων και τα δευτερόλεπτα που περιέχονται στις ώρες που μόλις υπολογίσταμε. Το αποτέλεσμα το αναθέτουμε ξανά πίσω στην ίδια μεταβλητή για να γνωρίζουμε πόσα δευτερόλεπτα μας έχουν απομείνει για να συνεχίσουμε.
remaining_seconds -= hours * seconds_per_hour;
Με την ίδια λογική ακριβώς συνεχίζουμε για να βρούμε πόσα λεπτά περιέχονται στα δευτερόλεπτα που μας έχουν απομείνει και αυτά που δεν αρκούν για να δημιουργήσουν λεπτά θα απομείνουν σαν δευτερόλεπτα.
int minutes = remaining_seconds / seconds_per_minute;
remaining_seconds -= minutes * seconds_per_minute;
Τέλος δείχνουμε ένα ολοκληρωμένο και κατανοητό μήνυμα στον τελικό χρήστη που του δείχνουμε ακριβώς την αντιστοιχία των δευτερολέπτων στις αντίστοιχες χρονικές μονάδες.
System.Console.WriteLine(days + " days, " + hours + " hours, " + minutes + " minutes, " + remaining_seconds + " seconds");
Ελπίζω μέσα από αυτό το πρόγραμμα να καταλάβετε πως συνήθως σκεφτόμαστε πριν ξεκινήσουμε να γράφουμε κώδικα και τι βήματα χρειάζεται να πάρετε για να προσεγγίσετε τους αλγόριθμους που απαιτεί η επίλυση του προβλήματος που προσπαθείτε να λύσετε.
ΕΙΣΗΓΗΤΗΣ
Μιχάλης Κασάπογλου
Ο Μιχάλης Κασάπογλου, είναι ένας από τους πιο έμπειρους τεχνικούς εκπαιδευτές στον χώρο του προγραμματισμού με πάνω από 20 χρόνια εμπειρία. Έχει εργαστεί σαν IT Operations Manager, Senior Programmer, και Training Team Leader ενώ κατέχει και αρκετές πιστοποιήσεις που καλύπτουν ένα μεγάλο φάσμα τεχνολογιών στο προγραμματισμό, σε βάσεις δεδομένων και cloud. Στον ελεύθερο του χρόνο διατηρεί ένα τεχνολογικό blog στο οποίο θα βρείτε αρκετά δωρεάν μαθήματα προγραμματισμού για αρχάριους.