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

Binary to Bcd μετατροπέας


technfreak

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

Δημοσ.

Γιατί δεν παίζεις με μία τέτοια συνάρτηση:

 

>
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);
}

Δημοσ.

Το πρόγραμμά σου έχει μερικά λαθάκια, σου επισημαίνω μερικά:

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;
}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

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