begin process at 2012 02 04 18:50:16
  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 Source avec une capture [J2ME] MAILXPRESS, UNE PETITE APPLICATION D'ENVOI DE MAIL ÉC... par doderic
Source avec Zip CLIENT ET SERVEUR DE MESSAGERIES par lemout
Source avec Zip Source avec une capture NAVIGATEUR HTTP par lemout
Source avec Zip Source avec une capture PROGRAMME DE PARTAGE DE FICHIER EN RESEAUX par billatosco
Source avec Zip JET SPRING JSF PRIMEFACES par mendjijet

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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,499 sec (3)

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