Re: Hellenico
Δημοσιεύτηκε: Δευ Ιουν 15, 2020 11:50 pm
Οκ! Το βρήκα ( char x; ... cin>> x;)
Καλώς όρισες στο forum και συγχαρητήρια για την επιμονή σου! Πράγματι πολύ σωστά το έκανες.
Η λογική σου είναι σωστή και με μικρές αλλαγές έκανα τον κώδικά σου να περάσει. Όμως ομολογώ... ότι δεν έχω ιδέα τι μαγικά κάνεις!Marilenatsiop έγραψε: ↑Κυρ Ιούλ 05, 2020 11:47 pm ΠΡΟΒΛΗΜΑ 3 , Ενότητα 1.1 Hellenico
Ο κώδικάς μου βγάζει σωστό αποτέλεσμα σε δικά μου test cases αλλά στο hellenico τα βγάζει όλα λάθος.Θα μπορούσα να έχω κάποια βοήθεια ;;;
- Spoiler: show
Κηπουρίδης έγραψε: ↑Δευ Ιούλ 06, 2020 12:17 amΗ λογική σου είναι σωστή και με μικρές αλλαγές έκανα τον κώδικά σου να περάσει. Όμως ομολογώ... ότι δεν έχω ιδέα τι μαγικά κάνεις!Marilenatsiop έγραψε: ↑Κυρ Ιούλ 05, 2020 11:47 pm ΠΡΟΒΛΗΜΑ 3 , Ενότητα 1.1 Hellenico
Ο κώδικάς μου βγάζει σωστό αποτέλεσμα σε δικά μου test cases αλλά στο hellenico τα βγάζει όλα λάθος.Θα μπορούσα να έχω κάποια βοήθεια ;;;
- Spoiler: show
Το λαθάκι σου είναι ότι υποθέτεις ότι οι μεταβλητές σου είναι αρχικοποιημένες σε 0 (πχ δες τη μεταβλητή T, που της κάνεις +=, ενώ δεν ξέρεις τι τιμή είχε αρχικά). Κάποια συστήματα (όπως ο υπολογιστής σου) αρχικοποιούν τις μεταβλητές σε 0 ούτως ή άλλως, και κάποια άλλα όχι. Ο δικός μου υπολογιστής και το hellenico για παράδειγμα δε τις αρχικοποιούσαν σε 0.
Προφανώς χρειάζεται να διαβάσεις από / γράψεις σε αρχείο, και είσαι έτοιμη!
Γενικά είναι ιδιαίτερα τυχαίο το τι χρειάζεται να αρχικοποιήσεις. Μπορεί τώρα να το τρέξεις σε κάποιο ακόμα μηχάνημα και να χρειάζεται αρχικοποίηση και το Τ. Οπότε συνήθισε να τα αρχικοποιείς όλα!Marilenatsiop έγραψε: ↑Δευ Ιούλ 06, 2020 5:54 pmΚηπουρίδης έγραψε: ↑Δευ Ιούλ 06, 2020 12:17 amΗ λογική σου είναι σωστή και με μικρές αλλαγές έκανα τον κώδικά σου να περάσει. Όμως ομολογώ... ότι δεν έχω ιδέα τι μαγικά κάνεις!Marilenatsiop έγραψε: ↑Κυρ Ιούλ 05, 2020 11:47 pm ΠΡΟΒΛΗΜΑ 3 , Ενότητα 1.1 Hellenico
Ο κώδικάς μου βγάζει σωστό αποτέλεσμα σε δικά μου test cases αλλά στο hellenico τα βγάζει όλα λάθος.Θα μπορούσα να έχω κάποια βοήθεια ;;;
- Spoiler: show
Το λαθάκι σου είναι ότι υποθέτεις ότι οι μεταβλητές σου είναι αρχικοποιημένες σε 0 (πχ δες τη μεταβλητή T, που της κάνεις +=, ενώ δεν ξέρεις τι τιμή είχε αρχικά). Κάποια συστήματα (όπως ο υπολογιστής σου) αρχικοποιούν τις μεταβλητές σε 0 ούτως ή άλλως, και κάποια άλλα όχι. Ο δικός μου υπολογιστής και το hellenico για παράδειγμα δε τις αρχικοποιούσαν σε 0.
Προφανώς χρειάζεται να διαβάσεις από / γράψεις σε αρχείο, και είσαι έτοιμη!
Ευχαριστώ πολύ για την βοήθεια !!!
Δοκιμάζοντας βρήκα οτι χρειάζεται να αρχικοποιήσω μόνο το time και όχι το Τ ( με int Τ; περναει όλα τα test cases ).....;;;
Συνεχίζω στην ενότητα 1.2....!!!!
ΕΥΧΑΡΙΣΤΩ
Αρκεί να αναρωτηθεις τι διάσταση εχει ο πινακας που δημιουργήσες στην 2η γραμμη του παραπανω αποσπασματος κωδικα...Κώδικας: Επιλογή όλων
freopen("elevator.out","w",stdout); int n,a,wi[n]; cin>>n;
Καλησπέρα Δημήτρη._Dimitris_ έγραψε: ↑Τετ Ιούλ 22, 2020 9:59 pm Σε ευχαριστώ για την απάντησή σου switch. Νομίζω πως έχει γιατί έχω μόνο το πρώτο από τα 10 testcases σωστά και δεν ξέρω πού έχω κάνει λάθος. Μπορείς να δεις τον κώδικά μου στο spoiler που έχω στο προηγούμενό μου μήνυμα. Και μια εξήγηση... Η μεταβλητή tempfloat ήταν αρχικά να είναι ενα temporary float που μετά αποφάσισα να κάνω long double οπότε θα έπρεπε να την λενε templdouble. Θα εκτιμούσα την περαιτέρω βοήθειά σου στο πρόβλημά μου...
Φυσικά, εννοείται πως θα σας εξηγήσω όσο πιο αναλυτικά μπορώ! Ευχαριστώ, θα μου χρειαστεί και στο μέλλον αυτή η συμβουλή! Λοιπόν, στον παραπάνω κώδικα αποθηκεύω κάθε ζεύγος (ταχύτητα - χρόνος) σε ενα vecror το οποίο μετα sortαρω. Παίρνω τον πρώτο χρόνο και τον αποθηκεύω στην time. Μετά η time παίρνει συνέχεια κι άλλες τιμές, το κάθε στοιχείο (χρόνο) πολλαπλασιαμένο με την ταχύτητά του και διαιρεμένο με το bandwidth το οποίο έχει ως τιμή το άθροισμα όλων των ταχυτήτων, όλων των αρχείων μας. Τέλος, το time στρογγυλοποιείται στην πλησιέστερη μονάδα (ακέραιος). Θεωρώ ότι με 2 αρχεία (όπως το παράδειγμα που δίνουν) το πρόγραμμα λειτουργεί σωστά. Με 3 αρχεία και πάνω μάλλον όχι. Ίσως, απ' ό,τι κατάλαβα και εγω το λάθος να είναι ότι παίρνω ξεχωριστά κάθε ταχύτητα και κάνω τις πράξεις μία φορά. Τη δεύτερη φορά που (μάλλον) πρέπει να κατανεμηθεί ξανά το bandwidth κάτι δεν γίνεται σωστά. Μήπως θα μπορούσατε να με βοηθήσετε στο πώς να ξανακατανείμω το bandwidth (δηλαδή το λάθος στον κώδικα); Σας ευχαριστώ πολύ...Κηπουρίδης έγραψε: ↑Τετ Ιούλ 22, 2020 11:06 pmΚαλησπέρα Δημήτρη._Dimitris_ έγραψε: ↑Τετ Ιούλ 22, 2020 9:59 pm Σε ευχαριστώ για την απάντησή σου switch. Νομίζω πως έχει γιατί έχω μόνο το πρώτο από τα 10 testcases σωστά και δεν ξέρω πού έχω κάνει λάθος. Μπορείς να δεις τον κώδικά μου στο spoiler που έχω στο προηγούμενό μου μήνυμα. Και μια εξήγηση... Η μεταβλητή tempfloat ήταν αρχικά να είναι ενα temporary float που μετά αποφάσισα να κάνω long double οπότε θα έπρεπε να την λενε templdouble. Θα εκτιμούσα την περαιτέρω βοήθειά σου στο πρόβλημά μου...
Θα σου πω μια συμβουλή για να είναι πιο πιθανό να παίρνεις απαντήσεις που θα σε βοηθάνε. Συνήθως βοηθάει να εξηγήσεις σε φυσική γλώσσα το ΤΙ προσπάθησες να κάνεις, και μετά ο κώδικας να εξηγεί το ΠΩΣ το έκανες. Για παράδειγμα το ΤΙ κάνεις θα μπορούσε να ήταν ότι επιλέγεις την εργασία που τελειώνει νωρίτερα, και μοιράζεις την ταχύτητά της σε όλες τις άλλες εργασίες ισομερώς. Κάποιος άλλος, στο ΤΙ κάνει θα μπορούσε να επιλέγει την εργασία που τελειώνει νωρίτερα και να αναθέτει την ταχύτητά της σε μία τυχαία εργασία. Και βεβαίως υπάρχουν πάρα πολλοί τρόποι ακόμα.
Αφού βεβαιωθείς ότι το ΤΙ θέλεις να κάνεις είναι σωστό (και το εξηγήσεις και σε εμάς), τότε μόνο έχει νόημα ο κώδικας, για να δούμε ΠΩΣ ακριβώς πετυχαίνεις αυτό που ήθελες. Διότι εμείς που δε γνωρίζουμε τη σκέψη σου (το ΤΙ) δυσκολευόμαστε πάρα πολύ να το αντιληφθούμε μέσω του κώδικά σου.
Το πώς ξεχωρίζεις το ΤΙ απ' το ΠΩΣ είναι εύκολο. Το ΤΙ μπορείς να το εξηγήσεις και σε άνθρωπο που δεν έχει την παραμικρή ιδέα από προγραμματισμό/γλώσσες προγραμματισμού κλπ.
Περιμένουμε λοιπόν την επεξήγησή σου για το τι θες να πετύχεις, και θα προσπαθήσουμε με χαρά να σε βοηθήσουμε!
Καλή συνέχεια παλικάρι μου.
Ταξινομείς με το bandwidth (σε αύξουσα σειρά). Αυτό ήθελες να κάνεις;_Dimitris_ έγραψε: ↑Τετ Ιούλ 22, 2020 11:24 pmΛοιπόν, στον παραπάνω κώδικα αποθηκεύω κάθε ζεύγος (ταχύτητα - χρόνος) σε ενα vecror το οποίο μετα sortαρω.
Παίρνεις έναν τυχαίο χρόνο και τον βάζεις στην time (πιο συγκεκριμένα παίρνεις τον τελευταίο χρόνο του αρχείου εισόδου αγνοώντας την ταξινόμηση που έκανες). Θέλει διόρθωση
Το κάθε στοιχείο; Έχεις βάλει loop for αλλά πάντα διαβάζεις ένα στοιχείο του πίνακα. Δες τη σύνταξη του vector για βοήθεια._Dimitris_ έγραψε: ↑Τετ Ιούλ 22, 2020 11:24 pm Μετά η time παίρνει συνέχεια κι άλλες τιμές, το κάθε στοιχείο (χρόνο)...
Όχι όχι, η ταξινόμηση γίνεται με βάση την ταχύτητα, το πρώτο στοιχείο (στο παράδειγμα το 3 και το 2). Επίσης παίρνω πάντα τον πρώτο χρόνο, οχι έναν τυχαίο αλλά τώρα που το ξανασκεφτομαι επειδή θέλω να πάρω τον ελάχιστο χρόνο, πρέπει να κάνω την ταξινόμηση με βάση το δεύτερο στοιχείο, σωστα δεν λεω;switch έγραψε: ↑Πέμ Ιούλ 23, 2020 12:45 am Η βασική σου ιδέα είναι γενικά καλή. Η υλοποίηση θέλει δουλίτσα και ίσως κάποιες λεπτομέρειες ακόμα. Είσαι σε καλό δρόμο όμως.
Ταξινομείς με το bandwidth (σε αύξουσα σειρά). Αυτό ήθελες να κάνεις;_Dimitris_ έγραψε: ↑Τετ Ιούλ 22, 2020 11:24 pmΛοιπόν, στον παραπάνω κώδικα αποθηκεύω κάθε ζεύγος (ταχύτητα - χρόνος) σε ενα vecror το οποίο μετα sortαρω.
Παίρνεις έναν τυχαίο χρόνο και τον βάζεις στην time (πιο συγκεκριμένα παίρνεις τον τελευταίο χρόνο του αρχείου εισόδου αγνοώντας την ταξινόμηση που έκανες). Θέλει διόρθωση
Το κάθε στοιχείο; Έχεις βάλει loop for αλλά πάντα διαβάζεις ένα στοιχείο του πίνακα. Δες τη σύνταξη του vector για βοήθεια._Dimitris_ έγραψε: ↑Τετ Ιούλ 22, 2020 11:24 pm Μετά η time παίρνει συνέχεια κι άλλες τιμές, το κάθε στοιχείο (χρόνο)...
γιατί; Φοβάσαι μήπως τον χάσεις; Ενω θα τον υπολογίσεις και αυτόν με τον τύπο σου._Dimitris_ έγραψε: ↑Πέμ Ιούλ 23, 2020 1:18 am Όχι όχι, η ταξινόμηση γίνεται με βάση την ταχύτητα, το πρώτο στοιχείο (στο παράδειγμα το 3 και το 2). Επίσης παίρνω πάντα τον πρώτο χρόνο, οχι έναν τυχαίο αλλά τώρα που το ξανασκεφτομαι επειδή θέλω να πάρω τον ελάχιστο χρόνο,
δεν θα σου απαντήσω για την ταξινόμηση ακόμα. Θα σε αφήσω να το βρεις μόνος σου_Dimitris_ έγραψε: ↑Πέμ Ιούλ 23, 2020 1:18 amπρέπει να κάνω την ταξινόμηση με βάση το δεύτερο στοιχείο, σωστα δεν λεω;
ξανά: γιατί;_Dimitris_ έγραψε: ↑Πέμ Ιούλ 23, 2020 1:18 amΤο loop (for) τρέχει όσα είναι τα στοιχεία - 1, το αρχικό γιατί τον μικρότερο χρόνο δεν θέλουμε να τον πειράξουμε.
Αυτό πρέπει να το σκεφτείς καλά. Ο τύπος σου είναι σωστός. Τι μέγεθος μας δίνει το χρονος*ταχυτητα;_Dimitris_ έγραψε: ↑Πέμ Ιούλ 23, 2020 1:18 am Επομένως κάνω την πράξη ΧΡΟΝΟΣ*ΤΑΧΥΤΗΤΑ/BANDWIDTH στο κάθε στοιχείο...
Κώδικας: Επιλογή όλων
sort...
time=X;
Κώδικας: Επιλογή όλων
for...
tempfloat=files.second;
Κώδικας: Επιλογή όλων
tempfloat=(files.second-time)*files.first/bandwidth;
Καλησπέρα. Ο ΧΡΟΝΟΣ*ΤΑΧΥΤΗΤΑ είναι integer αλλά όταν διαιρεθεί με bandwidth γίνεται double.switch έγραψε: ↑Πέμ Ιούλ 23, 2020 4:58 pmγιατί; Φοβάσαι μήπως τον χάσεις; Ενω θα τον υπολογίσεις και αυτόν με τον τύπο σου._Dimitris_ έγραψε: ↑Πέμ Ιούλ 23, 2020 1:18 am Όχι όχι, η ταξινόμηση γίνεται με βάση την ταχύτητα, το πρώτο στοιχείο (στο παράδειγμα το 3 και το 2). Επίσης παίρνω πάντα τον πρώτο χρόνο, οχι έναν τυχαίο αλλά τώρα που το ξανασκεφτομαι επειδή θέλω να πάρω τον ελάχιστο χρόνο,
δεν θα σου απαντήσω για την ταξινόμηση ακόμα. Θα σε αφήσω να το βρεις μόνος σου_Dimitris_ έγραψε: ↑Πέμ Ιούλ 23, 2020 1:18 amπρέπει να κάνω την ταξινόμηση με βάση το δεύτερο στοιχείο, σωστα δεν λεω;
ξανά: γιατί;_Dimitris_ έγραψε: ↑Πέμ Ιούλ 23, 2020 1:18 amΤο loop (for) τρέχει όσα είναι τα στοιχεία - 1, το αρχικό γιατί τον μικρότερο χρόνο δεν θέλουμε να τον πειράξουμε.
Αυτό πρέπει να το σκεφτείς καλά. Ο τύπος σου είναι σωστός. Τι μέγεθος μας δίνει το χρονος*ταχυτητα;_Dimitris_ έγραψε: ↑Πέμ Ιούλ 23, 2020 1:18 am Επομένως κάνω την πράξη ΧΡΟΝΟΣ*ΤΑΧΥΤΗΤΑ/BANDWIDTH στο κάθε στοιχείο...
Μερικές παρατηρήσεις στον κώδικα σου:εδω είναι ο τυχαίος χρόνος που παίρνεις (ότι ήταν αποθηκευμένο στην Χ, αρα τον τελευταίο χρόνο που διάβασες από το αρχείο). Η γραμμή αυτή όπως καταλαβαίνεις είναι άσχετη με την ταξινόμηση,Κώδικας: Επιλογή όλων
sort... time=X;
Τι θέλεις να κάνεις εδω; Μια περιττή γραμμή κώδικα;Κώδικας: Επιλογή όλων
for... tempfloat=files.second;
που υπάρχει αναφορά στη θέση i του πίνακα;Κώδικας: Επιλογή όλων
tempfloat=(files.second-time)*files.first/bandwidth;
_Dimitris_ έγραψε: ↑Πέμ Ιούλ 23, 2020 7:05 pmΚαλησπέρα. Ο ΧΡΟΝΟΣ*ΤΑΧΥΤΗΤΑ είναι integer αλλά όταν διαιρεθεί με bandwidth γίνεται double.switch έγραψε: ↑Πέμ Ιούλ 23, 2020 4:58 pmγιατί; Φοβάσαι μήπως τον χάσεις; Ενω θα τον υπολογίσεις και αυτόν με τον τύπο σου._Dimitris_ έγραψε: ↑Πέμ Ιούλ 23, 2020 1:18 am Όχι όχι, η ταξινόμηση γίνεται με βάση την ταχύτητα, το πρώτο στοιχείο (στο παράδειγμα το 3 και το 2). Επίσης παίρνω πάντα τον πρώτο χρόνο, οχι έναν τυχαίο αλλά τώρα που το ξανασκεφτομαι επειδή θέλω να πάρω τον ελάχιστο χρόνο,
δεν θα σου απαντήσω για την ταξινόμηση ακόμα. Θα σε αφήσω να το βρεις μόνος σου_Dimitris_ έγραψε: ↑Πέμ Ιούλ 23, 2020 1:18 amπρέπει να κάνω την ταξινόμηση με βάση το δεύτερο στοιχείο, σωστα δεν λεω;
ξανά: γιατί;_Dimitris_ έγραψε: ↑Πέμ Ιούλ 23, 2020 1:18 amΤο loop (for) τρέχει όσα είναι τα στοιχεία - 1, το αρχικό γιατί τον μικρότερο χρόνο δεν θέλουμε να τον πειράξουμε.
Αυτό πρέπει να το σκεφτείς καλά. Ο τύπος σου είναι σωστός. Τι μέγεθος μας δίνει το χρονος*ταχυτητα;_Dimitris_ έγραψε: ↑Πέμ Ιούλ 23, 2020 1:18 am Επομένως κάνω την πράξη ΧΡΟΝΟΣ*ΤΑΧΥΤΗΤΑ/BANDWIDTH στο κάθε στοιχείο...
Μερικές παρατηρήσεις στον κώδικα σου:εδω είναι ο τυχαίος χρόνος που παίρνεις (ότι ήταν αποθηκευμένο στην Χ, αρα τον τελευταίο χρόνο που διάβασες από το αρχείο). Η γραμμή αυτή όπως καταλαβαίνεις είναι άσχετη με την ταξινόμηση,Κώδικας: Επιλογή όλων
sort... time=X;
Τι θέλεις να κάνεις εδω; Μια περιττή γραμμή κώδικα;Κώδικας: Επιλογή όλων
for... tempfloat=files.second;
που υπάρχει αναφορά στη θέση i του πίνακα;Κώδικας: Επιλογή όλων
tempfloat=(files.second-time)*files.first/bandwidth;
Όπως βλέπω στο παράδειγμα, το 22 (ο ελάχιστος χρόνος) δεν παθαίνει κάποια αλλαγή. Ο άλλος παθαίνει με αυτήν την πράξη και από 57 γίνεται 21 (22+21=43). Με τον παραπάνω κώδικα, το output σε αυτό το testcase είναι όντως 43. Έχεις/Έχετε δίκιο με το time=X. Θα ήταν καλύτερο το time=files[0].second αφού γίνεται η ταξινόμηση με βάση τον χρόνο (τότε το time θα έχει τον ελάχιστο χρόνο, το 22 στο παράδειγμα). Όσο για την περιττή γραμμή κώδικα, ναι όντως είναι άκυρη. Αναφορά στο i γίνεται μετά από κάθε φορά που λέει files, μέσα σε αγκύλες (στη θέση i του vector). Απλά δεν μου το παίρνει το forum εξαιτίας των αγκυλών.
Ο κώδικας διορθωμένος μέχρι στιγμής (πάλι μόνο το 1ο από τα 10 testcases του hellenico είναι σωστό)
- Spoiler: show