Zufallszahl zwischen -2,5 und 2,5 in C Sprache?
Hallo liebe Community,
ich soll eine zufallszahl zwischen -2,5 und 2,5 generieren lassen. Dafür soll ich nur das Standart
#include <Stdlib.h>
benutzen. Ich könnte ja irgendwie damit arbeiten dass ich die random Zahl durch die maximale Zahl teile. Aber weiter weiss ich leider nicht mehr
2 Antworten
1- Erstelle eine Zufallszahl
int r = rand()
2- Teile die Zufallszahl durch die höchstmögliche Zahl, um das Ergebnis auf einen Bereich zwischen 0 und 1 einzuschränken. Das Ergebnis ist natürlich ein double (Kommazahl).
double rand = (double)r / RAND_MAX;
3- Stecke nun den Bereich des Ergebnisses von 0..1 auf 0..5. Indem du es einfach mit 5 multiplizierst.
rand = rand * 5;
Nun hast du eine Zufallszahl zwischen 0 und 5. Jetzt musst du nurnoch 2,5 abziehen, dann liegt sie zwischen -2,5 und +2,5.
rand = rand - 2.5;
Fertig. Das ganze kann man natürlich auch zusammenfassen:
double rand = (double)rand() / RAND_MAX * 5 - 2.5;
printf("%lf", rand);
%lf steht nämlich für „long float“, gemeint ist damit der Datentyp „double“.
In dem Fall könnte, je nachdem wie genau die Zahl sein soll, auch eine Float-Ausgabe reichen, also
printf("%f", rand);
Viele Wege führen ans Ziel. Diese Aufgaben sollte man schon selber durchdenken, um sein logisches Denken zu trainieren, das man fürs Programmieren braucht.
Oft geben funktionen nicht das her was man braucht, und man muss sie geschickt umformen.
rand() generiert eine Zufallszahl zwischen 0 und 32767.
Du könntest die Zahl dann erstmal als Gleitkommazahl speichern und dann dividierst du sie durch den maxWert. Ja nicht übel.
Dann hast du Zufallszahlen zwischen 0 und 1. Wie gehts dann weiter ?
Ich hab mir überlegt dass ich das Ergebnis ja +2,5 machen könnte aber dann wär ich ja bei 1 über meinem Wunsch also 1,5 aber wie komme ich dann in den negativen Bereich
Das ist doch simple Unterstufenmathematik. Offenkundig musst du einen Bereich von 0..1 auf einen Bereich von 0...5 spreizen - also multiplizieren. Und dann kannst du das Ganze einfach so schieben, dass es von -2,5 bis 2,5 reicht - also subtrahieren. Ende.
Int main()
{
float erg;
erg = (rand()/RAND_MAX)*5;
printf(„Zahl: %f“ ,erg);
}
ergibt bei mir aber immer 0
Klar. Die ganze Rechenoperation ist ganzzahlig, das ganzzahlige Resultat wird dann in den float erg gesteckt. Du kannst eine Gleitkommadivision erzwingen, indem du mindestens einen der Operanden auf double (oder float) castest.
Lies dir lieber nochmal die Grundlagen durch, sonst wird das nix.
https://www.cprogramming.com/tutorial.html#ctutorial da das ganze mal durchmachen und verstehen.
Wie kann ich sie zuletzt ausspucken lassen. Mit printf( und dann?