stark wachsender vektor
-
hi,
ich möchte mir einen stark wachsenden vektor erstellen lassen hier mein code dazu:
//... max = 10; min = 1; // abarbeitung durch zaehlschleife for (i = 0; i<KEYLAENGEMERKLE; i++) { keyMerkle->a[i] = rand() % max + min; max = max + keyMerkle->a[i]; min = min + keyMerkle->a[i]; } //...
mein problem ist jetzt dass sich mein vektor zu stark vergrößert also sich nicht in den max und min wert befindet denn ich mir gedacht habe. Der soll sich nähmlich nach jeden durchlauf um das eingetragene ergebniss erhöhen. Ich hoffe ich konnte mich verständlich ausdrücken und mein problem schildern.
-
Ich hoffe ich konnte mich verständlich ausdrücken und mein problem schildern.
Nein, konntest du nicht.
-
ok also ich möchte in das Array keyMerkle->a[1] am anfang eine zufällige zahl zwischen 1 und 10 stehen haben danach soll max um den wert in keyMerkle->a[1] erhöht werden, ebenso min.
Angenommen wir haben jetzt in keyMerkle->a[1] eine 4 stehen dann soll jetzt
max = 14 sein und min = 5.in keyMerkle->a[2] soll jetzt eine Zahl zwischen 5 und 14 eingetragen werden, angenommen 10. dann soll min und max wieder um 10 erhöht werden und so weiter und so fort.
Allerdings kommen bei mir dann solche Zahlen zu stande: 6 17 44 124 womit der Zahlenbereich den ich vorgesehen habe nicht eingehalten wird meine frage ist nun wo mein fehler liegt.
-
Versuch mal
keyMerkle->a[i] = rand() % (max - min + 1) + min;
-
mira1928 schrieb:
Allerdings kommen bei mir dann solche Zahlen zu stande: 6 17 44 124 womit der Zahlenbereich den ich vorgesehen habe nicht eingehalten wird meine frage ist nun wo mein fehler liegt.
Wann kommen solch großen Zahlen (bei welchem i)?
Wie sind keyMerkle->a und min und max definiert?
Woher weißt du das die Werte so groß sind?Am besten mal ein minimales compilierbares Programm erstellen und posten.
-
jo scheint zu klappen, kannst mir mal den grund erklären, thx.
-
Du möchtest Zahlen aus einen Bereich von min bis max haben.
Du berechnest aber eine Zahl aus dem Bereich min bis (max+min).Durch das % (modulo) bekommst du eine Zehlenbereich (hier 0-9).
Wenn a[i] jetzt 4 ist erhöst du max auf 14. Dadurch bekommst du einen Bereich von 0 - 13. Plus min (hier dann 5) kann eine Zahl zwischen 5 und 18 rauskommen. uswkeyMerkle->a[i] = rand() % max + min; // max = max + keyMerkle->a[i]; min = min + keyMerkle->a[i];
Tut es übrigens auch