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
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:
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?
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
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:
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.