Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Калькулятор со скобками, a*b+c/d*e-x*(-(t*x+c)*(g+(d*s)/f)+... 
:(
    Опции темы
bytes
Дата 1.3.2008, 03:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.10.2006
Где: Baku

Репутация: нет
Всего: нет



Что то есть?
можно придумать форматированный ввод для этого? вроде МаскЕдит...
и много решении, алгоритмы...?
--------------------
?==! or !==?
PM MAIL ICQ MSN   Вверх
Kangaroo
Дата 1.3.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Цитата(bytes @  1.3.2008,  02:02 Найти цитируемый пост)
можно придумать форматированный ввод для этого? вроде МаскЕдит...

Я думаю можно сделать просто ограничение на вводимые символы (только цифры, *, . и т.д.)

Цитата(bytes @  1.3.2008,  02:02 Найти цитируемый пост)
и много решении, алгоритмы...? 

Вот




--------------------
Lost....
PM MAIL MSN   Вверх
bytes
Дата 1.3.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.10.2006
Где: Baku

Репутация: нет
Всего: нет



мне надо перевести строку " a*b+c/d*e-x*((t*x+c)*(g+(d*s)/f)+... " 
какой API использоват? Стринг, Регуляр Експрессион, ...
--------------------
?==! or !==?
PM MAIL ICQ MSN   Вверх
malah
Дата 1.3.2008, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



Есть класс StringTokenizer, распологается в пакете java.util.... Предназначен для анализа строк (выделения лексем и тп).
PM MAIL   Вверх
bytes
Дата 3.3.2008, 04:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.10.2006
Где: Baku

Репутация: нет
Всего: нет



Поработал немного и получилось что то...
завтра или после... исходники в студио  smile
--------------------
?==! or !==?
PM MAIL ICQ MSN   Вверх
bytes
Дата 3.3.2008, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 17.10.2006
Где: Baku

Репутация: нет
Всего: нет



в первых программа сама...

Присоединённый файл ( Кол-во скачиваний: 38 )
Присоединённый файл  Calculator.rar 61,00 Kb
--------------------
?==! or !==?
PM MAIL ICQ MSN   Вверх
Zamuta
Дата 7.3.2008, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 1
Всего: 6



bytes, может это подойдёт...


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Shuma
Дата 13.5.2008, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 15.5.2007
Где: Беларусь, Гомель

Репутация: нет
Всего: 2



Может кому надо консольный вариант:
Код

package Homework;
//<Import>
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
/**
 *@about This is program named "calculator", for calculating string entered by user.
 * 
 *@author Shumilin "Shuma" Alexandr
 */
public class Calculator //Main class
{
    private StringBuilder cstring = new StringBuilder();//for user string storage
    private boolean PlusSign = true;//saving result sign
    private int CloseBracket,OpenBracket;//saving start and finish substring positions
    private int FinishPos = 0, StartPos = 0;//saving start and finish expression part positions
    
    public void readLine() //user string reader
    {
        System.out.println("Enter expression or \"exit\" to exit ");

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String exprString = null;
        try 
        {
            while(!(exprString = reader.readLine()).equals("exit"))
            {
                calculate(exprString);
                if (PlusSign == true) 
                {
                    System.out.println("Result: "+cstring);
                } else 
                {
                    cstring.insert(0, '-');
                    System.out.println("Result: "+cstring);
                }
                PlusSign = true;
                System.out.println("Enter new expression:");  
            }
        } 
        catch (IOException e)
        {
            e.printStackTrace();
        }
         catch(NumberFormatException a)
        {
            System.out.println("ERROR!");
             System.out.println("Enter expression or \"exit\" to exit ");
        try 
        {
            while(!(exprString = reader.readLine()).equals("exit"))
            {
                calculate(exprString);
                if (PlusSign == true) 
                {
                    System.out.println("Result: "+cstring);
                } else 
                {
                    cstring.insert(0, '-');
                    System.out.println("Result: "+cstring);
                }
                PlusSign = true;
                System.out.println("Enter new expression:");  
            }
        } 
         catch (IOException e)
        {
            e.printStackTrace();
         }   
        }
    }
   
    private int valueCalc(String input)//calculating how many slots are needed for secondary array 
    {
        int Slots = 0;
        for (int i = 0; i < input.length(); i++) 
        {

            if ((input.charAt(i) == '+') || (input.charAt(i) == '-') || 
                    (input.charAt(i) == '*') || (input.charAt(i) == '/')|| 
                    (input.charAt(i) == ')')|| (input.charAt(i) == '(')) 
            {
                Slots++;
            }
        }

        return Slots;

    }
    private void calculate(String input)//main method
    {
        int[] CharsPos = new int[valueCalc(input)+2];//"+2" because also needed 
                                            //start and finish string positions 
        float a = 0, b = 0;//for parse parts
        Float c = null;//result between parts
         cstring.delete(0, cstring.length());//cleaning
         cstring.append(input);
        /////////////////////////////////////////////////////////////////////////
//<first priority block>        
        for (int i = 0; i < cstring.length(); i++) 
        {
            if(cstring.charAt(i)=='(')
            {
                OpenBracket=i;
            }
            if(cstring.charAt(i)==')')//for locating max priority 
            {
                CloseBracket=i;
                String subString=new String();
                subString=cstring.substring(OpenBracket+1, CloseBracket);
                cstring.delete(OpenBracket, CloseBracket+1);
                StringBuilder mainString=new StringBuilder(cstring);
                calculate(subString);
                mainString.insert(OpenBracket,cstring.toString());
                cstring.delete(0, cstring.length());
                cstring.insert(0, mainString.toString());
                calculate(cstring.toString());
            }
        }
//</first priority block>        
        ////////////////////////////////////////////////////////////////////////
//<secondary priority block>
        for (int i = 0; i < cstring.length(); i++) 
       {
           if (cstring.charAt(i) == '*')
            {
                CharsPos[0]=0;
        for (int j = 0,  k = 1; j < cstring.length()-1; j++) 
        {
            if ((cstring.charAt(j) == '+') || (cstring.charAt(j) == '-') || 
                    (cstring.charAt(j) == '*') || (cstring.charAt(j) == '/')||
                    (cstring.charAt(j) == '(')|| (cstring.charAt(j) == ')')) 
            {
                CharsPos[k] = j+1;
                k++;
            }
            CharsPos[CharsPos.length-1]=cstring.length()+1;
        }
                 for(int k=0;k<CharsPos.length;k++)
                {
                    
                    if(CharsPos[k]==i+1)
                    {
                        StartPos=CharsPos[k-1];
                        FinishPos=CharsPos[k+1]-1;  
                    }
                }
                
                a = Float.parseFloat(cstring.substring(StartPos, i));
                b = Float.parseFloat(cstring.substring(i + 1, FinishPos));
                cstring.delete(StartPos, FinishPos);
                c = a * b;
                cstring.insert(StartPos, c.toString());
                calculate(cstring.toString());
                break;
            }
           if (cstring.charAt(i) == '/')
            {
                      CharsPos[0]=0;
        for (int j = 0,  k = 1; j < cstring.length()-1; j++) 
        {
            if ((cstring.charAt(j) == '+') || (cstring.charAt(j) == '-') || 
                    (cstring.charAt(j) == '*') || (cstring.charAt(j) == '/')||
                    (cstring.charAt(j) == '(')|| (cstring.charAt(j) == ')')) 
            {
                CharsPos[k] = j+1;
                k++;
            }
            CharsPos[CharsPos.length-1]=cstring.length()+1;
        }
                 for(int k=0;k<CharsPos.length;k++)
                {
                    
                    if(CharsPos[k]==i+1)
                    {
                        StartPos=CharsPos[k-1];
                        FinishPos=CharsPos[k+1]-1;  
                    }
                }
                
                a = Float.parseFloat(cstring.substring(StartPos, i));
                b = Float.parseFloat(cstring.substring(i + 1, FinishPos));
                cstring.delete(StartPos, FinishPos);
                c = a / b;
                cstring.insert(StartPos, c.toString());
                calculate(cstring.toString());
                break;
            }
            
        }
         for (int i = 0; i < cstring.length(); i++) 
        {
            if ((cstring.charAt(i) == '*') || (cstring.charAt(i) == '/')) 
            {
                calculate(cstring.toString());
            }
        }
//</secondary priority block>         
        ////////////////////////////////////////////////////////////////////////
 //<third priority block>
        for (int i = 0; i < cstring.length(); i++)
        {
            if ((cstring.charAt(i) == '+') && (PlusSign == true)) 
            {
                       CharsPos[0]=0;
        for (int j = 0,  k = 1; j < cstring.length()-1; j++) 
        {
            if ((cstring.charAt(j) == '+') || (cstring.charAt(j) == '-') || 
                    (cstring.charAt(j) == '*') || (cstring.charAt(j) == '/')||
                    (cstring.charAt(j) == '(')|| (cstring.charAt(j) == ')')) 
            {
                CharsPos[k] = j+1;
                k++;
            }
            CharsPos[CharsPos.length-1]=cstring.length()+1;
        }
               for(int k=0;k<CharsPos.length;k++)
                {
                    
                    if(CharsPos[k]==i+1)
                    {
                        StartPos=CharsPos[k-1];
                        FinishPos=CharsPos[k+1]-1;  
                    }
                }
                a = Float.parseFloat(cstring.substring(StartPos, i));
                b = Float.parseFloat(cstring.substring(i + 1, FinishPos));
                cstring.delete(StartPos, FinishPos);
                c = a + b;
                cstring.insert(StartPos, c.toString());
                break;
            }

            if ((cstring.charAt(i) == '+') && (PlusSign == false)) 
            {
                       CharsPos[0]=0;
        for (int j = 0,  k = 1; j < cstring.length()-1; j++) 
        {
            if ((cstring.charAt(j) == '+') || (cstring.charAt(j) == '-') || 
                    (cstring.charAt(j) == '*') || (cstring.charAt(j) == '/')||
                    (cstring.charAt(j) == '(')|| (cstring.charAt(j) == ')')) 
            {
                CharsPos[k] = j+1;
                k++;
            }
            CharsPos[CharsPos.length-1]=cstring.length()+1;
        }
                 for(int k=0;k<CharsPos.length;k++)
                {
                    
                    if(CharsPos[k]==i+1)
                    {
                        StartPos=CharsPos[k-1];
                        FinishPos=CharsPos[k+1]-1;  
                    }
                }
                a = Float.parseFloat(cstring.substring(0, i));
                b = Float.parseFloat(cstring.substring(i + 1, FinishPos));
                cstring.delete(0, FinishPos);
                if (b > a) 
                {
                    c = b - a;
                    PlusSign = true;
                } 
                else 
                {
                    c = a - b;
                }
                cstring.insert(0, c.toString());
                break;
            }

            if ((cstring.charAt(i) == '-') && (PlusSign == true)) 
            {
                       CharsPos[0]=0;
        for (int j = 0,  k = 1; j < cstring.length()-1; j++) 
        {
            if ((cstring.charAt(j) == '+') || (cstring.charAt(j) == '-') || 
                    (cstring.charAt(j) == '*') || (cstring.charAt(j) == '/')||
                    (cstring.charAt(j) == '(')|| (cstring.charAt(j) == ')')) 
            {
                CharsPos[k] = j+1;
                k++;
            }
            CharsPos[CharsPos.length-1]=cstring.length()+1;
        }
                 for(int k=0;k<CharsPos.length;k++)
                {
                    
                    if(CharsPos[k]==i+1)
                    {
                        StartPos=CharsPos[k-1];
                        FinishPos=CharsPos[k+1]-1;  
                    }
                }
                a = Float.parseFloat(cstring.substring(0, i));
                b = Float.parseFloat(cstring.substring(i + 1, FinishPos));
                cstring.delete(0, FinishPos);
                if (b > a) 
                {
                    c = b - a;
                    PlusSign = false;
                } 
                else 
                {
                    c = a - b;
                }
                cstring.insert(0, c.toString());
                break;
            }

            if ((cstring.charAt(i) == '-') && (PlusSign == false)) 
            {
                       CharsPos[0]=0;
        for (int j = 0,  k = 1; j < cstring.length()-1; j++) 
        {
            if ((cstring.charAt(j) == '+') || (cstring.charAt(j) == '-') || 
                    (cstring.charAt(j) == '*') || (cstring.charAt(j) == '/')||
                    (cstring.charAt(j) == '(')|| (cstring.charAt(j) == ')')) 
            {
                CharsPos[k] = j+1;
                k++;
            }
            CharsPos[CharsPos.length-1]=cstring.length()+1;
        }
                 for(int k=0;k<CharsPos.length;k++)
                {
                    
                    if(CharsPos[k]==i+1)
                    {
                        StartPos=CharsPos[k-1];
                        FinishPos=CharsPos[k+1]-1;  
                    }
                }
                a = Float.parseFloat(cstring.substring(0, i));
                b = Float.parseFloat(cstring.substring(i + 1, FinishPos));
                cstring.delete(0, FinishPos);
                c = a + b;
                cstring.insert(0, c.toString());
                break;
            }
        }
        for (int i = 0; i < cstring.length(); i++) 
        {
            if ((cstring.charAt(i) == '+') || (cstring.charAt(i) == '-')) 
            {
                calculate(cstring.toString());
            }
        }

    }
 //</third priority block>
    public static void main(String[] args)
    {
        Calculator calc = new Calculator();
        calc.readLine();
    }
}

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0753 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.