i229194964
@i229194964
Веб разработчик

Почему коэффициенты показывает все 0?

пишу калькулятор Гаусса
index.php
<!DOCTYPE html>
<html>
<head>
    <title>Онлайн калькулятор систем линейных уравнений</title>
    <style>
        /* Ваш стиль оформления */
    </style>
</head>
<body>
    <h1>Онлайн калькулятор систем линейных уравнений</h1>
    
    <form action="result.php" method="post">
        <p>Введите количество уравнений и неизвестных:</p>
        <label for="equations">Уравнений:</label>
        <input type="number" name="equations" id="equations" required>
        <br>
        <label for="unknowns">Неизвестных:</label>
        <input type="number" name="unknowns" id="unknowns" required>
        <br>
        <p>Введите коэффициенты и константы:</p>
        <?php
        if ($_SERVER["REQUEST_METHOD"] == "POST") {
            $equations = (int)$_POST["equations"];
            $unknowns = (int)$_POST["unknowns"];
            
            for ($i = 1; $i <= $equations; $i++) {
                echo "<p>Уравнение $i:</p>";
                for ($j = 1; $j <= $unknowns; $j++) {
                    echo "<label for='coefficient-$i-$j'>Коэффициент A<sub>$i$j</sub>:</label>";
                    echo "<input type='number' name='coefficients[$i][$j]' id='coefficient-$i-$j' step='any' required>";
                    echo "<br>";
                }
                echo "<label for='constant-$i'>Константа B<sub>$i</sub>:</label>";
                echo "<input type='number' name='constants[$i]' id='constant-$i' step='any' required>";
                echo "<br>";
            }
        }
        ?>
        <input type="submit" value="Продолжить">
    </form>
</body>
</html>

result.php
<!DOCTYPE html>
<html>
<head>
    <title>Результаты расчетов</title>
    <style>
        /* Ваш стиль оформления */
    </style>
</head>
<body>
    <h1>Результаты расчетов</h1>
    <?php
    function solveEquations($coefficients, $constants) {
        $unknowns = count($coefficients[0]);
        $equations = count($coefficients);

        if (!is_array($coefficients) || !is_array($constants)) {
            return false; // Некорректные данные
        }

        for ($i = 0; $i < $equations - 1; $i++) {
            if ($coefficients[$i][$i] == 0) {
                // Если коэффициент равен нулю, проводим перестановку строк
                for ($k = $i + 1; $k < $equations; $k++) {
                    if ($coefficients[$k][$i] != 0) {
                        // Перестановка строк
                        $temp = $coefficients[$i];
                        $coefficients[$i] = $coefficients[$k];
                        $coefficients[$k] = $temp;

                        $temp = $constants[$i];
                        $constants[$i] = $constants[$k];
                        $constants[$k] = $temp;

                        break;
                    }
                }
            }

            if ($coefficients[$i][$i] == 0) {
                // Если после перестановки строк коэффициент по-прежнему равен нулю, нет уникального решения
                return false;
            }

            for ($j = $i + 1; $j < $equations; $j++) {
                $ratio = $coefficients[$j][$i] / $coefficients[$i][$i];

                for ($k = $i; $k < $unknowns; $k++) {
                    $coefficients[$j][$k] -= $ratio * $coefficients[$i][$k];
                }

                $constants[$j] -= $ratio * $constants[$i];
            }
        }

        $solution = array();

        for ($i = $equations - 1; $i >= 0; $i--) {
            if ($coefficients[$i][$i] == 0) {
                // Если коэффициент равен нулю, нет уникального решения
                return false;
            }

            $sum = 0;

            for ($j = $i + 1; $j < $unknowns; $j++) {
                $sum += $coefficients[$i][$j] * $solution[$j];
            }

            $solution[$i] = ($constants[$i] - $sum) / $coefficients[$i][$i];
        }

        return $solution;
    }
    
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $equations = (int)$_POST["equations"];
        $unknowns = (int)$_POST["unknowns"];
        
        echo "<p>Число уравнений: $equations</p>";
        echo "<p>Число неизвестных: $unknowns</p>";
        
        $coefficients = array();
        $constants = array();
        
        for ($i = 1; $i <= $equations; $i++) {
            $equation = array();
            
            for ($j = 1; $j <= $unknowns; $j++) {
                $coefficient = (float)$_POST["coefficient-$i-$j"];
                $equation[] = $coefficient;
            }
            
            $coefficients[] = $equation;
            
            $constant = (float)$_POST["constant-$i"];
            $constants[] = $constant;
        }
        
        echo "<p>Коэффициенты:</p>";
        echo "<table>";
        for ($i = 0; $i < $equations; $i++) {
            echo "<tr>";
            for ($j = 0; $j < $unknowns; $j++) {
                echo "<td>A<sub>$i$j</sub> = {$coefficients[$i][$j]}</td>";
            }
            echo "<td>B<sub>$i</sub> = {$constants[$i]}</td>";
            echo "</tr>";
        }
        echo "</table>";
        
        $solution = solveEquations($coefficients, $constants);
        
        if ($solution) {
            echo "<p>Решение:</p>";
            echo "<table>";
            foreach ($solution as $index => $value) {
                echo "<tr>";
                echo "<td>X<sub>$index</sub> = $value</td>";
                echo "</tr>";
            }
            echo "</table>";
        } else {
            echo "<p>Решение не найдено.</p>";
        }
        
        echo "<form action='index.php' method='get'>";
        echo "<input type='submit' value='Завершить'>";
        echo "</form>";
    }
    ?>
</body>
</html>

вывод все любое число которое я ввожу показывают 0;
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
Adamos
@Adamos
name='coefficients[$i][$j]'
$_POST["coefficient-$i-$j"]

Можно один раз воткнуть в код print_r($_POST), посмотреть, что в нем пришло, и сравнить с тем, что ожидается.
Или просто включить все ошибки и насладиться простыней варнингов о несуществующем индексе массива.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
02 мая 2024, в 23:56
2000 руб./за проект
02 мая 2024, в 23:29
1500 руб./в час
02 мая 2024, в 23:16
7500 руб./за проект