Randomize in C++

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.

Randomize in C++

Beitragvon Mathias » 5. Jul 2016, 20:11 Randomize in C++

Ich habe ein Zufallsgenerator auf meinem Arduino-Programm.

Nur leider, wird die Zufalls folge bei jedem Programm-Start gleich abgearbeitet.

Gibt es unter C++ auch ein Randomize ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 2545
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon AndreasMR » 5. Jul 2016, 20:23 Re: Randomize in C++

Hallo Mathias,

die gesuchte Funktion heißt RandomSeed().

Mehr Info kannst Du über die Hilfe-Funktion der Arduino-IDE erhalten.

Wenn ich "echte" Zufallszahlen benötige, die von der ansonsten immer gleichen Folge abweichen, übergebe ich der Funktion RandomSeed() einen Parameter, der eine Funktion aus Datum, Uhrzeit und ggf. Laufzeit eines Kommunikationsprogramms (in ms) eines angeschlossenen PCs überträgt.

Eine andere Möglichkeit besteht in der Verwendung der Laufzeit des Arduino-Sketches, wenn dort Pseudo-Eingaben vom Anwender erfolgen. Die Eieruhr läuft weiter. Durch die mal schnelle und mal langsamere Eingabe-Verzögerung bringst Du auch hinreichend viel Zufall in RandomSeed() hinein.


Beste Grüße

Andreas
Ubuntu 14.04 LTS / Raspbian / Windows: Lazarus ab 0.9 bis 3.0
AndreasMR
 
Beiträge: 67
Registriert: 4. Aug 2015, 14:29
OS, Lazarus, FPC: Linux, Raspbian, Windows | 
CPU-Target: 64/32 Bit
Nach oben

Beitragvon Mathias » 5. Jul 2016, 20:41 Re: Randomize in C++

die gesuchte Funktion heißt RandomSeed().

Danke, das hilft schon weiter.

Wenn ich "echte" Zufallszahlen benötige,

Ich werde eine Zähler in den Multiplexer einbauen, und jedes mal wen ich Start drücke, kann ich randomSeed(Zaehler) aufrufen.
Somit müsste es eigentlich gehen.

PS: der Sketch läuft auf einem ATtiny 84
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 2545
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Requion » 6. Jul 2016, 07:16 Re: Randomize in C++

Ich hab das immer so gemacht:
Code: Alles auswählen
#include <cstdlib> //random Funktionen
#include <time.h>
 
int main ()
{
    srand(time(0)); //seeder mit der aktuellen Systemzeit
 
    int randomwert = rand();
 
    return 0;
}

Hier noch eine schöne Erklärung zu dem Thema:
http://www.learncpp.com/cpp-tutorial/59-random-number-generation/
Mfg Requion

Das beste an Standards ist, dass es so viele davon gibt.
Requion
 
Beiträge: 106
Registriert: 3. Feb 2016, 09:39
Wohnort: nahe Grimma
OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0) | 
CPU-Target: 32/64Bit,ARM(RPi)
Nach oben

Beitragvon Mathias » 6. Jul 2016, 16:34 Re: Randomize in C++

Das wird nicht gehen, der Arduino hat keine Systemuhr.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 2545
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Requion » 6. Jul 2016, 17:31 Re: Randomize in C++

Okay, da fehlte mir wohl das Wissen zum Thema Arduino.

Hilft dir das weiter?
https://www.arduino.cc/en/Reference/RandomSeed
Mfg Requion

Das beste an Standards ist, dass es so viele davon gibt.
Requion
 
Beiträge: 106
Registriert: 3. Feb 2016, 09:39
Wohnort: nahe Grimma
OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0) | 
CPU-Target: 32/64Bit,ARM(RPi)
Nach oben

Beitragvon Mathias » 6. Jul 2016, 17:39 Re: Randomize in C++

Hilft dir das weiter?

Den hatte ich gestern auch offen, aber das wird auch nicht das Wahre sein, der Input flackert höchsten 2-3 Digits.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 2545
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 9. Jul 2016, 18:58 Re: Randomize in C++

Ich werde eine Zähler in den Multiplexer einbauen, und jedes mal wen ich Start drücke, kann ich randomSeed(Zaehler) aufrufen.
Somit müsste es eigentlich gehen.

So habe ich es jetzt gemacht, und es scheint zu klappen.

Danke für die Anhaltspunkte. :wink:
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 2545
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Programmierung



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried