Seite 1 von 1

Borland C++ 3.1 - Zufallsgenerator

Verfasst: Mi 3. Apr 2013, 20:00
von matze79
So hab mal wieder bisschen mit C++ rumgespielt und dieses kleine Programm (Siehe Code) gebastelt,
um ein bisschen mit den Zufallsgenerator rumzuspielen.
Aber irgendwie kommen mir da zu oft Wiederholungen vor.
Jemand eine Idee wie man dass ein bisschen zufälliger gestalten kann ?

Code: Alles auswählen

#include<iostream.h>
#include<stdlib.h>
#include<time.h>

int main(){
srand(time(NULL));
int gut,fehler,zufall1,aufgabe,zufall2,summe,eingabe,counter;
counter=0;
fehler=0;
gut=0;
cout << "Der kleine 1 mal 1 Trainer" << endl;
cout << "-----------------------------" << endl;
cout << "Es folgen nun 30 kleine Aufgaben." << endl;
cout << "Sie koennen das Programm jederzeit mit STRG+C beenden." << endl;

for (counter=0; counter<30; counter++){
aufgabe=counter+1;

zufall1 = (rand() % 9) +1;
zufall2 = (rand() % 9) +1;
summe=zufall1*zufall2;
cout << "Aufgabe Nr." << aufgabe << endl;
cout << zufall1 << " * " << zufall2 << " = ?" << endl;
cout << "Eingabe?" << endl;
cin >> eingabe;
if ( eingabe == summe ){
cout << "Richtig!!!\n" << endl;
gut=gut++;
}
else {
cout << "Falsch!!!\n" << endl;
fehler=fehler++;
}
}
cout << "Finish" << endl;
cout << "------" << endl;
cout << "Du hattest " << gut << " von 30 Aufgaben richtig!!!" << endl;
return 0;
}


Re: Borland C++ 3.1 - Zufallsgenerator

Verfasst: Do 4. Apr 2013, 20:33
von wobo
Was macht die Zeile

Code: Alles auswählen

srand(time(NULL));
genau? Ich nehme an, sie startet den Zufallsgenerator (start random o.ä.), aber was bedeutet das time(NULL)?

Re: Borland C++ 3.1 - Zufallsgenerator

Verfasst: Fr 5. Apr 2013, 10:10
von matze79
initialsiert den Zufallsgenerator mit der Uhrzeit als seed.

Soweit so gut :) mehr weiss ich auch nicht drüber.

Re: Borland C++ 3.1 - Zufallsgenerator

Verfasst: So 7. Apr 2013, 20:36
von wobo
matze79 hat geschrieben:So hab mal wieder bisschen mit C++ rumgespielt und dieses kleine Programm (Siehe Code) gebastelt,
um ein bisschen mit den Zufallsgenerator rumzuspielen.
Aber irgendwie kommen mir da zu oft Wiederholungen vor.
Jemand eine Idee wie man dass ein bisschen zufälliger gestalten kann ?
Vielleicht ist Dein Eindruck auch nur subjektiv?

Was passiert eigentlich, wenn Du nicht den Modulo von 9 als Faktor nimmst, sondern z.B. die Tausender,

z.B statt:

Code: Alles auswählen

zufall1 = (rand() % 9) +1;
zufall2 = (rand() % 9) +1;
ungefähr etwa so: (PS: kann kein C!)

Code: Alles auswählen

zufall1 = (rand() % 9000) / 1000 +1;
zufall2 = (rand() % 9000) / 1000 +1;
Also Zufallszahlen von 0..8999, dann Ganzzahlendivision durch 1000 -> 0..8 + 1 = 1..9;

Re: Borland C++ 3.1 - Zufallsgenerator

Verfasst: Mo 8. Apr 2013, 20:28
von matze79
http://vgeck.strangled.net/dos/1mal1.zip ~14Kb

Hier mal das Programm als DOS Executable.

Es macht kaum einen Unterschied ob 9 1 oder 9000 1000.
Jedenfalls merk ich keinen :)
Mir kommts so vor als würde die 1 relativ hauefig auftreten.
Je laenger man zwischen den Aufgaben wartet so scheint es, sind auch die Zahlen verschiedener.
Denke das liegt an der Uhrzeit als Quelle.

Gruß Matze

Re: Borland C++ 3.1 - Zufallsgenerator

Verfasst: Di 9. Apr 2013, 22:59
von wobo
Ich fand Dein Programm hat super funktioniert: Zuerst dachte ich noch, ich haette eine Häufung von 5 und 8; im zweiten Durchlauf waren dann aber die Zahlen eigentlich recht kunterbunt gemischt! Vielleicht liegt es wirklich an der Systemzeit, wie die Zahlen dann aussehen.

Drei Sachen sind mir noch aufgefallen:

1. Booa - ich habe echt Probleme in Mathe. So Sachen wie 6*8 haben mich echt kurz ins Grübeln gebracht. Merkt man halt schon, wenn man 20 Jahre nichts außer Mehrwertsteuer ausrechnen musste :-)
2. Dein Programm hat Probleme, wenn ich versehentlich Buchstaben und keine Zahlen eingebe. Dann rennt es 30 Mal durch und gibt nur Fehlermeldungen aus...
3. Was macht eigentlich die Zeile in einem C-Source immer?

Code: Alles auswählen

int main()

Re: Borland C++ 3.1 - Zufallsgenerator

Verfasst: Mi 10. Apr 2013, 10:36
von Brueggi
Wenn meine C-Kenntnisse noch reichen, ist das

int main(){

}

vergleichbar mit

begin

end.

Re: Borland C++ 3.1 - Zufallsgenerator

Verfasst: Mi 10. Apr 2013, 16:07
von matze79

Code: Alles auswählen

int main(){
/// Hauptprogramm ///
}
Wobei int einen Integetercode zurück gibt. (Exitcode)
Bei void main würde keiner zurückgegeben werden. (Ist in C++ glaub ich eh tabu)
wobo:
2. Dein Programm hat Probleme, wenn ich versehentlich Buchstaben und keine Zahlen eingebe. Dann rennt es 30 Mal durch und gibt nur Fehlermeldungen aus...
Jep ich mach keine Abfrage, es wird nicht überprüft was eingegeben wird.
Das kommt als nächstes noch, mir gings Primär um den Zufallsgenerator.

Ich lerne im moment etwas C/C++ da ich mal wieder was programmieren wollte.

QB 4.5 und TP 7.01 sind halt leider nicht sehr portabel (klar mit Dosbox lauefts überall..) und mit C/C++ kann ich binarys für alle möglichen Platformen erzeugen, vorzugsweise natürlich DOS.

Re: Borland C++ 3.1 - Zufallsgenerator

Verfasst: So 14. Apr 2013, 18:35
von wobo
matze79 hat geschrieben:

Code: Alles auswählen

int main(){
/// Hauptprogramm ///
}
Wobei int einen Integetercode zurück gibt. (Exitcode)
Bei void main würde keiner zurückgegeben werden. (Ist in C++ glaub ich eh tabu)

...

QB 4.5 und TP 7.01 sind halt leider nicht sehr portabel (klar mit Dosbox lauefts überall..) und mit C/C++ kann ich binarys für alle möglichen Platformen erzeugen, vorzugsweise natürlich DOS.
Danke für die Info! Ich hatte mich wegen des int vor main schon gewundert, weil Du ja später mit

Code: Alles auswählen

int gut,fehler,zufall1,aufgabe,zufall2,summe,eingabe,counter; 
Integer-Variablen angelegt hast.

Dass dann ein ErrorCode zurückgegeben wird, erklärt das int vor main ja. Aber wie würde man denn eigentlich einen konkreten ErrorCode unter C zurückgeben? Unter Pascal kannst Du einfach schreiben "Halt(x)", wobei x der ErrorCode ist.

C zu lernen ist mit Sicherheit ´ne gute Entscheidung. Mit Pascal ist man halt einfach auf TP festgefahren, während Du bei C ja doch eine ganze Menge an Compilern zur Verfügung hast - von der besseren Portierbarkeit ja ganz zu schweigen...

Hatte mir auch schon überlegt, ob ich C lernen soll (deswegen frage ich hier soviel rum :-)), aber erst, wenn ich mit Pascal durch bin...

Re: Borland C++ 3.1 - Zufallsgenerator

Verfasst: Di 16. Apr 2013, 20:17
von matze79
Ich hab noch nicht so den Peil, musste jetzt von Borland C++ weg.. weil dieser keine namespaces mehr unterstützt.
Leider laufen die Programme die mit DJGPP erstellt wurden nur noch auf 386ern.

Ich muss sagen Pascal nimmt einen doch viel ab. In C/C++ ist es schon eine Sache nur einen Farbigen Text auszugeben,
oder die Eingabe auf Richtigkeit zu überprüfen. Relativ Kryptisch.

Aber mit der Zeit bildet man dann seine eigene Funktionssammlung.

Den Errorcode gibt man einfach mit return 0; zurück (0 = alles i.O.)

Es gibt ja glaub ich noch FreePascal, da soll es auch Compiler geben?
WinFF ist z.B. in FP geschrieben.