/**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(); } } }
Fr Jul 30 13:54:24 CEST 2021
patent_button.gif valid-html401.png elektra.jpg fsfe-logo.png valid-css.png vim.gif anybrowser.gif