hallo, kan iemand mij helpen? Volgens mij doe ik de combinaties niet goed, maar ik zou niet weten hoe het anders moet.


<?php
$getal1 = $_POST ['getal1'];
$faculteit = 1;
$combinaties = 1;
$n = $_POST ['n'];
$r = $_POST ['r'];



for ($x=$getal1; $x>=1 ; $x--) {
$faculteit = $faculteit * $x;
}

define (NaN,acos(1.01));

for ($i=0;$i < $r;$i++) {
$combinaties *= ($n-$i)/($i+1);
}


if($_SERVER['REQUEST_METHOD']=="POST") {
if(isset($_POST['submit1']) & (strlen($getal1) > 0)) {
echo "De faculteit van " . $getal1 . " is " . $faculteit;
} elseif(isset($_POST['submit2'])) {
echo "Het aantal combinaties is " . $combinaties;
} else {
NaN;
}
}

?>

Alvast bedankt.
Kan je wat meer uitleg geven? Zoals op wat er gebeurt, en wat je verwacht?
Het is een rekenmachine. En als je op het eerste knopje druk hoort de faculteit berekend te worden. En als je op het tweede knopje drukt hoort de combinatie (nCr) berekend te worden.
Nu wordt het interessant.

Om de combinatie te berekenen zul je drie keer de faculteit moeten berekenen. Dit is een handig moment om een functie te schrijven die dit voor je doet.

<?php
function faculteit($number) {
$faculteit = 1;

for ($x = $number ; $x >= 1 ; $x--) {
$faculteit = $faculteit * $x;
}

return $faculteit;
}

echo faculteit(4); // 24
echo faculteit(5); // 120
?>

Je ziet dat ik jouw eigen code gebruikt hebt maar dan in een functie. Zie een functie als een apart programma.
Het heeft zijn eigen variabelen in zijn eigen stukje geheugen. Deze variabelen zijn dan ook niet zichtbaar buiten de functie. Met de parameter $number geef je aan van welk getal je de faculteit wilt berekenen. Met return verlaat je de functie en geef je de uitkomst van de berekening terug.

Nu kun je de combinatie formule gaan opbouwen.

<?php
$n = 7;
$k = 3;

echo faculteit($n) / ( faculteit($n - $k) * faculteit($k) ); // 35
?>

Ook deze formule kan natuurlijk in een functie geplaatst worden.

<?php
function combinations($n, $k) {
return faculteit($n) / ( faculteit($n - $k) * faculteit($k) );
}

echo combinations(7, 3); // 35
?>

extra:
Omdat je een faculteit berekent door een x aantal keer dezelfde berekening te herhalen kun je daar ook een mooie recursive function van maken. Deze functie roept zichzelf aan zo vaak als dat het nodig is:

<?php
function factorial($number) {

if ($number < 2) {
return 1;
}

return ($number * factorial($number-1));
}

echo factorial(4); // 24
echo factorial(5); // 120

?>

Welke twee van de functies je wilt gebruiken is om het even.

Totaalplaatje:

<?php

function factorial($number) {

if ($number < 2) {
return 1;
}

return ($number * factorial($number-1));
}

function combinations($n, $k) {
return factorial($n) / ( factorial($n - $k) * factorial($k) );
}


if($_SERVER['REQUEST_METHOD']=="POST") {
// De $_POST variabelen bestaan alleen wanneer het formulier verstuurd is!
$getal1 = $_POST ['getal1'];
$n = $_POST ['n'];
$r = $_POST ['r'];

$faculteit = factorial($getal1);
$combinaties = combinations($n, $r);

if(isset($_POST['submit1']) & (strlen($getal1) > 0)) {
echo "De faculteit van " . $getal1 . " is " . $faculteit;
} elseif(isset($_POST['submit2'])) {
echo "Het aantal combinaties is " . $combinaties;
} else {
echo 'NaN';
}
}

?>

Reageren