# C -> Dezimal in Binär



## func87 (10. November 2008)

Hallo,
wir haben heute in der Berufschule folgende Aufagbe bekommen:

Planen und schreiben Sie ein Programm, welches eine beliebige Dezimalzahl in eine Binärzahl umwandelt.

Ich habe dann ein PAP (Programmablaufplan) erstellt und einen Schreibtischtest durchgeführt. Schon hier habe ich gemerkt, dass in meiner Planung ein Fehler ist.
Trotzdem habe ich das Programm implementiert, um vllt. so an des Rätsels Lösung zu kommen.

Hier das Programm:


```
//---------------------------------------------------------------------------
/*
Datum: 10.11.2008
Name:
Beschreibung: Umrechnung Dezimal in Binär
*/
//---------------------------------------------------------------------------

#include <stdio.h>
#include <conio.h>

int main(int argc, char* argv[])
{
        // Deklaration
        int zahl,rest;

        // Eingabe
        printf("Umrechnung von Dezimal in Binaer");
        printf("\n\nBitte geben Sie eine Dezimalzahl ein: ");
        scanf("%d",&zahl);

        // Verarbeitung
        printf("\n\nDie Binaerzahl lautet: ");
        do
        {
        rest=zahl%2;
        zahl=zahl/2;
                if(rest>=1)
                {
                printf("1");
                }
                else
                {
                printf("0");
                }
        }
        while(zahl>=1);

        getch();
        return 0;
}
//---------------------------------------------------------------------------
```

Das Problem ist, dass zwar die Binärzahl berechnet wird, diese allerdings falschrum ausgegeben wird.
Rechnet man von Dezimal in Binär schriftlich, so ist die Leserichtung von unten nach oben und nicht wie in dem Programm von oben nach unten.

Beispiel:

Dezimal: 10

Rechnung:
10/2 = 5 R0
5/2 = 2 R1
2/2 = 1 R0
1/2 = 0 R1

Binär: 1 0 1 0

Mein Programm gibt aber von oben nach unten aus, sprich 0 1 0 1

Vielleicht könnt ihr mir einen Tipp geben, wie ich die Aufgabe lösen könnte.
Ich hatte die Idee die "0"en und "1"en erst in Variablen zu schreiben, doch theoretisch brauche ich ja dann unendliche viele Variablen, die ich Deklarieren muss, da die Eingabe unendlich sein kann.

Die Lösung bitte so einfach wie möglich halten, da wir noch nicht so viel gemacht haben und noch ziemliche Anfänger sind.

Vielen Dank im Vorraus


----------



## Alexander Schuc (10. November 2008)

Hi!

Versuchs mal mit shiften und bit masken. 



> Die Lösung bitte so einfach wie möglich halten, da wir noch nicht so viel gemacht haben und noch ziemliche Anfänger sind.



Die ganze Lösung wird der (hoffentlich) keiner geben,.. aber mit den Hinweisen sollt doch schon einiges klappen.

Viel Erfolg!


----------



## SGSSGene (11. November 2008)

Also das ist ein Ausgabe Problem, die Ausgabe wird von links nach rechts getätig, so steht deine Zahl "verkehrt" herum.

Lösung wäre einmal das Bitmasking und das Shiften.
Oder Wie du es vorgeschlagen hast, mit einer Variable, theoretisch könnte die Zahl unendlich groß sein, aber in ein 'int' besteht meist aus 32bit , weshalb du maximal 32 '0' und '1' haben kannst.
Die nächste Möglichkeit wär einen Art "Ausgabe Buffer zu schreiben, der würde in etwa so aussehen:

```
char t_buffer[256] = "";

//und dann immer die 0 und 1 mit:
sprintf(t_buffer,"%d%s",1,t_buffer);
//oder
sprintf(t_buffer,"%d%s",0,t_buffer);
hinzufügen
```


----------



## sheel (11. November 2008)

@Schuc
"Eine vollständige Lösung wird dir wohl (hoffentlich) keiner geben"
Komm schon, es war aber wirklich nicht nötig, meinen Post zu löschen


----------



## Alexander Schuc (11. November 2008)

sheel hat gesagt.:


> @Schuc
> "Eine vollständige Lösung wird dir wohl (hoffentlich) keiner geben"
> Komm schon, es war aber wirklich nicht nötig, meinen Post zu löschen



War ich nicht, und bitte lies meine Signatur.


----------



## sheel (11. November 2008)

OK, Alex, sorry dass ich dich verdächtigt habe

Seltsam, wo der Post wohl hinverschwunden ist 
naja egal, inzwischen ist dem Threadstartet sowieso geholfen


----------



## PaggyPan (17. November 2009)

Mein Motto: Keep ist simple

```
#include<stdio.h>
main()
{ 
	int index[32],dezimalzahl,i;

printf("Geben Sie eine Dezimalzahl ein:\n");
scanf_s("%d",&dezimalzahl);
for ( i=0; dezimalzahl > 0; i++)
{
index[i]=dezimalzahl%2;
dezimalzahl=dezimalzahl/2;
} 

for (; i > 0; i--)
{
printf("%d",index[i-1]);

} 
 
return 0;
}
```


----------



## sheel (18. November 2009)

Die Frage ist vom 10.11.2008...


----------

