Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 07.01.2014
Сообщений: 22

Нужно написать калькулятор с чтением из файла

11.06.2014, 21:44. Показов 2946. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста. Нужно написать калькулятор, с чтением примеров из файла, с последующей записью ответов (условие примера = ответ, построчно) в другой файл. Содержимое файла вроде этого:
11+ 5 - 4
sin(75)
(48+1/tg(26))*sqrt(85-cos(12))
Заранее очень благодарна!)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.06.2014, 21:44
Ответы с готовыми решениями:

Нужно написать программу с чтением/записью в файл (потоки)
Помогите пожалуйста, в изучении Java я новичок, задали задание (изучаем потоки) следующего характера: Написать программу, которая...

Нужно написать прострейший калькулятор, по данному коду
Помогите, пожалуйста. Нужно написать прострейший калькулятор, по данному коду: <html> <head> <meta charset='utf-8'>...

Нужно написать калькулятор с функцией расчета остатка от деления
простейший калькулятор легко. а что за функция расчета от деления не могу вьехать. есть ли у кого нибудь какие нибудь идеи ? за ранее...

10
17 / 17 / 6
Регистрация: 19.05.2014
Сообщений: 67
12.06.2014, 10:24
мде, я бы понял примитивный калькулятор с примитивными вычислениями +,-,*,/. Но тут у Вас и инженерные операции типо sin,tg, sqrt (а значит и cos, ctg, ^... тут можно перечислять и перечислять). Плюс ко всему парсинг строки с файла, да так чтобы при вычислении соблюдалась определенная очередь. Для бесплатной помощи слишком долго и нудно писать, думаю Вам нужно в раздел фриланс!
0
1 / 1 / 0
Регистрация: 07.01.2014
Сообщений: 22
12.06.2014, 11:21  [ТС]
Как мне хоть читать в определенной последовательности и записывать так же??
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
12.06.2014, 11:22
Цитата Сообщение от Annstice Посмотреть сообщение
Как мне хоть читать в определенной последовательности и записывать так же??
да, так и делайте
0
1 / 1 / 0
Регистрация: 07.01.2014
Сообщений: 22
12.06.2014, 11:26  [ТС]
Как именно это сделать? мне весь код не нужен, дайте хоть направление
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
12.06.2014, 11:28
Цитата Сообщение от Annstice Посмотреть сообщение
направление
даю
https://www.cyberforum.ru/sear... id=7796770
0
1 / 1 / 0
Регистрация: 07.01.2014
Сообщений: 22
13.06.2014, 01:58  [ТС]
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
import java.io.*;
import java.math.BigDecimal;
import java.nio.charset.Charset;
import java.util.*;
 
 
public class ExpressionUtils {
    InputStream fis;
    OutputStream fos;
    BufferedReader br;
    String line;
    public static final Map<String, Integer> MAIN_MATH_OPERATIONS = new HashMap<String, Integer>();
 
    static {
        MAIN_MATH_OPERATIONS.put("*", 1);
        MAIN_MATH_OPERATIONS.put("/", 1);
        MAIN_MATH_OPERATIONS.put("+", 2);
        MAIN_MATH_OPERATIONS.put("-", 2);
        MAIN_MATH_OPERATIONS.put("sin", 1);
        MAIN_MATH_OPERATIONS.put("cos", 1);
        MAIN_MATH_OPERATIONS.put("tg", 1);
        MAIN_MATH_OPERATIONS.put("log", 1);
        MAIN_MATH_OPERATIONS.put("^", 1);
    }
 
    public void read() throws IOException {
        try {
            fis = new
                    FileInputStream("input.txt");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        br = new
                BufferedReader(new InputStreamReader(fis, Charset.forName("UTF-8")));
        while ((line = br.readLine()) != null) {
            calculate(line);
        }
        br.close();
        br = null;
        fis = null;
    }
 
    public void write() throws IOException {
        try {
            fos = new FileOutputStream("output.txt");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
 
    public static String sortingStation(String expression, Map<String, Integer> operations,
                                        String leftBracket, String rightBracket) {
        if (expression == null || expression.length() == 0)
            throw new IllegalStateException("Expression isn't specified.");
        if (operations == null || operations.isEmpty())
            throw new IllegalStateException("Operations aren't specified.");
        // Выходная строка, разбитая на "символы" - операции и операнды.
        List<String> out = new ArrayList<String>();
        // Стек операций.
        Stack<String> stack = new Stack<String>();
 
        // Удаление пробелов из выражения.
        expression = expression.replace(" ", "");
 
        // Множество "символов", не являющихся операндами (операции и скобки).
        Set<String> operationSymbols = new HashSet<String>(operations.keySet());
        operationSymbols.add(leftBracket);
        operationSymbols.add(rightBracket);
 
        // Индекс, на котором закончился разбор строки на прошлой итерации.
        int index = 0;
        // Признак необходимости поиска следующего элемента.
        boolean findNext = true;
        while (findNext) {
            int nextOperationIndex = expression.length();
            String nextOperation = "";
            // Поиск следующего оператора или скобки.
            for (String operation : operationSymbols) {
                int i = expression.indexOf(operation, index);
                if (i >= 0 && i < nextOperationIndex) {
                    nextOperation = operation;
                    nextOperationIndex = i;
                }
            }
            if (nextOperationIndex == expression.length()) {
                findNext = false;
            } else {
                // Если оператору или скобке предшествует операнд, добавляем его в выходную строку.
                if (index != nextOperationIndex) {
                    out.add(expression.substring(index, nextOperationIndex));
                }
                // Обработка операторов и скобок.
                // Открывающая скобка.
                if (nextOperation.equals(leftBracket)) {
                    stack.push(nextOperation);
                }
                // Закрывающая скобка.
                else if (nextOperation.equals(rightBracket)) {
                    while (!stack.peek().equals(leftBracket)) {
                        out.add(stack.pop());
                        if (stack.empty()) {
                            throw new IllegalArgumentException("Unmatched brackets");
                        }
                    }
                    stack.pop();
                }
                // Операция.
                else {
                    while (!stack.empty() && !stack.peek().equals(leftBracket) &&
                            (operations.get(nextOperation) >= operations.get(stack.peek()))) {
                        out.add(stack.pop());
                    }
                    stack.push(nextOperation);
                }
                index = nextOperationIndex + nextOperation.length();
            }
        }
        // Добавление в выходную строку операндов после последнего операнда.
        if (index != expression.length()) {
            out.add(expression.substring(index));
        }
        // Преобразование выходного списка к выходной строке.
        while (!stack.empty()) {
            out.add(stack.pop());
        }
        StringBuffer result = new StringBuffer();
        if (!out.isEmpty())
            result.append(out.remove(0));
        while (!out.isEmpty())
            result.append(" ").append(out.remove(0));
 
        return result.toString();
    }
 
    public static String sortingStation(String expression, Map<String, Integer> operations) {
        return sortingStation(expression, operations, "(", ")");
    }
 
    public static BigDecimal calculate(String expression) {
        String rpn = sortingStation(expression, MAIN_MATH_OPERATIONS);
        StringTokenizer tokenizer = new StringTokenizer(rpn, " ");
        Stack<BigDecimal> stack = new Stack<BigDecimal>();
        while (tokenizer.hasMoreTokens()) {
            String token = tokenizer.nextToken();// Операнд.
            if (!MAIN_MATH_OPERATIONS.keySet().contains(token)) {
                stack.push(new BigDecimal(token));
            } else {
                BigDecimal operand2 = stack.pop();
                BigDecimal operand1 = stack.empty() ? BigDecimal.ZERO : stack.pop();
                if (token.equals("*")) {
                    stack.push(operand1.multiply(operand2));
                } else if (token.equals("/")) {
                    stack.push(operand1.divide(operand2));
                } else if (token.equals("+")) {
                    stack.push(operand1.add(operand2));
                } else if (token.equals("-")) {
                    stack.push(operand1.subtract(operand2));
                } else if (token.equals("^")) {
                    stack.push(operand1.pow(Integer.valueOf(String.valueOf(operand2))));
                } else if (token.equals("sin")) {
                    stack.push(BigDecimal.valueOf(Math.sin(Double.valueOf(String.valueOf(operand2)))));
                } else if (token.equals("cos")) {
                    stack.push(BigDecimal.valueOf(Math.cos(Double.valueOf(String.valueOf(operand2)))));
                } else if (token.equals("tg")) {
                    stack.push(BigDecimal.valueOf(Math.tan(Double.valueOf(String.valueOf(operand2)))));
                } else if (token.equals("log")) {
                    stack.push(BigDecimal.valueOf(Math.log(Double.valueOf(String.valueOf(operand2)))));
                }
            }
        }
        if (stack.size() != 1)
            throw new IllegalArgumentException("Expression syntax error.");
        return stack.pop();
    }
}import java.io.IOException;
 
/**
 * Created by User on 11.06.2014.
 */
public class MainClass {
    public static void main(String[] args) throws IOException {
        ExpressionUtils main = new ExpressionUtils();
        main.read();
        main.write();
    }
}
Вероятно, данный код бред. Компилируется, но кидает NoSuchMethodException. Может может кто подсказать как подправить код?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
13.06.2014, 02:09
где именно возникает исключение?
0
1 / 1 / 0
Регистрация: 07.01.2014
Сообщений: 22
13.06.2014, 03:01  [ТС]
в main
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
13.06.2014, 04:24
а точнее. Приведите весь stacktrace
0
1 / 1 / 0
Регистрация: 07.01.2014
Сообщений: 22
14.06.2014, 23:13  [ТС]
"C:\Program Files\Java\jdk1.7.0_25\bin\java" -Didea.launcher.port=7532 "-Didea.launcher.bin.path=C:\IntelliJ IDEA 13.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.7.0_25\jre\lib\charsets. jar;C:\Program Files\Java\jdk1.7.0_25\jre\lib\deploy.ja r;C:\Program Files\Java\jdk1.7.0_25\jre\lib\javaws.ja r;C:\Program Files\Java\jdk1.7.0_25\jre\lib\jce.jar;C :\Program Files\Java\jdk1.7.0_25\jre\lib\jfr.jar;C :\Program Files\Java\jdk1.7.0_25\jre\lib\jfxrt.jar ;C:\Program Files\Java\jdk1.7.0_25\jre\lib\jsse.jar; C:\Program Files\Java\jdk1.7.0_25\jre\lib\managemen t-agent.jar;C:\Program Files\Java\jdk1.7.0_25\jre\lib\plugin.ja r;C:\Program Files\Java\jdk1.7.0_25\jre\lib\resources .jar;C:\Program Files\Java\jdk1.7.0_25\jre\lib\rt.jar;C: \Program Files\Java\jdk1.7.0_25\jre\lib\ext\acces s-bridge-64.jar;C:\Program Files\Java\jdk1.7.0_25\jre\lib\ext\dnsns .jar;C:\Program Files\Java\jdk1.7.0_25\jre\lib\ext\jacce ss.jar;C:\Program Files\Java\jdk1.7.0_25\jre\lib\ext\local edata.jar;C:\Program Files\Java\jdk1.7.0_25\jre\lib\ext\sunec .jar;C:\Program Files\Java\jdk1.7.0_25\jre\lib\ext\sunjc e_provider.jar;C:\Program Files\Java\jdk1.7.0_25\jre\lib\ext\sunms capi.jar;C:\Program Files\Java\jdk1.7.0_25\jre\lib\ext\zipfs .jar;C:\Users\User\Desktop\Java\Calculat e\target\classes;C:\IntelliJ IDEA 13.1\lib\idea_rt.jar" com.intellij.rt.execution.application.Ap pMain ExpressionUtils
Exception in thread "main" java.lang.NoSuchMethodException: ExpressionUtils.main([Ljava.lang.String
at java.lang.Class.getMethod(Class.java:165 5)
at com.intellij.rt.execution.application.Ap pMain.main(AppMain.java:113)

Process finished with exit code 1

Добавлено через 1 час 38 минут
Исключения теперь нет, это была просто ошибка в настройках. Подскажите плиз, как мне создать массив результатов (пример + "=" + результат) и записать потом весь массив в файл? а то в результате программы пока просто пустой файл создается((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.06.2014, 23:13
Помогаю со студенческими работами здесь

чтением из файла....
у меня есть два класса... один (базовый) читает строку из файла и присваивает её значение переменной этого типа второй (производный)...

Проблемы с чтением файла на c++
Задача: Сформировать массив данных с помощью структуры. Предметная область – данные о студентах имеющих публикации (номер по порядку,...

Проблемы с чтением из файла
Здравствуйте все! У меня сразу два вопроса. Начну с того, который попроще. Я осваиваю библиотеку fstream, решил написать небольшой кусочек...

Проблема с чтением файла
Всем здорова) Хочу написать код который читает xml и другие файлы на java Так почему он у меня не читает файл существующий, или его куда...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru