Rekensommen
Hallo allemaal,
Ik zit met een klein probleempje:
Ik wil graag een som genereren, waarbij je twee willekeurige getallen tussen -10 en 10 met elkaar vermenigvuldigen, delen, optellen of aftrekken (de 0 mag niet voorkomen en minstens 1 van de 2 getallen moet positief zijn).
Nu moet er ook willekeurig gekozen worden tussen vermenigvuldigen, delen, optellen en aftrekken. Ik heb dat op de volgende manier gedaan:
$getal1 = rand(-10, 10);
$getal2 = rand(-10, 10);
while ($getal1 == 0 or $getal2 == 0 or ($getal1 > 0 and $getal2 > 0)) {
$getal1 = rand(-10, 10);
$getal2 = rand(-10, 10);
}
$operator = array("*", ":", "+", "-");
$rand = array_rand($operator, 1);
echo $getal1 . ' ' . $operator[$rand] . ' ' . $getal2 . ' ' . "=";
Nu komt bovenstaande gewoon goed uit de verf (er staat bijvoorbeeld: -2 * 3 = )
Maar nu wil ik controleren of het antwoord van de websitebezoeker goed is.
Daar heb je de uitkomst van de som voor nodig, maar dat krijg ik niet voor elkaar. Het wordt als tekst gelezen denk ik...
Dit heb ik met het onderstaande geprobeerd, maar als ik dan $uitkomst echo, dan krijg ik gewoon, om bij het voorbeeld te blijven, -2*3 terug, terwijl ik -6 wil terugkrijgen.
$uitkomst = $getal1 . $operator[$rand] . $getal2;
Wie kan mij helpen?
Ik zit met een klein probleempje:
Ik wil graag een som genereren, waarbij je twee willekeurige getallen tussen -10 en 10 met elkaar vermenigvuldigen, delen, optellen of aftrekken (de 0 mag niet voorkomen en minstens 1 van de 2 getallen moet positief zijn).
Nu moet er ook willekeurig gekozen worden tussen vermenigvuldigen, delen, optellen en aftrekken. Ik heb dat op de volgende manier gedaan:
$getal1 = rand(-10, 10);
$getal2 = rand(-10, 10);
while ($getal1 == 0 or $getal2 == 0 or ($getal1 > 0 and $getal2 > 0)) {
$getal1 = rand(-10, 10);
$getal2 = rand(-10, 10);
}
$operator = array("*", ":", "+", "-");
$rand = array_rand($operator, 1);
echo $getal1 . ' ' . $operator[$rand] . ' ' . $getal2 . ' ' . "=";
Nu komt bovenstaande gewoon goed uit de verf (er staat bijvoorbeeld: -2 * 3 = )
Maar nu wil ik controleren of het antwoord van de websitebezoeker goed is.
Daar heb je de uitkomst van de som voor nodig, maar dat krijg ik niet voor elkaar. Het wordt als tekst gelezen denk ik...
Dit heb ik met het onderstaande geprobeerd, maar als ik dan $uitkomst echo, dan krijg ik gewoon, om bij het voorbeeld te blijven, -2*3 terug, terwijl ik -6 wil terugkrijgen.
$uitkomst = $getal1 . $operator[$rand] . $getal2;
Wie kan mij helpen?
Je kan een 'eval' uitvoeren op de string berekening, dus als volgt:
(eerst controleren of de string alleen getallen en operatoren bevat)
(eerst controleren of de string alleen getallen en operatoren bevat)
Bedankt voor de reactie! Je moet het maar net weten.
Ik kan nu gelukkig weer verder.
Toevoeging op 14/11/2012 20:22:13:
Helaas werkt deze code niet voor alle mogelijke sommen...
Ik weet niet precies hoe, maar ik krijg af en toe de melding dat $uitkomst undefined is.
Ik heb het vermoeden dat het bij alle delingen zo is en bij het aftrekken van een negatief getal.
Toevoeging op 14/11/2012 20:24:08:
Bij een deling gaat het dus om ':' en bij het aftrekken van een negatief getal om '- -'...
Toevoeging op 14/11/2012 20:39:48:
php herkent ':' niet als delen, maar '/' wel. Dat probleem is dus opgelost.
Nu de '--' nog...
Toevoeging op 14/11/2012 20:46:50:
de '--' is ook opgelost. Php herkent de som alleen als de minnen niet direct naast elkaar staan, er moet dus een spatie tussen.
Ik kan nu gelukkig weer verder.
Toevoeging op 14/11/2012 20:22:13:
Helaas werkt deze code niet voor alle mogelijke sommen...
Ik weet niet precies hoe, maar ik krijg af en toe de melding dat $uitkomst undefined is.
Ik heb het vermoeden dat het bij alle delingen zo is en bij het aftrekken van een negatief getal.
Toevoeging op 14/11/2012 20:24:08:
Bij een deling gaat het dus om ':' en bij het aftrekken van een negatief getal om '- -'...
Toevoeging op 14/11/2012 20:39:48:
php herkent ':' niet als delen, maar '/' wel. Dat probleem is dus opgelost.
Nu de '--' nog...
Toevoeging op 14/11/2012 20:46:50:
de '--' is ook opgelost. Php herkent de som alleen als de minnen niet direct naast elkaar staan, er moet dus een spatie tussen.
Dus even met str_replace() een aantal dingen rechtzetten:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$som = $_GET['som'];
$som = str_replace(":", " / ", $som);
$som = str_replace("-", " - ", $som);
// op eind: dubbele spaties weg
$som = str_replace(" ", " ", $som);
echo eval($som);
?>
$som = $_GET['som'];
$som = str_replace(":", " / ", $som);
$som = str_replace("-", " - ", $som);
// op eind: dubbele spaties weg
$som = str_replace(" ", " ", $som);
echo eval($som);
?>
Eddy waarom niet gelijk de operatoren gelijk met spaties erin zetten:
Groet,
Erwin van Hoof
SiteOn
Groet,
Erwin van Hoof
SiteOn
Gewijzigd op 14/11/2012 23:41:27 door Erwin van Hoof
Precies, dat heb ik gedaan..
Beiden, bedankt voor jullie hulp en medewerking!
Beiden, bedankt voor jullie hulp en medewerking!




