- import java.io.*;
-
- public class calculette
- {
- public static void main (String [] args)
- {
- String line="";
- char C = '\0';
- try
- {
- while ((C=(char) System.in.read()) !='\n')
- {
- if (C != '\r') line = line+C;
- }
- }
- catch (IOException e){}
- calculette c = new calculette(line);
- }
-
- public calculette(String chaine)
- {
- analyse(chaine);
- }
-
- public void analyse(String chaine)
- {
- if(chaine.indexOf("+")!=-1 || chaine.indexOf("-")!=-1|| chaine.indexOf("*")!=-1|| chaine.indexOf("/")!=-1)
- {
- char multdivC;
- char AddSous;
- int i=0;
- boolean b = true;
- if(chaine.indexOf("*")!=-1 || chaine.indexOf("/")!=-1)//On resoud les * et / en premier
- {
- while(b==true)
- {
- multdivC = chaine.charAt(i);
- switch(multdivC)
- {
- case '*': multdiv(i,multdivC, chaine);b=false;
- break;
- case '/': multdiv(i, multdivC, chaine);b=false;
- break;
- default:
-
- }
- i++;
- }
- }
- else // si il n' y a plus ou pas de * ou / on resoud les additions et soustractions
- {
- i=0;
- b = true;
- while(b==true)
- {
- AddSous = chaine.charAt(i);
- switch(AddSous)
- {
- case '+': addSous(i,AddSous, chaine);b=false;
- break;
- case '-': addSous(i, AddSous, chaine);b=false;
- break;
- default:
-
- }
- i++;
- }
- }
- }
- else // plus d' operateur, on affiche la chaine
- {
- System.out.println("\t= "+chaine);
- }
-
- }
- public void multdiv(int pos, char op, String str)
- {
- int posOpP = recherchePosOpP(pos,str);//position de l' operateur qui précède op
- int posOpS = recherchePosOpS(pos,str);//position de l' operateur qui suit op
- String pre = str.substring(posOpP,pos);
- String Suivant = str.substring(pos+1, posOpS);
- double value1 = Double.parseDouble(pre);
- double value2 = Double.parseDouble(Suivant);
- double value = 0.0;
- switch(op)
- {
- case '*': value = value1*value2;
- break;
- case '/': value = value1/value2;
- break;
- default:
- break;
- }
- String New = str.substring(0,posOpP)+String.valueOf(value)+str.substring(posOpS);
- analyse(New);
-
- }
- public void addSous(int pos,char op, String str)
- {
- int posPM = recherchePosOpS(pos,str);// on s' occupe seulement de la position de l' opérateur qui suit op
- String P = str.substring(0,pos);
- String S = str.substring(pos+1,posPM);
- double valueP = Double.parseDouble(P);
- double valueS = Double.parseDouble(S);
- double result = 0.0;
- switch(op)
- {
- case '+': result = valueP+valueS;
- break;
- case '-': result = valueP-valueS;
- break;
- default:
- break;
- }
- String newStr = String.valueOf(result)+str.substring(posPM);
- analyse(newStr);
- }
- public int recherchePosOpP(int p,String str2)
- {
- String cut = str2.substring(0,p);
- if(cut.indexOf("+")!=-1 || cut.indexOf("-")!=-1)
- {
- int i = p-1;
- boolean b = true;
- while(b==true)
- {
- char opPre = str2.charAt(i);
- switch(opPre)
- {
- case '+': p=i+1;b=false;
- break;
- case '-': p=i+1;b=false;
- break;
- case '.': i--;
- break;
- default : i--;
- break;
- }
- }
- }
- else
- p=0;
- return p;
-
- }
- public int recherchePosOpS(int p2,String str3)
- {
- String cut = str3.substring(p2+1,str3.length());
- if(cut.indexOf("+")!=-1 || cut.indexOf("-")!=-1 || cut.indexOf("/")!=-1 || cut.indexOf("*")!=-1)
- {
- int i = p2+1;
- boolean b = true;
- while(b==true)
- {
- char opSuivant = str3.charAt(i);
- switch(opSuivant)
- {
- case '+': p2=i;b=false;
- break;
- case '-': p2=i;b=false;
- break;
- case '*': p2=i;b=false;
- break;
- case '/': p2=i;b=false;
- break;
- case '.': i++;
- break;
- default : i++;
- break;
- }
- }
- }
- else
- p2=str3.length();
- return p2;
- }
- }
import java.io.*;
public class calculette
{
public static void main (String [] args)
{
String line="";
char C = '\0';
try
{
while ((C=(char) System.in.read()) !='\n')
{
if (C != '\r') line = line+C;
}
}
catch (IOException e){}
calculette c = new calculette(line);
}
public calculette(String chaine)
{
analyse(chaine);
}
public void analyse(String chaine)
{
if(chaine.indexOf("+")!=-1 || chaine.indexOf("-")!=-1|| chaine.indexOf("*")!=-1|| chaine.indexOf("/")!=-1)
{
char multdivC;
char AddSous;
int i=0;
boolean b = true;
if(chaine.indexOf("*")!=-1 || chaine.indexOf("/")!=-1)//On resoud les * et / en premier
{
while(b==true)
{
multdivC = chaine.charAt(i);
switch(multdivC)
{
case '*': multdiv(i,multdivC, chaine);b=false;
break;
case '/': multdiv(i, multdivC, chaine);b=false;
break;
default:
}
i++;
}
}
else // si il n' y a plus ou pas de * ou / on resoud les additions et soustractions
{
i=0;
b = true;
while(b==true)
{
AddSous = chaine.charAt(i);
switch(AddSous)
{
case '+': addSous(i,AddSous, chaine);b=false;
break;
case '-': addSous(i, AddSous, chaine);b=false;
break;
default:
}
i++;
}
}
}
else // plus d' operateur, on affiche la chaine
{
System.out.println("\t= "+chaine);
}
}
public void multdiv(int pos, char op, String str)
{
int posOpP = recherchePosOpP(pos,str);//position de l' operateur qui précède op
int posOpS = recherchePosOpS(pos,str);//position de l' operateur qui suit op
String pre = str.substring(posOpP,pos);
String Suivant = str.substring(pos+1, posOpS);
double value1 = Double.parseDouble(pre);
double value2 = Double.parseDouble(Suivant);
double value = 0.0;
switch(op)
{
case '*': value = value1*value2;
break;
case '/': value = value1/value2;
break;
default:
break;
}
String New = str.substring(0,posOpP)+String.valueOf(value)+str.substring(posOpS);
analyse(New);
}
public void addSous(int pos,char op, String str)
{
int posPM = recherchePosOpS(pos,str);// on s' occupe seulement de la position de l' opérateur qui suit op
String P = str.substring(0,pos);
String S = str.substring(pos+1,posPM);
double valueP = Double.parseDouble(P);
double valueS = Double.parseDouble(S);
double result = 0.0;
switch(op)
{
case '+': result = valueP+valueS;
break;
case '-': result = valueP-valueS;
break;
default:
break;
}
String newStr = String.valueOf(result)+str.substring(posPM);
analyse(newStr);
}
public int recherchePosOpP(int p,String str2)
{
String cut = str2.substring(0,p);
if(cut.indexOf("+")!=-1 || cut.indexOf("-")!=-1)
{
int i = p-1;
boolean b = true;
while(b==true)
{
char opPre = str2.charAt(i);
switch(opPre)
{
case '+': p=i+1;b=false;
break;
case '-': p=i+1;b=false;
break;
case '.': i--;
break;
default : i--;
break;
}
}
}
else
p=0;
return p;
}
public int recherchePosOpS(int p2,String str3)
{
String cut = str3.substring(p2+1,str3.length());
if(cut.indexOf("+")!=-1 || cut.indexOf("-")!=-1 || cut.indexOf("/")!=-1 || cut.indexOf("*")!=-1)
{
int i = p2+1;
boolean b = true;
while(b==true)
{
char opSuivant = str3.charAt(i);
switch(opSuivant)
{
case '+': p2=i;b=false;
break;
case '-': p2=i;b=false;
break;
case '*': p2=i;b=false;
break;
case '/': p2=i;b=false;
break;
case '.': i++;
break;
default : i++;
break;
}
}
}
else
p2=str3.length();
return p2;
}
}