[C] Dezimalzahl in Binärzahl und diese formatiert ausgeben

Ultraflip

Erfahrenes Mitglied
Hallo zusammen,

eine Bekannte bat mich für ihr Studium um Hilfe bei einer Aufgabe in C. Ich selbst bin allerdings eher in VBA zu Hause, habe aber bereits Erfahrung mit C++ gesammelt.

Die Aufgabenstellung scheint eigentlich nicht so schwierig:

  • Frage eine postive Ganzzahl ab (unsigned int)
  • Zur Konvertierung des Parameters soll die Funktion strtoul verwendet werden, wobei der zweite Parameter auf NULL und der dritte auf 0 gesetzt werden muss
  • Umwandlung in Binärzahl bzw. BCD Code (siehe Output)
  • Formatierte Ausgabe (siehe nachfolgend)


Der Output soll wie folgt aussehen:

Code:
 Input:        101 - 0000 0000 | 0000 0000 | 0000 0000 | 0110 0101
   BCD:        257 - 0000 0000 | 0000 0000 | 0000 0001 | 0000 0001

Die ersten Versuche dies darzustellen sehen wie folgt aus:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    
char str[50];
printf("Bitte geben Sie eine Zahl ein: ");
fgets(str, 50, stdin);

  unsigned long int value;
 
  value = strtoul( str, 0, 0 );
 
  printf( "Wert des Strings %s : %u\n", str, value );
 
  //mögliche Ausgabe Variante 1: 
  int i = 5;
  printf("| %04d %04d | %04d %04d | %04d %04d | %04d %04d |\n\n",
         i, i, i, i, i, i, i, i);
         
  //mögliche Ausgabe Variante 2:
  static const char string[] = "110000101";
  int laenge = strlen(string);
  int x = 1;
  int y = 0;
  int z = 0;
  int j = 0;
  int ausgabe[8];
//for(j = laenge-z*4; j > 0; j--)
//{
//   ausgabe[i + x] = substring(j-4, 4,string);
//   x++;
//}
  
   printf("| %04d %04d | %04d %04d | %04d %04d | %04d %04d |\n\n",
         ausgabe[8], ausgabe[7], ausgabe[6], ausgabe[5], ausgabe[4], ausgabe[3], ausgabe[2], ausgabe[1]); 
  system("PAUSE");	
  return 0;
}

Allerdings bin ich mir sicher, dass die Aufgabe viiiieeel einfacher lösbar sein muss. :(
Der Umrechenteil ist leider noch komplett schleierhaft.

Ich hoffe jemand kann mir einen Tipp geben, wie (und mit welchen Funktionen) die Aufgabe gelöst wird!

Vielen Dank und LG
 
Hi

a) Der Beispiel-BCD-Code ist falsch.
BCD ist nicht das Gleiche wie normale Binärdarstellung.

b) fgets und strtoul? :suspekt: Mit scanf wäre das einfacher...
Naja, wenns die Angabe so will...

c) Der letzte Parameter von strtoul sollte laut Doku das Zahlensystem sein. 10. Nicht 0.

So...und vom printf "Wert des String..." weiter runter ist es konfus :D
Alles schön der Reihe nach, nichts überstürzen:
Mal angenommen, du hast eine Funktion, die dir ein unsigned long
in einen 32-stelligen String mit der Binärzahl umwandelt.
void dez2bin(unsigned long l, char *str)
Wie müsste das im main ausschauen:
Einen (weiteren) String dafür machen, aufrufen, und dann mit | dazwischen ausgeben?

(Eine for-Schleife, Von 0 bis <32, bei jedem achten Zeichen ein " | " noch dazu ausgeben.
Also if( (i % 8) == 0)...
Und wenns grad kein " | " ist, aber ein Vielfaches
von 4 statt 8 kommt ein einzelnes Leerzeichen dazu..)
 
Hallo sheel,

Danke für Deine Antwort. Die Berechnung ist nun fertig und funktioniert einwandfrei. Lediglich der Formatierungs-Teil bereitet mir noch Kopf zerbrechen. :(

Wenn ich als Beispiel eine Zahl als int vorliegen habe (z. B.: int x = 1100101) wie kann ich diese in einen String umwandeln? Die Zahl ist immer verschieden lang und muss ja hinten angefügt (und formatiert/gesplittet) werden?

Vielen Dank und LG
 
zB. die Funktion itoa

int i in char-Array str reinformatieren:
C++:
itoa(i, str, 10);

Am Stringende anhängen:
C++:
itoa(i, &str[strlen(str)], 10);
 

Neue Beiträge

Zurück