begin process at 2010 02 10 10:58:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application

 > CALCULETTE

CALCULETTE


 Information sur la source

 Description

Calculette mode texte qui respecte l' ordre des multiplications et divisions, ne gère pas encore les parenthèses.

Source

  • 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;
	}
}	



 Sources du même auteur

Source avec Zip CYLINDRE QUI BOUGE
Source avec Zip ENSEMBLE DE FONCTION PERMETTANT LA SAISIE DE TOUT TYPE
Source avec Zip CONVERTISSEUR EURO-FRANCS SANS INTERFACE GRAPHIQUE.

 Sources de la même categorie

Source avec Zip ANALYSEUR DE PROXY IRC ET HTTP AVEC UNE INTERFACE GRAPHIQUE par sisisousou
Source avec Zip Source avec une capture "PROGRAMMEUR", EST UN PROGRAMME QUI PERMET DE TAPER QUELQUE ... par edouard333
Source avec Zip Source avec une capture "NARRATEUR", PROGRAMME QUI "LIT" SE QU'ON ÉCRIT... par edouard333
Source avec Zip Source avec une capture RENAME-MOAR par cotepierrot
Source avec Zip Source avec une capture DWIKI (DESKTOPWIKI) par xsimo

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales