• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Fragen zu Rechenscript für kl. Schwester

Status
Für weitere Antworten geschlossen.

yss

Mitglied
Hallo Leute,
ich bin gerade dran ein Rechenscript zu schreiben, für meine kleine Schwester. Sie ist in der 1. Klasse und rechnet von 1-20 + und -.
Die 2 Zahlen lasse ich per random erzeugen und füge sie in die Seite ein, den Rechenoperator lasse ich auch erzeugen, wenn der Wert 1 ist dann wird er zu + und wenn nicht zu -.
Nun muss ich ja die 2 Zahlen zusammen rechnen, abhängig von dem Operator. Das geht ganz gut, aber bei + nimmt er immer die 1. Zahl und fügt die 2. dran, warum?
Desweiteren muss ich ja dann überprüfen ob das Ergebnis unter 0 und und über 20 ist, wenn ja dann soll der die Funktion wiederholen, da kommt dann aber immer eine Meldung. Ich glaube das der Stack dann einen overflow hat (Sagt man das so xD).
Hier der Code:
JavaScript:
HTML:
function creatNumber( min, max ) {
			if( min > max ) {
			return( -1 );
			}
			if( min == max ) {
			return( min );
			}
 
        	return( min + parseInt( Math.random() * ( max-min+1 ) ) );
		}
		
		function creatTask(){
			var number1 = creatNumber(1,15);
			var number2 = creatNumber(1,15);
			var number3 = creatNumber(1,2);
			
			document.getElementById('number1').innerHTML = number1;
			document.getElementById('number2').innerHTML = number2;
			
			if(number3 == 1){
				document.getElementById('operator').innerHTML = '+';
			}else{
				document.getElementById('operator').innerHTML = '-';
			}
		}
		
		function checkNumber(){
			var rechnumber1 = document.getElementById('number1').innerHTML;
			var rechnumber2 = document.getElementById('number2').innerHTML;
			var operator = document.getElementById('operator').innerHTML;
			var eingabe = document.getElementById('erg').value;
			var ergebnis;
			
			//Operator überprüfen und rechenen
			if(operator == '-'){
				var ergebnis = rechnumber1-rechnumber2;
			}else{
				var ergebnis = rechnumber1+rechnumber2;
			}
			
			//Überprüfen ob unter 0 und über 20
			
			if(ergebnis <= '-1'){
				checkNumber();
			}else if(ergebnis >= '21'){
				checkNumber();
			}else{
				alert('Andere Zahl!');
			}
			alert(ergebnis);
		}

Und HTML:
HTML:
<body onload="creatTask()">
	<div id="number1"></div>
	<div id="operator"></div>
	<div id="number2"></div>
	<div id="gleich">=</div>
	<input type="text" id="erg" name="erg" />
	<button id="submit" onclick="checkNumber()">Prüfen!</button>
</body>
 
Dass die Zahlen aneinandergehängt werden, liegt daran, dass JS die Zahlen als Strings erkennt (das Pluszeichen dient in JS als "Kleber" für Strings). Wenn du die Zahlen mit Hilfe von parseInt() umwandelst, müsste es funktionieren.
var ergebnis = parseInt(rechnumber1) + parseInt(rechnumber2);
 
Gut, vielen Dank, das funktioniert jetzt.
Und wie schaffe ich es, dass wenn es weniger als 0 und mehr als 20 ist, die Funktion nochmals durchlaufen wird?
Das ist doch schon ein Anfang, oder?
//Überprüfen ob unter 0 und über 20

if(ergebnis <= '-1'){
alert('Zu wenig');
}else if(ergebnis >= '21'){
alert('Zu viel');
}else{
alert('Genau richtig');
}
alert(ergebnis);
 
hallo
also wenn ich das so alles richtig verstanden habe ware die liegt dein problem daran das du deine uberprufung in der falschen funktion hast
es soll nachdem die nummern erstellt wurden uberprufen ob die aufgabe so ist das die kleine schwester das schon kann und sonst neu gemacht wird also mach es auch in die variablen erstell funktion

also wenn deine funktion geladen wird zeigt die die nummern an auch wenn das ergebnis uber 20 (unter 0) ist und wenn man auf den button klickt stellt der fest das das uber 20 (unter 0) ist und dann checkt der nochmal aber es andert sich ja nichts und die funktion lauft ewig. auserdem zeigt deine funktion gar nicht ob deine kleine schwester richtig gerechnet hat

Code:
function creatNumber( min, max ) {
            if( min > max ) {
            return( -1 );
            }
            if( min == max ) {
            return( min );
            }
 
            return( min + parseInt( Math.random() * ( max-min+1 ) ) );
        }
        
        var ergebnis;
        // var ergebnis auserhalb der funktionen damit mehrere funktionen darauf zugreifen konnen

        function creatTask(){
            var number1 = creatNumber(1,15);
            var number2 = creatNumber(1,15);
            var number3 = creatNumber(1,2);
            
            document.getElementById('number1').innerHTML = number1;
            document.getElementById('number2').innerHTML = number2;
            
            if(number3 == 1){
                document.getElementById('operator').innerHTML = '+';
                ergebnis = parseInt(number1)+parseInt(number2);
            }else{
                document.getElementById('operator').innerHTML = '-';
                ergebnis = parseInt(number1)-parseInt(number2);
            }

            
            
            if(ergebnis <= '-1'){
                    // tauscht die nummern damit es wieder positiv wird 5-12 wird zu 12-5
                    number1 = document.getElementById('number2').innerHTML;
                    number2 = document.getElementById('number1').innerHTML;
                    document.getElementById('number1').innerHTML = number1;
                    document.getElementById('number2').innerHTML = number2;
                    // ende nummern tauschen
    
                    // hier minus weil es ja bei einem negativen ergebnis kein plus gewesen sein kann
                    ergebnis = parseInt(number1)-parseInt(number2);            

            }else if(ergebnis >= '21'){
                // nochmal neu erstellen
                creatTask();
            }else{
                // zahl ist zwischen -1 und 21
            }
            
            
            
            
            
            
            
        }
        
        function checkNumber(){

            var eingabe = document.getElementById('erg').value;
            
            if(eingabe == ergebnis) {
                alert('richtig');
            }else {
                alert('fast richtig versuch nochmal');
            }

        }
        
        function neueaufg() {
            document.getElementById("gleich").value = "";
            creatTask();

        }

und der body

HTML:
<body onload="creatTask()">
    <div id="number1"></div>
    <div id="operator"></div>
    <div id="number2"></div>
    <div id="gleich">=</div>
    <input type="text" id="erg" name="erg" />
    <button id="submit" onclick="checkNumber()">Prüfen!</button>
    <button id="neu" onclick="neueaufg()">Neue Aufgabe</button>

so bei mir funktioniert es prima. wenn es minus ist werden die nummern getauscht wenn es plus ist wird einfach die funktion nochmal durchlaufen und neue nummern erstellt. dardurch gibt es aber ofters minus aufgaben wenn du das auch mit einem neuen durchlaufen regeln willst ersetz den ganzen tausch code durch
creatTask();beim erstellen der aufgabe rechnet er schon das ergebnis und dann pruft der ob es passt deswegen brauchen wir beim checken nicht nochmal zu rechnen sondern nehmen das ergebnis und prufen ob es mit der eingabe ubereinstimmt.
dann kommt entweder richtig oder falsch.

fur eine neue aufgabe loschen wir einfach das eingebe feld und starten die creatTask funktion nochmal


wolltest du das so haben??
ich hoffe ich konnte helfen

MfG ben
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben