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

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

Δημοσ.

Γεια! 

Είναι μια άσκηση που ζητάει να φτιαχτεί πρόγραμμα που να διαβάζει έναν ακέραιο και να εκτυπώνει τον αριθμό των μπιτς 1. πχ για το 30 (0000000000000000011110) εκτυπώνει 4. 

Ο καθηγητής δεν μας έχει δώσει κάποια θεωρία για αυτό ή κάποια υπόδειξη και στο βιβλίο δεν βρίσκω κάτι που να βοηθάει, οπότε δεν ξέρω πώς να ξεκινήσω. Μπορεί κανείς να μου δώσει μια υπόδειξη?? Ευχαριστώ!

Δημοσ.

Η όχι και τόσο αποδοτική αλλά πιο απλοϊκή και εύκολη μέθοδος είναι να παίρνεις τον αριθμό και να τον μετατρέπεις σε δυαδικό σύστημα όπως έκανες στο 30. Θα χρησιμοποιήσεις ένα string για να αποθηκεύεις το κάθε bit. Έπειτα διατρέχεις το string και μετράς πόσοι χαρακτήρες είναι '1'.

 

Αν η άσκηση δεν έχει επόμενο μέρος και σε ενδιαφέρει απλά ο αριθμός των άσσων, τότε δεν χρειάζεσαι καν το string και μπορείς να μετράς τους άσσους κατευθείαν.

Δημοσ.

Γεια! 

Είναι μια άσκηση που ζητάει να φτιαχτεί πρόγραμμα που να διαβάζει έναν ακέραιο και να εκτυπώνει τον αριθμό των μπιτς 1. πχ για το 30 (0000000000000000011110) εκτυπώνει 4. 

Ο καθηγητής δεν μας έχει δώσει κάποια θεωρία για αυτό ή κάποια υπόδειξη και στο βιβλίο δεν βρίσκω κάτι που να βοηθάει, οπότε δεν ξέρω πώς να ξεκινήσω. Μπορεί κανείς να μου δώσει μια υπόδειξη?? Ευχαριστώ!

Εχει σημασία η θεση με στην οποία θα μπουν οι άσσοι

 

Η λυση ειναι οι διαδοχικές διαιρέσεις του ακέραιου με το δυο, και όπου προκύπτει υπόλοιπο 1 είναι και η θέση του bit μέσα στο bite

 

 

 

 

 

Η όχι και τόσο αποδοτική αλλά πιο απλοϊκή και εύκολη μέθοδος είναι να παίρνεις τον αριθμό και να τον μετατρέπεις σε δυαδικό σύστημα όπως έκανες στο 30. Θα χρησιμοποιήσεις ένα string για να αποθηκεύεις το κάθε bit. Έπειτα διατρέχεις το string και μετράς πόσοι χαρακτήρες είναι '1'.

 

Αν η άσκηση δεν έχει επόμενο μέρος και σε ενδιαφέρει απλά ο αριθμός των άσσων, τότε δεν χρειάζεσαι καν το string και μπορείς να μετράς τους άσσους κατευθείαν.

Της λες το αντίθετο ακριβώς απο αυτο που ρωτάει, τον δυαδικό αριθμό δεν τον γνωρίζει, αυτός είναι το ζητούμενο.

 

  • Like 1
Δημοσ.

Της λες το αντίθετο ακριβώς απο αυτο που ρωτάει, τον δυαδικό αριθμό δεν τον γνωρίζει, αυτός είναι το ζητούμενο.

Γιατί της είπα το αντίθετο ? Της είπα να μετατρέψει σε δυαδικό τον αριθμό που της δίνουν.

Δημοσ.

Γιατί της είπα το αντίθετο ? Της είπα να μετατρέψει σε δυαδικό τον αριθμό που της δίνουν.

 

οκ μετέτρεψε μου λοιπόν και έμενα με το σύστημα που λες το 344 δε δυαδικό

Δημοσ.

Εχει σημασία η θεση με στην οποία θα μπουν οι άσσοι

 

Δε νομίζω ότι η άσκηση λέει μόνο μετατροπή. Λέει πόσοι άσσοι υπάρχουν στον δυαδικό αριθμό, δηλαδή μετά τη μετατροπή (η οποία γίνεται με τον τρόπο που λες) να μετρήσει πόσα '1' υπάρχουν, όχι ότι έχει κάποια φυσική σημασία αλλά λογικά επειδή είναι άσκηση θέλει να το εξετάσει και αυτό. Τουλάχιστον αυτό καταλαβαίνω εγώ από το 1ο post, αφού λέει ότι για το 30 που είναι το (11110)2 εκτυπώνει 4, δηλαδή ότι περιέχει 4 άσσους.

Δημοσ.

Μπορείς να το κάνεις όπως λέει ο ημίθεος.

 

Μπορείς να το κάνεις με διαίρεση και τον τελεστή % (modulo). Αν ακέραιος Χ τότε η παράσταση Χ % 2 == 1 ισχύει αν και μόνο αν ο Χ είναι μονός. Αλλά επίσης ο Χ είναι μονός αν και μόνο αν το τελευταίο του bit είναι άσσος. Διαιρώντας το Χ με 2 τι συμβαίνει; Βάλε ένα Χ, δες το στο δυαδικό, διαίρεσέ το με 2, δες το αποτέλεσμα στο δυαδικό. Θα καταλάβεις που πάει το πράγμα.

 

Μπορείς ακόμα να το κάνεις με bitwise τελεστές >> (που θα κάνει την ίδια δουλειά με τη διαίρεση έτσι όπως θα χρησιμοποιηθεί) και & (που θα κάνει την ίδια δουλειά με το modulo επίσης).

 

Υπάρχουν και άλλες παραλλαγές πάνω σ' αυτές τις τεχνικές που θα δώσουν το αποτέλεσμα αλλά να μη το κουράσουμε.

 

Ανάλογα με το τι από αυτά έχετε διδαχτεί λογικά προκύπτει και η λύση που περιμένει να δει ο καθηγητής. Αλλά αυτό δε χρειάζεται να σε δεσμεύει, κάντο με όποιο τρόπο θες (και με πολλούς τρόπους αν θες, καλό στον εαυτό σου θα κάνεις).

  • Like 1

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

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

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

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

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

Σύνδεση

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

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