Matheaufgaben generieren für Kinder
Dieser Generator erstellt Aufgaben der vier Grundrechenarten "plus, minus, mal, geteilt".
Es werden nur einfache Aufgaben generiert, keine kombinierten wie 3 x 2 - 2.
Das Aufgabenblatt sowie das Lösungsblatt können mittels Button zum Drucker gesendet werden.
Die Anwendung besteht aus drei Dateien:
- a_mathe_start.php - Aufgaben auswählen
- a_mathe_gen.php - Aufgaben werden generiert
- a_mathe_erg.php - Benutzerlösungen/Lösungen anzeigen lassen
Im Startformular kann man folgende Parameter setzen:
- einen Zahlenbereich Von
- einen Zahlenbereich Bis
- die vier Grundrechenarten, über Checkboxen einzeln oder beliebig kombiniert wählbar
- Anzahl der Aufgaben in 5er Schritten (5 - n)
Das höchste Ergebnis der Aufgaben ist dabei der eingestellte Zahlenbereich Bis. Kinder, die mit Zahlen bis
z.B. 100 rechnen sollen, bekommen dann keine Aufgaben wie 23 x 16 oder ähnlich gestellt.
Divisionsaufgaben haben ein Ergebnis ohne Rest, Subtraktionsaufgaben haben kein Negativergebnis.
Kleine Einschränkung:
Wurden alle Grundrechenarten angewählt und eine geringe Zahl an Aufgaben, könnte es sein, dass zu einer
oder mehreren Grundrechenarten keine Aufgabe gestellt wird. Das liegt daran, dass in der Datei a_mathe_gen.php
zu jedem Zahlenpaar der Operator per Zufall gewählt wird. Bei einer Aufgabenanzahl >= 20 sollten aber alle Grundrechenarten dabei sein.
Folgendes kann in der Datei a_mathe_start.php einfach über Konstanten eingestellt/verändert werden:
- Start- und Endwert des Zahlenbereichs "Von"
- Start- und Endwert des Zahlenbereichs "Bis"
- für jeden Zahlenbereich separat eine Schrittweite, heißt
- - z.B: Zahlenbereich von: 10, 13, 16 . . . usw.
- - z.B: Zahlenbereich bis: 100, 111, 122, 133 . . . usw.
- die Anzahl der max. Aufgaben
Weitere Änderungen kann natürlich auch jeder selber vornehmen
Sollten bei Subtraktionsaufgaben Negativergebnisse erwünscht sein, kann man . . .
1. In der Datei a_mathe_gen.php in der Funktion gen_aufgabe die entsprechende Anweisung benutzen
oder . . .
2. Die Konstanten Zahlenbereiche in der Datei a_mathe_start.php müssen sich überlappen, z.B.:
Wählt man dann im Startformular z.B.: Zahlen von 120 bis 50, werden die Aufgaben so gestellt, dass auch Negativergebnisse rauskommen können.
Hier werden die Aufgaben generiert und in einer Tabelle dargestellt. Neben jeder Aufgabe gibts ein Textfeld, um das Ergebnis einzutragen.
Per Klick auf einen Button können aus dem gewählten Zahlenpool auch neue Aufgaben angefordert werden.
Per Klick auf den Button Ergebnisse wird dann die Seite a_mathe_erg.php aufgerufen.
Hier wird eine Tabelle mit folgenden Spalten dargestellt:
Aufgabe, Deine Eingabe, Richtiges Ergebnis
Die Spalte Deine Eingabe enthält hierbei entsprechend:
- Das richtige Ergebnis in grüner Schriftfarbe
- Das falsche Ergebnis in roter Schriftfarbe
- Den Text "Nicht gelöst" in roter Schriftfarbe, falls zu der Aufgabe kein Eintrag existiert.
Es werden nur einfache Aufgaben generiert, keine kombinierten wie 3 x 2 - 2.
Das Aufgabenblatt sowie das Lösungsblatt können mittels Button zum Drucker gesendet werden.
Die Anwendung besteht aus drei Dateien:
- a_mathe_start.php - Aufgaben auswählen
- a_mathe_gen.php - Aufgaben werden generiert
- a_mathe_erg.php - Benutzerlösungen/Lösungen anzeigen lassen
Die Datei a_mathe_start.php
Im Startformular kann man folgende Parameter setzen:
- einen Zahlenbereich Von
- einen Zahlenbereich Bis
- die vier Grundrechenarten, über Checkboxen einzeln oder beliebig kombiniert wählbar
- Anzahl der Aufgaben in 5er Schritten (5 - n)
Das höchste Ergebnis der Aufgaben ist dabei der eingestellte Zahlenbereich Bis. Kinder, die mit Zahlen bis
z.B. 100 rechnen sollen, bekommen dann keine Aufgaben wie 23 x 16 oder ähnlich gestellt.
Divisionsaufgaben haben ein Ergebnis ohne Rest, Subtraktionsaufgaben haben kein Negativergebnis.
Kleine Einschränkung:
Wurden alle Grundrechenarten angewählt und eine geringe Zahl an Aufgaben, könnte es sein, dass zu einer
oder mehreren Grundrechenarten keine Aufgabe gestellt wird. Das liegt daran, dass in der Datei a_mathe_gen.php
zu jedem Zahlenpaar der Operator per Zufall gewählt wird. Bei einer Aufgabenanzahl >= 20 sollten aber alle Grundrechenarten dabei sein.
Folgendes kann in der Datei a_mathe_start.php einfach über Konstanten eingestellt/verändert werden:
- Start- und Endwert des Zahlenbereichs "Von"
- Start- und Endwert des Zahlenbereichs "Bis"
- für jeden Zahlenbereich separat eine Schrittweite, heißt
- - z.B: Zahlenbereich von: 10, 13, 16 . . . usw.
- - z.B: Zahlenbereich bis: 100, 111, 122, 133 . . . usw.
- die Anzahl der max. Aufgaben
Weitere Änderungen kann natürlich auch jeder selber vornehmen
Sollten bei Subtraktionsaufgaben Negativergebnisse erwünscht sein, kann man . . .
1. In der Datei a_mathe_gen.php in der Funktion gen_aufgabe die entsprechende Anweisung benutzen
oder . . .
2. Die Konstanten Zahlenbereiche in der Datei a_mathe_start.php müssen sich überlappen, z.B.:
define('MIN_VON', 50); // erste Zahl im Bereich von
define('MAX_VON', 150); // letzte Zahl im Bereich von
define('MIN_BIS', 20); // erste Zahl im Bereich bis
define('MAX_BIS', 300); // letzte Zahl im Bereich bis
Wählt man dann im Startformular z.B.: Zahlen von 120 bis 50, werden die Aufgaben so gestellt, dass auch Negativergebnisse rauskommen können.
Die Datei a_mathe_gen.php
Hier werden die Aufgaben generiert und in einer Tabelle dargestellt. Neben jeder Aufgabe gibts ein Textfeld, um das Ergebnis einzutragen.
Per Klick auf einen Button können aus dem gewählten Zahlenpool auch neue Aufgaben angefordert werden.
Per Klick auf den Button Ergebnisse wird dann die Seite a_mathe_erg.php aufgerufen.
Die Datei a_mathe_erg.php
Hier wird eine Tabelle mit folgenden Spalten dargestellt:
Aufgabe, Deine Eingabe, Richtiges Ergebnis
Die Spalte Deine Eingabe enthält hierbei entsprechend:
- Das richtige Ergebnis in grüner Schriftfarbe
- Das falsche Ergebnis in roter Schriftfarbe
- Den Text "Nicht gelöst" in roter Schriftfarbe, falls zu der Aufgabe kein Eintrag existiert.
Die Startseite
<?php
/*
* Konstanten Zahlenbereiche
* Die Zahlen nicht zu groß wählen, da es sonst zu einem TIMEOUT kommt (kommen könnte)
*/
define('MIN_VON',10); // erste Zahl im Bereich von
define('MAX_VON',100); // letzte Zahl im Bereich von
define('MIN_BIS',120); // erste Zahl im Bereich bis
define('MAX_BIS',200); // letzte Zahl im Bereich bis
/*
* Konstante Schrittweite der for-Schleifen für die Zahlenbereiche
*/
define('STEP_VON',3);
define('STEP_BIS',11);
/*
* Konstante maximale Anzahl Aufgaben
*/
define('MAX_AUFGABEN',50);
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Startformular</title>
</head>
<body>
<h3>Stelle deine Aufgaben zusammen</h3>
<form action="a_mathe_gen.php" method="post">
<h4><i>Zahlenbereich wählen</h4>
<p><select name="sel_von">
<option> Von </option>
<?php
/*
* Zwei select-Boxen für den Zahlenbereich. Die Zahlenbereiche sowie die Schrittweite der Bereiche
* können über die Konstanten oben verändert werden.
*/
for($i=MIN_VON;$i<=MAX_VON;$i+=STEP_VON){
echo '<option value="'.$i.'">'.$i.'</option>';
}
?>
</select>
<select name="sel_bis">
<option> Bis </option>
<?php
for($i=MIN_BIS;$i<=MAX_BIS;$i+=STEP_BIS){
echo '<option value="'.$i.'">'.$i.'</option>';
}
?>
</select></p>
<h4>Rechenarten wählen</h4>
<p>
<!-- 4 Checkboxen, zum Auswählen, welche Rechenarten generiert werden sollen. // -->
Addieren <input type="checkbox" name="chk_rechenart" value="+">
Subtrahieren <input type="checkbox" name="chk_rechenart" value="-">
Multiplizieren <input type="checkbox" name="chk_rechenart" value="x">
Dividieren <input type="checkbox" name="chk_rechenart" value=":">
</p>
<!-- 1 Checkbox, zum Auswählen, wieviele Rechenaufgaben generiert werden sollen. // -->
<p><select name="sel_max_aufgaben">
<option value="0"> Wieviele Aufgaben </option>
<?php
for($i=5;$i<=MAX_AUFGABEN;$i+=5){
echo '<option value="'.$i.'">'.$i.'</option>';
}
?>
</select></p>
<p><input type="submit" value="Los!"></p>
</form>
</body>
</html>
Aufgaben generieren
<?php
/*
* Wenn keine Rechenart ausgewählt wurde, zurück zur Startseite
*/
if(!isset($_POST['chk_rechenart'])){
header('location:a_mathe_start.php');
exit;
}
/*
* Wenn keine oder nur eine gültige Zahl ausgewählt wurde, zurück zur Startseite
*/
if($_POST['sel_von']==trim('Von') || $_POST['sel_bis']==trim('Bis')){
header('location:a_mathe_start.php');
exit;
}
/*
* Wenn Aufgabenanzahl nicht ausgewählt wurde, zurück zur Startseite
*/
if($_POST['sel_max_aufgaben']==0){
header('location:a_mathe_start.php');
exit;
}
/*
* Die gewünschten Rechenarten in einem Array ablegen
*/
foreach($_POST['chk_rechenart'] as $rechenart){
$rechenart_arr=$rechenart;
}
/*
* Anzahl Rechenarten
*/
$rechenart_anzahl=count($rechenart_arr)-1;
/*
* Eine Aufgabe generieren. Je nachdem welcher Operator übergeben wurde,
* wird eine entspr. Rechenaufgabe generiert. Addition und Subtraktion
* erklären sich wohl selbst. Bei Multiplikation wird erst ein Operand per
* Zufall erstellt, dann das Ergebnis. In der while-Schleife wird geprüft,
* ob das Ergebnis ohne Rest durch den Operanden teilbar ist. Falls das eintrifft,
* wird der andere Operand durch teilen Ergebnis/erster_Operand erzeugt.
* Bei der Division werden zuerst beide Operanden per Zufall erzeugt. In der while-Schleife
* wird geprüft, die Division ohne Rest erfolgt. Falls das zutrifft, endet die Schleife.
* Die generierte Aufgabe wird dann mit sprintf zurückgegeben, wobei für Multiplikation und
* Division wie im Mathebuch "x" bzw. ":" verwendet werden.
*/
function gen_aufgabe($z1,$z2,$op){
if($op == '+'){
$erg=mt_rand($z1,$z2);
$l_op=mt_rand(1,$z1);
$r_op=$erg-$l_op;
return sprintf("%d + %d",$l_op, $r_op);
}
if($op == '-'){
$l_op=mt_rand($z1,$z2);
/*
* Folgende Anweisung verwenden, falls KEINE Minusergebnisse gewünscht sind
*/
$r_op=mt_rand(1,$z1);
/*
* Folgende Anweisung verwenden, falls AUCH Minusergebnisse gewünscht sind
*/
//$r_op=mt_rand($z1,$z2);
return sprintf("%d - %d",$l_op, $r_op);
}
if($op == 'x'){
$l_op=mt_rand(1,$z1);
$erg=mt_rand($z1,$z2);
while($erg%$l_op !=0){
$l_op=mt_rand(1,$z1);
$erg=mt_rand($z1,$z2);
}
$r_op=$erg/$l_op;
return sprintf("%d x %d",$l_op, $r_op);
}
if($op == ':'){
$l_op=mt_rand($z1,$z2);
$r_op=mt_rand(1,$z1);
while($l_op%$r_op != 0){
$l_op=mt_rand($z1,$z2);
$r_op=mt_rand(1,$z1);
}
//$erg=$l_op/$r_op;
return sprintf("%d : %d",$l_op, $r_op);
}
}
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Arbeitsblatt - Und los gehts</title>
</head>
<body>
<form action="a_mathe_erg.php" method="post">
<h3>Ergebnisse in das Textfeld eintragen</h3>
<table border="5" cellspacing="5" cellpadding="5">
<?php
/*
* Gewünschte Anzahl Aufgaben generieren
*/
for($i=0;$i<$_POST['sel_max_aufgaben'];$i++){
/*
* Zuerst den Operator per Zufall aus dem Array wählen
*/
$op=$rechenart_arr[mt_rand(0,$rechenart_anzahl)];
/*
* Der Zahlenbereich Von - Bis und der Operator werden an die Funktion übergeben.
* Diese gibt eine Aufgabe zurück, welche in einer Variablen gespeichert wird.
*/
$aufgabe=gen_aufgabe($_POST['sel_von'], $_POST['sel_bis'], $op);
/*
* Ein verstecktes Textfeld-Array wird ebenfalls mit den Aufgaben gefüllt.
*/
echo '<input type="hidden" name="aufgabe" value="'.$aufgabe.'">';
/*
* Die Aufgabe am Bildschirm ausgeben. Zusätzlich ein Textfeld-Array erzeugen,
* in das die Ergebnisse geschrieben werden.
*/
echo '<tr><td>'.$aufgabe.' </td><td> = </td><td><input type="text" name="erg"></td></tr>';
}
?>
</table>
<p>
<button onclick="location.reload()">Neue Aufgaben anfordern</button>
<input type="submit" value="Ergebnisse">
<a style="text-decoration: none;color: blue;" href="a_mathe_start.php"> Zur Startseite </a>
</p>
</form>
<button onclick="window.print()">Arbeitsblatt drucken</button>
</body>
</html>
Ergebnisse ausgeben
<!DOCTYPE HTML>
<html>
<head>
<title>Ergebnisse</title>
</head>
<body>
<h3>Auswertung</h3>
<table border="5" cellspacing="5" cellpadding="5">
<tr>
<th>Aufgabe</th><th>Deine Eingabe</th><th>Richtiges Ergebnis</th>
</tr>
<?php
/*
* Ergebnis berechnen. Zuerst wird ein Array mit den möglichen Operatoren erzeugt.
* Dann wird das Array in einer Schleife durchlaufen, und jeweils geprüft, ob der
* Operator in Aufgabe enthalten ist. Trifft das zu (case . . .), wird Aufgabe in
* einem Array abgelegt mit dem Operator als Trennzeichen. $erg enthält den ersten,
* $erg[1] den zweiten Operanden und das Rechenergebnis wird sofort zurückgegeben.
*/
function berechne($aufgabe){
$op_arr=array(0 => '+',1 => '-',2 => 'x',3 => ':');
for($i=0;$i<count($op_arr);$i++){
switch($aufgabe[strpos($aufgabe,$op_arr[$i])]){
case '+':$erg=explode('+',$aufgabe);return $erg+$erg[1];
case '-':$erg=explode('-',$aufgabe);return $erg-$erg[1];
case 'x':$erg=explode('x',$aufgabe);return $erg*$erg[1];
case ':':$erg=explode(':',$aufgabe);return $erg/$erg[1];
}
}
}
/*
* In der Schleife wird das gesendete Aufgaben-Array durchlaufen. Die Aufgabe wird an
* die Funktion berechne übergeben und das Ergebnis in $erg gespeichert.
* Die Eingabe aus dem Arbeitsblatt wird in $dein_erg gespeichert.
* Stimmen beide nicht überein, wurde eine falsche Eingabe gemacht und die Eingabe wird rot
* ausgegeben, ansonsten grün. Zum Vergleich wird daneben das Ergebnis aus der Funktion ausgegeben.
*/
for($i=0;$i<count($_POST['aufgabe']);$i++){
$erg=berechne($_POST['aufgabe'][$i]);
$dein_erg=$_POST['erg'][$i];
if(empty($_POST['erg'][$i])){
$dein_erg='Nicht gelöst';
}
echo '<tr>';
echo '<td>'.$_POST['aufgabe'][$i].'</td>';
if($erg != $dein_erg){
echo '<td><font color="#ff0000">'.$dein_erg.'</font></td>';
}else{
echo '<td><font color="#009900">'.$dein_erg.'</font></td>';
}
echo '<td>'.$erg.'</td>';
echo '</tr>';
}
?>
</table>
<p>Grün = Richtig - Rot = Falsch <a href="a_mathe_start.php" style="text-decoration: none;color: blue;"> Zur Startseite </a></p>
<p><button onclick="window.print()">Arbeitsblatt drucken</button></p>
</body>
</html>
Please also mark the comments that contributed to the solution of the article
Content-ID: 279311
Url: https://administrator.de/contentid/279311
Printed on: December 14, 2024 at 17:12 o'clock
3 Comments
Latest comment
Hallo,
schön geklaut!
http://www.bituniverse.com/forum/s/viewtopic.php/t,589/subject,Rechenbl ...
Finde ich daneben !
zumindest darafu hinweisen das du es nur zusammenkopiert hast....wäre fair und richtig!
brammer
schön geklaut!
http://www.bituniverse.com/forum/s/viewtopic.php/t,589/subject,Rechenbl ...
Finde ich daneben !
zumindest darafu hinweisen das du es nur zusammenkopiert hast....wäre fair und richtig!
brammer