| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: unlogisches mit C++ im Forum Code Kitchen, in der Kategorie Software Home; Anzeige hi leute, habe heute mal eine endtestatsaufgabe programmiert (code siehe weiter unten). dieses teil soll einfach ein 2-dimensionales array ...
![]() |
| | #1 (permalink) |
| Registriert seit: 13.09.05 ![]() Likes: 5 | unlogisches mit C++ Anzeige hi leute, habe heute mal eine endtestatsaufgabe programmiert (code siehe weiter unten). dieses teil soll einfach ein 2-dimensionales array mit zufallszahlen füllen für den bereich von 0 - n (n gibt man per eingabe vor) wenn man denn code genauso kopiert und ausführt, werden immer die gleichen Zahlen ausgeben - jedoch nur, wenn man auswählt "ausführen OHNE debuggen". startet man den prozedurschritt debugger, dann funktioniert das programm. habe es unter folgenden entwicklungsumgebungen getestet: Dev-C++ (neuste version) und Visual Studio 2005. hier der code zum ausprobieren: Code: #include <iostream>
#include <time.h>
using namespace std;
int main ()
{
char Abbruch = 'j';
int Zahlenbereich;
int Matrix [3][3];
int i=0;
int j=0;
int zahl;
int msumme=0;
do
{
cout << "Bereich der Zufallszahlen: ";
cin >> Zahlenbereich;
while(i<3)
{
do
{
srand ((unsigned int) time(NULL));
zahl = (rand()%Zahlenbereich) + 1;
Matrix [i][j]=zahl;
j++;
}
while (j<3);
i++;
j=0;
}
i=0;
j=0;
// ausgeben
while(i<3)
{
do
{
cout << Matrix [i][j] << " ";
j++;
}
while (j<3);
i++;
j=0;
cout << endl;
}
}
while (Abbruch!='j');
return 0;
} der code in zeile 28 Code: srand ((unsigned int) time(NULL)); viel spaß...
__________________ und? |
| | |
| | #2 (permalink) |
| Senior Member Registriert seit: 10.03.07 ![]() Likes: 19 | Soweit ich mich aus meiner C Zeit noch erinnere musste man den Zufallsgenerator erst noch starten, bevor man rand() gemacht hat. |
| | |
| | #4 (permalink) |
| Senior Member Registriert seit: 10.03.07 ![]() Likes: 19 | Ging das nicht auch mit randomize()? Oder bin ich da jetzt bei der falschen Sprache? |
| | |
| | #5 (permalink) | |
| Themenstarter Registriert seit: 13.09.05 ![]() Likes: 5 | schaut euch zeilen 27 - 29 etwa an. da benutze ich srand und danach erst rand. d.h. es müsste also funktionieren! dieses programm soll Zufallswerte in alle elemente des 2-dimensionalen arrays speichern und anschließend ausgeben. Zitat:
__________________ und? | |
| | |
| | #6 (permalink) |
| Moderator ![]() Registriert seit: 30.03.04 ![]() Likes: 14 | Hallo, ich weiß nicht was du daran unlogisch findest... Evt. ist dir noch nicht bewusst dass dein Rechner eine Rechenmaschine ist und dementsprechend auch nur Rechnen kann. Code: do
{
srand ((unsigned int) time(NULL));
zahl = (rand()%Zahlenbereich) + 1;
Matrix [i][j]=zahl;
j++;
}
while (j<3); Diese Schleife wird in 0,0000000000000000000001 Sekunden durchlaufen, bis dahin hat sich an time() nicht geändert. D.h., dein Zufallsgenerator wird immer mit dem gleichen Wert initialisiert und liefert somit immer die gleichen Zufallszahlen. Bei Zufallsgenatoren macht man es so, dass man diese einmal initialisiert und dann fortlaufend auf rand() zugreift. Denn deine Lösung wäre äquivalent mit: zahl = ( ((unsigned int) time(NULL))%Zahlenbereich) + 1; |
| | |
| | #7 (permalink) | |
| Registriert seit: 23.03.05 ![]() Likes: 22 | Zitat:
| |
| | |
| | #8 (permalink) |
| Themenstarter Registriert seit: 13.09.05 ![]() Likes: 5 | @eldaran: ne unlogisch klingt das jetzt nicht gerade! deswegen scheints mim debugger eben zu klappen, weil meine machine dann einfach mehr zeit hat aber noch ne frage: bedeutet time(NULL) nicht, das er einfach bei 0 anfangen soll. d.h. wenn ich time(20) eingebe fängt der bei 20 an. jemand hatte mir erklärt, das das keine echte zufallszahlen sind, sondern seeds. wahrsch. hängt das dann damit zusammen. aber ist doch schon ein recht merkwürdiger effekt, wenn man halt bedenkt das es mim debugger einwandtfrei läuft.....normalerweise sollte der dann auch in kürzester zeit doch die zahlen ändern? naja is ja auch egal, muss man halt aufpassen ;]
__________________ und? |
| | |
| | #9 (permalink) | ||
| Moderator ![]() Registriert seit: 30.03.04 ![]() Likes: 14 | Hallo, Zitat:
Deine CPU ist aber mittlerweile so schnell, dass diese die Schleife so schnell abarbeitet, dass sich der Wert den time() zurückgibt nicht ändert, da diese nur eine endliche Genauigkeit hat => gleicher Startwert (time() hat sich nicht geändert) => gleiche (Pseudo)Zufallszahlen Zitat:
| ||
| | |
| | #10 (permalink) | |
| Themenstarter Registriert seit: 13.09.05 ![]() Likes: 5 | Zitat:
ne quatsch. also das mit dem time ist schon klar,aber wenn man das zum erstenmal sieht denkt man im ersten moment ned an time, im 2ten ists mir aber dennoch schon aufgefallen irgendwie ;-) naja ich denke das kann man schon so als info lassen für anfänger.
__________________ und? | |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| C++: unlogisches Verhalten bei Grundrechenregeln | Extinction | Code Kitchen | 2 | 07.06.08 19:53 |