Login Register






Thread Rating:
  • 0 Vote(s) - 0 Average


[JAVA] Solving expressions filter_list
Author
Message
[JAVA] Solving expressions #1
The following code I'm going to present had been designed by me quite sometime ago. It solves mathematical expression using BODMAS order of operation. I have implemented the code in GUI too, but I'm not sharing that part here for now.

Code:
import java.io.*;
/** Purpose : To solve a mathematical expression using BODMAS order of operation
*  Author  : Solixious
*  Modified By :
*/
class Solve
{
    String s[]={"^","/","*","+","-"}; //used to solve the expression using BODMAS order
    public boolean isMisc(String str)
    {
        return (str.startsWith("sin") || str.startsWith("cos") || str.startsWith("tan") || str.startsWith("log") || str.startsWith("asin") || str.startsWith("acos") || str.startsWith("atan"));
    }
    public float solveMisc(String str)
    {
        float result=0.0f;
        if(str.startsWith("sin"))
        {
            result=(float)Math.sin(Math.toRadians(Float.parseFloat(str.substring(3,str.length()))));
        }
        else if(str.startsWith("cos"))
        {
            result=(float)Math.sin(Math.toRadians(90.0f-Float.parseFloat(str.substring(3,str.length()))));
        }
        else if(str.startsWith("tan"))
        {
            result=(float)(Math.sin(Math.toRadians(Float.parseFloat(str.substring(3,str.length()))))/Math.sin(Math.toRadians(90.0f-Float.parseFloat(str.substring(3,str.length())))));
        }
        else if(str.startsWith("log"))
        {
            result=(float)Math.log(Float.parseFloat(str.substring(3,str.length())));
        }
        else if(str.startsWith("asin"))
        {
            result=(float)Math.toDegrees(Math.asin(Float.parseFloat(str.substring(4,str.length()))));
        }
        else if(str.startsWith("acos"))
        {
            result=(float)Math.toDegrees(Math.acos(Float.parseFloat(str.substring(4,str.length()))));
        }
        else if(str.startsWith("atan"))
        {
            result=(float)Math.toDegrees(Math.atan(Float.parseFloat(str.substring(4,str.length()))));
        }
        return result;
    }
    public String checkMisc(String str)
    {
        str=str.replace(" ","");
        int lastindex=0;
        for(int i=0;i<str.length();i++)
        {
            String c=String.valueOf(str.charAt(i));
            if(c.equals("+") || c.equals("-") || c.equals("*") || c.equals("/") || c.equals("^") || i==str.length()-1)
            {
                if(isMisc(str.substring(lastindex,i)))
                {
                    if(i==str.length()-1)
                    {
                        str=str.replace(str.substring(lastindex,str.length()),String.valueOf(solveMisc(str.substring(lastindex,str.length()))));
                    }
                    else
                    {
                        str=str.replace(str.substring(lastindex,i),String.valueOf(solveMisc(str.substring(lastindex,i))));
                        str=checkMisc(str);
                    }
                    break;
                }
                lastindex=i+1;
            }
        }
        return str;
    }
    public float calc(String str) //used to solve binary string expressions of +, -, *, /, and ^
    {
        float a,b,result=0.0f;
        if(!str.replace("+","").equals(str))
        {
            a=Float.parseFloat(str.substring(0,str.indexOf("+")));
            b=Float.parseFloat(str.substring(str.indexOf("+")+1,str.length()));
            result=a+b;
        }
        else if(!str.replace("-","").equals(str))
        {
            a=Float.parseFloat(str.substring(0,str.indexOf("-")));
            b=Float.parseFloat(str.substring(str.indexOf("-")+1,str.length()));
            result=a-b;
        }
        else if(!str.replace("*","").equals(str))
        {
            a=Float.parseFloat(str.substring(0,str.indexOf("*")));
            b=Float.parseFloat(str.substring(str.indexOf("*")+1,str.length()));
            result=a*b;
        }
        else if(!str.replace("/","").equals(str))
        {
            a=Float.parseFloat(str.substring(0,str.indexOf("/")));
            b=Float.parseFloat(str.substring(str.indexOf("/")+1,str.length()));
            result=a/b;
        }
        else if(!str.replace("^","").equals(str))
        {
            a=Float.parseFloat(str.substring(0,str.indexOf("^")));
            b=Float.parseFloat(str.substring(str.indexOf("^")+1,str.length()));
            result=(float)Math.pow(a,b);
        }
        return result;
    }
    public float solveExp(String str) //Used to solve complete expressions which do not have any brackets in them
    {
        float result=0.0f;
        int a=0,b=0,c=0;
        String sign="";
        for(int t=0;t<5;t++) // Will solve expression using BODMAS order of operation
        {
            sign=s[t];
            if(!str.replace(sign,"").equals(str))
            {
                b=str.indexOf(sign);
                while(b!=-1)
                {
                    for(int i=b-1;;i--)
                    {
                        if(i==0)
                        {
                            a=0;
                            break;
                        }
                        else
                        {
                            String ch=String.valueOf(str.charAt(i));
                            if(ch.equals("+") || ch.equals("-") || ch.equals("*") || ch.equals("/") || ch.equals("^"))
                            {
                                a=i+1;
                                break;
                            }
                        }
                    }
                    for(int i=b+1;;i++)
                    {
                        if(i==str.length())
                        {
                            c=str.length();
                            break;
                        }
                        else
                        {
                            String ch=String.valueOf(str.charAt(i));
                            if(ch.equals("+") || ch.equals("-") || ch.equals("*") || ch.equals("/") || ch.equals("^"))
                            {
                                c=i;
                                break;
                            }
                        }
                    }
                    str=str.replace(str.substring(a,c),String.valueOf(calc(str.substring(a,c))));
                    b=str.indexOf(sign,b);
                }
            }
        }
        result=Float.parseFloat(str);
        return result;
    }
    public float solveEq(String str)
    {
        float result=0.0f;
        int a=0,b=0,flag=1;
        str="("+str+")"; // The given expression is put within brackets
        while(flag==1) // All the expressions in all the brackets are solved one by one
        {
            for(int i=0;i<str.length();i++)
            {
                String c=String.valueOf(str.charAt(i));
                if(c.equals("("))
                {
                    a=i;
                }
                else if(c.equals(")"))
                {
                    b=i;
                    if(i==str.length()-1)
                    {
                        flag=0;
                    }
                    break;
                }
                else
                {
                    continue;
                }
            }
            
            str=str.replace(str.substring(a,b+1),String.valueOf(solveExp(checkMisc(str.substring(a+1,b)))));
        }
        result=Float.parseFloat(str);
        return result;
    }
    public static void main(String args[])
    {
        try
        {
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            String str="";
            System.out.println("Enter a mathematical expression (e.g. (6.9/3+2^3)/(7.8+8^4) ): ");
            str=br.readLine();
            str=str.toLowerCase();
            Solve s=new Solve();
            float result=s.solveEq(str);
            System.out.println("Result : "+result);
        }
        catch(Exception e)
        {}
    }
}

I'm not sure if this is a very good algorithm, even though it took a real long time for me to make it work successfully.

NOTE : I did not check for errors in the above code. So please be careful Biggrin

Thank you for reading Smile
Folow me on My YouTube Channel if you're into art.

Reply

[JAVA] Solving expressions #2
The following code I'm going to present had been designed by me quite sometime ago. It solves mathematical expression using BODMAS order of operation. I have implemented the code in GUI too, but I'm not sharing that part here for now.

Code:
import java.io.*;
/** Purpose : To solve a mathematical expression using BODMAS order of operation
*  Author  : Solixious
*  Modified By :
*/
class Solve
{
    String s[]={"^","/","*","+","-"}; //used to solve the expression using BODMAS order
    public boolean isMisc(String str)
    {
        return (str.startsWith("sin") || str.startsWith("cos") || str.startsWith("tan") || str.startsWith("log") || str.startsWith("asin") || str.startsWith("acos") || str.startsWith("atan"));
    }
    public float solveMisc(String str)
    {
        float result=0.0f;
        if(str.startsWith("sin"))
        {
            result=(float)Math.sin(Math.toRadians(Float.parseFloat(str.substring(3,str.length()))));
        }
        else if(str.startsWith("cos"))
        {
            result=(float)Math.sin(Math.toRadians(90.0f-Float.parseFloat(str.substring(3,str.length()))));
        }
        else if(str.startsWith("tan"))
        {
            result=(float)(Math.sin(Math.toRadians(Float.parseFloat(str.substring(3,str.length()))))/Math.sin(Math.toRadians(90.0f-Float.parseFloat(str.substring(3,str.length())))));
        }
        else if(str.startsWith("log"))
        {
            result=(float)Math.log(Float.parseFloat(str.substring(3,str.length())));
        }
        else if(str.startsWith("asin"))
        {
            result=(float)Math.toDegrees(Math.asin(Float.parseFloat(str.substring(4,str.length()))));
        }
        else if(str.startsWith("acos"))
        {
            result=(float)Math.toDegrees(Math.acos(Float.parseFloat(str.substring(4,str.length()))));
        }
        else if(str.startsWith("atan"))
        {
            result=(float)Math.toDegrees(Math.atan(Float.parseFloat(str.substring(4,str.length()))));
        }
        return result;
    }
    public String checkMisc(String str)
    {
        str=str.replace(" ","");
        int lastindex=0;
        for(int i=0;i<str.length();i++)
        {
            String c=String.valueOf(str.charAt(i));
            if(c.equals("+") || c.equals("-") || c.equals("*") || c.equals("/") || c.equals("^") || i==str.length()-1)
            {
                if(isMisc(str.substring(lastindex,i)))
                {
                    if(i==str.length()-1)
                    {
                        str=str.replace(str.substring(lastindex,str.length()),String.valueOf(solveMisc(str.substring(lastindex,str.length()))));
                    }
                    else
                    {
                        str=str.replace(str.substring(lastindex,i),String.valueOf(solveMisc(str.substring(lastindex,i))));
                        str=checkMisc(str);
                    }
                    break;
                }
                lastindex=i+1;
            }
        }
        return str;
    }
    public float calc(String str) //used to solve binary string expressions of +, -, *, /, and ^
    {
        float a,b,result=0.0f;
        if(!str.replace("+","").equals(str))
        {
            a=Float.parseFloat(str.substring(0,str.indexOf("+")));
            b=Float.parseFloat(str.substring(str.indexOf("+")+1,str.length()));
            result=a+b;
        }
        else if(!str.replace("-","").equals(str))
        {
            a=Float.parseFloat(str.substring(0,str.indexOf("-")));
            b=Float.parseFloat(str.substring(str.indexOf("-")+1,str.length()));
            result=a-b;
        }
        else if(!str.replace("*","").equals(str))
        {
            a=Float.parseFloat(str.substring(0,str.indexOf("*")));
            b=Float.parseFloat(str.substring(str.indexOf("*")+1,str.length()));
            result=a*b;
        }
        else if(!str.replace("/","").equals(str))
        {
            a=Float.parseFloat(str.substring(0,str.indexOf("/")));
            b=Float.parseFloat(str.substring(str.indexOf("/")+1,str.length()));
            result=a/b;
        }
        else if(!str.replace("^","").equals(str))
        {
            a=Float.parseFloat(str.substring(0,str.indexOf("^")));
            b=Float.parseFloat(str.substring(str.indexOf("^")+1,str.length()));
            result=(float)Math.pow(a,b);
        }
        return result;
    }
    public float solveExp(String str) //Used to solve complete expressions which do not have any brackets in them
    {
        float result=0.0f;
        int a=0,b=0,c=0;
        String sign="";
        for(int t=0;t<5;t++) // Will solve expression using BODMAS order of operation
        {
            sign=s[t];
            if(!str.replace(sign,"").equals(str))
            {
                b=str.indexOf(sign);
                while(b!=-1)
                {
                    for(int i=b-1;;i--)
                    {
                        if(i==0)
                        {
                            a=0;
                            break;
                        }
                        else
                        {
                            String ch=String.valueOf(str.charAt(i));
                            if(ch.equals("+") || ch.equals("-") || ch.equals("*") || ch.equals("/") || ch.equals("^"))
                            {
                                a=i+1;
                                break;
                            }
                        }
                    }
                    for(int i=b+1;;i++)
                    {
                        if(i==str.length())
                        {
                            c=str.length();
                            break;
                        }
                        else
                        {
                            String ch=String.valueOf(str.charAt(i));
                            if(ch.equals("+") || ch.equals("-") || ch.equals("*") || ch.equals("/") || ch.equals("^"))
                            {
                                c=i;
                                break;
                            }
                        }
                    }
                    str=str.replace(str.substring(a,c),String.valueOf(calc(str.substring(a,c))));
                    b=str.indexOf(sign,b);
                }
            }
        }
        result=Float.parseFloat(str);
        return result;
    }
    public float solveEq(String str)
    {
        float result=0.0f;
        int a=0,b=0,flag=1;
        str="("+str+")"; // The given expression is put within brackets
        while(flag==1) // All the expressions in all the brackets are solved one by one
        {
            for(int i=0;i<str.length();i++)
            {
                String c=String.valueOf(str.charAt(i));
                if(c.equals("("))
                {
                    a=i;
                }
                else if(c.equals(")"))
                {
                    b=i;
                    if(i==str.length()-1)
                    {
                        flag=0;
                    }
                    break;
                }
                else
                {
                    continue;
                }
            }
            
            str=str.replace(str.substring(a,b+1),String.valueOf(solveExp(checkMisc(str.substring(a+1,b)))));
        }
        result=Float.parseFloat(str);
        return result;
    }
    public static void main(String args[])
    {
        try
        {
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            String str="";
            System.out.println("Enter a mathematical expression (e.g. (6.9/3+2^3)/(7.8+8^4) ): ");
            str=br.readLine();
            str=str.toLowerCase();
            Solve s=new Solve();
            float result=s.solveEq(str);
            System.out.println("Result : "+result);
        }
        catch(Exception e)
        {}
    }
}

I'm not sure if this is a very good algorithm, even though it took a real long time for me to make it work successfully.

NOTE : I did not check for errors in the above code. So please be careful Biggrin

Thank you for reading Smile
Folow me on My YouTube Channel if you're into art.

Reply

[JAVA] Solving expressions #3
The following code I'm going to present had been designed by me quite sometime ago. It solves mathematical expression using BODMAS order of operation. I have implemented the code in GUI too, but I'm not sharing that part here for now.

Code:
import java.io.*;
/** Purpose : To solve a mathematical expression using BODMAS order of operation
*  Author  : Solixious
*  Modified By :
*/
class Solve
{
    String s[]={"^","/","*","+","-"}; //used to solve the expression using BODMAS order
    public boolean isMisc(String str)
    {
        return (str.startsWith("sin") || str.startsWith("cos") || str.startsWith("tan") || str.startsWith("log") || str.startsWith("asin") || str.startsWith("acos") || str.startsWith("atan"));
    }
    public float solveMisc(String str)
    {
        float result=0.0f;
        if(str.startsWith("sin"))
        {
            result=(float)Math.sin(Math.toRadians(Float.parseFloat(str.substring(3,str.length()))));
        }
        else if(str.startsWith("cos"))
        {
            result=(float)Math.sin(Math.toRadians(90.0f-Float.parseFloat(str.substring(3,str.length()))));
        }
        else if(str.startsWith("tan"))
        {
            result=(float)(Math.sin(Math.toRadians(Float.parseFloat(str.substring(3,str.length()))))/Math.sin(Math.toRadians(90.0f-Float.parseFloat(str.substring(3,str.length())))));
        }
        else if(str.startsWith("log"))
        {
            result=(float)Math.log(Float.parseFloat(str.substring(3,str.length())));
        }
        else if(str.startsWith("asin"))
        {
            result=(float)Math.toDegrees(Math.asin(Float.parseFloat(str.substring(4,str.length()))));
        }
        else if(str.startsWith("acos"))
        {
            result=(float)Math.toDegrees(Math.acos(Float.parseFloat(str.substring(4,str.length()))));
        }
        else if(str.startsWith("atan"))
        {
            result=(float)Math.toDegrees(Math.atan(Float.parseFloat(str.substring(4,str.length()))));
        }
        return result;
    }
    public String checkMisc(String str)
    {
        str=str.replace(" ","");
        int lastindex=0;
        for(int i=0;i<str.length();i++)
        {
            String c=String.valueOf(str.charAt(i));
            if(c.equals("+") || c.equals("-") || c.equals("*") || c.equals("/") || c.equals("^") || i==str.length()-1)
            {
                if(isMisc(str.substring(lastindex,i)))
                {
                    if(i==str.length()-1)
                    {
                        str=str.replace(str.substring(lastindex,str.length()),String.valueOf(solveMisc(str.substring(lastindex,str.length()))));
                    }
                    else
                    {
                        str=str.replace(str.substring(lastindex,i),String.valueOf(solveMisc(str.substring(lastindex,i))));
                        str=checkMisc(str);
                    }
                    break;
                }
                lastindex=i+1;
            }
        }
        return str;
    }
    public float calc(String str) //used to solve binary string expressions of +, -, *, /, and ^
    {
        float a,b,result=0.0f;
        if(!str.replace("+","").equals(str))
        {
            a=Float.parseFloat(str.substring(0,str.indexOf("+")));
            b=Float.parseFloat(str.substring(str.indexOf("+")+1,str.length()));
            result=a+b;
        }
        else if(!str.replace("-","").equals(str))
        {
            a=Float.parseFloat(str.substring(0,str.indexOf("-")));
            b=Float.parseFloat(str.substring(str.indexOf("-")+1,str.length()));
            result=a-b;
        }
        else if(!str.replace("*","").equals(str))
        {
            a=Float.parseFloat(str.substring(0,str.indexOf("*")));
            b=Float.parseFloat(str.substring(str.indexOf("*")+1,str.length()));
            result=a*b;
        }
        else if(!str.replace("/","").equals(str))
        {
            a=Float.parseFloat(str.substring(0,str.indexOf("/")));
            b=Float.parseFloat(str.substring(str.indexOf("/")+1,str.length()));
            result=a/b;
        }
        else if(!str.replace("^","").equals(str))
        {
            a=Float.parseFloat(str.substring(0,str.indexOf("^")));
            b=Float.parseFloat(str.substring(str.indexOf("^")+1,str.length()));
            result=(float)Math.pow(a,b);
        }
        return result;
    }
    public float solveExp(String str) //Used to solve complete expressions which do not have any brackets in them
    {
        float result=0.0f;
        int a=0,b=0,c=0;
        String sign="";
        for(int t=0;t<5;t++) // Will solve expression using BODMAS order of operation
        {
            sign=s[t];
            if(!str.replace(sign,"").equals(str))
            {
                b=str.indexOf(sign);
                while(b!=-1)
                {
                    for(int i=b-1;;i--)
                    {
                        if(i==0)
                        {
                            a=0;
                            break;
                        }
                        else
                        {
                            String ch=String.valueOf(str.charAt(i));
                            if(ch.equals("+") || ch.equals("-") || ch.equals("*") || ch.equals("/") || ch.equals("^"))
                            {
                                a=i+1;
                                break;
                            }
                        }
                    }
                    for(int i=b+1;;i++)
                    {
                        if(i==str.length())
                        {
                            c=str.length();
                            break;
                        }
                        else
                        {
                            String ch=String.valueOf(str.charAt(i));
                            if(ch.equals("+") || ch.equals("-") || ch.equals("*") || ch.equals("/") || ch.equals("^"))
                            {
                                c=i;
                                break;
                            }
                        }
                    }
                    str=str.replace(str.substring(a,c),String.valueOf(calc(str.substring(a,c))));
                    b=str.indexOf(sign,b);
                }
            }
        }
        result=Float.parseFloat(str);
        return result;
    }
    public float solveEq(String str)
    {
        float result=0.0f;
        int a=0,b=0,flag=1;
        str="("+str+")"; // The given expression is put within brackets
        while(flag==1) // All the expressions in all the brackets are solved one by one
        {
            for(int i=0;i<str.length();i++)
            {
                String c=String.valueOf(str.charAt(i));
                if(c.equals("("))
                {
                    a=i;
                }
                else if(c.equals(")"))
                {
                    b=i;
                    if(i==str.length()-1)
                    {
                        flag=0;
                    }
                    break;
                }
                else
                {
                    continue;
                }
            }
            
            str=str.replace(str.substring(a,b+1),String.valueOf(solveExp(checkMisc(str.substring(a+1,b)))));
        }
        result=Float.parseFloat(str);
        return result;
    }
    public static void main(String args[])
    {
        try
        {
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            String str="";
            System.out.println("Enter a mathematical expression (e.g. (6.9/3+2^3)/(7.8+8^4) ): ");
            str=br.readLine();
            str=str.toLowerCase();
            Solve s=new Solve();
            float result=s.solveEq(str);
            System.out.println("Result : "+result);
        }
        catch(Exception e)
        {}
    }
}

I'm not sure if this is a very good algorithm, even though it took a real long time for me to make it work successfully.

NOTE : I did not check for errors in the above code. So please be careful Biggrin

Thank you for reading Smile
Folow me on My YouTube Channel if you're into art.

Reply







Users browsing this thread: 1 Guest(s)