www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Algorithmen und Datenstrukturen" - Rekursions Divide-and-Conquer
Rekursions Divide-and-Conquer < Algor.+Datenstr. < Theoretische Inform. < Hochschule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Algorithmen und Datenstrukturen"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Rekursions Divide-and-Conquer: Hilfe zur Aufgabe
Status: (Frage) beantwortet Status 
Datum: 17:44 Mo 27.10.2008
Autor: Raiden82

Aufgabe
Ziel: In dieser Aufgabe sollen JAVA-Klassen erstellt werden, die den Wert eines vollstandig geklammerten
Arithmetischen Ausdruck berechnen.

Voraussetzung:
- Sie erhalten eine Datei mit 10 Beispielen fur vollstandig geklammerte Ausdrucke reprasentiert als
Strings. Beispiel: ( ( 12 + 3 ) * 7 )
- Ein vollstandig geklammerter arithmetischer Ausdruck besteht aus aus den Symbolen (; );+;-; *; :
und Integerzahlen, die als Strings angegeben werden. Bei der Division handelt es sich um die ganzzahlige
Division.
- Hinter jedem Symbol (; );+;-; *; : oder Integerzahlen folgt ein Leerzeichen. Der Ausdruck wird
durch den Zeilenumbruch in der Datei abgeschlossen.

Erwartete Ergebnisse:
1. Lesen Sie einen Arithmetischen Ausdruck aus der gegebenen Datei aus.
2. Bereiten Sie ihn geeignet fur die Berechnung auf.
3. Implementieren Sie Klassen, die nach dem Entwurfsprinzip Divide-and-Conquer den Wert des Ausdrucks
berechnen.
4. Geben Sie das Ergebnis in der folgenden Form aus: Wert von Ausdruck i: Ergebnis
5. Implementieren Sie einen Rahmen, der dafur sorgt, dass nacheinander alle Ausdrucke aus der Datei
ausgelesen und berechnet werden.

Kann mir jemand da weiterhelfen, weiß grade nicht wie ich das Anfangen soll...

Was ich schon weiß.. ich muß die Textdatei als String auslesen das geht durch die Leerzeichen zwischen den Zeichen doch worein soll ich die Speichern...

Ich weiß auch noch nicht wie ich die klammern ausrechnen soll ?

Danke für die Hilfe

Dateianhänge:
Anhang Nr. 1 (Typ: txt) [nicht öffentlich]
        
Bezug
Rekursions Divide-and-Conquer: So siehts jetzt aus
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:32 Di 28.10.2008
Autor: Raiden82

import java.io.*;

public class Main {


/**
* @param args
*/

  public static void main(String[] args)throws IOException
  {
    FileReader fr = new FileReader("Expression.txt");
    BufferedReader br = new BufferedReader(fr);

    String zeile = "";
    String[]exp;

    while( (zeile = br.readLine()) != null )
    {
      System.out.println(zeile);
      exp = zeile.split(" ");
    
    }

    br.close();
  }
}


So sieht die klasse jetzt aus Weiß einer wie ich nun im D&C die klammern berechne ?

Bezug
        
Bezug
Rekursions Divide-and-Conquer: Tipp
Status: (Antwort) fertig Status 
Datum: 00:43 So 02.11.2008
Autor: pape

Hallo.

Ehe Du anfängst zu programmieren, solltest Du Dir vielleicht Gedanken darum machen, wie ein solcher Ausdruck allgemein aufgebaut sein kann und wie Du ihn im Computer speichern und damit auch auswerten kannst.

Für Ersteres würde ich Dir empfehlen ein Syntaxdiagramm anzufertigen. Tipp: Rekursion. Welche Operatoren binden stärker? Für jede Ebene kannst Du ein Syntaxdiagramm anlegen. Ein Anfang wäre:

AUSDRUCK
                                            -- (+/-) --
                                           |           |
                                           v           |
------------------>(optional) Vorzeichen -------> TERM ---->

(Hier soll nach TERM optional wieder ein TERM kommen der mit +oder - verbunden sein muss... ist hier etwas schwer zu "malen" :D )

ein TERM wiederum besteht aus Faktoren, Faktoren aus Potenzen und Potenzen aus z.B. Klammern (die wieder einen Ausdruck enthalten können usw), Funktionen wie sin(Ausdruck), eine Zahl, eine Variable x usw.. jenachdem was Du alles brauchst.

Für jede dieser Stufen in einem arithmetischen Audruck kannst Du Dir ein solches Syntaxdiagramm malen und es zu einem großen zusammensetzen, dass sich dann AUSDRUCK schimpft ;)


Zu jeder dieser Ebenen kannst Du dann auch Algorithmen entwickeln, die den String danach auseinander nehmen (z.B.: nach einem * muss ein Faktor kommen, nach einem "(" muss ein Ausdruck kommen und anschließend ein ")").

---

Für die Speicherung der Daten ist z.B. ein binärer Baum einfach und übersichtlich zu implementieren.
Dabei kannst Du im Knoten den Verknüpfungsoperator speichern und im linken bzw rechten Teilbaum die Ergebnisse.
So sähe z.B. der Ausdruck 1+7*x in einem Binärbaum so aus:
         +
1             *
          7       x

Divide & Conquer macht nun folgendes: Zum Ausrechnen des Ausdrucks an der Stelle x=4 fängt er an der Wurzel an und findet ein "+". Dafür teilt er das Problem auf, in linke Seite des "+" und Rechte, welche er zuerst ausrechnen muss (Rekursion). Sind diese Probleme gelöst, so setzt er die beiden Teilergebnisse zusammen mit dem Operator + und gibt den Wert zurück.
Ebenso verhalten sich alle anderen Teilprobleme. Sie liefern eine Lösung für den Teilbaum und die Lösung am Wurzelknoten ist die finale Lösung.

Das Rekursionende ist bei Zahlen oder x erreicht. Da gibst Du einfach die Zahl oder halt den für x einzusetzenden Wert zurück.

Das praktische bzgl der Klammern ist dabei, dass die Klammern im Binärbaum gar nicht mehr benötigt werden, da sie implizit im Baum abgespeichert werden. So sähe der Binärbaum von obigem Ausdruck anders geklammert so aus: (1+7)*x
      *
   +    x
1    7

Bezug
        
Bezug
Rekursions Divide-and-Conquer: Tipp2
Status: (Antwort) fertig Status 
Datum: 15:22 So 02.11.2008
Autor: pape

Hi.

Da Du von vollständig geklammerten Ausdrücken ausgehst und keine Variablen usw hast, ist Deine Aufgabe sogar um einiges einfacher. Die Syntax ist gegeben durch

S -> (S+S) | (S*S) | Zahl

Also jedes S besteht entweder aus (S+S), (S*S) oder einer Zahl. Diese Rekursion musst Du implementieren, um den Ausdruck auszuwerten.

Divide & Conquer hast Du in dem Moment, wo Du einen Klammer-Ausdruck auswerten möchtest. Du benötigst erst die Teilergebnisse.

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Algorithmen und Datenstrukturen"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de