/**Markus Raab.
*
* Dieses Programm berechnet einen eingegebenen
* String.*/
import eprog.*;
import java.util.Vector;
import java.util.Locale;
/**Diese Klasse wird für alle eingelesenen Zahlen
* verwendet.
* Sie stellt die notwendigen Operatoren bereit,
* damit kann das Programm leicht mit weiteren
* Operatoren erweitert werden!*/
class Vektor
{
/**Dimension des Vektors*/
public static final int dim = 3;
public float value [] = new float [dim];
boolean skalar;
public void add (Vektor another) throws Exception
{
for (int i=0; i
1 && eingabe.charAt(0) == '-'
&& eingabe.charAt(1) == '#')
{ // Negativer Token: siehe Bugs
copy(Vektoren.token.elementAt(Integer.parseInt(eingabe.substring(2))));
inverse();
check = false;
} else if (eingabe.charAt(0) == '[')
{ // Vektor gefunden
String [] temp;
eingabe = eingabe.substring (1,eingabe.length()-1);
temp = eingabe.split(",");
if (temp.length != dim) throw new Exception
("nicht "+ dim +" Elemente in Vektor");
for (int i=0; i 1 && eingabe.charAt(0) == '-'
&& eingabe.charAt(1) == '[')
{ // Negativer Vektor
String [] temp;
eingabe = eingabe.substring (2,eingabe.length()-1);
temp = eingabe.split(",");
if (temp.length != dim) throw new Exception
("nicht "+ dim +" Elemente in Vektor");
for (int i=0; i 100) throw new Exception ("Zahl über 100");
if (value[i] < -100) throw new Exception ("Zahl unter -100");
}
}
}
/**Findet Operator op in dem Eingabestring.
* Die Position wird zurückgegeben. Bei op==0 wird
* ein beliebiger gesucht.*/
public static int findop (int op, String eingabe, boolean inverse) throws Exception
{
if (eingabe.length() == 0)
return -1;
if (op!=0)
{
if ( eingabe.charAt(0) == ',' ||
eingabe.charAt(0) == ']' ||
eingabe.charAt(0) == '*' ||
eingabe.charAt(0) == '+')
throw new Exception ("Falscher Operator am Anfang!");
if ( eingabe.charAt(eingabe.length()-1) == ',' ||
eingabe.charAt(eingabe.length()-1) == '[' ||
eingabe.charAt(eingabe.length()-1) == '*' ||
eingabe.charAt(eingabe.length()-1) == '+' ||
eingabe.charAt(eingabe.length()-1) == '-')
throw new Exception ("Falscher Operator am Ende!");
}
int start=0, ende=eingabe.length()-1, schritt =1;
int wasop = op;
if (inverse)
{
start=ende;
ende = 0;
schritt = -1;
}
for (int i=start; i!=ende; i+=schritt)
{
if (op == 0)
{
if (eingabe.charAt(i) == '*') return i;
else if (eingabe.charAt(i) == '+') return i;
else if (eingabe.charAt(i) == '-')
{
wasop = op;
op = '-'; // op kurzzeitig auf -
}
}
if (op == '-' && eingabe.charAt(i) == '-')
{
// Voriges Zeichen kontrollieren, ob
// - als Vorzeichen oder Operator!
if ( i!=0 &&
eingabe.charAt(i-1) != ',' &&
eingabe.charAt(i-1) != '[' &&
eingabe.charAt(i-1) != '*' &&
eingabe.charAt(i-1) != '+' &&
eingabe.charAt(i-1) != '-')
return i;
op = wasop; // op zurücksetzen, - war Vorzeichen
}
else if (eingabe.charAt(i) == op)
{
return i;
}
}
return -1; // nichts gefunden
}
/**Überprüft ob der übergebene Operator ein
* Operator ist*/
public static boolean isop (int op)
{
if (op == '*') return true;
if (op == '-') return true;
if (op == '+') return true;
return false;
}
/**Dekrementiert (erniedrigt) den Operator.
* Damit ist sichergestellt, dass die Vorrangsregeln
* mit den Operatoren beachtet werden!*/
public static int decop (int op)
{
if (op == 0) return '*';
else if (op == '*') return '-';
else if (op == '-') return '+';
return 0;
}
}
class Vektoren
{
/**Dieses token Feld enthält Zwischenergebnisse.*/
static public Vector token = new Vector();
static public int ebene = 0; // siehe doku
/**Diese Helferfunktion wird verwender, um einen Token statt
* einer Zeichenkette einzufügen.
* Der eingabe String enthält den gesamten String, li und re
* die Grenzen von den berechneten Term. nr enthält den Wert
* welcher Token für die Berechnung verwendet wurde.
* Bsp: 5+3*2 -> 5+#0
* Im Token #0 sollte für die weitere Berechnung 6 stehen!*/
public static String ersetze (String eingabe, int li, int re, int nr)
{
String temp = "";
if (li!=-1) temp += eingabe.substring (0,li+1);
temp += "#"; temp += nr;
if (re != -1 && re5) throw new Exception
("EPROG: Nur 4 Operationen dürfen vorkommen");
pos += diff+1;
} while (diff != -1);
erg = klammern (eingabe);
token.elementAt (erg).ausgeben();
} catch (Exception k)
{
EprogIO.println("FALSCHE EINGABE");
// k.printStackTrace();
}
}
}