DeepSeek Программист
U
разработай код калькулятора на php
AI
Вот пример простого, но функционального калькулятора на PHP с веб-интерфейсом:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Калькулятор на PHP</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 400px;
            margin: 50px auto;
            padding: 20px;
            background-color: #f5f5f5;
        }
        .calculator {
            background: white;
            padding: 20px;
            border-radius: 10px;
            box-shadow: 0 0 10px rgba(0,0,0,0.1);
        }
        input[type="text"], select {
            width: 100%;
            padding: 10px;
            margin: 8px 0;
            border: 1px solid #ddd;
            border-radius: 4px;
            box-sizing: border-box;
        }
        input[type="submit"] {
            background-color: #4CAF50;
            color: white;
            padding: 12px 20px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
            width: 100%;
            font-size: 16px;
        }
        input[type="submit"]:hover {
            background-color: #45a049;
        }
        .result {
            margin-top: 20px;
            padding: 15px;
            background-color: #e8f5e9;
            border-radius: 4px;
            font-size: 18px;
        }
        .error {
            color: #d32f2f;
            background-color: #ffebee;
            padding: 10px;
            border-radius: 4px;
            margin-top: 10px;
        }
    </style>
</head>
<body>
    <div class="calculator">
        <h2>Калькулятор</h2>
        <form method="post" action="">
            <input type="text" name="num1" placeholder="Первое число" 
                   value="<?php echo isset($_POST['num1']) ? htmlspecialchars($_POST['num1']) : ''; ?>" required>
            
            <select name="operator">
                <option value="add" <?php echo (isset($_POST['operator']) && $_POST['operator'] == 'add') ? 'selected' : ''; ?>>+</option>
                <option value="subtract" <?php echo (isset($_POST['operator']) && $_POST['operator'] == 'subtract') ? 'selected' : ''; ?>>-</option>
                <option value="multiply" <?php echo (isset($_POST['operator']) && $_POST['operator'] == 'multiply') ? 'selected' : ''; ?>>×</option>
                <option value="divide" <?php echo (isset($_POST['operator']) && $_POST['operator'] == 'divide') ? 'selected' : ''; ?>>÷</option>
                <option value="power" <?php echo (isset($_POST['operator']) && $_POST['operator'] == 'power') ? 'selected' : ''; ?>>^ (степень)</option>
                <option value="sqrt" <?php echo (isset($_POST['operator']) && $_POST['operator'] == 'sqrt') ? 'selected' : ''; ?>>√ (квадратный корень)</option>
            </select>
            
            <input type="text" name="num2" placeholder="Второе число" 
                   value="<?php echo isset($_POST['num2']) ? htmlspecialchars($_POST['num2']) : ''; ?>"
                   id="num2_field">
            
            <input type="submit" name="calculate" value="Вычислить">
        </form>

        <?php
        // Обработка формы
        if (isset($_POST['calculate'])) {
            $num1 = $_POST['num1'];
            $num2 = $_POST['num2'];
            $operator = $_POST['operator'];
            $result = '';
            $error = '';
            
            // Валидация ввода
            if (!is_numeric($num1)) {
                $error = "Первое число должно быть числом!";
            }
            
            // Для операций, требующих два числа
            if (in_array($operator, ['add', 'subtract', 'multiply', 'divide', 'power'])) {
                if (!is_numeric($num2)) {
                    $error = "Второе число должно быть числом!";
                }
                
                if ($operator == 'divide' && $num2 == 0) {
                    $error = "Деление на ноль невозможно!";
                }
            }
            
            // Если нет ошибок, выполняем вычисления
            if (empty($error)) {
                switch ($operator) {
                    case 'add':
                        $result = $num1 + $num2;
                        $operation = "$num1 + $num2";
                        break;
                    case 'subtract':
                        $result = $num1 - $num2;
                        $operation = "$num1 - $num2";
                        break;
                    case 'multiply':
                        $result = $num1 * $num2;
                        $operation = "$num1 × $num2";
                        break;
                    case 'divide':
                        $result = $num1 / $num2;
                        $operation = "$num1 ÷ $num2";
                        break;
                    case 'power':
                        $result = pow($num1, $num2);
                        $operation = "$num1 ^ $num2";
                        break;
                    case 'sqrt':
                        if ($num1 < 0) {
                            $error = "Нельзя извлечь корень из отрицательного числа!";
                        } else {
                            $result = sqrt($num1);
                            $operation = "√$num1";
                        }
                        break;
                    default:
                        $error = "Неизвестная операция";
                }
            }
            
            // Вывод результата или ошибки
            if (!empty($error)) {
                echo "<div class='error'>Ошибка: $error</div>";
            } elseif ($result !== '') {
                echo "<div class='result'><strong>Результат:</strong><br>";
                echo "$operation = <strong>$result</strong></div>";
            }
        }
        ?>
    </div>

    <script>
        // JavaScript для скрытия второго поля при выборе квадратного корня
        document.addEventListener('DOMContentLoaded', function() {
            const operatorSelect = document.querySelector('select[name="operator"]');
            const num2Field = document.getElementById('num2_field');
            
            function toggleNum2Field() {
                if (operatorSelect.value === 'sqrt') {
                    num2Field.style.display = 'none';
                    num2Field.removeAttribute('required');
                } else {
                    num2Field.style.display = 'block';
                    num2Field.setAttribute('required', 'required');
                }
            }
            
            toggleNum2Field(); // Инициализация при загрузке
            operatorSelect.addEventListener('change', toggleNum2Field);
        });
    </script>
</body>
</html>


Особенности этого калькулятора:



1. Поддерживаемые операции:
- Сложение (+)
- Вычитание (-)
- Умножение (×)
- Деление (÷)
- Возведение в степень (^)
- Квадратный корень (√)

2. Безопасность:
- Используется htmlspecialchars() для предотвращения XSS-атак
- Валидация вводимых данных
- Проверка деления на ноль

3. Пользовательский интерфейс:
- Адаптивный дизайн
- Поля сохраняют значения после отправки формы
- Второе поле скрывается при выборе операции квадратного корня
- Вывод результатов в отдельном блоке

4. Обработка ошибок:
- Проверка на числовые значения
- Проверка деления на ноль
- Проверка извлечения корня из отрицательного числа

Как использовать:



1. Сохраните код в файл с расширением .php (например, calculator.php)
2. Загрузите на веб-сервер с поддержкой PHP
3. Откройте файл в браузере

Калькулятор работает полностью на одной странице, используя метод POST для отправки данных. Вы можете легко расширить его функциональность, добавив новые операции (процент, тригонометрические функции и т.д.).
Глубокое мышление
Поиск в интернете