Коментарі (15)
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
1 січня, 20:47
Оновлений код програми з новими функціями: Збереження історії в файл: Збереження історії обчислень у текстовий файл і завантаження її при запуску програми. Підтримка змінних у виразах: Користувач може задавати змінні (x = 5) і використовувати їх у наступних виразах (x + 3).
import java.io.*;
import java.util.*;
import javax.script.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean continueCalculating = true;
        ArrayList<String> history = loadHistoryFromFile("history.txt"); // Завантаження історії з файлу
        Map<String, Double> variables = new HashMap<>(); // Змінні

        while (continueCalculating) {
            System.out.println("Оберіть режим:");
            System.out.println("1. Простий калькулятор");
            System.out.println("2. Обчислити вираз (підтримуються змінні, наприклад, x = 5, x + 3)");
            System.out.println("3. Переглянути історію");
            System.out.println("4. Видалити записи з історії");
            System.out.println("5. Вихід");

            int choice = scanner.nextInt();
            scanner.nextLine(); // Очищення залишку вводу
1 січня, 20:48
switch (choice) {
            case 1: // Простий калькулятор
                handleSimpleCalculator(scanner, history);
                break;

            case 2: // Обчислення складного виразу
                handleExpression(scanner, history, variables);
                break;

            case 3: // Перегляд історії
                printHistory(history);
                break;

            case 4: // Видалення записів з історії
                handleHistoryDeletion(scanner, history);
                break;

            case 5: // Вихід
                saveHistoryToFile("history.txt", history);
                continueCalculating = false;
                break;

            default:
                System.out.println("Невірний вибір. Спробуйте ще раз.");
        }
    }

    System.out.println("Дякую за використання калькулятора. До побачення!");
}
1 січня, 20:48
// Простий калькулятор
public static void handleSimpleCalculator(Scanner scanner, ArrayList<String> history) {
    System.out.println("Введіть перше число:");
    double number1 = scanner.nextDouble();

    System.out.println("Введіть друге число:");
    double number2 = scanner.nextDouble();

    System.out.println("Введіть операцію (+, -, *, /, %, ^):");
    char operation = scanner.next().charAt(0);

    double result = 0;
    boolean validOperation = true;

    switch (operation) {
        case '+':
            result = number1 + number2;
            break;
        case '-':
            result = number1 - number2;
            break;
        case '*':
            result = number1 * number2;
            break;
        case '/':
            if (number2 != 0) {
                result = number1 / number2;
            } else {
                System.out.println("Помилка: Ділення на нуль неможливе.");
                validOperation = false;
            }
            break;
        case '%':
            if (number2 != 0) {
                result = number1 % number2;
            } else {
                System.out.println("Помилка: Ділення на нуль неможливе.");
                validOperation = false;
            }
            break;
        case '^':
            result = Math.pow(number1, number2);
            break;
        default:
            System.out.println("Помилка: Невідома операція.");
            validOperation = false;
    }

    if (validOperation) {
        String calculation = number1 + " " + operation + " " + number2 + " = " + result;
        history.add(calculation);
        System.out.println("Результат: " + result);
    }
}
1 січня, 20:48
// Обробка виразів зі змінними
public static void handleExpression(Scanner scanner, ArrayList<String> history, Map<String, Double> variables) {
    System.out.println("Введіть вираз (наприклад, x = 5 або x + 3):");
    String expression = scanner.nextLine();

    try {
        if (expression.contains("=")) {
            // Обробка присвоєння змінної
            String[] parts = expression.split("=");
            String variable = parts[0].trim();
            String valueExpression = parts[1].trim();

            double value = evaluateExpression(valueExpression, variables);
            variables.put(variable, value);
            history.add(variable + " = " + value);
            System.out.println(variable + " = " + value);
        } else {
            // Обчислення виразу
            double result = evaluateExpression(expression, variables);
            history.add(expression + " = " + result);
            System.out.println("Результат: " + result);
        }
    } catch (Exception e) {
        System.out.println("Помилка у виразі. Спробуйте ще раз.");
    }
}

// Оцінка виразу зі змінними
public static double evaluateExpression(String expression, Map<String, Double> variables) throws Exception {
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
    for (Map.Entry<String, Double> entry : variables.entrySet()) {
        expression = expression.replace(entry.getKey(), entry.getValue().toString());
    }
    return ((Number) engine.eval(expression)).doubleValue();
}
1 січня, 20:48
// Перегляд історії
public static void printHistory(ArrayList<String> history) {
    if (history.isEmpty()) {
        System.out.println("Історія порожня.");
    } else {
        System.out.println("Історія обчислень:");
        for (int i = 0; i < history.size(); i++) {
            System.out.println((i + 1) + ". " + history.get(i));
        }
    }
}

// Видалення записів з історії
public static void handleHistoryDeletion(Scanner scanner, ArrayList<String> history) {
    System.out.println("Оберіть дію:");
    System.out.println("1. Очистити всю історію");
    System.out.println("2. Видалити запис за номером");

    int choice = scanner.nextInt();
    scanner.nextLine(); // Очищення залишку вводу

    switch (choice) {
        case 1:
            history.clear();
            System.out.println("Історію очищено.");
            break;

        case 2:
            printHistory(history);
            System.out.println("Введіть номер запису для видалення:");
            int index = scanner.nextInt() - 1;

            if (index >= 0 && index < history.size()) {
                history.remove(index);
                System.out.println("Запис видалено.");
            } else {
                System.out.println("Невірний номер запису.");
            }
            break;

        default:
            System.out.println("Невірний вибір.");
    }
}
1 січня, 20:49
// Збереження історії в файл
    public static void saveHistoryToFile(String filename, ArrayList<String> history) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
            for (String record : history) {
                writer.write(record);
                writer.newLine();
            }
        } catch (IOException e) {
            System.out.println("Помилка збереження історії в файл.");
        }
    }

    // Завантаження історії з файлу
    public static ArrayList<String> loadHistoryFromFile(String filename) {
        ArrayList<String> history = new ArrayList<>();
        try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
            String line;
            while ((line = reader.readLine()) != null) {
                history.add(line);
            }
        } catch (IOException e) {
            System.out.println("Історію не вдалося завантажити.");
        }
        return history;
    }
}
1 січня, 20:41
Оновлений код програми з новими функціями: Видалення записів з історії Робота з великим числом операндів у виразі
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean continueCalculating = true;
        ArrayList<String> history = new ArrayList<>(); // Збереження історії обчислень

        while (continueCalculating) {
            System.out.println("Оберіть режим:");
            System.out.println("1. Простий калькулятор");
            System.out.println("2. Обчислити вираз (наприклад, 1 + 2 * 3)");
            System.out.println("3. Переглянути історію");
            System.out.println("4. Видалити записи з історії");
            System.out.println("5. Вихід");

            int choice = scanner.nextInt();
            scanner.nextLine(); // Очищення залишку від вводу

            switch (choice) {
                case 1: // Простий калькулятор
                    handleSimpleCalculator(scanner, history);
                    break;

                case 2: // Обчислення складного виразу
                    handleExpression(scanner, history);
                    break;

                case 3: // Перегляд історії
                    printHistory(history);
                    break;

                case 4: // Видалення записів з історії
                    handleHistoryDeletion(scanner, history);
                    break;

                case 5: // Вихід
                    continueCalculating = false;
                    break;

                default:
                    System.out.println("Невірний вибір. Спробуйте ще раз.");
            }
        }

        System.out.println("Дякую за використання калькулятора. До побачення!");
    }
1 січня, 20:44
// Простий калькулятор
public static void handleSimpleCalculator(Scanner scanner, ArrayList<String> history) {
    System.out.println("Введіть перше число:");
    double number1 = scanner.nextDouble();

    System.out.println("Введіть друге число:");
    double number2 = scanner.nextDouble();

    System.out.println("Введіть операцію (+, -, *, /, %, ^):");
    char operation = scanner.next().charAt(0);

    double result = 0;
    boolean validOperation = true;

    switch (operation) {
        case '+':
            result = number1 + number2;
            break;
        case '-':
            result = number1 - number2;
            break;
        case '*':
            result = number1 * number2;
            break;
        case '/':
            if (number2 != 0) {
                result = number1 / number2;
            } else {
                System.out.println("Помилка: Ділення на нуль неможливе.");
                validOperation = false;
            }
            break;
        case '%':
            if (number2 != 0) {
                result = number1 % number2;
            } else {
                System.out.println("Помилка: Ділення на нуль неможливе.");
                validOperation = false;
            }
            break;
        case '^':
            result = Math.pow(number1, number2);
            break;
        default:
            System.out.println("Помилка: Невідома операція.");
            validOperation = false;
    }

    if (validOperation) {
        String calculation = number1 + " " + operation + " " + number2 + " = " + result;
        history.add(calculation);
        System.out.println("Результат: " + result);
    }
}
1 січня, 20:44
// Обробка виразів
public static void handleExpression(Scanner scanner, ArrayList<String> history) {
    System.out.println("Введіть вираз (наприклад, 1 + 2 * 3):");
    String expression = scanner.nextLine();

    try {
        double result = evaluateExpression(expression);
        history.add(expression + " = " + result);
        System.out.println("Результат: " + result);
    } catch (Exception e) {
        System.out.println("Помилка у виразі. Спробуйте ще раз.");
    }
}

// Оцінка складного виразу
public static double evaluateExpression(String expression) {
    // Використання бібліотеки JavaScript для парсингу виразів
    return new javax.script.ScriptEngineManager()
            .getEngineByName("JavaScript")
            .eval(expression)
            .doubleValue();
}

// Перегляд історії
public static void printHistory(ArrayList<String> history) {
    if (history.isEmpty()) {
        System.out.println("Історія порожня.");
    } else {
        System.out.println("Історія обчислень:");
        for (int i = 0; i < history.size(); i++) {
            System.out.println((i + 1) + ". " + history.get(i));
        }
    }
}
1 січня, 20:45
// Видалення історії
    public static void handleHistoryDeletion(Scanner scanner, ArrayList<String> history) {
        System.out.println("Оберіть дію:");
        System.out.println("1. Очистити всю історію");
        System.out.println("2. Видалити запис за номером");

        int choice = scanner.nextInt();
        scanner.nextLine(); // Очищення залишку від вводу

        switch (choice) {
            case 1:
                history.clear();
                System.out.println("Історію очищено.");
                break;

            case 2:
                printHistory(history);
                System.out.println("Введіть номер запису для видалення:");
                int index = scanner.nextInt() - 1;

                if (index >= 0 && index < history.size()) {
                    history.remove(index);
                    System.out.println("Запис видалено.");
                } else {
                    System.out.println("Невірний номер запису.");
                }
                break;

            default:
                System.out.println("Невірний вибір.");
        }
    }
}
1 січня, 20:38
Оновлений код програми, який реалізує нові функції: Додана операція піднесення до степеня (^). Збереження історії обчислень, яку можна переглянути після кожної операції.
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean continueCalculating = true;
        ArrayList<String> history = new ArrayList<>(); // Збереження історії обчислень

        while (continueCalculating) {
            System.out.println("Введіть перше число:");
            double number1 = scanner.nextDouble();

            System.out.println("Введіть друге число:");
            double number2 = scanner.nextDouble();

            System.out.println("Введіть операцію (+, -, *, /, %, ^):");
            char operation = scanner.next().charAt(0);

            double result = 0;
            boolean validOperation = true;
            switch (operation) {
                case '+':
                    result = number1 + number2;
                    break;
                case '-':
                    result = number1 - number2;
                    break;
                case '*':
                    result = number1 * number2;
                    break;
                case '/':
                    if (number2 != 0) {
                        result = number1 / number2;
                    } else {
                        System.out.println("Помилка: Ділення на нуль неможливе.");
                        validOperation = false;
                    }
                    break;
1 січня, 20:40
case '%':
                    if (number2 != 0) {
                        result = number1 % number2;
                    } else {
                        System.out.println("Помилка: Ділення на нуль неможливе.");
                        validOperation = false;
                    }
                    break;
                case '^':
                    result = Math.pow(number1, number2); // Піднесення до степеня
                    break;
                default:
                    System.out.println("Помилка: Невідома операція.");
                    validOperation = false;
            }

            if (validOperation) {
                String calculation = number1 + " " + operation + " " + number2 + " = " + result;
                history.add(calculation); // Збереження обчислення в історію
                System.out.println("Результат: " + result);
            }

            System.out.println("Хочете виконати ще одне обчислення? (так/ні/історія):");
            String userResponse = scanner.next().toLowerCase();

            if (userResponse.equals("історія")) {
                System.out.println("Історія обчислень:");
                for (String record : history) {
                    System.out.println(record);
                }
            } else if (!userResponse.equals("так")) {
                continueCalculating = false;
            }
        }

        System.out.println("Дякую за використання калькулятора. До побачення!");
    }
}
1 січня, 20:34
Оновлений код: Калькулятор з підтримкою кількох чисел
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean continueCalculating = true;

        while (continueCalculating) {
            System.out.println("Введіть перше число:");
            double number1 = scanner.nextDouble();

            System.out.println("Введіть друге число:");
            double number2 = scanner.nextDouble();

            System.out.println("Введіть операцію (+, -, *, /, %):");
            char operation = scanner.next().charAt(0);

            double result = 0;
            boolean validOperation = true;

            switch (operation) {
                case '+':
                    result = number1 + number2;
                    break;
                case '-':
                    result = number1 - number2;
                    break;
                case '*':
                    result = number1 * number2;
                    break;
                case '/':
                    if (number2 != 0) {
                        result = number1 / number2;
                    } else {
                        System.out.println("Помилка: Ділення на нуль неможливе.");
                        validOperation = false;
                    }
                    break;
                case '%':
                    if (number2 != 0) {
                        result = number1 % number2;
                    } else {
                        System.out.println("Помилка: Ділення на нуль неможливе.");
                        validOperation = false;
                    }
                    break;
                default:
                    System.out.println("Помилка: Невідома операція.");
                    validOperation = false;
            }
1 січня, 20:35
if (validOperation) {
                System.out.println("Результат: " + result);
            }

            System.out.println("Хочете виконати ще одне обчислення? (так/ні):");
            String userResponse = scanner.next().toLowerCase();

            if (!userResponse.equals("так")) {
                continueCalculating = false;
            }
        }

        System.out.println("Дякую за використання калькулятора. До побачення!");
    }
}
1 січня, 20:32
Код програми: Калькулятор
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // Створення об'єкта Scanner для зчитування даних
        Scanner scanner = new Scanner(System.in);

        // Зчитування першого числа
        System.out.println("Введіть перше число:");
        double number1 = scanner.nextDouble();

        // Зчитування другого числа
        System.out.println("Введіть друге число:");
        double number2 = scanner.nextDouble();

        // Зчитування операції
        System.out.println("Введіть операцію (+, -, *, /):");
        char operation = scanner.next().charAt(0);

        // Змінна для результату
        double result = 0;

        // Виконання операції
        switch (operation) {
            case '+':
                result = number1 + number2;
                break;
            case '-':
                result = number1 - number2;
                break;
            case '*':
                result = number1 * number2;
                break;
            case '/':
                if (number2 != 0) {
                    result = number1 / number2;
                } else {
                    System.out.println("Помилка: Ділення на нуль неможливе.");
                    return;
                }
                break;
            default:
                System.out.println("Помилка: Невідома операція.");
                return;
        }

        // Виведення результату
        System.out.println("Результат: " + result);
    }
}