Hallo iedereen,

Ik ben voor school bezig met een klein project in php. Ik moet daarvoor een rekenmachine via Git laten werken.
De opdracht is: Omschrijving
We gaan weer verder met de calculator. Momenteel controleert de calculator niet of je een getal bij een letter probeert op te tellen. Laten we ervoor zorgen dat onze rekenmachine dit op de juiste manier afhandelt.

Daarnaast gaan we de modulo functionaliteit toevoegen en zorgen we ervoor dat het script stopt wanneer er verkeerde input wordt ingevuld.

Opdracht
Gooi een foutmelding als de gebruiker geen geldig getal invoert.
Implementeer de module (%) operator.

Mijn code:

<?php
$operator = readline ("welke operatie wil je uitvoeren (+, -, %)" . PHP_EOL);
$getal1 = readline ("Eerste getal" . PHP_EOL);
$getal2 = readline ("Tweede getal" . PHP_EOL);
if ($operator === "%") {$operator = false;
  echo $getal1 % $getal2 . PHP_EOL;
} else {
  echo "geen geldige operatie" . PHP_EOL;
}
if ($operator === "+") {
  echo $getal1 + $getal2 . PHP_EOL;
} else {
  echo "ongeldig" . PHP_EOL;
}
if ($operator === "-") {
  echo $getal1 - $getal2 . PHP_EOL;
} else {
  echo "geen nummer" . PHP_EOL;
}
if ($operator) {
    echo "geen getal" . PHP_EOL;
} else { 
  echo "geen nummer" . PHP_EOL;
}
?>


Weet iemand hoe ik dit kan aanpassen zoals gevraagd wordt in de opdracht?
Voor de invoercontrole kan je dit gebruiken:
[php]is_numeric[/php]


Misschien dat je aan de hand van de opdracht een komma even moet replacen naar een punt.
We schrijven 2,5 maar de computer herkent alleen 2.5 als getal.
Volgens mij krijg je bij elke operator minimum 3 meldingen.
Ik zou dus eerder kiezen voor switch om de keuze te maken van operator.
Later ook eenvoudiger uit te breiden voor delen, vermenigvuldigen, ...
<?php
if(...) { // optellen
...
} else if(...) { // aftrekken
...
} else if(...) { // modulo
...
} else { // geef een foutmelding
...
}
?>

Of zoals Jan aandraagt een switch gebruiken
<?php
switch ($operator) {
case '+': // optellen
...
break;
case '-': // aftrekken
...
break;
case '%': // modulo
...
break;
default: // geef een foutmelding
...
}
?>
Persoonlijk vind ik een switch() inderdaad eleganter, omdat dit beter leesbaarder is.
Bedankt voor de reacties, het heeft inderdaad gewerkt.
- Ariën - op 10/03/2021 20:18:32

Persoonlijk vind ik een switch() inderdaad eleganter, omdat dit beter leesbaarder is.

Persoonlijk vind ik match eleganter. ;-)
Ward van der Put op 11/03/2021 08:30:12

Persoonlijk vind ik match eleganter. ;-)


Ziet er wel goed uit inderdaad maar opgelet: dit kan alleen met (vanaf) PHP versie 8.
Wat een fantasieloze opdracht, het lijkt wel gekopieerd uit een C handleiding. Vooral die keuze dat het programma moet stoppen bij verkeerde invoer. Het nodigt uit tot een meer recalcitrante uitwerking...
<?php
$string = readline('Welke som wil je uitrekenen?' . PHP_EOL);
$lengte = strlen($string);
$tekens = [' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
  '(', ')', '+', '-', '*', '/', '%'];
$berekening = '';
for ($i = 0; $i < $lengte; $i++) {
  $karakter = $string[$i];
  if (in_array($karakter, $tekens)) {$berekening .= $karakter;}
}
try {
  $uitkomst = eval('print ' . $berekening . ';'); 
  print 'De uitkomst van ' . $berekening . ' is ' . $uitkomst;
} catch (Throwable $e) {
  print 'Kan berekening ' . $berekening . ' niet uitvoeren';
}
?>

Reageren