_Theo_ Δημοσ. 15 Νοεμβρίου 2017 Δημοσ. 15 Νοεμβρίου 2017 Γεια σας. Αποφάσισα να ασχοληθώ με τη C++ για να την θυμηθώ ξανά, μιας και απέχω καιρό από το αντικείμενο. Μια άσκηση λέει : Να γραφτεί κώδικάς ο οποίος θα δέχεται ένα χρονικό διάστημα σε δευτερόλεπτα και θα εμφανίζει τις ημέρες, τις ώρες, τα λεπτά και τα υπόλοιπα δευτερόλεπτα στα οποία αντιστοιχεί. Για παράδειγμα, αν εισαχθεί από το πληκτρολόγιο ο αριθμός 200000, θα πρέπει να εμφανίσει στην οθόνη το μήνυμα : "2 Days ,7 Hours, 33 min & 20 seconds. Ο κώδικάς που έχω γράψει μέχρι στιγμής: #include<iostream> using namespace std; int main() { int days,hours,min,sec,seconds; cout<<"Doste ton arithmo ton defterolepton:"<<endl; cin>>sec; if (sec<=0) { cout<<"Error! Give a valid value!"<<endl; } else (sec>0) ;{ days=sec/86400; hours=sec/3600; min=3600/60; seconds=min/3600; cout<<days<<" "<<"imeres"<<" "<<hours<<" "<<"Ores"<<" "<<min<<" "<<"Lepta"<<" "<<"&"<<" "<<seconds<<" "<<"defterolepta"<<endl; } } Είναι εύκολο πιστεύω, αλλά έχω κολλήσει. Κάθε βοήθεια ευπρόσδεκτη! Ευχαριστώ!
BabyRage Δημοσ. 15 Νοεμβρίου 2017 Δημοσ. 15 Νοεμβρίου 2017 Όταν υπολογίσεις τις μέρες, θα πρέπει να αφαιρέσεις τα δευτερόλεπτα που αντιστοιχούν σε αυτές τις μέρες από την αρχική τιμή δευτερολέπτων, για να βρεις τις ώρες που απομένουν. Και αυτό αντίστοιχα και για τα επόμενα. 1
_Theo_ Δημοσ. 15 Νοεμβρίου 2017 Μέλος Δημοσ. 15 Νοεμβρίου 2017 Όταν υπολογίσεις τις μέρες, θα πρέπει να αφαιρέσεις τα δευτερόλεπτα που αντιστοιχούν σε αυτές τις μέρες από την αρχική τιμή δευτερολέπτων. Και αυτό αντίστοιχα και για τα επόμενα. Οκ και εγώ το σκέφτηκα, αλλά στη πράξη πως θα γίνει αυτό;
Moderators Kercyn Δημοσ. 15 Νοεμβρίου 2017 Moderators Δημοσ. 15 Νοεμβρίου 2017 Έχεις ένα ; μετά το else και η σύνταξή του δεν είναι σωστή. Ή θα βάλεις else if ή θα βγάλεις το condition. 1
Mpiftekis Δημοσ. 15 Νοεμβρίου 2017 Δημοσ. 15 Νοεμβρίου 2017 Πρέπει να κάνεις round down στα αποτελέσματα των διαιρέσεων, ώστε να σου βγαίνουν ακέραιες τιμές. Γιατί έτσι όπως το έχεις κάνει θα σου βγάζει δεκαδικές τιμές και δεν ξέρω αν σου τρέχει κανονικά. Edit: Συν ότι σου είπαν από πάνω για την αφαίρεση των δευτερελέπτων που είναι οι ημέρες, ώρες κλπ... 1
_Theo_ Δημοσ. 15 Νοεμβρίου 2017 Μέλος Δημοσ. 15 Νοεμβρίου 2017 Έχεις ένα ; μετά το else και η σύνταξή του δεν είναι σωστή. Ή θα βάλεις else if ή θα βγάλεις το condition. Αν δεν βάλω το ";" το IDE (Dev-C++) βγάζει σφάλμα. Το πρόγραμμα και έτσι τρέχει κανονικά, απλώς κάτι παίζει με τις πράξεις. Εκεί πρέπει κάτι να γίνει!
BabyRage Δημοσ. 15 Νοεμβρίου 2017 Δημοσ. 15 Νοεμβρίου 2017 Επειδή όλα είναι ακέραιοι, η διαίρεση θα πετάξει τα δεκαδικά ψηφία, συνεπώς η πρώτη διαίρεση για την εύρεση των μερών θα κρατήσει των ακέραιο αριθμό ημερών, αυτό ακριβώς που θες. Συνεπώς από το αρχικό sec αφαιρείς τα δευτερόλεπτα που αντιστοιχούν για αυτές τις μέρες. days = ... rest_sec = sec - days*86400 Μετά υπολογίζεις τις ώρες σύμφωνα με το rest_sec, και εφαρμόζεις την λογική αυτή κλιμακωτά. 1
_Theo_ Δημοσ. 15 Νοεμβρίου 2017 Μέλος Δημοσ. 15 Νοεμβρίου 2017 Πρέπει να κάνεις round down στα αποτελέσματα των διαιρέσεων, ώστε να σου βγαίνουν ακέραιες τιμές. Γιατί έτσι όπως το έχεις κάνει θα σου βγάζει δεκαδικές τιμές και δεν ξέρω αν σου τρέχει κανονικά. Βασικά ακέραιες τιμές βγάζει, απλώς έχω κολλήσει και δεν ξέρω πως να το κάνω να "κρατήσει" το υπόλοιπο των διαιρέσεων. Ίσως με το "%" αλλά δεν ξέρω πως υλοποιείται έτσι. Επειδή όλα είναι ακέραιοι, η διαίρεση θα πετάξει τα δεκαδικά ψηφία, συνεπώς η πρώτη διαίρεση για την εύρεση των μερών θα κρατήσει των ακέραιο αριθμό ημερών, αυτό ακριβώς που θες. Συνεπώς από το αρχικό sec αφαιρείς τα δευτερόλεπτα που αντιστοιχούν για αυτές τις μέρες. days = ... rest_sec = sec - days*86400 Μετά υπολογίζεις τις ώρες σύμφωνα με το rest_sec, και εφαρμόζεις την λογική αυτή κλιμακωτά. Φαίνεται σωστό, αλλά έτσι πρέπει να δηλωθούν καινούργιες μεταβλητές.
Mpiftekis Δημοσ. 15 Νοεμβρίου 2017 Δημοσ. 15 Νοεμβρίου 2017 Βασικά ακέραιες τιμές βγάζει, απλώς έχω κολλήσει και δεν ξέρω πως να το κάνω να "κρατήσει" το υπόλοιπο των διαιρέσεων. Ίσως με το "%" αλλά δεν ξέρω πως υλοποιείται έτσι. Φαίνεται σωστό, αλλά έτσι πρέπει να δηλωθούν καινούργιες μεταβλητές. Μπορείς αντί για νέα μεταβλητή, όπως το rest_sec, να χρησιμοποιείς την ίδια sec. Π.χ.: sec=sec-days*86400 2
BabyRage Δημοσ. 15 Νοεμβρίου 2017 Δημοσ. 15 Νοεμβρίου 2017 Βασικά ακέραιες τιμές βγάζει, απλώς έχω κολλήσει και δεν ξέρω πως να το κάνω να "κρατήσει" το υπόλοιπο των διαιρέσεων. Ίσως με το "%" αλλά δεν ξέρω πως υλοποιείται έτσι. Μπορείς να το κάνεις και με modulo. days = ... rest_sec = sec % 86400 1
_Theo_ Δημοσ. 15 Νοεμβρίου 2017 Μέλος Δημοσ. 15 Νοεμβρίου 2017 Ευχαριστώ όλους για τις απαντήσεις. Θα προτιμούσα κάποιος να γράψει το τροποποιημένο πρόγραμμα που λειτουργεί, ώστε να κάνω τη σύγκριση μεταξύ του νέου και του παλιού. Αν κάποιος δεν βαριέται ας το κάνει. Μπορείς να το κάνεις και με modulo. days = ... rest_sec = sec % 86400 Αυτό σκεφτόμουν και εγώ! Ευχαριστώ! 1
k33theod Δημοσ. 15 Νοεμβρίου 2017 Δημοσ. 15 Νοεμβρίου 2017 Όταν υπολογίζεις κάτι τα seconds μειώνονται δηλαδή days=sec/86400; sec=sec%86400 hours=sec/3600; sec=sec%3600 min=3600/60; sec=sec%60 1
_Theo_ Δημοσ. 15 Νοεμβρίου 2017 Μέλος Δημοσ. 15 Νοεμβρίου 2017 Όταν υπολογίζεις κάτι τα seconds μειώνονται δηλαδή days=sec/86400; sec=sec%86400 hours=sec/3600; sec=sec%3600 min=3600/60; sec=sec%60 Ωραίος! Ευχαριστώ!
k33theod Δημοσ. 15 Νοεμβρίου 2017 Δημοσ. 15 Νοεμβρίου 2017 Ευχαριστώ όλους για τις απαντήσεις. Θα προτιμούσα κάποιος να γράψει το τροποποιημένο πρόγραμμα που λειτουργεί, ώστε να κάνω τη σύγκριση μεταξύ του νέου και του παλιού. Αν κάποιος δεν βαριέται ας το κάνει. Αχα 1
_Theo_ Δημοσ. 15 Νοεμβρίου 2017 Μέλος Δημοσ. 15 Νοεμβρίου 2017 Αχα Δε χρειάζεται πλέον, μιας και τη βρήκα (βρήκες!) τη λύση. 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα