M2000 Δημοσ. 26 Δεκεμβρίου 2015 Δημοσ. 26 Δεκεμβρίου 2015 Είναι ωραίο το πρόβλημα γιατί σε βάζει στην ουσία της χρήσης της υποδιαίρεσης. Δηλαδή με την επανάληψη που δείχνεις πριν από 60 στο 167 βγάζεις τι; Τίποτα διότι πρέπει να βρεις τις ώρες και αυτό σημαίνει ότι 1.5 ώρα κλήση και 1.7 ώρα κλήση θα είναι 2 ώρες η κάθε μία άρα θα είναι 4 ώρες! και στο προηγούμενο θέμα που έθιξα το 3599 είναι στην ώρα γιατί η πρώτη 60 άδα είναι το πρώτο λεπτό..άρα η 59η 60άδα είναι το 59 λεπτό, και μετά πάμε στην ώρα, άρα τα 60 δευτερόλεπτα μετά το 59*60 είναι στην μια ώρα!
M2000 Δημοσ. 27 Δεκεμβρίου 2015 Δημοσ. 27 Δεκεμβρίου 2015 Για να μην το κουράζουμε το θέμα: Αυτή είναι η λύση Δεν είναι εύκολο γιατί έχει μπέρδεμα με τα δευτερόλεπτα που εισάγουμε και τα λεπτά και ώρες που παίρνουμε. Ν=0Πίνακας α(63) \ 0 62, χρήση από 1 έως 62Τερμάτισε=ΨευδήςΕπανέλαβε { Εισαγωγή "Κλήση=", δευτ αν δευτ>=1 και δευτ<=10000 τότε { Ν++ Αν (δευτ-1) δια 60 <59 τότε { α((δευτ-1) δια 60+1)++ } αλλιώς { α((δευτ-1) δια 3600+60)++ } } Αλλιώς { Τερμάτισε=Αληθής }} Μέχρι ΤερμάτισεΑν Ν>0 τότε { Τύπωσε "Συνολικές Κλήσεις :", Ν αν α(1)>0 τότε Τύπωσε μορφή$("Κλήσεις 1 λεπτού : {0}", α(1)) Για ι=2 έως 59 { αν α(ι)>0 τότε Τύπωσε μορφή$("Κλήσεις {0} λεπτών : {1}", ι,α(ι)) } αν α(60)>0 τότε Τύπωσε μορφή$("Κλήσεις 1 ώρας : {0}", α(60)) Για ι=61 έως 62 { αν α(ι)>0 τότε Τύπωσε μορφή$("Κλήσεις {0} ωρών : {1}", ι-59,α(ι)) }} θα μπορούσε κανείς να βάλει το Αν Ν>0 τότε { ...} μέσα στην Επανέλαβε για να δείχνει σε κάθε εισαγωγή αποτέλεσμα! Απλά κάποια στιγμή μπορεί να ήθελε 62 γραμμές (59 για τα λεπτά και 3 για τις ώρες) Το ωραίο στο κώδικα είναι ότι η πρώτη ώρα βγαίνει ΜΟΝΟ για τα δευτερόλεπτα από το 59*60+1 έως το 60*60, δηλαδή μόνο για 60 δευτερόλεπτα. Μετά πάει μια ώρα επιπλέον! Η οποία θα βγει μέχρι και το 59 λεπτό της γιατί μετά θα πάμε στην επόμενη ώρα! Με τον τρόπο του Defacer (με 167 εγγραφές). Απλά κάνουμε μια επιπλέον σούμα για τη 2η και τρίτη ώρα. Ν=0 : κ=0 Πίνακας α(168)Τερμάτισε=ΨευδήςΕπανέλαβε { Εισαγωγή "Κλήση=", δευτ αν δευτ>=1 και δευτ<=10000 τότε { Ν++ α((δευτ-1) δια 60+1)++ } Αλλιώς { Τερμάτισε=Αληθής }} Μέχρι ΤερμάτισεΑν Ν>0 τότε { Τύπωσε "Συνολικές Κλήσεις :", Ν αν α(1)>0 τότε Τύπωσε μορφή$("Κλήσεις 1 λεπτού : {0}", α(1)) Για ι=2 έως 59 { αν α(ι)>0 τότε Τύπωσε μορφή$("Κλήσεις {0} λεπτών : {1}", ι,α(ι)) } κ=61 Για ι=62 έως 167 { αν α(ι)>0 τότε α(κ)+=α(ι) αν (ι +1) υπολ 60 =0 τότε κ++ } αν α(60)>0 τότε Τύπωσε μορφή$("Κλήσεις 1 ώρας : {0}", α(60)) Για ι=61 έως 62 { αν α(ι)>0 τότε Τύπωσε μορφή$("Κλήσεις {0} ωρών : {1}", ι-59,α(ι)) }}
defacer Δημοσ. 27 Δεκεμβρίου 2015 Δημοσ. 27 Δεκεμβρίου 2015 Βασικά είναι σούπερ απλό και δεν ξέρω γιατί το συζητάμε. Δίνω JavaScript γιατί πονάνε τα μάτια μου να διαβάζω ψευδογλώσσες. var d, durations = new Array(167).fill(0); while((d = parseInt(prompt("duration in seconds? (-1 to stop looping)"), 10)) != -1) { var index = d / 60 | 0; // integer division ++durations[index]; } for (var i = 0; i < 60; ++i) { console.log("Durations between " + i + " and " + (i + 1) + " minutes = " + durations[i]); } var sum = 0; for (var i = 60; i < 120; ++i) sum += durations[i]; console.log("Durations between 1 and 2 hours = " + sum); var sum = 0; for (var i = 120; i < 167; ++i) sum += durations[i]; console.log("Durations between 2 and 3 hours = " + sum); Live εδώ. Δεν είναι και πολύ σόι σαν JavaScript κώδικας γιατί προσπάθησα να την κρατήσω πολύ κοντά σε κάτι αντίστοιχο με ψευδογλώσσα.
M2000 Δημοσ. 27 Δεκεμβρίου 2015 Δημοσ. 27 Δεκεμβρίου 2015 Το Live δεν παίζει...Ενώ μαζεύει νούμερα το log δεν εμφανίζεται! ο κώδικας προφανώς είναι λάθος χωρίς πολλά πολλά! διότι εμφανίζει τιμές "μεταξύ" ορίων...Οπότε αντί να εμφανίζει τρεις ενδείξεις για τις ώρες (1η, 2η, 3η) εμφανίζει 2... δεν γίνεται να εμφανίζει από 1 έως 2 και το 2 μέσα και μετά από 2 έως 3 με το 2 πάλι μέσα... έτσι πρέπει να βγάλει κάτι..Αν βγάλει το 2, στη δεύτερη ώρα θα βγάλει το 3 άρα θα μετράει μέχρι το 7200. Μέχρι το 10000 θα πάνε χαμένες οι κλήσεις!
defacer Δημοσ. 27 Δεκεμβρίου 2015 Δημοσ. 27 Δεκεμβρίου 2015 Το ξέρεις ότι για να εμφανιστεί η έξοδος από την console.log πρέπει πρώτα να ανοίξεις την κονσόλα έτσι; Ο κώδικας για τις ανάγκες της συζήτησης ας πούμε ότι δεν ξέρω αν είναι γενικά σωστός, αλλά σίγουρα δεν είναι λάθος με τον τρόπο που λες. Αν θες να το συζητήσουμε περισσότερο ξέρεις υποθέτω πώς γίνεται: [α] τι έκανες, [β] τι περίμενες να συμβεί, [γ] γιατί περίμενες να συμβεί το αυτό, [δ] τι συνέβη τελικά. Αν και θα έπρεπε να είναι προφανές από το ότι οι συνθήκες τερματισμού στα for είναι όλες με μικρότερο και όχι με μικρότερο-ίσον.
nickname2016 Δημοσ. 27 Δεκεμβρίου 2015 Μέλος Δημοσ. 27 Δεκεμβρίου 2015 Νομιζω, το εξαντλησαμε! Κυριοι, ευχαριστω για τις απαντησεις σας!
M2000 Δημοσ. 27 Δεκεμβρίου 2015 Δημοσ. 27 Δεκεμβρίου 2015 ok νόμιζα θα έβγαζε καμία πάνω στη σελίδα. Κατάλαβα...άνοιξα τον έλεγχο και από εκεί κάνεις επιλογή τη κονσόλα! Για το σκεπτικό σου δουλεύει το πρόγραμμα! Αν του κάνει του nickname2016..δεν γνωρίζω! Νομίζω ότι η περιγραφή του ήταν λάθος!
παπι Δημοσ. 27 Δεκεμβρίου 2015 Δημοσ. 27 Δεκεμβρίου 2015 ο κώδικας προφανώς είναι λάθος χωρίς πολλά πολλά! Γελασα, πολυ.
παπι Δημοσ. 28 Δεκεμβρίου 2015 Δημοσ. 28 Δεκεμβρίου 2015 Κλασικός εμπαθής τύπος με τον def. Αυτό σκεφτομουν.
M2000 Δημοσ. 28 Δεκεμβρίου 2015 Δημοσ. 28 Δεκεμβρίου 2015 Καλά Κρασιά...βλέπω Πάπι πήρες και παρέα για υποστήριξη! Άσχετα με τις συνθήκες τερματισμού...αυτό εδώ είναι λάθος: Από 1 έως 2 και Από 2 έως 3 Δηλαδή αν κάποιος έβλεπε τα αποτελέσματα θα έπρεπε να είχε και επεξηγήσεις ότι το (2) δεν είναι στο πρώτο. και το (3) δεν είναι στο δεύτερο, ή ότι το (1) δεν είναι στο πρώτο και το (2) δεν είναι στο δεύτερο; Ούτε εσύ Πάπι ούτε ο Visualizer το καταλάβατε! Το "τα ξέρω όλα" δεν ισχύει...αλλά όταν σου δίνω το επιχείρημα θέλω το αντεπιχείρημα. Ο Defacer με καλεί να δω το κώδικα. Πρώτα με ενδιαφέρει τι αποτελέσματα δίνει σε σχέση με το πως τα ονομάζει! Βασίστηκε στη περιγραφή του OP ως πως το πως περίπου τα θέλει χωρισμένα.. Έκανε σαν τον γιαπωνέζο που από ένα ελαττωματικό κομμάτι του είπαν "φτιάξε το ίδιο" και το έκανε το ίδιο ελαττωματικό! (κανονικά δεν ασχολούμαι τόσο με ένα θέμα αλλά η επένδυση στη μάθηση είναι πάντα καλό, είναι μια προσφορά)
defacer Δημοσ. 28 Δεκεμβρίου 2015 Δημοσ. 28 Δεκεμβρίου 2015 Λοιπόν, περιοριζόμενοι καθαρά στο πώς δουλεύει ο κώδικας. AFAIK σε όλο τον πλανήτη όταν προγραμματίζουμε λογική "από 1 μέχρι 2 μέρες" εννοούμε "από 24 ώρες 0 λεπτά 0 δευτερόλεπτα μέχρι 47 ώρες 59 λεπτά 59 δευτερόλεπτα". Αυτό ακριβώς κάνει ο κώδικας παραπάνω, αυτό κάνει και οποιοσδήποτε άλλος κώδικας βάζει πράγματα σε buckets γιατί δεν υπάρχει καμία άλλη "λογική" (δηλαδή, που να δίνει αποτελέσματα τα οποία δεν καταλήγουν πολύ εύκολα σε "παράδοξα" ή "λάθος" αποτελέσματα όταν εξετάζεις το μοίρασμα στο σύνολό του). Είναι σούπερ στάνταρ σε σημείο there is nothing to think about. Για να ξαναπώ το ίδιο πράγμα με άλλα λόγια: όταν λέμε "πωλήσεις που έγιναν από το Νοέμβριο μέχρι το Δεκέμβριο", η πρώτη Δεκεμβρίου ή μέρος αυτής δεν περιλαμβάνεται. Εγώ θεωρώ πως η πλειοψηφία των ανθρώπων και το σύνολο των προγραμματιστών που θα καθήσουν να το σκεφτούν μισό λεπτό θα καταλήξουν στο ίδιο συμπέρασμα γιατί όπως είπα, οποιοδήποτε άλλο συμπέρασμα οδηγεί σε παράδοξα και λάθη. Εσύ θεωρείς ότι αυτό χρειάζεται επεξήγηση. Cool, όταν γράψεις τέτοιο πρόγραμμα βάλε και επεξηγήσεις. Αλλά από αυτό το σημείο πώς φτάνουμε στο "ο κώδικας έχει λάθος" μόνο εσύ το ξέρεις.
M2000 Δημοσ. 28 Δεκεμβρίου 2015 Δημοσ. 28 Δεκεμβρίου 2015 Πάλι δεν εξήγησες.. Αν ο κ Νίκος μένει από 1ο Μέχρι 2ο όροφο και ο κ. Πέτρος από Ισόγειο μέχρι πρώτο...Υπάρχει περίπτωση να μένουν και οι δυο στον ίδιο όροφο....Προφανώς όχι. Άρα η λογική "από έως" για σύγκριση δυο ατόμων εδώ είναι ΟΚ. Αν τώρα σου πως ότι από Ισογειο μέχρι 1ο μένουν 10, από 1ο μέχρι 2ο μένουν 5 και από 2ο μέχρι 3ο μένουν 20..και σε ρωτήσω: πόσοι μένουν στο 2ο ...τι θα απαντήσεις; 5 ή 20; Όπως διαβάζω τη λίστα οι 10 μένουν στο Ισόγειο, οι 5 στο πρώτο και οι 20 στο δεύτερο...Στο 3ο δεν μπορεί να μείνει κανείς (αφού δεν έχεις ένδειξη έστω και μηδενική) Θες να το διαβάσω αλλιώς; Οι δέκα μένουν στο πρώτο, οι 5 στο δεύτερο και οι 20 στο τρίτο..Και πόσοι μένουν στο ισόγειο; Ουδείς; Το έπιασες το λάθος σου; Επιπλέον το πάνω όριο στην περιοχή π.χ. 2 λεπτά με 3 λεπτά πρέπει να είναι εντός γιατί αλλιώς κόβεις δεκαδικά και στις χρεώσεις δεν γίνεται...δηλαδή αν κάποιος μιλήσει 3.5 ώρες και έχει χρέωση ανά ώρα θα γράψει 4 ώρες και όχι 3. Εσύ θα το έβαζες όμως μεταξύ 3 και 4 (Αλλά όχι 4). Αν πάλι μίλαγε κάποιος 4 ώρες θα το έβαζες μεταξύ 4 και 5, άρα σε άλλη κατηγορία. Όμως και το 3.5 και το 4 χρεώνονται το ίδιο! (το 3.5 ώρες είναι στο άρτιο 4)
Moderators Kercyn Δημοσ. 28 Δεκεμβρίου 2015 Moderators Δημοσ. 28 Δεκεμβρίου 2015 Οι όροφοι είναι διακριτά μεγέθη. Δε γίνεται κάποιος να μένει ανάμεσα σε 2 ορόφους. 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα