tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
905
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Lasse2000 Lasse2000 ist offline Grünschnabel
    Registriert seit
    Oct 2010
    Beiträge
    4
    Hallo, ich sitze gerade an einer Aufgabe, bei der man vollständig geklammerte Ausdrücke z.B. (1 and ( 0 or 1)) nach dem Prinzip Divide & Conquer (sprich rekursiv) auswerten soll.
    Habe jetzt mit der split() methode, den geklammerten Ausdruck in einzelne Tokens in dem entsprechenden Array gespeichert. Nun müsste ich aus den gegebenen Tokens, Teilausdrücken zusammenfassen und diese Teilausdrücke wieder zu Teilausdrücken usw. ... bis ich dannn zu dem Gesamtausdruck komme.
    Da weiß ich aber nicht, wie man da vorgehen soll**** Was für Parameter brauch man zusätzlich für den rekursiven Aufruf**** Vielleicht kann mir ja wer weiterhelfen.
     

  2. #2
    theXs theXs ist offline Grünschnabel
    Registriert seit
    Oct 2010
    Beiträge
    3
    Zitat Zitat von Lasse2000 Beitrag anzeigen
    Hallo, ich sitze gerade an einer Aufgabe, bei der man vollständig geklammerte Ausdrücke z.B. (1 and ( 0 or 1)) nach dem Prinzip Divide & Conquer (sprich rekursiv) auswerten soll.
    Habe jetzt mit der split() methode, den geklammerten Ausdruck in einzelne Tokens in dem entsprechenden Array gespeichert. Nun müsste ich aus den gegebenen Tokens, Teilausdrücken zusammenfassen und diese Teilausdrücke wieder zu Teilausdrücken usw. ... bis ich dannn zu dem Gesamtausdruck komme.
    Da weiß ich aber nicht, wie man da vorgehen soll**** Was für Parameter brauch man zusätzlich für den rekursiven Aufruf**** Vielleicht kann mir ja wer weiterhelfen.
    Wie genau willst du die Ausdrücke denn Auswerten?

    Das erste was du gucken müsstest wäre ob die Anzahl an '(' der Anzahl von ')' entspricht, damit die Klammersprache erstmal syntaktisch korrekt ist.

    Dann nehme ich an willst du die Ausdrücke per boolesche Funktion Auswerten, also das
    (1 OR 0 ) --- true ist während
    (1 AND 0) --- false ist
     

  3. #3
    Lasse2000 Lasse2000 ist offline Grünschnabel
    Registriert seit
    Oct 2010
    Beiträge
    4
    Naja, das ist ja das Problem. Ich weiss nicht ganz genau, wie die Impelmentierung des Algorithmus aussehen soll. Es soll aufjedenfall nach dem Divide & Conquer Prinzip ausgewertet werden. Das bedeute ja, dass wir das Problem (11 and(10 or 00)) in Teilprobleme gesplittet werden müssen. Das mache ich, indem ich die split() methode anwende. Jetzt muss ich die einzelnen Tokens wieder in verschiedene Teilausdrücke zusammenfassen, sodass ich dann irgendwann das Ergebinis aus den Teilausdrücken bekomme. Ich weiss nur nicht, wie das aussehen soll.****
     

  4. #4
    theXs theXs ist offline Grünschnabel
    Registriert seit
    Oct 2010
    Beiträge
    3
    Zitat Zitat von Lasse2000 Beitrag anzeigen
    Naja, das ist ja das Problem. Ich weiss nicht ganz genau, wie die Impelmentierung des Algorithmus aussehen soll. Es soll aufjedenfall nach dem Divide & Conquer Prinzip ausgewertet werden. Das bedeute ja, dass wir das Problem (11 and(10 or 00)) in Teilprobleme gesplittet werden müssen. Das mache ich, indem ich die split() methode anwende. Jetzt muss ich die einzelnen Tokens wieder in verschiedene Teilausdrücke zusammenfassen, sodass ich dann irgendwann das Ergebinis aus den Teilausdrücken bekomme. Ich weiss nur nicht, wie das aussehen soll.****
    Erstmal hat deine Tastatur bestimmt auch ne RETURN Taste - macht das Lesen unheimlich einfacher. Ansonsten poste doch mal die gesamte Aufgabe.

    Nachtrag: Am einfachsten Ist es wenn du von dem Ausdruck ausgehst der am innersten liegt und diesen auswertest. Ausgehend von diesem Ausdruck kannst du dann expandieren und weitere Ausdrücke lösen.

    Das kannst du meiner Meinung nach am einfachsten mit einem Regulären Ausdruck erreichen, dafür musst du aber erst kontrollieren das die Klammerzahl übereinstimmt. Dann suchst du einfach nach einem Ausdruck der eine ( und eine ) hat. KEINE andere Klammer.
    Geändert von theXs (30.10.10 um 15:07 Uhr)
     

  5. #5
    Lasse2000 Lasse2000 ist offline Grünschnabel
    Registriert seit
    Oct 2010
    Beiträge
    4
    1.einlesen eines ausdrucks
    2.aufteilen des ausdrucks mittels String.split(...) )
    3.Auswerten der Teilausdrücke nach dem Design-Prinzip Divide-and-Conquer und
    Zusammenfügen zum Ergebnis des Gesamtausdrucks (Einlesen von Hexadezimalzahlen mit
    Integer.parseInt(s,16)). Als Übergabewerte zwischen verschiedenen Ebenen des Divideand-
    Conquer Algorithmus verwenden Sie bitte nicht Strings!
    4.Ausgeben des Ergebnisses (Ausgabe von Hexadezimalzahlen mit
    Integer.toHexString(..))
    Beispiel-Ausgaben (vor dem Gleichheitszeichen jeweils die Eingabe).
    1e7 = 1e7
    dead = dead
    ( 1 or 1 ) = 1
    ( 1 and 3 ) = 1
    ( not 1 and ff ) = fe
    ( 1 or ( 2 or a ) ) = b
    ( not ( 1 or c ) and f00f ) = f002
     

Ähnliche Themen

  1. Korrektes Potenzieren durch Divide&Conquer
    Von Cherrycoke im Forum C/C++
    Antworten: 27
    Letzter Beitrag: 20.05.10, 15:12
  2. Antworten: 5
    Letzter Beitrag: 19.05.10, 14:07
  3. Closest Pair - Divide and Conquer
    Von tobbimann im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 2
    Letzter Beitrag: 19.05.09, 22:55
  4. Closest Points Algorithmus - Teilfelder bei divide und conquer
    Von topf im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 1
    Letzter Beitrag: 27.01.09, 10:47
  5. Zwar nicht Java, aber Algo. :) Divide & Conquer
    Von JHedron im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 3
    Letzter Beitrag: 13.10.05, 16:38