C Programm Dezimalzahl in Binärzahl

  • Ersteller Ersteller Taxotic
  • Erstellt am Erstellt am
T

Taxotic

Gast
Hallo Leute,

ich habe ein C Programm geschrieben, dass eine Dezimalzahl in eine Binärzahl umwandelt.
Leider funktioniert es noch nicht und ich bekomme auch keine Fehlermeldung, sodass ich den Fehler nicht beheben kann.
Wahrscheinlich liegt es an einem Denkfehler meinerseits, ich habe im Quelltext jeweils danebengeschrieben, was mein Ziel bei bestimmten Befehlen war.

Danke für eure Hilfe!
Code:
int main ()
{
	
	
	int ieingabe;
	int i;
	int binaer[8];
	int x;

	printf("Bitte geben sie eine Zahl ein die als Binaerzahl dargestellt werden soll\n\n");
	scanf("i%", &ieingabe);
		
	x=ieingabe;
		for (i=7;i=1;--i)						//von i=7 bist i=0
			{	x=x/2;							//teile ieingabe=x durch 2 und setzte das ergebnis gleich x
		
			  if (x%1==0)						// wenn das Ergebnis keinen Rest hat schreibe 0 in Array
					  {
					 binaer[i]=0;
				      }
			  else 
					  {
					binaer[i]=1;				//wenn das Ergebnis einen Rest hat schreibe 1 ins Array
					  }
			  

	}
	
	printf("Die Binaerzahl lautet");		//Lese den Arrayspeicher nacheinander von i=0 bis i=7 aus
	for (i=0; i=7; i++)
		printf("i%",binaer[i]);


return 0;
}
 
Irgendwas muss passieren, also sag erstmal bitte was. Was ist die Ausgabe?

x % 1 ergibt übrigens immer 0, da jede Zahl vollständig durch 1 teilbar ist. Binär basiert aber auf der Basis 2, also musst du durch 2 teilen.
 
nur mal so
wenn du zuerst teilst, hast du schon ein Bit verloren....

i% macht keinen Sinn bei printf und scanf...
 
Naja, ich soll ein Programm schreiben, dass eine Dezimalzahl in eine Binärzahl umwandelt.

Das x%1 nicht geht stimmt, da habe ich wohl nicht richtig nachgedacht.

Wenn ich jetzt jedoch x%2 schreibe, rechnet er ja im vorherigen Schritt ja schon x=x/2, sodass im nachfolgenden Schritt das "neue x" %2 geteilt wird.
bsp: 90/2=45.0
45%2= Rest 5 ...

aber er soll ja auch den Rest 0 von 90%2 vermerken....

Reicht es, wenn ich also die If Bedingung VOR das x=x/2 setzte?



Edit: mit dem %i habt ihr recht..warum ich das geschrieben habe weiß ich nicht,da habe ich was durcheinandergebracht, danke!
 
Zuletzt bearbeitet:
Code:
for (i=7;i=1;--i)

for (i=0; i=7; i++)
Hier ist ein böser Anfängerfehler versteckt, der nicht passieren sollte ;)
 
PWA schrieb:
Code:
for (i=7;i=1;--i)

for (i=0; i=7; i++)
Hier ist ein böser Anfängerfehler versteckt, der nicht passieren sollte ;)

Jipp, es liegt aber nicht am -- bzw. ++ :rolleyes:
 
for (i=7;i>=0;i--)
bzw
for (i=0; i<=7; i++)

richtig? Ist auch erst das zweite Mal, dass ich for schleifen verwende ;)
Also das Programm funktioniert, trotzdem noch irgendwas falsch/nicht empfehlenswert? ;) Danke für die schnelle Hilfe

Code:
int main ()
{
	int ieingabe;
	int i;
	int binaer[8];
	int x;
	
	printf("Bitte geben sie eine Zahl ein die als Binaerzahl dargestellt werden soll\n\n");
	scanf("%i", &ieingabe);
		
	x=ieingabe;
		for (i=7;i>=0;i--)					//von i=7 bist i>=0
			{	
			  if (x%2==0)	 					// wenn das Ergebnis keinen Rest hat schreibe 0 in Array
					  {
					 binaer[i]=0;
				      }
			  else 
					  {
					binaer[i]=1;				//wenn das Ergebnis einen Rest hat schreibe 1 ins Array
					  }
			  
				
				x=x/2;							//teile ieingabe=x durch 2 und setzte das ergebnis gleich x

	}
	
	printf("Die Binaerzahl lautet \n");		//Lese den Arrayspeicher nacheinander von i=0 bis i<=7 aus
	for (i=0; i<=7; i++)
		{
			printf("%i",binaer[i]);
		}

	printf("\n\n");

return 0;
}
 
Zuletzt bearbeitet:
Hmmm hab mir den Code jetzt nicht näher angeguckt, aber bei mir läuft das Programm auf Anhieb und gibt mir für 5 folgendes aus:

Code:
5
Die Binaerzahl lautet00000101
Achso, du wolltest wissen, ob du noch was optimieren kannst.
Den Code vielleicht besser lesbar machen:
- iEingabe oder nur eingabe statt ieingabe
- int i brauchst du nicht am Anfang zu deklarieren. Es reicht in der for-Schleife ( for (int i = 7; ...) )
- Leerzeichen nicht so sparsam verwenden. Nach einem " ; " und nach den Operatoren (+, -, = etc.) sieht der Code besser aus, weil nicht so eng zusammengequetscht.

- deklarierte Variablen vielleicht auch gleich mit einem (null-)Wert initialisieren.

=> und dann am besten alles in C++ oder Java schreiben, weil C irgendwie so altbacken ist... :o)
 
Zuletzt bearbeitet:
- Du kannst dir die if-Abfrage sparen und einfach nur schreiben:
Code:
binaer[i] = x%2;

- Du kannst die Variable ieingabe weglassen und die Eingabe direkt in x einlesen.

- Kommentare, die einfach nur den danebenstehenden Code ausdrücken, wie
Code:
		for (i=7;i>=0;i--)					//von i=7 bis i>=0
sind nicht wirklich sinnvoll :)
 
PWA schrieb:
und dann am besten alles in C++ oder Java schreiben, weil C irgendwie so altbacken ist... :o)

Hmm, das ist doch C++, schau mal das Kommentarzeichen an: // :rolleyes:

Aber du hast schon recht, man könnte da besser mit cin und cout usw. arbeiten.

Und bei der Arraydefinition und dem Schleifenzähler vielleicht eine Konstante verwenden, dann werden spätere Änderungen nicht so fehleranfällig (du musst dann nur an einer Stelle ändern).
 
Da er schrieb, er "soll" ein Programm schreiben, kann ich mir vorstellen, dass C als Sprache vorgegeben ist.

Davon abgesehen ist auch gar nichts dagegen einzuwenden, ein Programm - zumal ein so kleines - in C zu schreiben. Die Sprache ist zwar syntaktisch wenig attraktiv, aber mächtig und hat wenig Overhead. Nicht umsonst ist z. B. der Linux-Kernel in C geschrieben :)
 
Danke für die Antworten, ich konnte das Programm noch etwas optimieren.
 
Zuletzt bearbeitet:
Zurück
Oben