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

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

Δημοσ.

Αν έχουμε ενα δυαδικό αριθμό 11010 που αντιστοιχεί στο 26 δεκαδικο πώς μπορούμε να τον αντιστρέψουμε??Μιλαω πάντα για τον προγραμματισμο c.

Πχ διαιρούμε συνέχεια το 26/2 αλλά στο αποτέλεσμα εμφανίζεται το 01011...

 

Καμιά ιδέα??

  • Απαντ. 32
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Συχνή συμμετοχή στο θέμα

Δημοσιευμένες Εικόνες

Δημοσ.

Τι εννοείς να τον αντιστρέψουμε; Δηλαδή τι αποτέλεσμα περιμένεις στο συγκεκριμένο παράδειγμα; Έχε υπόψη ότι υπάρχουν κι άλλα bits (μηδενικά) εκτός από τα 5 που δείχνεις, επομένως θα πρέπει να μας πεις και αυτά τι περιμένεις να γίνουν.

 

Θεωρητικά με το bitwise complement operator "~"

~11010=00101

Αλλά μπαίνουν και διάφορες λεπτομέρειες υλοποίησης

 

Βιάζεσαι λίγο. Δεν ισχύει αυτό, η ποσότητα σίγουρα δεν είναι μόνο 5 bits.

Δημοσ.

Όχι δεν με καταλαβες...δικό μου λάθος

Θέλω πχ το 01011 να το γράψω ανάποδα...δηλαδη 11010

 

Εχω φτιάξει να διαρεί / 2 στο δυαδικό αλλά δεν μπορώ να το εμφανίσω γιατί πρέπει να το αναποδογυρίσω...

 

 

αλλο παράδειγμα πχ το 55136 να γραφτεί 63155...(άλλο παράδειγμα τελείως αλλά μοιάζει με αυτό που θέλω να κάνω)

Δημοσ.

Βασικά πες μας τι θέλεις να πετύχεις εξαρχής και όχι πώς νομίζεις ότι είναι ο σωστός τρόπος να το πετύχεις. Τι παίζει με τη διαίρεση που λες με το 2; Δώσε κώδικα.

Δημοσ.

Καθώς υπολογίζεις τα ψηφία βάζε τα σε έναν πίνακα. Κατόπιν αντέστρεψέ τον. Εναλλακτικά μπορείς να τα αποθηκεύεις απευθείας ανάποδα στον πίνακα (δηλαδή από το τέλος προς την αρχή του) οπότε γλιτώνεις την εκ των υστέρων αντιστροφή του.

 

>
char array[MAXDIGITS] = {'\0'};
...
for (int i=MAGDIGITS-1; i > -1 && more_digits && dig = get_next_digit(num); i--)
   array[i] = dig;

i = (i < 0)? i+1 : i;
print_array( &array[i], MAXDIGITS-i );  // τσέκαρέ το μόνος σου αυτό, μπορεί να θέλει διόρθωση

Δημοσ.

Τι εννοείς να τον αντιστρέψουμε; Δηλαδή τι αποτέλεσμα περιμένεις στο συγκεκριμένο παράδειγμα; Έχε υπόψη ότι υπάρχουν κι άλλα bits (μηδενικά) εκτός από τα 5 που δείχνεις, επομένως θα πρέπει να μας πεις και αυτά τι περιμένεις να γίνουν.

 

Βιάζεσαι λίγο. Δεν ισχύει αυτό, η ποσότητα σίγουρα δεν είναι μόνο 5 bits.

E ναι, ήταν λίγο πρόχειρο.

 

Πάντως άλλο ζητάει

Μαθηματικά θες το α0*2^0+α1*2^1+α2*2^2+...αν*2^ν να γίνει α0*2^ν+α1*2^(ν-1)+...αν*2^0

Δημοσ.

Σωστός ο mig!!

Τι μλκας που είμαι...δεν το εβαλα σε πίνακα... :-( :wacko:

 

Edit:Θα επανέλθω αν δεν τα καταφέρω και θα σας πω

 

Δεν γίνεται με πίνακα γιατί δεν ξέρω το μέγεθος...νομίζω....ε??

Οριστε ενα κομμάτι του κωδικα μου...το χ ειναι η τιμή που δίνει ο χρηστης...επιλογη 1 ειναι το δυαδικο συστημα

 

> if (epilogi==1) {
	 do {
y=x%2;
x=x/2;

printf("\n\nOi times einai: %d\n", y);
} while (x=0);
			 }

 

Edit: Βασικά ετσι όπως ειναι μου εμφανίζει μόνο το πρώτο αποτέλεσμα...γιατι??

Δημοσ.

...

Δεν γίνεται με πίνακα γιατί δεν ξέρω το μέγεθος...νομίζω....ε??

Οριστε ενα κομμάτι του κωδικα μου...το χ ειναι η τιμή που δίνει ο χρηστης

>   if (epilogi==1) {
           do {
   y=x%2;
   x=x/2;

   printf("\n\nOi times einai: %d\n", y);
   } while (x=0);
                   }

 

Αν δεν έχεις μέγιστο όριο στο πλήθος των ψηφίων (MAXDIGITS στο παράδειγμα που σου έδωσα), τότε μπλέκεται το πράγμα (ούτε καν bit-array δεν μπορείς να χρησιμοποιήσεις... οπότε διπλά συνδεδεμένη λιστούλα και καλά κουράγια :lol:)

 

Edit: Βασικά ετσι όπως ειναι μου εμφανίζει μόνο το πρώτο αποτέλεσμα...γιατι??

 

>
...
} while (0 == x);

 

Βάζε αριστερά τις σταθερές όταν συγκρίνεις. Αν το είχες εξαρχής...

 

>
...
} while (0 = x);

 

θα στο είχε πιάσει ο compiler.

Δημοσ.

Σε ευχαριστώ για την απάντησή σου!

Όχι δεν έχει περιορισμό η εκφώνηση...

Ξέχασα στο while να βάλω το διάφορο ο μλκας για αυτό δεν έτρεχε...

Ωραία τώρα τρέχει κανονικά αλλά όπως είπαμε πρέπει να τα αναποδογυρίσω...πώς θα το καταφέρω αυτό??

Δημοσ.

Σου είπα, εφόσον δεν έχεις όριο στο πλήθος των ψηφίων το πρώτο που μου έρχεται στο μυαλό είναι αντί για πίνακα να χρησιμοποιήσεις μια διπλά-συνδεδεμένη λίστα. Στην εκτύπωση θα την τυπώσεις από πίσω προς τα εμπρός.

 

Ψέμματα, με στοίβα (stack) είναι πιο εύκολο. Push σε κάθε iteration, συνεχόμενα Pop στην εκτύπωση.

Δημοσ.

Edit:Βασικά δεν καταλαβα τι περιορισμό εννοείς??μπορεί να κάνω και λάθος...αλλά πρέπει να κάνω το αντίστοιχο σε οκταδικο και σε 16δικο

 

Στην εκτύπωση θα την τυπώσεις από πίσω προς τα εμπρός. Πώς θα το κάνω αυτό??

 

Ψέμματα, με στοίβα (stack) είναι πιο εύκολο. Push σε κάθε iteration, συνεχόμενα Pop στην εκτύπωση. Στοιβα δεν έχουμε κάνει αλλά δεν θέλει πίνακα και αυτό?

Δημοσ.

Edit:Βασικά δεν καταλαβα τι περιορισμό εννοείς??μπορεί να κάνω και λάθος...αλλά πρέπει να κάνω το αντίστοιχο σε οκταδικο και σε 16δικο

 

Μάλλον είστε ακόμα σε αρχικό στάδιο, ε; Νόμιζα πως είχατε προχωρήσει πιο πολύ στην ύλη.

 

Λίστες, στοίβες, ουρές κλπ έχετε κάνει; Αν ναι, κάντο με στοίβα. Αν όχι κάντο με MAGDIGITS = 64 πίνακα και βάλε σημείωση από κάτω "για νούμερα μεγαλύτερα από UINT64_MAX θα χρησιμοποιήσουμε μια έτοιμη big-integer library". :lol:

Δημοσ.

Να φτιάξω πίνακα 64αρι δηλαδη ε?

 

Οκ σε ευχαριστώ...

 

Αν κολλησω καπου αλλου ενημερώνω :P

Δημοσ.

Στοιβα δεν έχουμε κάνει αλλά δεν θέλει πίνακα και αυτό?

 

Πίνακας συνήθως σημαίνει με γνωστό μέγιστο μήκος. Αν είναι να τον κάνεις με δυναμικά μεταβαλλόμενο μήκος, τότε είναι πολύ πιο απλό ο κώδικας υλοποίησης της στοίβας να γίνει με δείκτες (απλά-συνδεδεμένη λίστα είναι επί της ουσίας η στοίβα).

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα

  • Δημιουργία νέου...