Randomize in C++

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Randomize in C++

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

AndreasMR
Beiträge: 98
Registriert: Di 4. Aug 2015, 15:29
OS, Lazarus, FPC: Linux, Raspbian, Windows
CPU-Target: 64/32 Bit

Re: Randomize in C++

Beitrag von AndreasMR »

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

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Randomize in C++

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

Requion
Beiträge: 106
Registriert: Mi 3. Feb 2016, 09:39
OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0)
CPU-Target: 32/64Bit,ARM(RPi)
Wohnort: nahe Grimma

Re: Randomize in C++

Beitrag von Requion »

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.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Randomize in C++

Beitrag von Mathias »

Das wird nicht gehen, der Arduino hat keine Systemuhr.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Requion
Beiträge: 106
Registriert: Mi 3. Feb 2016, 09:39
OS, Lazarus, FPC: Linux(Arch Linux(+ARM)/Minibian) (L 1.6.0 FPC 3.0.0)
CPU-Target: 32/64Bit,ARM(RPi)
Wohnort: nahe Grimma

Re: Randomize in C++

Beitrag von Requion »

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.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Randomize in C++

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Randomize in C++

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

Antworten