Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

1

03.09.2007, 14:59

Wahrscheinlichkeiten

Hey ho ,

Ich habe diesmal nur eine Kleine Frage , also :

Eine Zufalls Zahl von 1 bis 8 zb bekommt man ja durch :

C-/C++-Quelltext

1
rand() % 8 + 1;  


Wie kann ich Sagen das manche Zahlen Wahrscheinicher sind als andere?
Damit meine ich das zb die 3 öfters kommt als die 5 oder 8.

MFG Toa[/code]

Lares

1x Contest-Sieger

  • Private Nachricht senden

2

03.09.2007, 15:04

Is das den so wichtig , dass du nur 8 Zahlen hast? Sonst kann man ja mehr Zahlen nehmen und bei mehren die gleiche Aktion ausführen.

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

3

03.09.2007, 15:06

Jepp es sollen maximal 8 stück sein und zb die 5 soll wahrscheinlicher sein als 8 und die 2 wahrscheinlicher als 1 zb ... irgendwie sowas ..

4

03.09.2007, 15:24

pff ... ganz einfach ^^ Schonmal Stochastik gehabt? :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//#include <ctime>

//#include <cstdlib>

#include <vector>
#include <algorithm>
#include <iterator>

std::vector<double> data;
// std::srand(std::time(0)); bin mir nicht sicher ob std::random_shuffle das braucht ...

for (double i = 1.0; i < 9.0; i += 1.0) data.push_back(i);
data.push_back(5);
data.push_back(2);

std::random_shuffle(data.begin(), data.end());
std::cout << "Randome: " << data[0] << std::endl;
std::cout << "Total data: ";
std::copy(data.begin(), data.end(), std::ostream_iterator<double>(std::cout, ";"));
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

5

03.09.2007, 15:29

Kann man es so machen das man zb hat

int time = zufalls zahl von range 1 bis 8 , wo 4,5,6,2 wahrscheinlicher sind als die anderen Zahlen und diese Zufalls zahl soll dann in time gespeichert werden

Edit : Das Problem ist auch noch das ich keine Zahlen von 1 bis 8 habe sondern Millisekunden von 15 sek angefangen bis 40 sec ( Achtung MIliiisec)
d.h ich kann doch nicht jede einzelne zahl schreiben oder ? das wären ja dann 25 Zahlen oki so viele auch wieder nicht :lol:

6

03.09.2007, 15:47

Öhm sach mal konkret was du haben willst ... das ist halt das was mir gerade als 1. eingefallen ist ... hmm ...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vector>
#include <algorithm>

template <typename T>
T rand_likely(T const& low, T const& height, const std::vector<T>& more_likely)
{
    std::vector<T> tmp_data(height - low + more_likely.size());
    T data = low;
    for (std::size_t i = 0; i < (tmp_data.size() - more_likely.size()); ++i, ++data) tmp_data[i] = data;
    std::copy(more_likely.begin(), more_likely.end(), tmp_data.begin() + (height - low));
    std::random_shuffle(tmp_data.begin(), tmp_data.end());
    return tmp_data.at(0);
}
... sowas ist doch ganz in Ordnung ... ist aber nicht getestet ... nur kurz reingetippt ... no time ^^
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

7

03.09.2007, 15:49

aja ... genutzt wird es so:

C-/C++-Quelltext

1
2
3
4
5
std::vector<int> unlikely;
for (std::size_t i = 0; i < 9; i += 2) unlikely.push_back(i);

int time(rand_likely<int>(1, 8, unlikely));
std::cout << time << std::endl;
...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

8

03.09.2007, 16:22

Also ich habe eine FUnktion die einen Thread schlafen legt , dieser muss ich eine Zeit in Millisekunden übergeben , die Zeit soll Nach dem Zufalls Prinzip zwischen 15 sekunden und 45 ausgewählt werden , also

zb wäre die erste Zahl 1000 , dann 2000, dann 3000 usw bis 45 ....

jetzt kommt der Zusatz , höhere zahlen sollen schwieriger zu bekommen sein als niedirigere aber Es soll nicht unmöglich sein ...


-> am ende muss die Resultierende Zahl in einem Int zb stehen ( Int Time) oder sowas .

9

03.09.2007, 17:27

tjo ... wo ist dein Problem? Kannst ja auch noch die Intervallgröße angeben ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

10

03.09.2007, 17:56

Ich verstehe nicht ganz die verwendung von der FUnktion ( wenn ich sie verwende bekomme ich immer die selbe zahl).. und wie mache ich das mit den ganzen zahlen von 15.000 (15sec) bis 45.0000 (45 sec)
Könntest du das bitte erklären ?

Werbeanzeige