ΙωάνναΚακ Δημοσ. 21 Δεκεμβρίου 2017 Δημοσ. 21 Δεκεμβρίου 2017 Καλημέρα! Καλώς σας βρήκα! Έχω μια άσκηση στην java κατά την οποία πρέπει να δίνω εγώ αριθμούς και να μετατρέπονται στο δυαδικό σύστημα και μετά να εμφανίζονται στην οθόνη με την αναπαραστασή τους ως άθροισμα δυνάμενων του 2. Και μας είπαν να χρησιμοποιήσουμε τις δομές STACK και Queue για ουρά και στοίβα. Που έχω κολλήσει εγώ τώρα... Παίρνω περιπτώσεις αριθμών πχ δίνω ακέραιο και με τον κώδικα που έφτιαξα μετατρέπεται στον αντίστοιχο δυαδικό και χρησιμοποιώ την stack (με πήρε αρκετή ώρα να το βγάλω βέβαια...) Έχω θέμα με την περίπτωση του δεκαδικού αριθμού.Δεν ξέρω πώς να τον χειριστώ. Τι εννοώ: πχ Δίνω τον αριθμό 53,86 το ακέραιο μέρος 53 θα το φτιάξω με την stack. Καταλαβαίνω(νομίζω δηλαδή) πώς στο δεκαδικό κομμάτι 0,86 πρέπει να χρησιμοποιήσω την queue και συγκεκριμένα την ώθηση αλλά δεν ξέρω πώς να γράψω τον κώδικα για το πώς θα υπολογίζεται ξεχωριστά. Κάποια ιδέα ίσως?Πραγματικά, από χθές έχω σκάσει και δεν μπορώ να σκεφτώ κάτι για να πάρω μπροστά. Σας ευχαριστώ για τον χρόνο που θα διαθέσετε
GReaperEx Δημοσ. 21 Δεκεμβρίου 2017 Δημοσ. 21 Δεκεμβρίου 2017 Το κλασματικό μέρος είναι λίγο περίπλοκο, επειδή υπάρχουν κάποιοι αριθμοί που επαναλαμβάνονται όταν τους μετατρέψεις σε δυαδικό, πχ: 5,1 = 101,000110011001100110011....... Το κόλπο είναι να πολλαπλασιάσεις το κλασματικό μέρος με 2, και το ακέραιο μέρος του αποτελέσματος θα είναι το επόμενο δυαδικό ψηφίο. Αυτό το επαναλαμβάνεις μέχρι το αποτέλεσμα να μηδενιστεί τελείως ή μέχρι να φτάσεις ένα άνω όριο ψηφίων.
ΙωάνναΚακ Δημοσ. 21 Δεκεμβρίου 2017 Μέλος Δημοσ. 21 Δεκεμβρίου 2017 Το κλασματικό μέρος είναι λίγο περίπλοκο, επειδή υπάρχουν κάποιοι αριθμοί που επαναλαμβάνονται όταν τους μετατρέψεις σε δυαδικό, πχ: 5,1 = 101,000110011001100110011....... Το κόλπο είναι να πολλαπλασιάσεις το κλασματικό μέρος με 2, και το ακέραιο μέρος του αποτελέσματος θα είναι το επόμενο δυαδικό ψηφίο. Αυτό το επαναλαμβάνεις μέχρι το αποτέλεσμα να μηδενιστεί τελείως ή μέχρι να φτάσεις ένα άνω όριο ψηφίων. Καταρχάς σε ευχαριστώ για την απάντηση. Γνωρίζω την διαδικασία μετατροπής του δεκαδικού κομματιού. Αυτό που ρωτάω και ίσως δεν το διατύπωσα και σωστά πριν (λάθος μου ) είναι το εξής: Έστω ότι ο αριθμός είναι ο number (ονομασία) το δεκαδικό μέρος τοu number πως το γράφω για να το υπολογίσω στον κώδικα? εκεί έχω κολλήσει..(παίζει να είναι κάτι απλό αλλά δεν μπορώ να το σκεφτώ.) στο παραδειγμά σου με ποια εντολή θα εμφανιζες το 101,0001 ως άθροισμα δυνάμεων του 2?
GReaperEx Δημοσ. 21 Δεκεμβρίου 2017 Δημοσ. 21 Δεκεμβρίου 2017 Α, σόρρυ, άλλο κατάλαβα. Κοίτα, αν δεις την δυαδική αναπαράσταση του αριθμού, κάθε ψηφίο είναι και μία δύναμη του 2. Τα ψηφία μετά την υποδιαστολή είναι αρνητικές δυνάμεις, πχ το παράδειγμα μου θα ήταν: 1*pow(2, 2) + 0*pow(2, 1) + 1*pow(2, 0) + 0*pow(2, -1) + 0*pow(2, -2) + 0*pow(2, -3) + 1*pow(2, -4) + 1*pow(2, -5) + ... δλδ 4 + 1 + 0.0625 + 0.03125 + ...
ΙωάνναΚακ Δημοσ. 21 Δεκεμβρίου 2017 Μέλος Δημοσ. 21 Δεκεμβρίου 2017 Α, σόρρυ, άλλο κατάλαβα. Κοίτα, αν δεις την δυαδική αναπαράσταση του αριθμού, κάθε ψηφίο είναι και μία δύναμη του 2. Τα ψηφία μετά την υποδιαστολή είναι αρνητικές δυνάμεις, πχ το παράδειγμα μου θα ήταν: 1*pow(2, 2) + 0*pow(2, 1) + 1*pow(2, 0) + 0*pow(2, -1) + 0*pow(2, -2) + 0*pow(2, -3) + 1*pow(2, -4) + 1*pow(2, -5) + ... δλδ 4 + 1 + 0.0625 + 0.03125 + ... άρα μέσα στην println πρέπει να βάλω κάπως και την math.pow? χμμ..Θα το έχω στα υπόψιν
defacer Δημοσ. 21 Δεκεμβρίου 2017 Δημοσ. 21 Δεκεμβρίου 2017 Ούτε πρέπει ούτε θα μπορέσεις να το κάνεις αυτό. Έχεις καταφέρει να τυπώσεις αρχικά κάποιον ακέραιο σε δυαδικό; Γιατί νόμιζα πως είπες ναι αλλά μετά από τα τελευταία άρχισα να έχω αμφιβολίες. Και αν δεν το έχεις κάνει ήδη άσε προς το παρόν τα δεκαδικά στην άκρη.
ΙωάνναΚακ Δημοσ. 21 Δεκεμβρίου 2017 Μέλος Δημοσ. 21 Δεκεμβρίου 2017 Ούτε πρέπει ούτε θα μπορέσεις να το κάνεις αυτό. Έχεις καταφέρει να τυπώσεις αρχικά κάποιον ακέραιο σε δυαδικό; Γιατί νόμιζα πως είπες ναι αλλά μετά από τα τελευταία άρχισα να έχω αμφιβολίες. Και αν δεν το έχεις κάνει ήδη άσε προς το παρόν τα δεκαδικά στην άκρη. Το ακέραιο μέρος ναι το έχω κάνει και δουλεύει (Τουλάχιστον για μένα). Μπορεί να μην είναι και ο τελειότερος κώδικας αλλά τώρα μαθαίνω και πειραματιζομαι. Ως προς τι οι αμφιβολίες? Κατάλαβα την χρήση του math.pow (πάω ψάχνοντας) και ότι δεν γίνεται να το βάλω μέσα σε println. Σύγχυση της στιγμής! Ούτε πρέπει ούτε θα μπορέσεις να το κάνεις αυτό. Έχεις καταφέρει να τυπώσεις αρχικά κάποιον ακέραιο σε δυαδικό; Γιατί νόμιζα πως είπες ναι αλλά μετά από τα τελευταία άρχισα να έχω αμφιβολίες. Και αν δεν το έχεις κάνει ήδη άσε προς το παρόν τα δεκαδικά στην άκρη. Το ακέραιο μέρος ναι το έχω κάνει και δουλεύει (Τουλάχιστον για μένα). Μπορεί να μην είναι και ο τελειότερος κώδικας αλλά τώρα μαθαίνω και πειραματιζομαι. Ως προς τι οι αμφιβολίες? Κατάλαβα την χρήση του math.pow (πάω ψάχνοντας) και ότι δεν γίνεται να το βάλω μέσα σε println. Σύγχυση της στιγμής!
ΙωάνναΚακ Δημοσ. 29 Δεκεμβρίου 2017 Μέλος Δημοσ. 29 Δεκεμβρίου 2017 Επέστρεψα να σας ενημερώσω ότι κατάφερα να λύσω το θεματάκι που είχα έστω και με την μικρή αλλά σημαντική βοήθεια του GReaperEx!! Μία άλλη απορία τώρα! Επειδή μαθαίνω τώρα την java έχω μια απορία σχετικά με την αναζήτηση σε πίνακα με χρήση ουράς κ στοίβας! Μας έκαναν ενα παράδειγμα με απλή ταξινόμηση σε πίνακα και το κατάλαβα,με την έννοια ότι το περιεχόμενο του πίνακα ήταν γνωστό. Μας είπε να κάνουμε προπόνηση με το εξής: Να φτιάξουμε ένα πίνακα (ότι μέγεθος θέλουμε) και να του βάλουμε μέσα τυχαίους αριθμούς.Μετά πώς γίνεται η αναζήτηση εφόσον θέλω να κομματι του πινακα να ειναι με αυξουσα ταξινόμηση και το υπόλοιπο να είναι με φθίνουσα?? Έτσι όπως το σκέφτομαι λογικά πρέπει να επιλέξω έναν απο τους τυχαίους αριθμούς που έχω βάλει και να κάνω την μοιρασιά σωστά??? Αλλά επιλέγω τον αριθμό ή την θέση του πίνακα που βρίσκεται αυτός ο αριθμός?
GReaperEx Δημοσ. 29 Δεκεμβρίου 2017 Δημοσ. 29 Δεκεμβρίου 2017 Μάθατε quicksort, σωστά? Όταν τα δεδομένα είναι τυχαίοι αριθμοί, δεν έχει σημασία ποιον αριθμό επιλέγεις. Πολλές υλοποιήσεις απλά παίρνουν το πρώτο, το μεσαίο ή το τελευταίο στοιχείο του πίνακα.
ΙωάνναΚακ Δημοσ. 29 Δεκεμβρίου 2017 Μέλος Δημοσ. 29 Δεκεμβρίου 2017 Μάθατε quicksort, σωστά? Όταν τα δεδομένα είναι τυχαίοι αριθμοί, δεν έχει σημασία ποιον αριθμό επιλέγεις. Πολλές υλοποιήσεις απλά παίρνουν το πρώτο, το μεσαίο ή το τελευταίο στοιχείο του πίνακα. Αυτά διαβάζω τώρα ναι. Απλά αναρωτιέμαι γιατί μας είπε να διαλέγει έναν τυχαίο αριθμό από αυτούς που υπάρχουν και να γίνεται η ταξινόμηση. Έτσι,όπως το λέει καταλαβαίνω ότι αν πχ ο πίνακας εχει 30 αριθμούς άλλοτε να επιλέγει τον 21ο αριθμό και να κάνει την ταξινόμηση,άλλωτε τον 6ο αριθμό κοκ
GReaperEx Δημοσ. 29 Δεκεμβρίου 2017 Δημοσ. 29 Δεκεμβρίου 2017 Ναι, κάποιες υλοποιήσεις αρχίζουν με τυχαία θέση, κυρίως για να αποφύγουν την πιθανότητα του να κάνουν συνέχεια την χειρότερη επιλογή (σε περίπτωση που ο πίνακας είναι μερικώς ή πλήρως ταξινομημένος). Δεν συνηθίζεται όμως να γίνεται έτσι επειδή ο χρόνος εκτέλεσης είναι απρόβλεπτος. 1
ΙωάνναΚακ Δημοσ. 29 Δεκεμβρίου 2017 Μέλος Δημοσ. 29 Δεκεμβρίου 2017 Ναι, κάποιες υλοποιήσεις αρχίζουν με τυχαία θέση, κυρίως για να αποφύγουν την πιθανότητα του να κάνουν συνέχεια την χειρότερη επιλογή (σε περίπτωση που ο πίνακας είναι μερικώς ή πλήρως ταξινομημένος). Δεν συνηθίζεται όμως να γίνεται έτσι επειδή ο χρόνος εκτέλεσης είναι απρόβλεπτος. Μάλιστα. Ναι, κάποιες υλοποιήσεις αρχίζουν με τυχαία θέση, κυρίως για να αποφύγουν την πιθανότητα του να κάνουν συνέχεια την χειρότερη επιλογή (σε περίπτωση που ο πίνακας είναι μερικώς ή πλήρως ταξινομημένος). Δεν συνηθίζεται όμως να γίνεται έτσι επειδή ο χρόνος εκτέλεσης είναι απρόβλεπτο εγώ επειδή μπερδεύομαι με αυτο που ζητά να κάνουμε να διαλέξουμε δηλαδή μια τυχαία θέση και να κανουμε 2 ειδών ταξινομήσεις ταυτόχρονα αν βάζοντας τους τυχαίους αριθμούς και τους κάνω μια ταξινόμηση φλου και μετά ζητήσω να την θέση ταδε έως τέλος του πινακα να είναι φθίνουσα είναι λάθος?
GReaperEx Δημοσ. 29 Δεκεμβρίου 2017 Δημοσ. 29 Δεκεμβρίου 2017 Αφού σου λέει συγκεκριμένα ότι πρέπει να είναι τυχαία η θέση, εννοείται ότι αν κάνεις κάτι άλλο θα είναι λάθος.
ΙωάνναΚακ Δημοσ. 29 Δεκεμβρίου 2017 Μέλος Δημοσ. 29 Δεκεμβρίου 2017 Αφού σου λέει συγκεκριμένα ότι πρέπει να είναι τυχαία η θέση, εννοείται ότι αν κάνεις κάτι άλλο θα είναι λάθος. Δεν μπορώ να καταλάβω πώς γίνεται να επιλέξω μια τυχαία θέση στον πίνακα.
GReaperEx Δημοσ. 29 Δεκεμβρίου 2017 Δημοσ. 29 Δεκεμβρίου 2017 Δεν μπορώ να καταλάβω πώς γίνεται να επιλέξω μια τυχαία θέση στον πίνακα. Με Math.random(), κάπως έτσι: int pivot = first + (int)(Math.random()*(last - first + 1)); Όπου τα first και last είναι οι θέσεις των πρώτου και τελευταίου αντίστοιχα στοιχείων του κομματιού του πίνακα που προσπαθείς να ταξινομήσεις.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα