snow22 Δημοσ. 6 Νοεμβρίου 2016 Δημοσ. 6 Νοεμβρίου 2016 Να γινει αλγοριθμος που να διαβαζει χλμ και να εμφανιζει τι σεβις χρειαζεται το αμαξι Το αμαξι καινει ενα μικρο σερβις καθε 5000χλμ και ενα μεγαλο καθε 15000 πχ αμα εχει το αμαξι 20000χλμ χρειαζεται μικρο Η λυση μ ειναι αυτη,νομιζω ειναι λαθος Αλγοριθμος σερβις Διαβασε χlm Αν (χλμ mod 15000)>=5000 kai (χλμ mod 15000)<=15000 τοτε Εμφανισε μικρο Αλλιως Εμφανισε μεγαλο Τ.αν Τ.σερβις
nilosgr Δημοσ. 7 Νοεμβρίου 2016 Δημοσ. 7 Νοεμβρίου 2016 Κατ αρχην το (χλμ mod 15000)<=15000 ισχυει παντα. Αρα σιγουρα εισαι σε λαθος δρομο. Κοιτα υπαρχει περίπτωση το αμαξι να μην θελει καθολου σερβις. Αρα 3 πιθανα σενάρια: Θελει μεγαλο σερβις Θελει μικρο σερβις Δεν θελει σερβις Οπότε εχουμε και λεμε Αλγοριθμος σερβις Διαβασε χλμ Αν χλμ > 15000 τοτε Εμφανισε μεγαλο Αλλιως αν χλμ >= 5000 τοτε Εμφανισε μικρο Αλλιως Εμφανισε καθολου Τ.αν Τ.σερβις
snow22 Δημοσ. 7 Νοεμβρίου 2016 Μέλος Δημοσ. 7 Νοεμβρίου 2016 Κατ αρχην το (χλμ mod 15000)<=15000 ισχυει παντα. Αρα σιγουρα εισαι σε λαθος δρομο. Κοιτα υπαρχει περίπτωση το αμαξι να μην θελει καθολου σερβις. Αρα 3 πιθανα σενάρια: Θελει μεγαλο σερβις Θελει μικρο σερβις Δεν θελει σερβις Οπότε εχουμε και λεμε Αλγοριθμος σερβις Διαβασε χλμ Αν χλμ > 15000 τοτε Εμφανισε μεγαλο Αλλιως αν χλμ >= 5000 τοτε Εμφανισε μικρο Αλλιως Εμφανισε καθολου Τ.αν Τ.σερβις Ευχαριστω για την βοηθεια αλλα δεν καταλαβες την ασκησηΘα δωσω αλλο ενα παραδειγμα Αμα το αμαξι εχει 30.000 θα πρεπει να κανεις μεγαλο γιατι ειχε γινει τελευταια φορα στα 15000 Αμα εχει 35000 Χρειαζεται μικρο γιατι εχει κανει τελευταια φορα στα 30000 Δεν ειναι τοσο απλο δυστηχως
isay Δημοσ. 7 Νοεμβρίου 2016 Δημοσ. 7 Νοεμβρίου 2016 Κατ αρχην το (χλμ mod 15000)<=15000 ισχυει παντα. Αρα σιγουρα εισαι σε λαθος δρομο. Κοιτα υπαρχει περίπτωση το αμαξι να μην θελει καθολου σερβις. Αρα 3 πιθανα σενάρια: Θελει μεγαλο σερβις Θελει μικρο σερβις Δεν θελει σερβις Οπότε εχουμε και λεμε Αλγοριθμος σερβις Διαβασε χλμ Αν χλμ > 15000 τοτε Εμφανισε μεγαλο Αλλιως αν χλμ >= 5000 τοτε Εμφανισε μικρο Αλλιως Εμφανισε καθολου Τ.αν Τ.σερβις Και άμα το αμαξι έχεις πάνω από 15000 χλμ θα θέλει συνέχεια μεγαλο service; Τον ts τον ενδιαφέρει το ανα 5κ και 15κ χιλιόμετρα 1
Sheogorath Δημοσ. 7 Νοεμβρίου 2016 Δημοσ. 7 Νοεμβρίου 2016 Άρα μεταφέρεις σε 2η μεταβλητή τα χμ και την μηδενίζεις ανα 15.000 την μία και ανα 5000 για το μικρό. Έχεις τρεις μεταβλητές που οι δύο μηδενίζουν ανα 5Κ και 15Κ αλλά το βήμα τους είναι ίδιο.
k33theod Δημοσ. 7 Νοεμβρίου 2016 Δημοσ. 7 Νοεμβρίου 2016 Το mod είναι το υπόλοιπο της διαίρεσης? εάν ναι if km mod 15000==0 or km mod 15000>10000: emfanise 'megalo' else: emfanise 'mikro' Δηλαδή εάν είσαι ακριβώς για μεγάλο ή έχεις κάνει πάνω από 10000 κμ μετά το μεγάλο είσαι για μεγάλο αλιώς είσαι για μικρό Δεν καλύπτεται η περίπτωση με 0κμ που πας για μικρό στα 5000 και πρέπει να την βάλεις χωριστά
defacer Δημοσ. 7 Νοεμβρίου 2016 Δημοσ. 7 Νοεμβρίου 2016 Αν km < 5000 return "kanena" Αν όχι, θέλουμε σέρβις. Τα σέρβις επαναλαμβάνονται με κύκλο διάρκειας 3, μικρό-μικρό-μεγάλο. Επομένως θέλουμε να κάνουμε κάτι modulo 3 για να μας δώσει την τελική απάντηση. Τι θα κάνουμε modulo? Τον αριθμό των συμπληρωμένων 5000 km, αφού σέρβις κάποιου είδους έχουμε ανά 5000km. pentoxiliara = km DIV 5000 όπου DIV η ακέραια διαίρεση προς αποφυγή παρεξηγήσεων. Αυτό που κάνει η C ανάμεσα σε int και int. service = pentoxiliara % 3 == 2 ? "megalo" : "mikro" Το αποτέλεσμα του modulo συγκρίνεται με το 2 επειδή το μεγάλο σέρβις έρχεται τελευταίο, μετρώντας από το μηδέν στη θέση 2 του κύκλου παραπάνω. Υπάρχει μόνο ένα πρόβλημα ακόμα, αυτό στην πραγματικότητα μας δίνει τον κύκλο μικρό-μεγάλο-μικρό επειδή τα πρώτα 5000 km δεν θέλουν κανένα σερβις. Πώς θα φέρουμε τα πράγματα στη θέση τους; Αφαιρώντας ένα πεντοχίλιαρο πριν τον υπολογισμό του modulo. Άρα όλο μαζί γίνεται Αν km < 5000 return "kanena" km = km - 5000 // αυτό μπορεί βέβαια να ενσωματωθεί στο επόμενο return (km DIV 5000) % 3 == 2 ? "megalo" : "mikro" 2
nilosgr Δημοσ. 7 Νοεμβρίου 2016 Δημοσ. 7 Νοεμβρίου 2016 αν υποθέσουμε οτι εκανε σερβις στην προηγούμενη, απλα κανεις mod 15000 Αλγοριθμος σερβις Διαβασε χλμ χλμ <- χλμ mod 15000 Αν χλμ = 0 τοτε Εμφανισε μεγαλο Αλλιως αν χλμ >= 5000 τοτε Εμφανισε μικρο Αλλιως Εμφανισε καθολου Τ.αν Τ.σερβις
k33theod Δημοσ. 7 Νοεμβρίου 2016 Δημοσ. 7 Νοεμβρίου 2016 Πρέπει να ξεκαθαριστεί αν η τιμή 'κανένα' παίζει επίσης τι πρέπει να επιστρέφει ο αλγόριθμος αν ο χιλιομετρητής δείχνει 9.999 και τί στα 10.001 Η αρχική μου εκτίμηση ήταν ότι το κανένα δεν παίζει στα 5.001 όπως και στα 9.999 πρέπει να δώσει μικρό το service των 10.000 δηλαδή ενώ στα 10.001 πρέπει να δώσει μεγάλο το service των 15000 defacer γιατί λες αν km<5000 να επιστρέψει 'κανένα' (δηλαδή στα 4999 επιστρέφει κανένα) ενώ στα 5001 που έγινε service πριν 1 κμ να επιστρέψει 'μικρό'
defacer Δημοσ. 7 Νοεμβρίου 2016 Δημοσ. 7 Νοεμβρίου 2016 Πήρα ως δεδομένο πως προσπαθούμε να απαντήσουμε στην ερώτηση "τι σέρβις πρέπει να κάνω αυτή τη στιγμή αν υποθέσουμε ότι τα παλιά μου σερβις είναι εντάξει". Δηλαδή, μια μέρα πας στο αμάξι και βλέπεις λέει 36742 χιλιόμετρα. Ουπς, ξέχασα να κάνω σέρβις, τι γίνεται τώρα; Θα κάνεις ένα μικρό δεδομένου ότι το 30000 το έκανες και είναι μεγάλο, ενώ το 35000 δεν το έκανες. Διαφορετικά η άλλη εναλλακτική είναι να υποθέσεις ότι ΟΛΑ τα προηγούμενα σέρβις είναι εντάξει, που θα έδινε "κανένα" σε οποιοδήποτε νούμερο χιλιομετρητή δεν είναι πολλαπλάσιο του 5Κ, που δε μου φαίνεται ιδιαίτερα χρήσιμο πρακτικά. Αλλά sure εφόσον δεν ξεκαθαρίζεται από την εκφώνηση θα μπορούσες να το δεις κι έτσι. Αυτό που δε βρίσκω καθόλου λογικό είναι να πεις ότι στα 10001 θα πρέπει να δώσει το σέρβις των 15000.
albNik Δημοσ. 7 Νοεμβρίου 2016 Δημοσ. 7 Νοεμβρίου 2016 Μόνο στα πολλαπλάσια του 5000 πρέπει να κάνει σέρβις (μεγάλο αν διαιρείται με 3, μικρό διαφορετικά).
snow22 Δημοσ. 7 Νοεμβρίου 2016 Μέλος Δημοσ. 7 Νοεμβρίου 2016 Πήρα ως δεδομένο πως προσπαθούμε να απαντήσουμε στην ερώτηση "τι σέρβις πρέπει να κάνω αυτή τη στιγμή αν υποθέσουμε ότι τα παλιά μου σερβις είναι εντάξει". Δηλαδή, μια μέρα πας στο αμάξι και βλέπεις λέει 36742 χιλιόμετρα. Ουπς, ξέχασα να κάνω σέρβις, τι γίνεται τώρα; Θα κάνεις ένα μικρό δεδομένου ότι το 30000 το έκανες και είναι μεγάλο, ενώ το 35000 δεν το έκανες. Διαφορετικά η άλλη εναλλακτική είναι να υποθέσεις ότι ΟΛΑ τα προηγούμενα σέρβις είναι εντάξει, που θα έδινε "κανένα" σε οποιοδήποτε νούμερο χιλιομετρητή δεν είναι πολλαπλάσιο του 5Κ, που δε μου φαίνεται ιδιαίτερα χρήσιμο πρακτικά. Αλλά sure εφόσον δεν ξεκαθαρίζεται από την εκφώνηση θα μπορούσες να το δεις κι έτσι. Αυτό που δε βρίσκω καθόλου λογικό είναι να πεις ότι στα 10001 θα πρέπει να δώσει το σέρβις των 15000. Εννοειται οτι τα προηγουμενα σερβις ειναι ενταξει
defacer Δημοσ. 7 Νοεμβρίου 2016 Δημοσ. 7 Νοεμβρίου 2016 Αν πρέπει να κάνει μόνο στα πολλαπλάσια του 5Κ τότε απλά στη λύση μου αλλάξτε το Αν km < 5000 return "kanena" σε Αν km < 5000 || km % 5000 != 0 return "kanena" Βέβαια το ίδιο πράγμα μπορείς να το γράψεις με διάφορους παρόμοιους τρόπους εν τέλει.
k33theod Δημοσ. 7 Νοεμβρίου 2016 Δημοσ. 7 Νοεμβρίου 2016 Αν ξεκαθαρίσει και το input, output είμαστε σε καλό δρόμο input πολλαπλάσιο του 5000 ή οποιαδήποτε ένδειξη του χιλιομετρητή output 'μικρό, μεγάλο ' ή 'μικρό, μεγάλο, κανένα'
billpao Δημοσ. 7 Νοεμβρίου 2016 Δημοσ. 7 Νοεμβρίου 2016 Μια λύση που πιστεύω καλύπτει κάθε ειδους εκφώνηση της συγκεκριμένης άσκησης: Διαβασε χλμ i = 0 Οσο χλμ >= 5000 επαναλαβε i = i + 1 χλμ = χλμ - 5000 Τελος_επαναληψης Αν i>0 Αν χλμ == 0 τοτε i = i - 1 χλμ = 5000 Τελος_αν μεχρι_σερβις = 5000 - χλμ Αν ( i + 1) mod 3 == 0 τοτε Γραψε "Θα χρειαστεί σε ",μεχρι_σερβις,"μεγαλος σερβις' αλλιως Γραψε "Θα χρειαστεί σε ",μεχρι_σερβις,"μεγαλο σερβις" τελος_αν αλλιως μεχρι_σερβις = 5000 - χλμ Γραψε "Μικρο σερβις σε ",μεχρι_σερβις," χλμ" τελος_αν Η σκέψη μου: Ουσιαστικά ανα 3 σερβις θα χρειάζεται μεγάλο σέρβις οπότε μετράω τα σερβις και οπως βλεπεις εκτυπώνω αναλόγως. Είναι αργή λύση αλλά πιστεύω ικανοποιεί το πρόβηλμα. Tο μεχρι_σερβις εκτυπώνει σε πόσα χλμ θα χρειαστεί το αντίστοιχο σερβις. Αν ο χρήστης δώσει κατι αλλό εκτός απο πολλαπλάσιο του 5000 τότε θα υπολογίσει σε πόσα χλμ θα χρειαστεί το επόμενο σέρβις (και τι είδος σέρβις είναι).
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα