Programmideen für Anfänger



  • So wie es aussieht ist das nicht der Fall.
    Kannst du aber doch in der Methode console.clear(...) leicht implementieren.
    Setzt du da einfach ein

    setCurPos(0,0);
    

    mit rein. D.h. wenn Herr Sidewinder nichts dagegen hat. 😉



  • Der Code nutzt die Improved Console. Einfach mal im DOS/Win32 Konsolenforum gucken.



  • mikey schrieb:

    Der Code nutzt die Improved Console. Einfach mal im DOS/Win32 Konsolenforum gucken.

    ach. ^^

    Heute keine Brille auf ? 🕶



  • Also ich hab aus Langeweile mal einen mini Taschenrechner geschrieben der Lineare und Quadratische Funktionen berechnen konnte. Allerdings gingen nur die standard Formen und als Ergebnisse wurden nur die Nullstellen + Extrempunkte berechnet.

    Was ich dir aber empfehlen kann ist, einen "Formelrechner" zu schreiben. In den gibst du dann Funktionen wie "3+(2-1)-4+x" ein, und der rechnet dir dann das Ergebnis aus. Für x kam dann bei mir noch eine Abfrage welchen Wert diese Variable hätte. Ich musste das damals für einen Einstellungstest schreiben. Allerdings brauchte ich nur die Operatoren +-/ implementieren. Im Studium lernst du eventl. sogar noch eine richtig elegante Variante für das Problem. Ich glaub das war die Postfix Notation.

    Naja ich brauch nicht erwähnen das das von mir ne ganz schöne frickelei war. Aber es hat funktioniert und mir meine Ausbildung ermöglicht 😃



  • Das hatten doch die HP-Taschenrechner, oder?
    Damit waren die Leute viel schneller als mit normaler Infixnotation.



  • ist postfix die umgekehrt polnische notation?
    mein éhemaliger info-lehrer meinte mal, dass man damit parser eleganter und schneller machen kann.



  • Mr. Pink schrieb:

    ist postfix die umgekehrt polnische notation?
    mein éhemaliger info-lehrer meinte mal, dass man damit parser eleganter und schneller machen kann.

    jup, ist es und ja, hat er recht 😃 wenn nen term in UPN vorliegt, muss man ihn nur genau so, wie man ihn einliest, auf nen stack schreiben und jedesmal, wenn man auf nen operator trifft die jeweilige anzahl an operanden aus dem stack holen, mit dem operator verknüpfen und wieder reinstecken.

    überprüfung auf syntaktische korrektheit geschieht dabei ganz automatisch (wenn man kurz drüber nachdenkt, merkt man auch warum)



  • toll, was man so alles macht, wenn einem fad is ^^

    import java.util.Stack;
    import java.util.StringTokenizer;
    
    class UPN
    {
    	private static Stack<Double> stack = null;
    
    	public static Double parse(String upnTerm) {
    		stack = new Stack<Double>();
    
    		StringTokenizer st = new StringTokenizer(upnTerm, " ");
    		while(st.hasMoreTokens()) {
    			String atom = st.nextToken();
    			if(atom.equals("+")) {
    				Double rhs = stack.pop();
    				Double lhs = stack.pop();
    				stack.push(lhs + rhs);
    			}
    			else if(atom.equals("-")) {
    				Double rhs = stack.pop();
    				Double lhs = stack.pop();
    				stack.push(lhs - rhs);
    			}
    			else if(atom.equals("*")) {
    				Double rhs = stack.pop();
    				Double lhs = stack.pop();
    				stack.push(lhs * rhs);
    			}
    			else if(atom.equals("/")) {
    				Double rhs = stack.pop();
    				Double lhs = stack.pop();
    				stack.push(lhs / rhs);
    			}
    			else {
    				stack.push(Double.parseDouble(atom));
    			}
    		}
    
    		return stack.pop();
    	}
    }
    
    public class Testing
    {
    	public static void main(String args[]) {
    		System.out.println( UPN.parse("3 4 + 5 *") );
    	}
    }
    

    ein UPN parser in java. verdammt kurz oder? 😃 und man könnt den sogar noch kürzer machen, wenn man wollte.



  • "Java", "wollen".
    Hmm, irgendetwas stimmt da nicht.



  • Java ist schon relativ elegant, da ist was dran 🙂

    class UPN
    {
        public static Double parse(String upnTerm)
        {
        	Stack<Double> stack = new Stack<Double>();
            StringTokenizer st = new StringTokenizer(upnTerm, " ");
            while(st.hasMoreTokens())
            {
                String atom = st.nextToken();
                if(atom.equals("+"))
                    stack.push(stack.pop() + stack.pop());
                else if(atom.equals("-"))
                    stack.push( (-1)*(stack.pop()-stack.pop()));
                else if(atom.equals("*"))
                    stack.push( stack.pop()* stack.pop());
                else if(atom.equals("/"))
                	stack.push( 1 / (stack.pop() / stack.pop()) );
                else
                    stack.push(Double.parseDouble(atom));
            }
            return stack.pop();
        }
    }
    

    uff, hatteste Recht thordk 😮


Anmelden zum Antworten