suche effektive verschachtelung von aussagen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • suche effektive verschachtelung von aussagen

    hi,

    also ich habe folgendes problem.
    ich habe folgendes problem. ich will programmiertechnisch eine ziemlich verästellte sache lösen.

    man stelle sich vor die abfrage jeweils ob x y und z exitieren

    also: existiert x? (ja-nein) -> existiert y (ja-nein)->existiert z (ja-nein) jedes mal kommen 2 neue äste dazu, so dass es insgesamt am ende 8 verschiedene möglichkeiten, da sich dieses problem exponentiell wächst (2^n, was nicht gerade wenig ist) habe ich mich gefrage wie man das in irgendwelchen if oder switch oder was weiss ich anweisungen verschachteln kann ohne sich halb tot zu schreiben.

  • #2
    Falsches Forum *verschieb*

    kann zwar nicht ganz folgen, aber im prinzip solltest du mit ner Rekursion hinkommen.

    Comment


    • #3
      Jau. Wenns *wirklich* viele Abfragen sind, lohnt sich ein rekursionsähnliches Vorgehen (Ob u.g. Beispiel wirklich eine Rekursion im Sinne des Erfindes ist, weiß ich nicht.)

      Vorschlag:

      Du baust aus den Abfragen ein Array

      [color=blue] $abfragen = array(); [/color]

      Das Array ist folgendermaßen aufgebaut:

      - eindeutige ID des Elements [color=blue]id[/color]
      - Elternelement [color=blue]parent[/color]
      - Abfrage (z.B. "Ist es Grün?") [color=blue]question[/color]
      - Ergebnis der vorherigen Abfrage [color=blue]previousresult[/color]

      Konkretes Beispiel: Der User soll aus einer Reihe von Dingen (Buch, Licht, Gas, Haus) eines aussuchen und merken. Das Skript soll nun durch das erfragen diverser Parameter herausfinden, was der User meint.

      Du hast die 1. Abfrage. Die lautet, sagen wir, "Kann man es sehen?"

      - Die ID dieses Elements ist 0, weil es das erste ist.
      - Ein Elternelement gibt es nicht, weil es das erste Element ist
      - Die Abfrage lautet "Kann man das gesuchte Ding sehen?"
      - Ergebnis der vorherigen Abfrage gibt es nicht, weil es die erste ist.

      [color=blue]$abfragen[0]["parent"] = null;
      $abfragen[0]["question"] = "Kann man das gesuchte Ding sehen?";
      $abfragen[0]["previousresult"] = null;
      [/color]

      Auf diese Frage gibt es zwei Mögliche Antworten: Ja und Nein.
      Deshalb bekommt das Element 0 zwei "Kinder". Je nachdem, welche Antwort gewählt wurde, wird zum richtigen Kind-Element gesprungen und die nächste Frage gestellt.

      Das Element für die Antwort "ja" sieht so aus:

      [color=blue]
      $abfragen[1]["parent"] = 0; // Das Elternelement ist die allererste Frage
      $abfragen[1]["question"] = "Aha. Kann man es in die Hand nehmen?"; // Die nächste Frage....
      $abfragen[1]["previousresult"] = "ja"; // ... aber nur, wenn die vorherige Frage mit "ja" beantwortet wurde
      [/color]

      und für die Antwort "nein" so:

      [color=blue]
      $abfragen[2]["parent"] = 0;
      $abfragen[2]["question"] = "Aha. Kann man es riechen?";
      $abfragen[2]["previousresult"] = "nein";
      [/color]

      Die Kinder für die 2. Frage ("Aha. Kann man es in die Hand nehmen?") sehen so aus:

      1.

      [color=blue]
      $abfragen[3]["parent"] = 1; // Die vorige Frage war "kann man es in die Hand nehmen?"
      $abfragen[3]["question"] = "Dann ist es ein Buch."; // Das Ergebnis, hier etwas ungeschickt als Frage gespeichert
      $abfragen[3]["previousresult"] = "ja";
      [/color]

      2.

      [color=blue]
      $abfragen[4]["parent"] = 1;
      $abfragen[4]["question"] = "Dann ist es ein Haus.";
      $abfragen[4]["previousresult"] = "nein";
      [/color]


      ... und so weiter. Viel Spaß bei der Umsetzung! Ist nicht soo schwierig. Das Ergebnis (Also das letzte Element eines Zweigs) wirst Du vielleicht in einer eigenen Spalte ("result" o.ä.) unterbringen wollen, um ganz klar zu sehen, wann ein Ergebnis gefunden wurde.

      Nützlich wird das hier sein:
      http://de2.php.net/manual/en/ref.array.php
      Last edited by pekka; 21-10-2004, 23:37.

      Comment

      Working...
      X