Mathe generator

ICEWeasel

Grünschnabel
Hi
Hab ein kleines Mathe Programm geschrieben, das aufgaben generiert (mit +,-,*)
und hab dazu mal 2 Fragen:

1. ich habe den Befahl "zahl=rand()%100" benutzt um die Zahlen für die Aufgabe zu generieren. Das Problem is nur, das er jedes mal wenn ich das Programm starte die selbe generierten Zahlen hab!
Gibt es einen Befehl der immer andere Zahlen generiert?

2. Ich will auch noch die division (und Subtraktion) einbringen und müßte nach dem er die zahlen generiert die zahlen prüfen ob die erste Zahl auch größer als die 2 zahl is, da sonst -Zahlen rauskommen würdden, was ich nicht will!
Weiß jemand wie das geht


Hier der quellcode von +:

Code:
for (i=1;i<=menge;i++){  

	printf("\n\n\n\nAufgabe Nr.%i",i);
	zahl=rand()%100;
	printf("\n\n%i+",zahl);
	zahl1=rand()%100;		
	printf("%i",zahl1);
	erg=zahl+zahl1;			
	printf("=");
	scanf("%i",&eingabe);
		
	if (erg==eingabe)
		printf("\nRichtig");
	else 
		printf("\nFalsch! Richtig w\x84re %i gewesen!",erg); 
}


Wäre cool wenn jemad ne Lösung hat

ICEY

[edit mod=joki]Code-Tags eingefügt![/edit]
 
Zuletzt bearbeitet von einem Moderator:
Habe solches matheprog geschrieben

Hi ... Habe ein solches matheprog geschrieben ... aber leider in VB6 ... habe aber alle bedingungen editierbar gemacht (ob: ergebniss unter 0 sein darf, bei addition größte summe) habe es ursprünglich für meinen sohn geschrieben ... hat + und minus ... div und mult ... komt in der nächsten version ... wann auch immer

bei interresse einfach melden crd-computer@email.de
 
Damit die eine Zahl größer als die andere ist, einfach eine do-while-schleife einbauen, die solange läuft bis die Vorraussetzung passt!

Code:
do{
	zahl=rand()%100;
	zahl1=rand()%100;		
}while(zahl<zahl1);
 
oder noch kuerzer von der laufzeit.

zahl=rand()%100;
zahl1=zahl+rand()%(100-zahl)

damit ist die bedingung erfuellt nach dem ersten durchlauf
 
also um beim start nicht immer die selben zufallsazahlen zu bekommen machst du beim start des progys einmal das folgende:
Code:
#include <time.h>
Code:
srand((unsigned int)time(0));
 
Zuletzt bearbeitet:
erstmal vielen dank für die antworten!

Hab jetzt nochmal ne frage und zwar will ich kettenaufgaben machen (2+3-4*4...=X) und will die zeichen auch zufällig haben.
Kann man die 3 Zeichen (+,-,*) festlegen und dem rechner dann endscheiden lassen welches er nimmt?
 
Also...

ich hab jedem Operator eine zahl zugewiesen (+=1,-=2.*=3,/=4) und sie dan per zufall auswählen lassen
 
Ja aber das geht ja nicht!
Denn ich muß ja ne gelichung machen "ergebnis=zahl+zahl1-zahl3*zahl4" und ich kann ja nicht in der Geleichung die zeichen generieren
"ergebnis = zahl zeichen1 zahl1 zeichen 2 zahl 3 zeichen 3 zahl4"
oder kann man das mit der Gelichung anders lösen
 
if(zeichen1 == 0) {
ergebnis += zahl1 + zahl2;
}

Und das in ne Schleife mit der Abfrage für die andern Zeichen. Evt. musst du die Zahlen und die Zeichen in nen Array packen.

Achtung: Wenn du chibisuke's Beispiel einfach kopierst gibt es einen Fehler. unsigend muss unsigned heissen.
 
Zuletzt bearbeitet:
ups sorry hab das natürlich sofort korrigiert...

und was zufallsgenerator mit rechenzeichen betrifft
Code:
float randomCalc(float a, float b) {
    int sign = rand() % 4;
    switch(sign) {
        case 0: //addition
            return (a + b);
        case 1: //subtraktion
            return (a - b);
        case 2: //multiplikation
            return (a*b);
        case 3: //division
            return (a/b);
        default:
            __assume(0);
    }
}
wenn sich jemand wegen dem __assume(0) wundert.. das sagt dem compiler nur das die stelle in dem code niemals erreicht wird, dadurch leuft das progy n wenig schneller
 

Neue Beiträge

Zurück