Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
-16 / 0 / 0
Регистрация: 18.11.2022
Сообщений: 25

Ввод в консоль арифметического выражения и вывод результата

08.12.2022, 08:53. Показов 855. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Каждая входная строка представляет собой арифметическое выражение, состоящее из целых констант, +, -, *, /, (, ).
Для каждой входной строки: вычислить и напечатать значение выражения

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import java.util.Scanner;
 
public class Chernovick {
    
    public static void main(String args[]){
 
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter an Mathematical Expression to Evaluate: ");
        String input = scanner.nextLine();
        System.out.println(eval(input));
        scanner.close();
    }
    
public static double eval(final String str) {
    return new Object() {
        int pos = -1, ch;
        
        void nextChar() {
            ch = (++pos < str.length()) ? str.charAt(pos) : -1;  // (лог выр-е) ? (если выр-е истинно) : (если выр-е ложно);
        } 
        
        boolean eat(int charToEat) {
            while (ch == ' ') nextChar();
            if (ch == charToEat) {
                nextChar();
                return true;
            }
            return false;
        }
        
        double parse() {
            nextChar();
            double x = parseExpression();
            if (pos < str.length()) throw new RuntimeException("Unexpected: " + (char)ch);
            return x;
        }
        
        // Grammar:
        // expression = term | expression `+` term | expression `-` term
        // term = factor | term `*` factor | term `/` factor
        // factor = `+` factor | `-` factor | `(` expression `)` | number
        //        | functionName `(` expression `)` | functionName factor
        //        | factor `^` factor
        
        double parseExpression() {
            double x = parseTerm();
            for (;;) // бесконечный цикл без условий
            {
                if      (eat('+')) x += parseTerm(); // сложение
                else if (eat('-')) x -= parseTerm(); // вычитание
                else return x;
            }
        }
        
        double parseTerm() {
            double x = parseFactor();
            for (;;) {
                if      (eat('*')) x *= parseFactor(); // умножение
                else if (eat('/')) x /= parseFactor(); // деление
                else return x;
            }
        }
        
        double parseFactor() {
            if (eat('+')) return +parseFactor(); // unary plus
            if (eat('-')) return -parseFactor(); // unary minus
            
            double x;
            int startPos = this.pos;
            
            if (eat('(')) // скобки
            { 
                x = parseExpression();
                if (!eat(')')) throw new RuntimeException("Missing ')'");
                
            } else if ((ch >= '0' && ch <= '9') || ch == '.') { // числа
                while ((ch >= '0' && ch <= '9') || ch == '.') nextChar();
                x = Double.parseDouble(str.substring(startPos, this.pos));
                
            } else if (ch >= 'a' && ch <= 'z') { // функции
                while (ch >= 'a' && ch <= 'z') nextChar();
                String func = str.substring(startPos, this.pos);
                
                if (eat('(')) {
                    x = parseExpression();
                    if (!eat(')')) throw new RuntimeException("Missing ')' after argument to " + func);
                } else {
                    x = parseFactor();
                }
                
                if (func.equals("sqrt")) x = Math.sqrt(x);
                else if (func.equals("sin")) x = Math.sin(Math.toRadians(x));
                else if (func.equals("cos")) x = Math.cos(Math.toRadians(x));
                else if (func.equals("tan")) x = Math.tan(Math.toRadians(x));
                else throw new RuntimeException("Unknown function: " + func);
                
            } else {
                throw new RuntimeException("Unexpected: " + (char)ch);
            }
            
            if (eat('^')) x = Math.pow(x, parseFactor()); // exponentiation
            
            return x;
        }
    }
    .parse();
  }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.12.2022, 08:53
Ответы с готовыми решениями:

Вычисление арифметического выражения и вывод полученного результата
Доброго времени суток, знатоки. Прошу помочь с решением. Впервые на форуме прошу прощения за оформление, если что. первое задание...

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

Вычисление арифметического выражения и вывод полученного результата
Ребят, помогите пожалуйста..только начали С++ учить..ничего не пойму,а учительница говорит самим разбираться,не помогает Разработать...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.12.2022, 08:53
Помогаю со студенческими работами здесь

Строка: Парсинг арифметического выражения и вывод на экран результата
На входе: строка вида 18 + 5 (сумма или разность целых чисел). На выходе: результат выражения. public class Lab2 { public static...

Вычисление арифметического выражения Ввод с клавиатуры, вывод на экран Выход по нажатию кнопки Alt
Помогите подправить программы. Буду признателен если скинете в рабочем варианте. 2)Написать с использованием функций API программу,...

Определение типа результата арифметического выражения
Как определить тип результата арифметического выражения?

Вычисление целочисленного арифметического выражения, помещение результата в указанную ячейку памяти
Помогите сделать лабу. Не получается составить ее по условию 18 варианта. Заранее спасибо

написать разработать программу для вычисления арифметического выражения и вывода полученного результата.
Здравствуйте. Помогите пожалуйста написать разработать программу для вычисления арифметического выражения и вывода полученного результата....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru