Was stimmt mit meinem Programm nicht?

marcels87

Cadet 1st Year
Registriert
Jan. 2009
Beiträge
8
Hi Leute,

ich soll ein Programm zur Umwandlung von Dezimal in Binär und Dezimal in Hex schreiben.
Die Schritte sollen hintereinander ablaufen. Die Binärumwandlung funktioniert, allerdings gibt das programm bei der Hex-Umwandlung immer nur 000 aus, egel welchen Startwert ich eingebe. Ich habe bei dem Versuch, das ganze zu korregieren mehr Fehler reingebaut als vorher drin waren. Könnte sich das Programm mal jemand ansehen?

Vielen Dank
Marcel



#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <ctype.h>


int main(int argc, char *argv[])
{

unsigned long int dez;
int i,m=0,l=0,x[12],y[4],d=0;


printf("\nBitte geben Sie eine Dezimalzahl von 0 bis 4095 ein!\n");

printf("Dezimalzahl:");
scanf("%d",&i);
getchar();
if(i < 0)
{
printf("Zahl ist kleiner als 0!");
getchar();
return 0;
}
if(i > 4095)
{
printf("Zahl ist groesser als 4095");
getchar();
return 0;
}




while (l<12)
{
x[l++] = i % 2;
i /=2L;


}
for(i=l-1; i>0;i--)
(i%4) ? printf("%d",x) : printf("%d", x);

puts(" ");
getchar();


while (m<4)
{
y[m++] = i % 16;
i /=16L;


}
for(i=m-1; i>0;i--)
(i%4) ? printf("%d",y) : printf("%d", y);

puts(" ");
getchar();

return 0;
}
 
Wozu ein long int wenn du eh nur Zahlen bis 4096 erlaubst?
Versuch doch auch mal sprechende Variablen...

Und denk doch mal logisch nach: Nach der ersten Konvertierung steht welcher Wert in der Variable i?
 
Hi Leute,

danke für die Antworten aber ich befürchte, ich seh den Wald vor lauter Bäumen nicht.
Ich weiss, dass die zweite Konvertierung ähnlich der ersten ist was den Quellcode angeht.
Ich bekomme aber immer nur 000 raus und weiss echt nicht mehr weiter!

Marcel
 
Hallo,

in deiner ersten for schleife für ausgabe binär solltest du die abbruchbedingung auf i>=0 ändern, da sonst nicht die 2hoch0 angezeigt wird.

Und bei

while (m<4)
{
y[m++] = i % 16;
i /=16L;

hier änderst du das i (deine eingegebene dezimalzahl)
mit
i /=2L;

somit sollte das problem lösbar sein.

gruß
 
Ist es niht auch möglich die Hex-Zahl umzuwandeln ohne die gesamte Rechnung aufzuführen? Ich meine ich hätte was gehört von

printf("",%x,Dez);

oder in der Art! Sagt eich das was?

Marcel
 
mit sprintf würde es in einen string gehen
aber du änderst bei der 1. Umwandlung doch den Wert von i, der muss ja dann 0 sein wenn du i in hex umwandeln willst.
 
Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <ctype.h>


int main(int argc, char *argv[])
{
   unsigned long int dez;
   int i,m=0,l=0,x[12],y[4],d=0;
   printf("\nBitte geben Sie eine Dezimalzahl von 0 bis 4095 ein!\n");
   printf("Dezimalzahl:");
   scanf("%d",&[COLOR="Red"]dez[/COLOR]);
   getchar();
   if([COLOR="red"]dez[/COLOR] < 0)
  {
      printf("Zahl ist kleiner als 0!");
      getchar();
      return 0;
   } 
   if([COLOR="red"]dez[/COLOR] > 4095)
   {
      printf("Zahl ist groesser als 4095");
      getchar();
      return 0;
   }

   [COLOR="Red"]i=dez;[/COLOR]
   while (l<12)
   {
      x[l++] = i % 2;
      i /=2L;
   } 
   for(i=l-1; i>[COLOR="red"]=[/COLOR]0;i--)
      (i%4) ? printf("%d",x[i]) : printf("%d", x[i]);
   puts(" ");
   getchar(); 
   [COLOR="Red"]i=dez;[/COLOR]
   while (m<4)
   {
      y[m++] = i % 16;
      i /=16L;
   } 
   for(i=m-1; i>[COLOR="red"]=[/COLOR]0;i--)
      (i%4) ? printf("%d",y[i]) : printf("%d", y[i]);
   puts(" ");
   getchar(); 

return 0;
}

so sollte es besser gehen :)
 
Zurück
Oben