Borland C++ 3.1 - Zufallsgenerator

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Antworten
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Borland C++ 3.1 - Zufallsgenerator

Beitrag 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;
}

https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
wobo
DOS-Guru
Beiträge: 614
Registriert: So 17. Okt 2010, 14:40

Re: Borland C++ 3.1 - Zufallsgenerator

Beitrag 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)?
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Re: Borland C++ 3.1 - Zufallsgenerator

Beitrag von matze79 »

initialsiert den Zufallsgenerator mit der Uhrzeit als seed.

Soweit so gut :) mehr weiss ich auch nicht drüber.
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
wobo
DOS-Guru
Beiträge: 614
Registriert: So 17. Okt 2010, 14:40

Re: Borland C++ 3.1 - Zufallsgenerator

Beitrag 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;
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Re: Borland C++ 3.1 - Zufallsgenerator

Beitrag 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
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
wobo
DOS-Guru
Beiträge: 614
Registriert: So 17. Okt 2010, 14:40

Re: Borland C++ 3.1 - Zufallsgenerator

Beitrag 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()
Brueggi

Re: Borland C++ 3.1 - Zufallsgenerator

Beitrag von Brueggi »

Wenn meine C-Kenntnisse noch reichen, ist das

int main(){

}

vergleichbar mit

begin

end.
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Re: Borland C++ 3.1 - Zufallsgenerator

Beitrag 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.
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
wobo
DOS-Guru
Beiträge: 614
Registriert: So 17. Okt 2010, 14:40

Re: Borland C++ 3.1 - Zufallsgenerator

Beitrag 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...
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Re: Borland C++ 3.1 - Zufallsgenerator

Beitrag 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.
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
Antworten