2013-03-09 2 views
0

Написав квадратный калькулятор уравнения в PHP, я думал, что у меня будет большая часть моих проблем с математикой. Не так, хотя, поскольку я получаю очень странный вывод. Предполагается, что программа должна $_GET значения x , x и другие числа из формы, вычислить значения x, а затем отобразить их. когда я сначала загружаю страницу, программа выводит -10 (хотя я ничего не вписал в форму), а затем ничего не делает, если я ввожу значения. Например, если я введу 1, 11 and 18 в текстовые поля, которые должны выводить x = -9 and -2, программа выдает -22. Что я делаю не так?PHP квадратичное уравнение калькулятор странный вывод

Вот мой код (<body> раздел моего HTML-документа):

<body> 
<h1>Quadratic equation calculator</h1> 
<p>Type the values of your equation into the calculator to get the answer.</p> 
<?php 
    $xsqrd; 
    $x; 
    $num; 
    $ans1 = null; 
    $ans2 = null; 
    $errdivzero = "The calculation could not be completed as it attempts to divide by zero."; 
    $errsqrtmin1 = "The calculation could not be completed as it attempts to find the square root of a negative number."; 
    $errnoent = "Please enter some values into the form."; 
?> 
<form name = "values" action = "calc.php" method = "get"> 
<input type = "text" name = "x2"><p>x<sup>2</sup></p> 
&nbsp; 
<input type = "text" name = "x"><p>x</p> 
&nbsp; 
<input type = "text" name = "num"> 
&nbsp; 
<input type = "submit"> 
</form> 
<?php 
    if ((!empty($_GET['x2'])) && (!empty($_GET['x'])) && (!empty($_GET['num']))) { 
     $xsqrd = $_GET['x2']; 
     $x = $_GET['x']; 
     $num = $_GET['num']; 

      $ans1 = (-$x) + (sqrt(pow($x, 2) - (4 * $xsqrd * $num)))/(2 * $xsqrd); 
      $ans2 = (-$x) - (sqrt(pow($x, 2) - (4 * $xsqrd * $num)))/(2 * $xsqrd); 

    } 
?> 
<p> 
<?php 
    if(($ans1==null) or ($ans2==null)) 
    { 
    print $errnoent; 
    } 
    else 
    { 
    print "x = " + $ans1 + "," + $ans2; 
    } 
?> 
    </p> 
</body> 

ответ

1

У вас есть две ошибки.

Первый из них является математической, она должна быть

$ans1 = ((-$x) + (sqrt(pow($x, 2) - (4 * $xsqrd * $num))))/(2 * $xsqrd); 
$ans2 = ((-$x) - (sqrt(pow($x, 2) - (4 * $xsqrd * $num))))/(2 * $xsqrd); 

Правильная формула (-b+-sqrt(b^2-4ac))/(2a) вместо -b+sqrt(b^2-4ac)/(2a) - в последнем случае деление будет иметь приоритет над сложением без скобок.

И второй один путь вы выводите свой результат, вы должны использовать оператор конкатенации .

print "x = " . $ans1 . "," . $ans2; 

(хотя я хотел бы использовать echo вместо print)

+0

, что было не так с математикой немного? Кроме того, спасибо, потому что он работает! – imulsion

+0

, но зачем использовать 'echo', а не' print'? – imulsion

+0

Я отредактировал свой комментарий и добавил бит математики. о 'echo' vs' print', я предпочитаю 'echo' для простого вывода (и большинство людей) –

Смежные вопросы