Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας. Αποφάσισα να ασχοληθώ με τη 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;
	}
	
}

Είναι εύκολο πιστεύω, αλλά έχω κολλήσει. Κάθε βοήθεια ευπρόσδεκτη! Ευχαριστώ!

Δημοσ.

Όταν υπολογίσεις τις μέρες, θα πρέπει να αφαιρέσεις τα δευτερόλεπτα που αντιστοιχούν σε αυτές τις μέρες από την αρχική τιμή δευτερολέπτων, για να βρεις τις ώρες που απομένουν. Και αυτό αντίστοιχα και για τα επόμενα.

  • Like 1
Δημοσ.

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

 

 

 

Οκ και εγώ το σκέφτηκα, αλλά στη πράξη πως θα γίνει αυτό;

  • Moderators
Δημοσ.

Έχεις ένα ; μετά το else και η σύνταξή του δεν είναι σωστή. Ή θα βάλεις else if ή θα βγάλεις το condition.

  • Like 1
Δημοσ.

Πρέπει να κάνεις round down στα αποτελέσματα των διαιρέσεων, ώστε να σου βγαίνουν ακέραιες τιμές. Γιατί έτσι όπως το έχεις κάνει θα σου βγάζει δεκαδικές τιμές και δεν ξέρω αν σου τρέχει κανονικά.

 

Edit: Συν ότι σου είπαν από πάνω για την αφαίρεση των δευτερελέπτων που είναι οι ημέρες, ώρες κλπ...

  • Like 1
Δημοσ.

Έχεις ένα ; μετά το else και η σύνταξή του δεν είναι σωστή. Ή θα βάλεις else if ή θα βγάλεις το condition.

 

 

Αν δεν βάλω το ";" το IDE (Dev-C++) βγάζει σφάλμα. Το πρόγραμμα και έτσι τρέχει κανονικά, απλώς κάτι παίζει με τις πράξεις. Εκεί πρέπει κάτι να γίνει!

Δημοσ.

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

 

Συνεπώς από το αρχικό sec αφαιρείς τα δευτερόλεπτα που αντιστοιχούν για αυτές τις μέρες.

days = ...
rest_sec = sec - days*86400

Μετά υπολογίζεις τις ώρες σύμφωνα με το rest_sec, και εφαρμόζεις την λογική αυτή κλιμακωτά.

  • Like 1
Δημοσ.

Πρέπει να κάνεις round down στα αποτελέσματα των διαιρέσεων, ώστε να σου βγαίνουν ακέραιες τιμές. Γιατί έτσι όπως το έχεις κάνει θα σου βγάζει δεκαδικές τιμές και δεν ξέρω αν σου τρέχει κανονικά.

 

 

 

Βασικά ακέραιες τιμές βγάζει, απλώς έχω κολλήσει και δεν ξέρω πως να το κάνω να "κρατήσει" το υπόλοιπο των διαιρέσεων. Ίσως με το "%" αλλά δεν ξέρω πως υλοποιείται έτσι. 

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

 

Συνεπώς από το αρχικό sec αφαιρείς τα δευτερόλεπτα που αντιστοιχούν για αυτές τις μέρες.

days = ...
rest_sec = sec - days*86400

Μετά υπολογίζεις τις ώρες σύμφωνα με το rest_sec, και εφαρμόζεις την λογική αυτή κλιμακωτά.

 

 

 

Φαίνεται σωστό, αλλά έτσι πρέπει να δηλωθούν καινούργιες μεταβλητές.

Δημοσ.

Βασικά ακέραιες τιμές βγάζει, απλώς έχω κολλήσει και δεν ξέρω πως να το κάνω να "κρατήσει" το υπόλοιπο των διαιρέσεων. Ίσως με το "%" αλλά δεν ξέρω πως υλοποιείται έτσι. 

 

 

 

Φαίνεται σωστό, αλλά έτσι πρέπει να δηλωθούν καινούργιες μεταβλητές.

Μπορείς αντί για νέα μεταβλητή, όπως το rest_sec, να χρησιμοποιείς την ίδια sec.

Π.χ.: sec=sec-days*86400

  • Like 2
Δημοσ.

Βασικά ακέραιες τιμές βγάζει, απλώς έχω κολλήσει και δεν ξέρω πως να το κάνω να "κρατήσει" το υπόλοιπο των διαιρέσεων. Ίσως με το "%" αλλά δεν ξέρω πως υλοποιείται έτσι. 

 

 

Μπορείς να το κάνεις και με modulo. 

days = ...
rest_sec = sec % 86400
  • Like 1
Δημοσ.

Ευχαριστώ όλους για τις απαντήσεις. Θα προτιμούσα κάποιος να γράψει το τροποποιημένο πρόγραμμα που λειτουργεί, ώστε να κάνω τη σύγκριση μεταξύ του νέου και του παλιού. Αν κάποιος δεν βαριέται ας το κάνει.


 

Μπορείς να το κάνεις και με modulo. 

days = ...
rest_sec = sec % 86400

 

 

Αυτό σκεφτόμουν και εγώ! Ευχαριστώ!

  • Like 1
Δημοσ.

 

Όταν υπολογίζεις κάτι τα seconds μειώνονται δηλαδή

days=sec/86400;
sec=sec%86400
hours=sec/3600;
sec=sec%3600
min=3600/60;
sec=sec%60		
	

 

 

 

Ωραίος! Ευχαριστώ!

Δημοσ.

Ευχαριστώ όλους για τις απαντήσεις. Θα προτιμούσα κάποιος να γράψει το τροποποιημένο πρόγραμμα που λειτουργεί, ώστε να κάνω τη σύγκριση μεταξύ του νέου και του παλιού. Αν κάποιος δεν βαριέται ας το κάνει.

 

Αχα 

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...