C Programm zum umwandeln von dezimal in dual

Hallo zusammen!

Ich hoffe hier wird mir geholfen, da ich selbst nach stundenlangem googeln und Suche hier im Forum nicht weitergekommen bin.

es geht um folgendes:

Ich muss ein C-Programm (kein C++,C#) schreiben, dass eine Zahl im intervall 0

int main (void)

{

float dezzahl;
float binzahl;
int binstelle;
float rest;
do

{
printf("Bitte Dezimal-Zahl im Intervall 0 =0 || dezzahl =1)

{

printf(„Eingabe ungueltig, bitte nochmal eingeben:\n“);

}

}

while (dezzahl=1);

rest = (dezzahl%0.5); AN DIESER STELLE HÄNGE
binstelle = (dezzahl/0.5); ICH JETZT SCHON SEHR LANGE…

printf(„binzahl ist %d“, binstelle);

return 0;

}

Vielen Dank für eure Hilfe!

Gruß

Hans Dampf

Hallo Hans Dampf,

Hier mein Versuch:

Zuerst solltest du die Programmstruktur etwas überarbeiten:
(Ich sehe gerade, dass du TABs verwendest. Das ist grundsätzlich keine so gute Idee. je nach Eitor und Drucker sind die Tabs unterschiedlich eingestellt, bzw. die Norm ist, dass TAB-Stops alle 8 Zeichen gesetzt sind.)

#include 

int main (void)

{
 float dezzahl;
 float binzahl;
 int binstelle;
 float rest;

 do
 {
 printf("Bitte Dezimal-Zahl im Intervall 0 =0 || dezzahl if (dezzahl =1)
**else**
 {
 printf("Eingabe ungueltig, bitte nochmal eingeben:\n");
 }

 }
 while (dezzahl=1);


 rest = (dezzahl%0.5); //AN DIESER STELLE HÄNGE
 binstelle = (dezzahl/0.5); //ICH JETZT SCHON SEHR
 //LANGE....
// Hier bleibt dir nichts anderes übrig als das ganze in einer
// Schleife zu zerlegen. Das Resultat soll ja folgendes sein:

// x = x1\*1/2 + x2\*1/4 + x3\*1/8 ..... xn\*1/2<sup>n</sup>

// Fällt dir dabei irgendetwas auf ?

 printf("binzahl ist %d", binstelle);
// das printf() funktioniert so nicht, dein Resultat ist ja keine Dezimalzahl.

return 0;

}

MfG Peter(TOO)

rest = (dezzahl%0.5); //AN DIESER STELLE HÄNGE
binstelle = (dezzahl/0.5); //ICH JETZT SCHON SEHR
//LANGE…
// Hier bleibt dir nichts anderes übrig als das ganze in einer
// Schleife zu zerlegen. Das Resultat soll ja folgendes sein:

// x = x1*1/2 + x2*1/4 + x3*1/8 … xn*1/2n

// Fällt dir dabei irgendetwas auf ?

printf(„binzahl ist %d“, binstelle);
// das printf() funktioniert so nicht, dein Resultat ist ja
keine Dezimalzahl.

return 0;

}

MfG Peter(TOO)

Stimmt, das mit dem %d bei der binstelle ist natürlich blödsinn, gemeint war natürlich &f.

Aber wie ich die Schleife mit der Reihe baue ist mir ein Rätsel

Hallo

Ich muss ein C-Programm (kein C++,C#) schreiben, dass eine
Zahl im intervall 0#include

void dumpbin_f32(float number, char* binstr)
{
int i, pos, nbytes=sizeof(number);
unsigned char shift, *pnum=(unsigned char*)&number;
/* intel LSB-first als MSB-first ausgeben */
for(i=nbytes-1,pos=0; i>=0; i–) {
for(shift=1>=1) {
if(pos == 1 || pos == 10) binstr[pos++] = ‚:‘;
binstr[pos++]=(pnum[i] & shift) ? ‚1‘ : ‚0‘;
}
}
binstr[pos]=’\0’;
}

void dumpbin_d64(double number, char* binstr)
{
int i, pos, nbytes=sizeof(number);
unsigned char shift, *pnum=(unsigned char*)&number;
/* intel LSB-first als MSB-first ausgeben */
for(i=nbytes-1,pos=0; i>=0; i–) {
for(shift=1>=1) {
if(pos == 1 || pos == 13) binstr[pos++] = ‚:‘;
binstr[pos++]=(pnum[i] & shift) ? ‚1‘ : ‚0‘;
}
}
binstr[pos]=’\0’;
}

int main()
{
float floatzahl1 = 0.33333f;
double doublezahl1 = 0.625;
char binstr[256];

dumpbin_f32(floatzahl1, binstr);
printf("%s\n", binstr);

dumpbin_d64(doublezahl1, binstr);
printf("%s\n", binstr);

return 0;
}

(Ich sehe gerade, dass du TABs verwendest. Das ist
grundsätzlich keine so gute Idee. je nach Eitor und Drucker
sind die Tabs unterschiedlich eingestellt, bzw. die Norm ist,
dass TAB-Stops alle 8 Zeichen gesetzt sind.)

Jo, genau deswegen nimmt man ja Tabs, eben damit jeder in seiner gewohnten Umgebung und in seiner gewohnten „Ansicht“ arbeiten kann. Es soll Leute geben, die können Code lesen, der nur ein oder zwei Zeichen eingerückt ist, andere brauchen ein paar Zeichen mehr und genau deswegen gibt es einstellbare Tabs.

Hallo Fragewurm,

Musst du auch öfters Code bearbeiten, den Andere geschrieben haben ?

MfG Peter(TOO)

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Musst du auch öfters Code bearbeiten, den Andere geschrieben
haben ?

MfG Peter(TOO)

Jep. Mal wegen Reengineering, mal wegen Teamarbeiten, schnelle Änderungen als Urlaubsvertretung, etc.

kann mir denn keiner einen tipp schritt für schritt geben?

Hallo Fragewurm,

kann mir denn keiner einen tipp schritt für schritt geben?

Deine Frage fällt unter „Hausaufgaben erledigen“.

Wie würdest du das ganze mit Papier und Bleistift machen ??

MfG Peter(TOO)