Gemiddelde berekenen

Status
Niet open voor verdere reacties.

LarsL

Gebruiker
Lid geworden
19 sep 2008
Berichten
155
Hallo allemaal, ik ben in php een project begonnen om je gemiddelde cijfer voor school te berekenen, nou weet ik de berekening enzo wel.
Echter heb ik 1 vraag: Hoe kan ik het beste mijn aantal cijfers laten ophalen?
Ik laat namelijk met een for-loop cijfervelden genereren volgens de namen cijfer1, cijfer2, enz..
Aan de hand van het aantal gewenste cijfervelden, nu wil ik echter te weten komen voor in mijn berekening hoeveel cijfers die gene heeft ingevoerd, daarna kan ik gaan werken aan de meetel velden.
Hoe kan ik dit het beste doen?

Alvast bedankt,
- Lars
PHP Beginner
 
Kun je een relevant deel van het script posten?
 
Als je de cijfers in een array druk kun je gewoon het aantal elementen in de array opvragen.

PHP:
$cijfers = array(9.5, 6, 4.5, 5.5);
$gemiddelde = array_sum($cijfers) / count($cijfers);
echo $gemiddelde;
 
Ja maar dan moet ik alsnog weten hoeveel cijfers er zijn ingevoerd.

Hier invullen.php:
PHP:
<?php
if (isset($_POST['create'])) {
echo "<form method=\"post\" action=\"gemiddelde.php\">";
for($a = 1; $a <= htmlentities($_POST['aantal']); $a++) {
echo "Cijfer " .$a.": <input type=\"text\" name=\"cijfer".$a."\" maxlength=\"2\" />";
echo " ";
echo "Telt mee: <input type=\"text\" name=\"meetel".$a."\" maxlength=\"2\" />";
echo "<br />";
}

echo "<br />";
echo "<input type=\"submit\" name=\"calculate\" value=\"Bereken!\">";
echo "</form>";
}
?>
 
Laatst bewerkt:
Je kunt ook een structuur maken in een input-vak:

cijfer,teltmee;cijfer,teltmee

dus in php gaat het er dan zo uitzijn
PHP:
<?php
if(isset($_GET[action])){
$cijfers= $_POST[cijfers]; 

$split1= explode(";", $cijfers);
foreach($split1 as $key=>$value){ 
$split2[$key]= explode(",", $value); 
$cijfer[$key]= $split2[$key][0]; 
$teltmee[$key]= $split2[$key][1]; 
$totaalkey[$key]= $cijfer[$key] * $teltmee[$key]; 
if($totaalkey[$key]>0){
echo "Het cijfer ". $cijfer[$key] . "  telt ". $teltmee[$key] . " keer mee <br>";
$totaal[]= $totaalkey[$key];
}
} 
$aantalcijfers= array_sum($teltmee);
$totaal= array_sum($totaal);


$gem= $totaal/$aantalcijfers;
echo "$gem";
}
?>

je kunt ook de variabel $_POST['aantal'] doorsturen:

PHP:
<?php
if (isset($_POST['create'])) {
$aantal= $_POST[aantal];
echo "<form method=\"post\" action=\"gemiddelde.php?aantal=$aantal\">";
for($a = 1; $a <= htmlentities($_POST['aantal']); $a++) {
echo "Cijfer " .$a.": <input type=\"text\" name=\"cijfer".$a."\" maxlength=\"2\" />";
echo " ";
echo "Telt mee: <input type=\"text\" name=\"meetel".$a."\" maxlength=\"2\" />";
echo "<br />";
}

echo "<br />";
echo "<input type=\"submit\" name=\"calculate\" value=\"Bereken!\">";
echo "</form>";
}
?>

en dan in gemmiddelde.php:

PHP:
<?php
for($a = 1; $a <= htmlentities($_GET['aantal']); $a++) {
$cijfernaam= "cijfer". $a;
$totaal[$a]= $_POST[$cijfernaam];
}

$totaal= array_sum($totaal);
$aantalcijfers= array_count_values($totaal);

$gemiddeld= $totaal/$aantalcijfers;
?>
 
Laatst bewerkt:
Ja maar dan moet ik alsnog weten hoeveel cijfers er zijn ingevoerd.
Waarom? Door de functie count() los te laten op de array heb je het totaal aantal cijfers.

Probeer dit eens:
PHP:
<?php
// Controleren of het formulier is verzonden !! Enige juiste manier !!
if ($_SERVER['REQUEST_METHOD'] == "post") {
  echo'<form method="post" action="gemiddelde.php">';
  for($a = 1; $a <= htmlentities($_POST['aantal']); $a++) {
    echo 'Cijfer # '. $a .' <input type="text" name="cijfer[]" maxlength="2" /> 
    Telt mee: <input type="text" name="meetel[]" maxlength="2" />
     <hr />';
  }
  echo '<input type="submit" name="calculate" value="Bereken!"></form>';
}
?>

Vervolgens gemiddelde.php
PHP:
// Controleren of het formulier is verzonden !! Enige juiste manier !!
if($_SERVER['REQUEST_METHOD'] == "post") {
/*
 $_POST = array(
    cijfer => array(5.5, 6, 7)
    meetel => array(1, 2, 1)
)
*/

  // $_POST['cijfers'] + $_POST['meetel'] bevatten een array
  // Deze sla ik apart op in een variabele
  $aCijfers = $_POST['cijfer'];
  /*
    $aCijfers = array(5.5, 6, 7)
  */
  $aTeltMee = $_POST['meetel'];
  /*
    $aTeltMee = array(1,2,1)
  */
  // Totaal aantal cijfers berekenen
  $iTotaal = count($_POST['cijfer']);
  /*
    $iTotaal = 3
  */
  // Opslaglijst voor rekenlijst
  $aCijferlijst = array();
  for($i = 0; $i < $iTotaal; $i++) {
    // Elk cijfer keer het aantal dat hij meetelt
    // Die uitkomst sla ik op als nieuw element van de opslaglijst
    $aCijferlijst[] = $aCijfers[$i]*$aTeltMee[$i];
    /* De eerste keer is het
      $aCijferlijst[0] = 5.5*1;
    */
  }
  // Alle waarden in $aCijferlijst optellen en delen door het totaal
  $fGemiddelde = array_sum($aCijferlijst) / $iTotaal;
  /*
    $fGemiddelde = 24.5 / 3
  */
  echo 'Je staat gemiddelde een <b>'. $fGemiddelde .'</b>';
}

Volgens mij moet het zo goed gaan, het is uit de losse pols dus er kunnen fouten in zitten.
 
Laatst bewerkt:
Oké bedankt! ga het even proberen en de code proberen te begrijpen, zou je er misschien een klein beetje commentaar bij willen zetten? :o
 
Ik heb mijn vorige bericht aangepast, commentaar met // is een soort van uitleg.

Commentaar met /* ... */ is een voorbeeldwerking van het script
 
Sorry maar het script werkt nog niet helemaal :(
Ik voer bijv in: 2 telt 4x mee en 8 telt 2x mee,
vervolgens krijg ik dat m'n gemiddelde een 12 is, terwijl het volgens mij een 5,3 hoort te zijn?
:confused:


Alvast bedankt, als iemand mij kan helpen.
- Lars

Script:
PHP:
<?php
if(isset($_POST['calculate'])) {
  $aCijfers = $_POST['cijfer'];
  $aTeltMee = $_POST['meetel'];
  $tTotaal = count($_POST['cijfer']);
  $aCijferlijst = array();
  for($t = 0; $t < $tTotaal; $t++) {
    $aCijferlijst[] = $aCijfers[$t]*$aTeltMee[$t];
  }
  $fGemiddelde = array_sum($aCijferlijst) / $tTotaal;
  echo 'Je staat gemiddeld een <b>'. $fGemiddelde .'</b> voor dit vak!';
}  
?>
 
Klopt dat dat gebeurd want hij telt het aantal cijfers, klein foutje dus want hij moet het aantal delen door het totaal van "telt mee".

Dus dan wordt het
PHP:
<?php
// Controleren of het formulier is verzonden !! Enige juiste manier !!
if ($_SERVER['REQUEST_METHOD'] == "post") {
  echo'<form method="post" action="gemiddelde.php">';
  for($a = 1; $a <= htmlentities($_POST['aantal']); $a++) {
    echo 'Cijfer # '. $a .' <input type="text" name="cijfer[]" maxlength="2" /> 
    Telt mee: <input type="text" name="meetel[]" maxlength="2" />
     <hr />';
  }
  echo '<input type="submit" name="calculate" value="Bereken!"></form>';
}
?>

Vervolgens gemiddelde.php
PHP:
// Controleren of het formulier is verzonden !! Enige juiste manier !!
if($_SERVER['REQUEST_METHOD'] == "post") {
  $aCijfers = $_POST['cijfer'];
  $aTeltMee = $_POST['meetel'];
  $iTotaal = count($_POST['cijfer']);
  $aCijferlijst = array();
  for($i = 0; $i < $iTotaal; $i++) {
    $aCijferlijst[] = $aCijfers[$i]*$aTeltMee[$i];
  }
  $fGemiddelde = array_sum($aCijferlijst) / array_sum($aTeltMee);
  echo 'Je staat gemiddelde een <b>'. $fGemiddelde .'</b>';
}

Zo moet het kloppen denk ik
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan