Konvertieren eines BCD-Codes in Dualcode und umgekehrt
-
Guten Abend!
Ich habe ein großes Problem bei meiner Aufgabe und wäre über Hilfe sehr erfreut.
https://palme.iicm.tugraz.at/wiki/EP/Ass1_WS12
Das ist die Angabe und ich poste lieber die ganze bevor ich mich falsch ausdrücke und meine Bemühungen mich zu artikulieren und eure Bemühungen mich zu verstehen und mir zu helfen in die falsche Richtung gehen.Mein Problem jetzt dabei ist, dass nicht auf die Lösung komme, wie ich den eingegebenen Wert eben als BCD-Code und Dualcode betrachte und wie ich die beiden dann in den jeweiligen anderen Code konvertiere.
Könnte mir dabei jemand helfen?
-
Wie sieht denn dein bisheriger Ansatz aus?
-
Du bist nicht allein: http://www.mikrocontroller.net/topic/276120
(Oder bist du das auch?)
-
Abgabe: "Bis zum Mi., 7.11.2012 19:00:00"
Dir ist aber schon klar, dass ein Betrugsversuch zur Exmatrikulation führen kann?Hier ein Beispiel zur Inspiration:
#include <stdio.h> #include <limits.h> #include <stdlib.h> int str_lastindex (const char* string) { int i = 0; while ( string[i] != 0 ) ++i; return i-1; } int ul2bin (unsigned long u, char* bin) { int i, j; for ( i = 1, j = 0; i <= 32; ++i ) { bin[j] = ( (u | 0x80000000) == u )? '1' : '0'; u <<= 1; ++j; if ( (i&3) == 0 ) bin [j++] = ' '; if ( (i&7) == 0 ) { bin [j++] = '|'; bin [j++] = ' '; } } bin [j-3] = 0; // letztes Trennzeichen weg und Abschlussnull return 0; } unsigned long input2bcd (char* arg, char* bin) { int i, j=8; unsigned long r = 0; char c; for ( i = str_lastindex (arg); i >= 0; --i ) { r = (r<<4) + (arg[i] & 0xF); --j; } ul2bin (r,bin); return r; } unsigned long input2binary (unsigned long ul, char* bin) { unsigned long u = 0; unsigned long m = 1; int nibble; while ( ul > 0 ) { nibble = ul & 0xF; if ( nibble > 9 ) return UINT_MAX; u = u + nibble * m; m = (m<<3) + (m<<1); ul >>= 4; } ul2bin (u,bin); return u; } void ausgabe (const char* text , unsigned int ul, char* bin) { if (bin) printf ("%s:%10u - %s\n",text,ul,bin); else switch (ul) { case 1: printf ("Usage: %s number\n",text); break; case 2: printf ("Number out of range: allowed range is 1 to %u\n",UINT_MAX-1); break; case 3: puts (" BCD: Binary Code too large."); break; case 4: puts ("Binary: Invalid BCD code."); break; } } int main(int argc, char *argv[]) { unsigned long ul, r; char bin[48]; if ( argc != 2 ) { ausgabe (argv[0],1,NULL); return 1; } ul = strtoul (argv[1],NULL,0); if ( ul >= UINT_MAX ) { ausgabe (NULL,2,NULL); return 2; } ul2bin (ul, bin); ausgabe (" Input",ul,bin); if ( ul > 99999999 ) ausgabe(NULL,3,NULL); else { r = input2bcd (argv[1],bin); ausgabe (" BCD",r,bin); } r = input2binary (ul,bin); if ( r == UINT_MAX ) ausgabe(NULL,4,NULL); else ausgabe ("Binary",r,bin); return 0; }
viele grüße
ralph
-
Vielen Dank für die Hilfe!
Hat mir sehr weiter geholfen!Lg
Chris