/* * Projecte Fressa a JAVA * UnitCalcular.java * Created on 11 / juliol / 2007, 18:57 * * @author Jordi Lagares Roset "jlagares@xtec.cat - www.lagares.org" * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details (see the LICENSE file). */ //JOptionPane.showMessageDialog(null, StringAnalisis); import javax.swing.*; public class UnitCalcular { private Tools tool; public static int Operacions = 200+1; public int ErrorAnalisi,LlocErrorAnalisi,ErrorCalcul; public String StringAnalisis; String sen,gse,ase ; public static int NombreMaximDeParametres = 10+1; public double Parametres[] = new double[NombreMaximDeParametres]; double O[] = new double[Operacions]; String C[] = new String[Operacions]; double O2[] = new double[Operacions]; String C2[] = new String[Operacions]; int Code; int l,i,n,Nnp,Cnp,K; int ControlPunt; String LeftaS; String iaS; String StringiS; String idS; String a1S; int Fallo; String c1S; String c2S; String c3S; String ch1,ch2; int nf,Ii,j,j2; int n2,nnp2; double xcReal, ycReal; int NumeroError; //FUNCTIONS d'String Generals public int Length(String s) { return s.length(); } public String Copy(String s,int i,int c) { if (i<1) { if (i+c-1<0) { return ""; } else { c=i+c-1; i=1; } } if ((i-1)Length(s)) { return s.substring(i-1,Length(s)); } else { return s.substring(i-1,i+c-1); } } else { return ""; } } public String LeftS(String s,int nombre) { if (nombre>s.length()) { return s; } else { return s.substring(0,nombre); } } public String RightS(String s,int nombre) { if (nombre>s.length()) { return s; } else { return s.substring(s.length()-nombre,s.length()); } } public String Delete(String s,int i,int c) { return LeftS(s,i-1)+RightS(s,s.length()-i-c+1); } public String Insert(String s1,String s,int i) { return LeftS(s,i-1)+s1+RightS(s,s.length()-i+1); } public int Pos(String s1,String s) { return s.indexOf(s1)+1; } public String CasMay(String s) { return s.toUpperCase(); } public double Val(String s) { Code=0; try { return Double.valueOf(s).doubleValue(); } catch (Exception e) { Code=1; return 0; } } //FUNCTIONS de Real Generals public String FloatToStr(double s) { return String.valueOf(s); } public int Abs(int s) { return Math.abs(s); } public double Abs(double s) { return Math.abs(s); } //UNITCALCULAR public String CanviarElsParametres() { int p; String j,k,l,m,n; boolean HeDeFerBucle; String s; //A HeDeFerBucle=true; while (HeDeFerBucle) { p=Pos("A",StringAnalisis); if (p!=0) { j=Copy(StringAnalisis,p-2,1); k=Copy(StringAnalisis,p-1,1); l=Copy(StringAnalisis,p+1,1); m=Copy(StringAnalisis,p+2,1); n=Copy(StringAnalisis,p+3,1); if (((k.equals("T")) && (l.equals("N"))) || ((k.equals("T")) && (l.equals("G"))) || ((l.equals("S")) && (m.equals("E"))) || ((l.equals("S")) && (m.equals("G"))) || ((l.equals("C")) && (m.equals("O")) && (n.equals("("))) || ((l.equals("C")) && (m.equals("G"))) || ((l.equals("T")) && (m.equals("A"))) || ((j.equals("A")) && (k.equals("T"))) || ((l.equals("T")) && (m.equals("G"))) || ((l.equals("L")) && (m.equals("O"))) || ((l.equals("B")) && (m.equals("S"))) ) { HeDeFerBucle=false; } else { StringAnalisis=Delete(StringAnalisis,p,1); if (Parametres[1]>=0) { StringAnalisis=Insert(FloatToStr(Parametres[1]),StringAnalisis,p); } else { StringAnalisis=Insert("(-1)*"+FloatToStr(Abs(Parametres[1])),StringAnalisis,p); } } } else { HeDeFerBucle=false; } } //B HeDeFerBucle=true; while (HeDeFerBucle) { p=Pos("B",StringAnalisis); if (p!=0) { j=Copy(StringAnalisis,p-2,1); k=Copy(StringAnalisis,p-1,1); l=Copy(StringAnalisis,p+1,1); m=Copy(StringAnalisis,p+2,1); n=Copy(StringAnalisis,p+3,1); if (((l.equals("S")) && (m.equals("(")))) { HeDeFerBucle=false; } else { StringAnalisis=Delete(StringAnalisis,p,1); if (Parametres[2]>=0) { StringAnalisis=Insert(FloatToStr(Parametres[2]),StringAnalisis,p); } else { StringAnalisis=Insert("(-1)*"+FloatToStr(Abs(Parametres[2])),StringAnalisis,p); } } } else { HeDeFerBucle=false; } } //C HeDeFerBucle=true; while (HeDeFerBucle) { p=Pos("C",StringAnalisis); if (p!=0) { j=Copy(StringAnalisis,p-2,1); k=Copy(StringAnalisis,p-1,1); l=Copy(StringAnalisis,p+1,1); m=Copy(StringAnalisis,p+2,1); n=Copy(StringAnalisis,p+3,1); if ((l.equals("O"))) { HeDeFerBucle=false; } else if ((l.equals("G"))) { HeDeFerBucle=false; } else { StringAnalisis=Delete(StringAnalisis,p,1); if (Parametres[3]>=0) { StringAnalisis=Insert(FloatToStr(Parametres[3]),StringAnalisis,p); } else { StringAnalisis=Insert("(-1)*"+FloatToStr(Abs(Parametres[3])),StringAnalisis,p); } } } else { HeDeFerBucle=false; } } //D HeDeFerBucle=true; while (HeDeFerBucle) { p=Pos("D",StringAnalisis); if (p!=0) { StringAnalisis=Delete(StringAnalisis,p,1); if (Parametres[4]>=0) { StringAnalisis=Insert(FloatToStr(Parametres[4]),StringAnalisis,p); } else { StringAnalisis=Insert("(-1)*"+FloatToStr(Abs(Parametres[4])),StringAnalisis,p); } } else { HeDeFerBucle=false; } } //E HeDeFerBucle=true; while (HeDeFerBucle) { p=Pos("E",StringAnalisis); if (p!=0) { j=Copy(StringAnalisis,p-2,1); k=Copy(StringAnalisis,p-1,1); l=Copy(StringAnalisis,p+1,1); m=Copy(StringAnalisis,p+2,1); n=Copy(StringAnalisis,p+3,1); if ((l.equals("N"))) { HeDeFerBucle=false; } else if ((l.equals("G"))) { HeDeFerBucle=false; } else if ((k.equals("S"))) { HeDeFerBucle=false; } else if ((l.equals("X"))) { HeDeFerBucle=false; } else if ((k.equals("N"))) { HeDeFerBucle=false; } else { StringAnalisis=Delete(StringAnalisis,p,1); if (Parametres[5]>=0) { StringAnalisis=Insert(FloatToStr(Parametres[5]),StringAnalisis,p); } else { StringAnalisis=Insert("(-1)*"+FloatToStr(Abs(Parametres[5])),StringAnalisis,p); } } } else { HeDeFerBucle=false; } } //F HeDeFerBucle=true; while (HeDeFerBucle) { p=Pos("F",StringAnalisis); if (p!=0) { StringAnalisis=Delete(StringAnalisis,p,1); if (Parametres[6]>=0) { StringAnalisis=Insert(FloatToStr(Parametres[6]),StringAnalisis,p); } else { StringAnalisis=Insert("(-1)*"+FloatToStr(Abs(Parametres[6])),StringAnalisis,p); } } else { HeDeFerBucle=false; } } return StringAnalisis; } //Procedure Analitzar(StringAnalisis: String; var ErrorAnalisi,LlocErrorAnalisi: Integer); void IniciAnal(){ sen="SIN("; gse="SIG("; ase="ASI("; Code=0; l=0; i=0; n=0; Nnp=0; Cnp=0; K=0; ControlPunt= 0; LeftaS= ""; iaS= ""; StringiS= ""; idS= ""; a1S= ""; Fallo= 0; //ErrorAnalisi= 0; LlocErrorAnalisi=1; c1S= ""; c2S= ""; c3S= ""; //for (int i=1;i 1) { n = n + 1; if (i-1<20) { //Val(Copy(StringAnalisis,1, i - 1),O[n],Code); O[n]=Val(Copy(StringAnalisis,1, i - 1)); /*C[n]="N";*/ if (Code!=0) { ErrorAnalisi = 10; //exit; return; } } else { ErrorAnalisi = 9; //exit; return; } } i = i + 2; n = n + 1; C[n] = LeftaS; StringAnalisis = RightS(StringAnalisis, l - i); l = Length(StringAnalisis); i = 0; } public void Analitzar(String StAn) { IniciAnal(); StringAnalisis = CasMay(StAn); CanviarElsParametres(); StringAnalisis = "("+StringAnalisis+")"; /*posat el 22/08/93 per si la funcio no te gaires variables*/ l=Length(StringAnalisis); if ((ErrorAnalisi!=102)) { for (int i=1;i<=l;i++) { if ((Copy(StringAnalisis,i,1).equals("Y")) || (Copy(StringAnalisis,i,1).equals("Z")) || (Copy(StringAnalisis,i,1).equals("U")) || (Copy(StringAnalisis,i,1).equals("V"))) { ErrorAnalisi = 2; return; } } } ErrorAnalisi = 0; /*Posat el 14/11/92 perque hi hagi coses massa llargues*/ if (l>Operacions+2) { ErrorAnalisi = 8; LlocErrorAnalisi=1; return; } /*Posat el 14/11/92 perque entengui 2p y 2ne*/ i=0; while (i="0") && (ch1<="9") && ((ch2=="P") || (ch2=="N"))) { if (((ch1.equals("0")) || (ch1.equals("1")) || (ch1.equals("2")) || (ch1.equals("3")) || (ch1.equals("4")) || (ch1.equals("5")) || (ch1.equals("6")) || (ch1.equals("7")) || (ch1.equals("8")) || (ch1.equals("9"))) && ((ch2.equals("P")) || (ch2.equals("N")))) { StringAnalisis=Insert("*",StringAnalisis,i+1); /*} else if ((Ch1=="X") && ((Ch2=="P") || (Ch2=="N") ) { StringAnalisis=Insert("*",StringAnalisis,i+1);*/ } } /*Posat el 23/08/92 per que funcioni EXP, PI, ne*/ i=0; l = Length(StringAnalisis); while (i="0") && (ch1<="9") if (((ch1.equals("0")) || (ch1.equals("1")) || (ch1.equals("2")) || (ch1.equals("3")) || (ch1.equals("4")) || (ch1.equals("5")) || (ch1.equals("6")) || (ch1.equals("7")) || (ch1.equals("8")) || (ch1.equals("9"))) && ((ch2.equals("(")) || (ch2.equals("X")) || (ch2.equals("Y")) || (ch2.equals("Z")) || (ch2.equals("U")) || (ch2.equals("V")) || (ch2.equals("S")) || (ch2.equals("C")) || (ch2.equals("T")) || (ch2.equals("A")) || (ch2.equals("L")))) { StringAnalisis=Insert("*",StringAnalisis,i+1); } else if (((ch1.equals("X")) || (ch1.equals("Y")) || (ch1.equals("Z")) || (ch1.equals("U")) || (ch1.equals("V"))) && ((ch1.equals("(")) || (ch2.equals("S")) || (ch2.equals("C")) || (ch2.equals("T")) || (ch2.equals("A")) || (ch2.equals("L")))) { StringAnalisis=Insert("*",StringAnalisis,i+1); } } /*fins aqui*/ /*posat el 29/10/92 per detectar que no hi ha res*/ if (StringAnalisis.equals("()")) { ErrorAnalisi = 7; LlocErrorAnalisi=1; return; } /*Posat el 19/12/92 perque hi hagi coses massa llargues*/ l = Length(StringAnalisis); if (l==255) { ErrorAnalisi = 8; LlocErrorAnalisi=1; return; } i=0; l = Length(StringAnalisis); ControlPunt = 0; //for i = 2 to l - 1) { for (int i=2;i<=(l-1);i++) { iaS = Copy(StringAnalisis, i - 1, 1); StringiS = Copy(StringAnalisis, i, 1); idS = Copy(StringAnalisis, i + 1, 1); Fallo = 1; if (((iaS.equals("+")) || (iaS.equals("-")) || (iaS.equals("*")) || (iaS.equals("/")) || (iaS.equals("^"))) && ((StringiS.equals("+")) || (StringiS.equals("-")) || (StringiS.equals("*")) || (StringiS.equals("/")) || (StringiS.equals("^")) || (StringiS.equals(")")))) { } else if ((iaS.equals("(")) && ((StringiS.equals("*")) || (StringiS.equals("/")) || (StringiS.equals("^")) || (StringiS.equals(")")))) { } else if (((iaS.equals("X")) || (iaS.equals("Y")) || (iaS.equals("Z")) || (iaS.equals("U")) || (iaS.equals("V"))) && (((StringiS.equals("X")) || (StringiS.equals("Y")) || (StringiS.equals("Z")) || (StringiS.equals("U")) || (StringiS.equals("V"))) //|| ((StringiS > "/") && (StringiS < ":")) || (StringiS=="."))) { || ((StringiS.equals("0")) || (StringiS.equals("1")) || (StringiS.equals("2")) || (StringiS.equals("3")) || (StringiS.equals("4")) || (StringiS.equals("5")) || (StringiS.equals("6")) || (StringiS.equals("7")) || (StringiS.equals("8")) || (StringiS.equals("9")) || (StringiS.equals("."))))) { } else if ((((iaS.equals("0"))||(iaS.equals("1"))||(iaS.equals("2"))||(iaS.equals("3"))||(iaS.equals("4"))||(iaS.equals("5"))||(iaS.equals("6"))||(iaS.equals("7"))||(iaS.equals("8"))||(iaS.equals("9"))) || (iaS.equals(".")) || ((iaS.equals("X")) || (iaS.equals("Y")) || (iaS.equals("Z")) || (iaS.equals("U")) || (iaS.equals("V")))) && (((StringiS.equals("X")) || (StringiS.equals("Y")) || (StringiS.equals("Z")) || (StringiS.equals("U")) || (StringiS.equals("V"))) || (StringiS.equals("(")) || (StringiS.equals("S")) || (StringiS.equals("C")) || (StringiS.equals("T")) || (StringiS.equals("A")) || (StringiS.equals("L")))) { } else if ((iaS.equals(")")) && (((StringiS.equals("0"))||(StringiS.equals("1"))||(StringiS.equals("2"))||(StringiS.equals("3"))||(StringiS.equals("4"))||(StringiS.equals("5"))||(StringiS.equals("6"))||(StringiS.equals("7"))||(StringiS.equals("8"))||(StringiS.equals("9"))) || (StringiS.equals(".")) || (StringiS.equals("S")) || (StringiS.equals("C")) || (StringiS.equals("T")) || (StringiS.equals("A")) || (StringiS.equals("L")) || ((StringiS.equals("X")) || (StringiS.equals("Y")) || (StringiS.equals("Z")) || (StringiS.equals("U")) || (StringiS.equals("V"))))) { } else {Fallo = 0;} if (StringiS.equals(".")) { ControlPunt = ControlPunt + 1; if (((!((iaS.equals("0"))||(iaS.equals("1"))||(iaS.equals("2"))||(iaS.equals("3"))||(iaS.equals("4"))||(iaS.equals("5"))||(iaS.equals("6"))||(iaS.equals("7"))||(iaS.equals("8"))||(iaS.equals("9")))) && (!((idS.equals("0"))||(idS.equals("1"))||(idS.equals("2"))||(idS.equals("3"))||(idS.equals("4"))||(idS.equals("5"))||(idS.equals("6"))||(idS.equals("7"))||(idS.equals("8"))||(idS.equals("9"))))) || (ControlPunt==2) || (iaS.equals("."))) {Fallo = 1;} } else if ((StringiS.equals("0"))||(StringiS.equals("1"))||(StringiS.equals("2"))||(StringiS.equals("3"))||(StringiS.equals("4"))||(StringiS.equals("5"))||(StringiS.equals("6"))||(StringiS.equals("7"))||(StringiS.equals("8"))||(StringiS.equals("9"))) { } else {ControlPunt = 0;} if (Fallo==1) { /*Inicialment aixo valia 7*/ ErrorAnalisi = 5; LlocErrorAnalisi=1; return; } } ErrorAnalisi = 0; a1S = StringAnalisis; l = Length(StringAnalisis); n = 0; i = 1; Nnp = 0; Cnp = 0; while (i <= l) { StringiS = Copy(StringAnalisis, i, 1); //JOptionPane.showMessageDialog(null, StringAnalisis); //StringiS = Copy("(2*2)", i, 1); //StringiS = "(2*2)".substring(1,2); //StringiS="("; //if ((StringiS=="(")) { //if ((StringiS.equals("("))) { //JOptionPane.showMessageDialog(null, StringiS); /**/ if (((StringiS.equals("(")) || (StringiS.equals(")")) || (StringiS.equals("*")) || (StringiS.equals("+")) || (StringiS.equals("-")) || (StringiS.equals(".")) || (StringiS.equals("/")) || (StringiS.equals("0")) || (StringiS.equals("1")) || (StringiS.equals("2")) || (StringiS.equals("3")) || (StringiS.equals("4")) || (StringiS.equals("5")) || (StringiS.equals("6")) || (StringiS.equals("7")) || (StringiS.equals("8")) || (StringiS.equals("9"))) || ((StringiS.equals("X")) || (StringiS.equals("Y")) || (StringiS.equals("Z")) || (StringiS.equals("U")) || (StringiS.equals("V"))) || (StringiS.equals("^")) || (StringiS.equals("S")) || (StringiS.equals("C")) || (StringiS.equals("T")) || (StringiS.equals("A")) || (StringiS.equals("L"))) { /**/ //JOptionPane.showMessageDialog(null, StringiS); if ((StringiS.equals("(")) || (StringiS.equals(")")) || (StringiS.equals("+")) || (StringiS.equals("-")) || (StringiS.equals("*")) || (StringiS.equals("/")) || (StringiS.equals("^"))) { if (StringiS.equals("(")) { Cnp = Cnp + 1; if (Cnp > Nnp) {Nnp = Cnp;} } else if (StringiS.equals(")")) { Cnp = Cnp - 1; if (Cnp < 0) { ErrorAnalisi = 1; return; } else if (Cnp==0) { if (i < l - 1) { ErrorAnalisi = 1; return; } } } if (i > 1) { n = n + 1; if (i-1<20) { O[n]=Val(LeftS(StringAnalisis, i - 1)); /*C[n]="N";*/ if (Code!=0) { ErrorAnalisi = 10; return; } } else { ErrorAnalisi = 9; return; } } n = n + 1; C[n] = StringiS; StringAnalisis = RightS(StringAnalisis, l - i); l = Length(StringAnalisis); i = 0; } else if (((StringiS.equals("(")) || (StringiS.equals(")")) || (StringiS.equals("*")) || (StringiS.equals("+")) || (StringiS.equals("-")) || (StringiS.equals(".")) || (StringiS.equals("/"))) || (StringiS.equals("0")) || (StringiS.equals("1")) || (StringiS.equals("2")) || (StringiS.equals("3")) || (StringiS.equals("4")) || (StringiS.equals("5")) || (StringiS.equals("6")) || (StringiS.equals("7")) || (StringiS.equals("8")) || (StringiS.equals("9"))) { } else if ((StringiS.equals("X")) || (StringiS.equals("Y")) || (StringiS.equals("Z")) || (StringiS.equals("U")) || (StringiS.equals("V"))) { n = n + 1; C[n] = StringiS; StringAnalisis = RightS(StringAnalisis, l - i); l = Length(StringAnalisis); i = 0; } else if ((StringiS.equals("S")) && (Copy(StringAnalisis, i, 4).equals(sen))) { LeftaS = "SIN"; Nous(); } else if ((StringiS.equals("S")) && (Copy(StringAnalisis, i, 4).equals(gse))) { LeftaS = "SIG"; Nous(); } else if ((StringiS.equals("A")) && (Copy(StringAnalisis, i, 4).equals(ase))) { LeftaS = "ASI"; Nous(); } else if ((StringiS.equals("A")) && (Copy(StringAnalisis, i, 4).equals("ASG("))) { LeftaS = "ASG"; Nous(); } else if ((StringiS.equals("C")) && (Copy(StringAnalisis, i, 4).equals("COS("))) { LeftaS = "COS"; Nous(); } else if ((StringiS.equals("C")) && (Copy(StringAnalisis, i, 4).equals("COG("))) { LeftaS = "COG"; Nous(); } else if ((StringiS.equals("A")) && (Copy(StringAnalisis, i, 4).equals("ACO("))) { LeftaS = "ACO"; Nous(); } else if ((StringiS.equals("A")) && (Copy(StringAnalisis, i, 4).equals("ACG("))) { LeftaS = "ACG"; Nous(); } else if ((StringiS.equals("T")) && (Copy(StringAnalisis, i, 4).equals("TAN("))) { LeftaS = "TAN"; Nous(); } else if ((StringiS.equals("T")) && (Copy(StringAnalisis, i, 4).equals("TAG("))) { LeftaS = "TAG"; Nous(); } else if ((StringiS.equals("A")) && (Copy(StringAnalisis, i, 4).equals("ATA("))) { LeftaS = "ATA"; Nous(); } else if ((StringiS.equals("A")) && (Copy(StringAnalisis, i, 4).equals("ATG("))) { LeftaS = "ATG"; Nous(); } else if ((StringiS.equals("A")) && (Copy(StringAnalisis, i, 4).equals("Abs("))) { LeftaS = "Abs"; Nous(); } else if ((StringiS.equals("L")) && (Copy(StringAnalisis, i, 4).equals("LOG("))) { LeftaS = "LOG"; Nous(); } else if ((StringiS.equals("A")) && (Copy(StringAnalisis, i, 4).equals("ALO("))) { LeftaS = "ALO"; Nous(); } else if ((StringiS.equals("A")) && (Copy(StringAnalisis, i, 4).equals("ALN("))) { LeftaS = "EXP"; Nous(); } else if ((StringiS.equals("L")) && (Copy(StringAnalisis, i, 3).equals("LN("))) { if (i > 1) { n = n + 1; if (i-1<20) { O[n]=Val(LeftS(StringAnalisis, i - 1)); /*C[n]="N";*/ if (Code!=0) { ErrorAnalisi = 10; return; } } else { ErrorAnalisi = 9; return; } } i = i + 1; n = n + 1; C[n] = "LNE"; StringAnalisis = RightS(StringAnalisis, l - i); l = Length(StringAnalisis); i = 0; } else { ErrorAnalisi = 2; return; } } else { ErrorAnalisi = 3; return; } if (ErrorAnalisi!=0) { return; } i = i + 1; //if (i <= l) GOTO bucle1; } if (Cnp != 0) { ErrorAnalisi = 4; return; } i=1; while (i<=n) { /*for (i = 1 To n) {*/ c1S = C[i]; c2S = C[i + 1]; c3S = C[i - 1]; if ((((c1S.equals("+")) || (c1S.equals("-")) || (c1S.equals("*")) || (c1S.equals("/")) || (c1S.equals("^"))) && ((c2S.equals(")")) || (c2S.equals("+")) || (c2S.equals("-")) || (c2S.equals("*")) || (c2S.equals("/")))) || ((c1S.equals("(")) && ((c2S.equals("*")) || (c2S.equals("/")) || (c2S.equals(")")) || (c3S.equals(")")))) || ((c1S.equals(")")) && ((c2S.equals("S")) || (c2S.equals("C")) || (c2S.equals("T")) || (c2S.equals("A")) || (c2S.equals("L"))))) { ErrorAnalisi = 5; return; } if (c1S.equals("(")) { if (c2S.equals("+")) { //for (K = i + 1 To n - 1) { for (int K = i + 1; K<=(n-1);K++) { O[K] = O[K + 1]; C[K] = C[K + 1]; } C[n] = ""; n = n - 1; /*No ho accepta DELPHI 3 en un FOR*/ i = i - 1; } else if (c2S.equals("-")) { //for (K = n Downto i) { //JOptionPane.showMessageDialog(null, C[1]+"."+C[2]+"."+C[3]+"."+C[4]+"."); for (int K=n; K>=i;K--) { O[K + 1] = O[K]; C[K + 1] = C[K]; //JOptionPane.showMessageDialog(null, "K:"+String.valueOf(K)+" "+C[1]+"."+C[2]+"."+C[3]+"."+C[4]+"."); } //JOptionPane.showMessageDialog(null, C[1]+"."+C[2]+"."+C[3]+"."+C[4]+"."); n = n + 1; C[i + 1] = ""; O[i + 1] = -1; C[i + 2] = "*"; //JOptionPane.showMessageDialog(null, C[1]+"."+C[2]+"."+C[3]+"."+C[4]+"."); } } i++; } } //Procedure Calcular (var xcReal: Real; var ycReal: Real; var ErrorCalcul: Integer); public void IniciCal() { //for (int Iii = 1; Iii1.0E-19)) { O2[i - 1] = O2[i - 1] / O2[i + 1]; Reordena(); } else { ErrorCalcul = 4; /*Overflow*/ return; } } else { ErrorCalcul = 1; /*Divisio per 0*/ return; } } } //if (i < nf - 1) GOTO Bucle2; i = Ii; //Bucle3: while (i < nf - 1) { i = i + 1; if (C2[i].equals("+")) { if ( (Abs(O2[i - 1])<1.0E+19) && (Abs(O2[i + 1])<1.0E+19)) { O2[i - 1] = O2[i - 1] + O2[i + 1]; Reordena(); } else { ErrorCalcul = 4; /*Overflow*/ return; } } else if (C2[i].equals("-")) { if ( (Abs(O2[i - 1])<1.0E+19) && (Abs(O2[i + 1])<1.0E+19)) { O2[i - 1] = O2[i - 1] - O2[i + 1]; Reordena(); } else { ErrorCalcul = 4; /*Overflow*/ return; } } } //if (i < nf - 1) GOTO Bucle3; O2[Ii] = O2[Ii + 1]; C2[Ii] = ""; C2[Ii + 2] = ""; i = Ii + 1; Reordena(); if (C2[Ii - 1].equals("SIN")) { O2[Ii - 1] = Sin(O2[Ii]); Reordena2(); } else if (C2[Ii - 1].equals("SIG")) { O2[Ii - 1] = Sin(O2[Ii] / 180 * 3.141593); Reordena2(); } else if (C2[Ii - 1].equals("ASI")) { if (O2[Ii]==1) { O2[Ii - 1] = 1.570796; } else if (O2[Ii]==-1) { O2[Ii - 1] = -1.570796; } else { O2[Ii - 1] =ArrelQuadrada(1-Sqr(O2[Ii])); if (ErrorCalcul != 0) return; O2[Ii - 1] = Arctan(O2[Ii]/O2[Ii - 1]); if (ErrorCalcul != 0) return; } Reordena2(); } else if (C2[Ii - 1].equals("ASG")) { if (O2[Ii]==1) { O2[Ii - 1] = 90; } else if (O2[Ii]==-1) { O2[Ii - 1] = -90; } else { O2[Ii - 1] =ArrelQuadrada(1-Sqr(O2[Ii])); if (ErrorCalcul != 0) return; O2[Ii - 1] = Arctan(O2[Ii]/O2[Ii - 1])*180/3.141593; if (ErrorCalcul != 0) return; } Reordena2(); } else if (C2[Ii - 1].equals("COS")) { O2[Ii - 1] = Cos(O2[Ii]); Reordena2(); } else if (C2[Ii - 1].equals("COG")) { O2[Ii - 1] = Cos(O2[Ii] / 180 * 3.141593); Reordena2(); } else if (C2[Ii - 1].equals("ACO")) { if (O2[Ii]==0) { O2[Ii - 1] = 1.570796; } else if (O2[Ii] < 0) { O2[Ii - 1] =ArrelQuadrada(1 - Sqr(O2[Ii])); if (ErrorCalcul != 0) return; O2[Ii - 1] = Arctan( O2[Ii - 1]/ O2[Ii]) + 3.141593; } else { O2[Ii - 1] =ArrelQuadrada(1 - Sqr(O2[Ii])); if (ErrorCalcul != 0) return; O2[Ii - 1] = Arctan( O2[Ii - 1] / O2[Ii]); } if (ErrorCalcul != 0) return; Reordena2(); } else if (C2[Ii - 1].equals("ACG")) { if (O2[Ii]==0) { O2[Ii - 1] = 90; } else if (O2[Ii] < 0) { O2[Ii - 1] =ArrelQuadrada(1 - Sqr(O2[Ii])); if (ErrorCalcul != 0) return; O2[Ii - 1] = Arctan(O2[Ii - 1] / O2[Ii]) * 180 / 3.141593 + 180; } else { O2[Ii - 1] =ArrelQuadrada(1 - Sqr(O2[Ii])); if (ErrorCalcul != 0) return; O2[Ii - 1] = Arctan(O2[Ii - 1] / O2[Ii]) * 180 / 3.141593; } if (ErrorCalcul != 0) return; Reordena2(); } else if (C2[Ii - 1].equals("TAN")) { O2[Ii - 1] = Tan(O2[Ii]); if (ErrorCalcul != 0) return; Reordena2(); } else if (C2[Ii - 1].equals("TAG")) { O2[Ii - 1] = Tan(O2[Ii] / 180 * 3.141593); if (ErrorCalcul != 0) return; Reordena2(); } else if (C2[Ii - 1].equals("ATA")) { O2[Ii - 1] = Arctan(O2[Ii]); if (ErrorCalcul != 0) return; Reordena2(); } else if (C2[Ii - 1].equals("ATG")) { O2[Ii - 1] = Arctan(O2[Ii]) * 180 / 3.141593; if (ErrorCalcul != 0) return; Reordena2(); } else if (C2[Ii - 1].equals("Abs")) { O2[Ii - 1] = Abs(O2[Ii]); Reordena2(); } else if (C2[Ii - 1].equals("LNE")) { if (O2[Ii] > 0) { O2[Ii - 1] = Ln(O2[Ii]); Reordena2(); } else { ErrorCalcul = 3; /*logarime d"un nombre negatiu*/ return; } } else if (C2[Ii - 1].equals("LOG")) { if (O2[Ii] > 0) { O2[Ii - 1] = Ln(O2[Ii]) / Ln(10); Reordena2(); } else { ErrorCalcul = 3; /*logarime d"un nombre negatiu*/ return; } } else if (C2[Ii - 1].equals("ALO")) { O2[Ii - 1] = Potencia(10, O2[Ii]); /*if (ErrorCalcul==4) return;*/ if (ErrorCalcul != 0) return; Reordena2(); } else if (C2[Ii - 1].equals("EXP")) { if ((O2[Ii] > -88) && (O2[Ii] < 88)) { O2[Ii - 1] = Exp(O2[Ii]); if (ErrorCalcul != 0) return; Reordena2(); } else { ErrorCalcul = 4; /*Overflow*/ return; } } } public boolean CercarParentesiInterior() { boolean CPI; Ii=0;nf=0; CPI=false; for (int i=1;i<=n2;i++) { if (C2[i].equals("(")) Ii=i; if (C2[i].equals(")")) { nf=i; /*i=n2;*/ break; } } if ((Ii!=0) && (nf!=0)) {CPI=true;} return CPI; } public void CalcularCoses() { nf=0; Ii=0; j=0; j2=0; n2 = n; nnp2 = Nnp; Cnp = 0; while (CercarParentesiInterior()) { Calculs(); if (ErrorCalcul != 0) { //JOptionPane.showMessageDialog(null,"1 - "+String.valueOf(ErrorCalcul)); return; } } ycReal = O2[1]; if ((Abs(ycReal)> 1.0E+19)) {ErrorCalcul = 4;} /*Overflow*/ } public void CalcularXYZUV (double x1,double y1,double z1,double u1,double v1) { IniciCal(); ErrorCalcul= 0; for (int j=1;j<=n;j++) { if (C[j].equals("X")) { C2[j] = ""; O2[j] = x1; } else if (C[j].equals("Y")) { C2[j] = ""; O2[j] = y1; } else if (C[j].equals("Z")) { C2[j] = ""; O2[j] = z1; } else if (C[j].equals("U")) { C2[j] = ""; O2[j] = u1; } else if (C[j].equals("V")) { C2[j] = ""; O2[j] = v1; } else { C2[j] = C[j]; O2[j] = O[j]; } } CalcularCoses(); } public void Calcular () { IniciCal(); ErrorCalcul= 0; for (int j=1;j<=n;j++) { if (C[j].equals("X")) { C2[j] = ""; O2[j] = xcReal; } else if (C[j].equals("Y")) { C2[j] = ""; O2[j] = 0; } else if (C[j].equals("Z")) { C2[j] = ""; O2[j] = 0; } else if (C[j].equals("U")) { C2[j] = ""; O2[j] = 0; } else if (C[j].equals("V")) { C2[j] = ""; O2[j] = 0; } else { C2[j] = C[j]; O2[j] = O[j]; } } CalcularCoses(); } //Donardades i DonarOperacions no es fan servir public String CalcularExpressio(String StringExpressio) { String StringComodi1,StringComodi2; double x,yc; StringComodi2=StringExpressio; ErrorAnalisi = 0; LlocErrorAnalisi=0; Analitzar(StringComodi2); if (ErrorAnalisi==0) { x=0; ErrorCalcul = 0; yc=0; Calcular(); if (ErrorCalcul==0) { //str(yc,StringComodi1); //StringComodi1=RealToString(yc); yc=ycReal; StringComodi1=FloatToStr(yc); StringComodi2 = StringComodi2 + " = "+ StringComodi1; } else { StringComodi2= StringComodi2 + " = "+ "ERROR DE C\u00c0LCUL"; } } else { StringComodi2= StringComodi2 + " = "+ "ERROR D'AN\u00c0LISIS"; } if (StringComodi2.endsWith(".0")) { StringComodi2=tool.Delete(StringComodi2,tool.Length(StringComodi2)-1,2); } return StringComodi2; } public double CalcularCurrency(String StringExpressio) { String StringComodi; double x,yc; StringComodi=StringExpressio; ErrorAnalisi = 0; LlocErrorAnalisi=0; Analitzar(StringComodi); if (ErrorAnalisi==0) { x=0; ErrorCalcul = 0; yc=0; Calcular(); if (ErrorCalcul==0) { NumeroError=0; yc=ycReal; return yc; } else { NumeroError=1; } } else { NumeroError=2; } return 0; } public UnitCalcular() { tool = new Tools(); for (int i=1;i