Probleme mit Umrechnungsprogram! HILFE

  • Themenstarter Themenstarter rellesgnik
  • Beginndatum Beginndatum
R

rellesgnik

Hey ho ich bin neu hier im Forum,

also erstmal hallo!!

Ich muss meinem Kumpel helfen seine Hausaufgaben zu machen. Der hat noch weniger Plan von C als ich. Naja er muss ein Programm schreiben das von Dezimal in Binär, Oktal und Hexadezimal umrechnet. Für die Umrechnung von Dezimal in Oktal und Hexadezimal gibt es in C ja Bibliotheksfunktionen. Das Umrechnen von Dezimal in Binärzahlen gibs aber wohl nicht.

Und genau da liegt auch das Problen. Den Rest des Programms haben wir uns selbst zusammengebastelt und der funktioniert so weit auch aber der Teil mit den Binärzahlen ist aus irgendnem Programm kopiert. Da ich wie gesagt selber kaum Plan von C habe ist wahrscheinlich nur eine ganz kleine Sache falsch die ich ständig übersehe zudem Blick ich durch den Code von der Funktion überhaupt nicht durch.

Naja wär super wenn ihr mir/uns da weiterhelfen könntent und mal in den Code reinschaut:(es geht um die Funktion Dez_Dual, alles soll in C geschrieben werden)

Code:
#include <stdio.h>
#include <math.h>

int main ()
{
   char auswahl,ergebnis[33], a[33],b[33],dual[33],Hex[33],Okt[33],ant='j';
   long dez,dezi;
   void Dez_Dual(long,char *);
   void Dez_Hex();
   void Dez_Okt();


while (ant=='j')
       {
        printf(" ---------------------------------------------------------------\n");
         printf("  Umwandlungen von Dezimal in Dual, Hexadezimal oder Oktalzahlen\n");
          printf("  maximale Eingabe der Dezimalzahl von 2147483647\n ");
           printf(" ---------------------------------------------------------------\n\n");
            printf("  Umwandlung von einer natuerlichen Zahl ... \n\n");
             printf("  (1) ... in eine Dualzahl\n");
              printf("  (2) ... in eine Hexadezimalzahl\n");
               printf("  (3) ... in eine Oktalzahl\n"); 
      
do
     {
      printf("  Bitte entsprechende Wahl (1/2/3) eingeben: ");
      scanf ("%c",&auswahl);
if    (auswahl!='1' && auswahl!='2' && auswahl!='3'); 
      printf("\n  Falsche Eingabe! Entweder 1, 2 oder 3!\n\n");
      }
      
while ( auswahl=='1'|| auswahl=='2' || auswahl=='3');

   if(auswahl=='1')
   {     printf(" ------------------------------------\n");
         printf("  Umrechnung Dezimalzahl in Dualzahl\n");
         printf(" ------------------------------------\n\n");
         printf("  Ergebnis mit maximal 32 Stellen!\n\n");
         printf("  Dezimalzahl: ");  
         scanf (" %c",&dez); 
         Dez_Dual(dez,b);
         printf("%d" "  Dualzahl: ", &b);
         }
    if(auswahl=='2')
      {
        Dez_Hex();
      }
    if(auswahl=='3')
      {
        Dez_Okt();
      }     
      printf("\n\n\n  Noch einmal (j/n)? ");
      scanf("%c",& ant);
      printf("\n\n");  
    }
return 0;
}


void Dez_Dual(long dez,char b[])
{
     int i,k,ergebnis; 
     while (b!=0)
     {
     ergebnis[i]=b%2;
     b=b/2;
     i=i+1;
                                                                                                                                                                                 
                 for(k=i-1;k>=0;k=k-1) 
                 {              /*Ausgabe der Binärzahl*/  
                 printf(" %d ",ergebnis[k]);      
                 printf (" \n\n");
                 }
     }
}
                 
void Dez_Hex()
{
     long dezi;
     printf("  Ergebnis mit maximal 32 Stellen!\n\n");
     printf("  Dezimalzahl: ");
     Scanf("%c",&dezi);
     printf("  Hexadezimalzahl: %X\n",dezi);                   
}
   
void Dez_Okt() 
{
     long dezim;
     printf("  Ergebnis mit maximal 32 Stellen!\n\n");
     printf("  Dezimalzahl: ");
     Scanf("%c",&dezim);
     printf("  Oktalzahl: %o\n",dezim);
}
 
rellesgnik hat gesagt.:
Code:
void Dez_Dual(long dez,char b[])
{
     int i,k,ergebnis; 
     while (b!=0)
     {
     ergebnis[i]=b%2;
     b=b/2;
     i=i+1;
                                                                                                                                                                                 
                 for(k=i-1;k>=0;k=k-1) 
                 {              /*Ausgabe der Binärzahl*/  
                 printf(" %d ",ergebnis[k]);      
                 printf (" \n\n");
                 }
     }
}

also das kann gar nich gehen. Du teilst b durch 2. b ist ein Pointer. Du nutzt ergebnis wie einen Array, es ist aber keiner.....

mein Tipp benutze doch ganz einfach & und >>.
Mit &1 testest du, ob das erste Bit ne 1 ist oder nich. Dann verschiebst du mit >> die Bits deiner und testest wieder mit &1 und das so lange bis du einmal durch bist. Das ergebnis ist dann zwar falsch herum. Aber das rückwärst auslesen sollte dann kein Prob sein.
 
Zurück