@Mansur05

Почему не работает код (Не бойтесь, 20 строк) на php?

Точнее не делает то что я хочу.
Вот сам код
<?php
function abcx ($a, $b, $c) {
    $D = $b*$b-4*$a*$c;
    if ($D>0) {
        $D = sqrt($D);
        $x == ($b + $D)/2*a;
        $x2 == ($b - $D)/2*a;
        echo "Два корня, x1 = ", $x, " x2 = ", $x2;
    }else if ($D=0) {
        $x == $b/(2*$a);
        echo "Один корень, x =", $x;
    }else if ($D<0) {
        echo "Нет корней";
    }
}
echo(abcx($a=2, $b=-4, $c=3));
?>

Компилится, но результаты не выводит (корни уравнения)
  • Вопрос задан
  • 227 просмотров
Пригласить эксперта
Ответы на вопрос 4
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
else if ($D=0)
Используйте сравнение (===), а не присваивание (=).

$x == $b/(2*$a);
Используйте присваивание (=), а не сравнение (==).

abcx($a=2, $b=-4, $c=3);
При такой записи вы создаётё вне функции переменные $a, $b и $c, а потом передаёте в неё их значения. Переменные при это продолжают болтаться снаружи и никак не связаны с одноименными локальными переменными функции. Это не ошибка, код будет работать, но действие бессмысленное и потенциально вредное. Вызывайте функцию как обычно: abcx(2, -4, 3);

Судя по количеству ошибок на такой маленькой площади, вам нужно вернуться к учебникам - вы не понимаете, что и зачем происходит в коде, а без этого понимания программировать бесполезно.

P.S. Что же вы лесенку-то не достроили? :)
$D = sqrt($D);
$x == ($b + $D)/2*a;
$x2 === ($b - $D)/2*a;
Ответ написан
AlexanderShapoval
@AlexanderShapoval
PHP maker
Почитайте как правильно составлять условия что-бы всегда находить ошибку: Условия_Йоды

Это не обязательно, сам грешу и редко использую этот принцип. Но тогда ошибки сами вылезут наружу.

И еще одно, постарайтесь разобраться чем сравнение '==' отличается от сравнения '==='. Жить в дальнейшем станет чуток легче.

Желаю творческих успехов! :)
Ответ написан
@Barmunk
Выше написали, что в коде очень много ошибок, чтобы их понять прочтите это:

php.net/manual/ru/language.operators.php
php.net/manual/ru/functions.returning-values.php

$x = ($b + $D)/2*a;

Смущает a, у вас это не переменная, поэтому по типам она приведется в булев тип и станет 1 или 0
поэтому это тоже стоит почитать php.net/manual/ru/language.types.php
Ответ написан
Комментировать
@SergeyZelensky-Rostov
<?php
function abcx ($a, $b, $c) {
    $D = $b*$b-4*$a*$c;
    if ($D > 0) {
        $D = sqrt($D);
        $x == ($b + $D)/2*a;
        $x2 == ($b - $D)/2*a;
        return "Два корня, x1 = ", $x, " x2 = ", $x2;
    }else if ($D == 0) {
        $x == $b/(2*$a);
        return "Один корень, x =", $x;
    }else if ($D<0) {
        return "Нет корней";
    }
}
echo abcx($a=2, $b=-4, $c=3);
?>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы