Brauch Hilfe bei C Prog: Zahlenkonvertierung mit Restwertmethode...
-
Hallo, bin neu hier und hab auch schon mein erstes Problem;)
Also:
Ich will mit der Restwertmethode ne Float/Double Zahl ins Binärsystem konvertieren. Ich hab die Zahl soweit in ihre Einzelteile zerlegt (vorkomma, nachkomma, stellenwert) und möchte nun mit modulo die Vorkommastellen ins Binärsystemumwandel(ansatz im ersten teil in do while schleife....)
Irgendwie will mein DevCPP die Schleife nicht "rannehmen", ich weiss nicht mehr weiterHier der code (ist viel zu umständlich, bin nicht allzu fit in c):
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
main() {float eingabewert, ganzzahl, nachkomma, stellenwert, stellen, basis;
char ende;
int binaer, i;stellen = 0;
nachkomma = 0;
ganzzahl = 0;
stellenwert = 0;
basis = 2;
ganzzahl = 0;
eingabewert = 0;
binaer = 0;**printf("Bitte geben Sie eine beliebige Zahl ein:\n");
scanf ("%f",&eingabewert);if (eingabewert < 0)
{
ganzzahl = ceil (eingabewert);
printf ("Der ganzzahlige Anteil ist negativ und betraegt: %f\n",ganzzahl);
nachkomma = eingabewert - ganzzahl;
nachkomma = nachkomma * -1;
printf ("Der Nachkommaanteil betraegt: %f\n",nachkomma);
ganzzahl = ganzzahl * (-1);
if (ganzzahl >= 1)
{
stellenwert = log10 (ganzzahl);
stellen = floor (stellenwert);
stellen = stellen +1;
printf ("Der ganzzahlige Stellenwert betraegt: %f\n",stellen);
i = 0;
do{
binaer = ganzzahl % basis;
ganzzahl = ganzzahl / (basis);
ganzzahl = floor (ganzzahl);
printf ("- %i",binaer);
i = i + 1;
}
while (i < stellen);}
if (ganzzahl < 1)
{
printf ("Der ganzzahlige Stellenwert betraegt 0");
}
}**if (eingabewert >= 0)
{ganzzahl = floor (eingabewert);
printf ("Der ganzzahlige Anteil ist positiv und betraegt: %f\n",ganzzahl);
nachkomma = eingabewert - ganzzahl;
printf ("Der Nachkommaanteil betraegt: %f\n",nachkomma);
if (ganzzahl >= 1)
{
stellenwert = log10 (ganzzahl);
stellen = floor (stellenwert);
stellen = stellen +1;
printf ("Der ganzzahlige Stellenwert betraegt: %f\n",stellen);
}
if (ganzzahl < 1)
{
printf ("Der ganzzahlige Stellenwert betraegt 0");
}}
ende = getch();
}Wäre echt klasse wenn mir jemand helfen kann
-
Try this:
#include <stdio.h> #include <conio.h> #include <math.h> #include <stdlib.h> main() { float eingabewert, binaer; char ende; int stellenwert, i, stelle, stellen, basis; stellen = 0; stellenwert = 0; basis = 2; eingabewert = 0; printf("Bitte geben Sie eine beliebige Zahl ein:\n"); scanf ("%f",&eingabewert); stellenwert = (int)(log10(eingabewert)/log10(basis)) + 1; while((eingabewert>0)||(stellenwert>=0)) { stelle = 0; binaer = pow(basis, stellenwert); if(eingabewert >= binaer) { stelle = 1; eingabewert -= binaer; } if(stellenwert == -1) printf("."); printf("%d", stelle); stellenwert--; } ende = getch(); }
Geht besser, auf jeden Fall, aber funktioniert. Mir ist nur ein komischer Fehler unterlaufen, musste auf eine Stelle vor der eigentlichen Binärzahl prüfen (die immer 0 ist), sonst gabs ne Endlosschleife. Hatte jetzt aber keine Lust zu schauen, vorans lag.
Falls Du abfangen willst, dass bei (binär)periodischen Zahlen Endlosschleifen auftreten, kannst auch schreiben:while((eingabewert>0.00000000000000001)||(stellenwert>=0))
oder sowas. Gruß M
PS: Ach so, Negativ-Abfrage ist nicht drin, aber das geht ja fix.
-
THX, werd´s gleich testen...