Hallo Sariya,
im Grunde hast du es schon. In deiner Schleife berechnest du die Bits wie man es per Hand macht beginnend von rechts. Du hast lediglich die Ausgabe vergessen. Der Lesbarkeit halber habe ich mir erlaubt, die Formatierung etwas anzupassen.
Dein Code:
C:
#include <stdio.h>
#include <stdio.h>
int main() {
int c, i, dez, rest, zahl_neu;
printf("Programm Dualzahl\n");
printf("Geben Sie bitte eine Dezimalzahl ein:\n");
scanf("%d", &dez);
printf("Ausgabe im Dualsystem:\n");
do {
rest = dez % 2; //in rest wird 0 oder 1 gespeichert
zahl_neu = dez / 2; //zahl_neu wird als Ganzzahl dividiert
dez = zahl_neu; //und als neueDezimalzahl zugewiesen
} while (zahl_neu != 0); // Dividiere solange, solange die dez-Zahl >
return 0;
}
Alles was du brauchst, ist die Ausgabe des Characters (Zeile 15) für jede Iteration.
C:
#include <stdio.h>
int main() {
int c, i, dez, rest, zahl_neu;
printf("Programm Dualzahl\n");
printf("Geben Sie bitte eine Dezimalzahl ein:\n");
scanf("%d", &dez);
printf("Ausgabe im Dualsystem:\n");
do {
rest = dez % 2; //in rest wird 0 oder 1 gespeichert
zahl_neu = dez / 2; //zahl_neu wird als Ganzzahl dividiert
dez = zahl_neu; //und als neueDezimalzahl zugewiesen
printf("%d", rest); //berechneter Rest wird ausgegeben
} while (zahl_neu != 0); // Dividiere solange, solange die dez-Zahl > 0 ist
return 0;
}
Da du die Bits von rechts an berechnest, aber von links an ausgibst, erfolgt die Ausgabe verkehrt herum. Um das zu korrigieren könntest du sie in ein Array schreiben und dieses in umgekehrter Reihenfolge ausgeben.
C:
#include <stdio.h>
int main() {
int i = 0, dez = 0, zahl_neu = 0, rests[] = {0,0,0,0,0,0,0,0};
printf("Programm Dualzahl\n");
printf("Geben Sie bitte eine Dezimalzahl ein:\n");
scanf("%d", &dez);
printf("Ausgabe im Dualsystem:\n");
do {
rests[i] = dez % 2; //in rest wird 0 oder 1 gespeichert
zahl_neu = dez / 2; //zahl_neu wird als Ganzzahl dividiert
dez = zahl_neu; //und als neueDezimalzahl zugewiesen
i++;
} while (zahl_neu > 0); // Dividiere solange, solange die dez-Zahl > 0 ist
//Ausgabe rückwärts
for (i = 7; i >= 0; i--)
{
printf("%d", rests[i]);
}
printf("\n");
return 0;
}
Ein paar schönheitstechnische Tipps zu gutem Stil:
Denk bei der Verwendung eines Arrays immer daran, es zuvor zu initialisieren, da deine Schleife nicht garantiert, alle Elemente des Arrays zu überschreiben. Auch die anderen Variablen sollten zuvor initialisiert werden. Das gilt insbesondere für die Variablen, auf die du hinterher mit scanf einliest. Angenommen die Eingabe schlägt fehl, beispielsweise weil jemand nicht das vorgegebene Format befolgt hat, bricht scanf einfach ab. Die bis dahin noch nicht beschriebenen Werte werden auch nicht mehr beschrieben. Für solche Fälle wählt man dafür Werte, mit denen man möglichst gut umgehen kann. Üblicherweise ist das 0. Den Fall, dass hinterher eine 0 darauf ist, muss man dann je nach Situation auch behandeln. Selbst wenn man den Fall im Code nicht behandelt, ist der Umstand wenigstens beim Debuggen häufig sehr wertvoll, wenn man an der verbliebenen 0 bemerkt, dass die Eingabe fehlgeschlagen ist. In einem Fall, in dem sich ein zufälliger Wert in der Variable befindet, den man nicht beabsichtigt oder berücksichtigt hat, ergibt sich ein sogenanntes undefiniertes Verhalten - oder in Englisch: Undefined Behavior. Das gilt es zu vermeiden.
Außerdem empfiehlt es sich, für Schleifeniterationen als Abbruchbedingung immer etwas zu nehmen, das eine höhere Erfolgswahrscheinlichkeit hat. Statt != verwendet man für while-Schleifen eher >, solang es den selben Zweck erfüllt. Natürlich macht die Verwendung rein logisch betrachtet hier keinen Unterschied. Der Grund liegt darin, dass in speziellen Anwendungssituationen auch die Hardware beeinflusst werden kann. Wenn nun beispielsweise durch einen äußeren Umstand ein Bit plötzlich wechselt und dabei zufällig genau die 0 übersprungen wird, würde dein Algorithmus zu viele Iterationen durchlaufen und dabei auf einen Teil des Arrays zugreifen, den es nicht gibt. Unter den meisten Systemen würde diese Ausnahme als Speicherzugriffsfehler gehandhabt und dein Programm beendet. Im besten Fall bekommst du "nur" zufällige Werte, die gerade irgendwo im Speicher standen.
Gruß,
Neonof