10 эффективных методов создания программы-калькулятора с примерами кода

В этой статье блога мы рассмотрим десять эффективных методов создания программы-калькулятора на примерах кода. Независимо от того, новичок вы или опытный программист, эти методы помогут вам создать программу-калькулятор на различных языках программирования. Давайте погрузимся!

Метод 1: простые арифметические операции
Пример кода (Python):

def add(a, b):
    return a + b
def subtract(a, b):
    return a - b
def multiply(a, b):
    return a * b
def divide(a, b):
    return a / b

Метод 2: использование функции eval()
Пример кода (Python):

expression = input("Enter an expression: ")
result = eval(expression)
print("Result:", result)

Метод 3: использование операторов if-else
Пример кода (Java):

import java.util.Scanner;
public class Calculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter operator (+, -, *, /): ");
        char operator = scanner.next().charAt(0);
        System.out.print("Enter two numbers: ");
        double num1 = scanner.nextDouble();
        double num2 = scanner.nextDouble();
        double result;
        if (operator == '+') {
            result = num1 + num2;
        } else if (operator == '-') {
            result = num1 - num2;
        } else if (operator == '*') {
            result = num1 * num2;
        } else if (operator == '/') {
            result = num1 / num2;
        } else {
            System.out.println("Invalid operator!");
            return;
        }
        System.out.println("Result: " + result);
    }
}

Метод 4. Использование указателей функций
Пример кода (C++):

#include <iostream>
double add(double a, double b) {
    return a + b;
}
double subtract(double a, double b) {
    return a - b;
}
double multiply(double a, double b) {
    return a * b;
}
double divide(double a, double b) {
    return a / b;
}
int main() {
    double num1, num2;
    char op;
    std::cout << "Enter operator (+, -, *, /): ";
    std::cin >> op;
    std::cout << "Enter two numbers: ";
    std::cin >> num1 >> num2;
    double (*operation)(double, double);
    if (op == '+') {
        operation = add;
    } else if (op == '-') {
        operation = subtract;
    } else if (op == '*') {
        operation = multiply;
    } else if (op == '/') {
        operation = divide;
    } else {
        std::cout << "Invalid operator!" << std::endl;
        return 0;
    }
    double result = operation(num1, num2);
    std::cout << "Result: " << result << std::endl;
    return 0;
}

Метод 5: использование операторов Switch
Пример кода (C#):

using System;
class Calculator
{
    static void Main()
    {
        Console.Write("Enter operator (+, -, *, /): ");
        char op = Console.ReadLine()[0];
        Console.Write("Enter two numbers: ");
        double num1 = double.Parse(Console.ReadLine());
        double num2 = double.Parse(Console.ReadLine());
        double result;
        switch (op)
        {
            case '+':
                result = num1 + num2;
                break;
            case '-':
                result = num1 - num2;
                break;
            case '*':
                result = num1 * num2;
                break;
            case '/':
                result = num1 / num2;
                break;
            default:
                Console.WriteLine("Invalid operator!");
                return;
        }
        Console.WriteLine("Result: " + result);
    }
}

Метод 6: использование JavaScript Eval()
Пример кода (JavaScript):

let expression = prompt("Enter an expression: ");
let result = eval(expression);
console.log("Result:", result);

Метод 7: использование библиотек/фреймворков
Пример кода (Python с Tkinter):

from tkinter import *
def calculate():
    expression = entry.get()
    result = eval(expression)
    label.config(text="Result: " + str(result))
root = Tk()
root.title("Calculator")
entry = Entry(root)
entry.pack()
button = Button(root, text="Calculate", command=calculate)
button.pack()
label = Label(root)
label.pack()
root.mainloop()

Метод 8: использование обратной польской нотации (RPN)
Пример кода (Python):

def evaluate_rpn(expression):
    stack = []
    operators = {
        '+': lambda x, y: x + y,
        '-':lambda x, y: x - y,
        '*': lambda x, y: x * y,
        '/': lambda x, y: x / y
    }
    for token in expression.split():
        if token in operators:
            y = stack.pop()
            x = stack.pop()
            result = operators[token](x, y)
            stack.append(result)
        else:
            stack.append(float(token))
    return stack[0]
expression = input("Enter an expression in RPN: ")
result = evaluate_rpn(expression)
print("Result:", result)

Метод 9: использование анализа рекурсивного спуска
Пример кода (Python):

def parse_expression(tokens):
    value = parse_term(tokens)
    while tokens and tokens[0] in ('+', '-'):
        operator = tokens.pop(0)
        term = parse_term(tokens)
        if operator == '+':
            value += term
        elif operator == '-':
            value -= term
    return value
def parse_term(tokens):
    value = parse_factor(tokens)
    while tokens and tokens[0] in ('*', '/'):
        operator = tokens.pop(0)
        factor = parse_factor(tokens)
        if operator == '*':
            value *= factor
        elif operator == '/':
            value /= factor
    return value
def parse_factor(tokens):
    if tokens[0] == '(':
        tokens.pop(0)
        value = parse_expression(tokens)
        tokens.pop(0)
        return value
    else:
        return float(tokens.pop(0))
expression = input("Enter an expression: ")
tokens = expression.split()
result = parse_expression(tokens)
print("Result:", result)

Метод 10: использование алгоритма маневровой станции
Пример кода (Python):

def precedence(operator):
    if operator in ('+', '-'):
        return 1
    elif operator in ('*', '/'):
        return 2
    else:
        return 0
def infix_to_postfix(expression):
    output = []
    stack = []
    for token in expression.split():
        if token.isdigit():
            output.append(token)
        elif token in ('+', '-', '*', '/'):
            while stack and precedence(stack[-1]) >= precedence(token):
                output.append(stack.pop())
            stack.append(token)
        elif token == '(':
            stack.append(token)
        elif token == ')':
            while stack and stack[-1] != '(':
                output.append(stack.pop())
            stack.pop()
    while stack:
        output.append(stack.pop())
    return ' '.join(output)
def evaluate_postfix(expression):
    stack = []
    for token in expression.split():
        if token.isdigit():
            stack.append(token)
        else:
            y = float(stack.pop())
            x = float(stack.pop())
            if token == '+':
                result = x + y
            elif token == '-':
                result = x - y
            elif token == '*':
                result = x * y
            elif token == '/':
                result = x / y
            stack.append(str(result))
    return stack[0]
infix_expression = input("Enter an infix expression: ")
postfix_expression = infix_to_postfix(infix_expression)
result = evaluate_postfix(postfix_expression)
print("Result:", result)

В этой статье мы рассмотрели десять различных методов создания программы-калькулятора: от простых арифметических операций до более сложных методов, таких как использование указателей функций, библиотек и алгоритмов. Эти примеры охватывают различные языки программирования, такие как Python, Java, C++, C#, JavaScript и другие. Не стесняйтесь выбирать метод, который соответствует вашим потребностям и предпочтениям языка программирования. Приятного кодирования!