学校では、3つの変数を使った簡単なPHP電卓を作成することになっていました。私はswitch文を使って関数のすべての計算を行うが、Order of Operationsを扱うときは問題にぶつかると思った。数時間と複数の試みの後、私は私が困惑していることを認めなければならない...どんな提案?あなたが本当に唯一の計算を行うために1つの機能を必要とする3つの変数を使ってPHP電卓を作る方法
<?php
// function to calculate and return result
function calculate($x, $y, $op) {
// calculate $prod using switch (case) statement
switch($op1) {
case '+':
$prod1 = $x + $y;
break;
case '-':
$prod1 = $x - $y;
break;
case '*':
$prod1 = $x * $y;
break;
case '/':
if ($y == 0) {$prod1 = "∞";}
else {$prod1 = $x/$y;}
// return the result
return $prod1;
}
}
function calculate2($prod1, $z, $op2) {
// calculate $prod2 using switch (case) statement
switch($op2) {
case '+':
$prod2 = $prod1 + $z;
break;
case '-':
$prod2 = $prod1 - $z;
break;
case '*':
$prod2 = $prod1 * $z;
break;
case '/':
if ($z == 0) {$prod2 = "∞";}
else {$prod2 = $prod1/$z;}
}
// return the result
return $prod2;
}
function calculate3($x, $prod2, $op1) {
// calculate $prod using switch (case) statement
switch($op2) {
case '+':
$prod2 = $x + $prod1;
break;
case '-':
$prod2 = $x - $prod1;
}
// return the result
return $prod3;
}
function calculate4($y, $z, $op2) {
// calculate $prod using switch (case) statement
switch($op2) {
case '*':
$prod2 = $y * $z;
break;
case '/':
if ($z == 0) {$prod2 = "∞";}
else {$prod2 = $y/$z;}
}
// return the result
return $prod2;
}
// declare all variables
$x = 0;
$y = 0;
$z = 0;
$prod1 = 0;
$prod2 = 0;
$prod3 = 0;
$op1 = '';
$op2 = '';
// grab the form values from $_GET hash
extract($_GET);
?>
<html>
<head>
<title>PHP Calculator Version 2.12</title>
</head>
<body>
<h3>PHP Calculator (Version 2.12)</h3>
<form method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>">
x = <input type="text" name="x" size="5" value="<?php print $x; ?>" /> op1 =
<select name="op">
<option value="+" <?php if ($op=='+') echo 'selected="selected"';?>>+</option>
<option value="-" <?php if ($op=='-') echo 'selected="selected"';?>>-</option>
<option value="*" <?php if ($op=='*') echo 'selected="selected"';?>>*</option>
<option value="/" <?php if ($op=='/') echo 'selected="selected"';?>>/</option>
</select> y = <input type="text" name="y" size="5" value="<?php print $y; ?>" /> op2 =
<select name="op2">
<option value="+" <?php if ($op2=='+') echo 'selected="selected"';?>>+</option>
<option value="-" <?php if ($op2=='-') echo 'selected="selected"';?>>-</option>
<option value="*" <?php if ($op2=='*') echo 'selected="selected"';?>>*</option>
<option value="/" <?php if ($op2=='/') echo 'selected="selected"';?>>/</option>
</select> z = <input type="text" name="z" size="5" value="<?php print $z; ?>" />
<input type="submit" name="calc" value="Calculate" />
</form>
<?php
if(isset($calc)) {
// check that $x & $y are numeric
if (is_numeric($x) && is_numeric($y) && is_numeric($z)) {
// check PEMDAS
if ($op1 == '*' or '/') {
$prod1 = calculate($x, $y, $op1);
$prod2 = calculate2($prod1, $z, $op2);
}
else if ($op2 == '*' or '/') {
$prod2 = calculate4($y, $z, $op2);
$prod3 = calculate3($x, $prod2, $op1);
}
else
$prod1 = calculate($x, $y, $op1);
$prod2 = calculate2($prod1, $z, $op2);
// print the result
echo "<p>$x $op $y $op2 $z = $prod2 </p>";
}
else {
// unaccepatable values
echo "<p>x, y, and z values are required to be numeric ...
please re-enter values</p>";
}
}
?>
</body>
</html>
計算 'の最後の引数は、()' '$ op'ですが、あなたのswitch文は、' $のop1'を使用しています。それはうまくいかないでしょう。 'calculate3()'にも同様の問題があります。あなたはあきらめる前に、これらの基本的な問題を解決しなければなりません。 –
だから、私はそれを修正しましたが、本当の問題はif/else if文で$ prod1が計算の後に値を保持していないことです()。だから、$ prod1を使って計算しようとすると0 – Philip
と同じです。 '($ op1 == '*'または '/')'のような他のバグに気付きました: '(($ op1 == ' * ')または($ op1 =='/')) 'と同様のものがあります。あなたがあきらめる前に**すべての**バグをまず解決してください。徹底的にテストします。また、すべての '{'が正しい場所で '}'でマッチしているかどうか確認してください。 '{' ... '}'の1つのセットが欠落しているようです。 –