Sta Δημοσ. 20 Μαΐου 2006 Δημοσ. 20 Μαΐου 2006 Γιατί δεν παίζεις με μία τέτοια συνάρτηση: > void put_dec(unsigned int a) { if (a/10) put_dec(a/10); printf("%d",a%10); fflush(stdout); } Εσύ βέβαια αντί για printf() θέλεις να κρατήσεις την τιμή κάθε δυαδικού ψηφίου σε κάποια μεταβλητή ή ακόμα και να τυπώσεις την τιμή αυτή σε δυαδικό σύστημα με τη βοήθεια της εξής συνάρτησης: > void put_bin(unsigned int a) { if (a/2) put_bin(a/2); printf("%d",a%2); fflush(stdout); }
Sta Δημοσ. 20 Μαΐου 2006 Δημοσ. 20 Μαΐου 2006 Το πρόγραμμά σου έχει μερικά λαθάκια, σου επισημαίνω μερικά: 1) Αν θέλεις bcd αναπαράσταση (και όχι gray όπως αναφέρεις σε κάποιο σημείο) θέλεις μία τετράδα bits για κάθε ψηφίο, οπότε για τον αριθμό 255 θέλεις τουλάχιστον 12 bits. Εσύ όμως χρησιμοποιείς 8-bits μόνο. 2) Οι συναρτήσεις που σου έδωσα πριν είναι αναδρομικές, κάνοντας return έτσι όπως έκανες δεν πετυχαίνεις κάτι. Τέλος πάντων, σου δίνω μία συνάρτηση που καλώντας τη με όρισμα τον (δυαδικό) αριθμό και περνώντας ένα δείκτη προς ένα long αποθηκεύει σε αυτόν τη bcd αναπαράσταση του δυαδικού. Είναι η bin_to_bcd(). > #include <stdio.h> void bin_to_bcd(unsigned char bin,unsigned long *bcd) { if (bin/10) bin_to_bcd(bin/10,bcd); *bcd <<= 4; *bcd |= bin %10; } void put_bin(unsigned long a) { if (a/2) put_bin(a/2); printf("%ld",a%2); fflush(stdout); } int main(void) { unsigned long a=0; bin_to_bcd(134,&a); put_bin(a); getchar(); return 0; }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.