Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   verschachtelte if funktion (https://www.delphipraxis.net/154591-verschachtelte-if-funktion.html)

xxsasch4xx 16. Sep 2010 20:27

Delphi-Version: 7

verschachtelte if funktion
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo ich brauche dringend Hilfe bei einem Programm bei mir. Das Programm soll folgendes überprüfen:
Wenn in edit3 eine 0 steht soll das programm herausfinden ob in edit2 und edit 1 entweder eine null steht oder in einem der beiden eine 1 und im anderen eine 0 oder ob das gleiche für edit6 und edit9 zutrifft anstatt für edit2 und edit1.
edit 1, 2 und 3 sollen so überprüft werden. Bei dem edit2 kann ja nur logischer weisse geprüft werden was in edit5 und edit8 steht.


hier das ist mein delphi code:
Delphi-Quellcode:
if form1.edit1.hint='0' then

if (form1.edit4.text='0') and (form1.edit7.text='0') or
   (form1.edit4.text='0') and (form1.edit7.text='1') or
   (form1.edit4.text='1') and (form1.edit7.text='0') or
   (form1.edit2.text='0') and (form1.edit3.text='0') or
   (form1.edit2.text='0') and (form1.edit3.text='1') or
   (form1.edit2.text='1') and (form1.edit3.text='0') then

if form1.edit2.hint='0' then

if (form1.edit5.text='0') and (form1.edit8.text='0') or
   (form1.edit5.text='0') and (form1.edit8.text='1') or
   (form1.edit5.text='1') and (form1.edit8.text='0') then

if form1.edit3.text='0' then
if (form1.edit2.text='0') and (form1.edit1.text='0') or
   (form1.edit2.text='1') and (form1.edit1.text='0') or
   (form1.edit2.text='0') and (form1.edit1.text='1') or
   (form1.edit6.text='0') and (form1.edit9.text='0') or
   (form1.edit6.text='1') and (form1.edit9.text='0') or
   (form1.edit6.text='0') and (form1.edit9.text='1') then
showmessage('Die Bedingungen wurden erfüllt')
else
showmessage('Die Bedingungen wurden erfüllt');

end;
Es ist eine Datei angehängt von dem design des formulars.
Diese Zahlen die jetzt da eingetragen sind müssten zu einer ausgabe führen, weil in edit3 eine null ist und in edit6 und edit9 nicht jeweils eine 1 eingetragen ist sondern eine 1 und eine 0. Und in edit1 und edit2 auch nicht jeweils eine 1 eingetragen ist.

In edit1 eine 1 eingetragen was bedeutet dass edit1 nicht weiter untersucht werden soll.

und in edit2 ist zwar eine null eingetragen aber in edit5 fehlt die 1.

ich hoffe ich konnte mit diesem beispiel mein programm näher erklären.
Ich danke schon einmal im Voraus.:thumb:

Satty67 16. Sep 2010 20:45

AW: verschachtelte if funktion
 
Als ich versuchte, der Beschreibung zu folgen, hat mein Gehirn ein paar Extra-Windungen bekommen. Ich hoffe das macht mich auch klüger.

Willst Du prüfen, ob ein Tick-Tack-Toe Sieg erfolgt ist?

Ich kann dem ganzen Bedingungs-Wirrwarr anhand der Beschreibung noch nicht ganz folgen, versuche es aber gleich nochmal.

PS: ...und wieso manchmal Edit.hint statt Edit.text?

Delphi-Quellcode:
if form1.edit1.hint='0' then

  if (form1.edit4.text='0') and (form1.edit7.text='0') or
     (form1.edit4.text='0') and (form1.edit7.text='1') or
     (form1.edit4.text='1') and (form1.edit7.text='0') or
     (form1.edit2.text='0') and (form1.edit3.text='0') or
     (form1.edit2.text='0') and (form1.edit3.text='1') or
     (form1.edit2.text='1') and (form1.edit3.text='0') then

        if form1.edit2.hint='0' then

          if (form1.edit5.text='0') and (form1.edit8.text='0') or
             (form1.edit5.text='0') and (form1.edit8.text='1') or
             (form1.edit5.text='1') and (form1.edit8.text='0') then

               if form1.edit3.text='0' then
                 
                 if (form1.edit2.text='0') and (form1.edit1.text='0') or
                    (form1.edit2.text='1') and (form1.edit1.text='0') or
                    (form1.edit2.text='0') and (form1.edit1.text='1') or
                    (form1.edit6.text='0') and (form1.edit9.text='0') or
                    (form1.edit6.text='1') and (form1.edit9.text='0') or
                    (form1.edit6.text='0') and (form1.edit9.text='1') then
                     
                      showmessage('Die Bedingungen wurden erfüllt')
else

  showmessage('Die Bedingungen wurden erfüllt');
.
Mit Einrückung sieht man, das hier eine ganze Menge erfüllt sein muss, wenn Edit1.hint <> '0'. Kann es sein, das Du garnicht alle Bedingungen voneinander abhängig haben wolltest?

jfheins 16. Sep 2010 20:49

AW: verschachtelte if funktion
 
Du hast keine Fehlerbeschreibung gepostet.

Aber vielleicht hilft schon eine passende Einrückung:
Delphi-Quellcode:
if form1.edit1.hint='0' then
begin
   if (form1.edit4.text='0') and (form1.edit7.text='0') or
      (form1.edit4.text='0') and (form1.edit7.text='1') or
      (form1.edit4.text='1') and (form1.edit7.text='0') or
      (form1.edit2.text='0') and (form1.edit3.text='0') or
      (form1.edit2.text='0') and (form1.edit3.text='1') or
      (form1.edit2.text='1') and (form1.edit3.text='0') then
   begin
      if form1.edit2.hint='0' then
      begin
         if (form1.edit5.text='0') and (form1.edit8.text='0') or
            (form1.edit5.text='0') and (form1.edit8.text='1') or
            (form1.edit5.text='1') and (form1.edit8.text='0') then
         begin
            if form1.edit3.text='0' then
            begin
               if (form1.edit2.text='0') and (form1.edit1.text='0') or
                  (form1.edit2.text='1') and (form1.edit1.text='0') or
                  (form1.edit2.text='0') and (form1.edit1.text='1') or
                  (form1.edit6.text='0') and (form1.edit9.text='0') or
                  (form1.edit6.text='1') and (form1.edit9.text='0') or
                  (form1.edit6.text='0') and (form1.edit9.text='1') then
               begin
                  showmessage('Die Bedingungen wurden erfüllt');
               end
               else
               begin
                  showmessage('Die Bedingungen wurden erfüllt');
               end;
            end;
         end;
      end;
   end;
end;
P.S.: Du fragst zweimal einen Hint ab. Ist das gewollt?

xxsasch4xx 16. Sep 2010 20:52

AW: verschachtelte if funktion
 
es soll später mal für ein spiel dienen das prüft ob an diesen stellen keine möglichkeiten mehr sind für das "springen"

das spiel heisst solitäre (brettspiel)
http://bilder.german-toyshop.de/Bilder/200022162.jpg
hier ist ein bild ich habe die ersten 9 felder als edit felder dargstellt
1 steht für "steinchen da"
und 0 steht für "leer"
aber ich wollte nicht direkt meine spiele version hier erläutern sondern nur vom prinzip her das mit den editfeldern.
ich hoffe es ist klarer jetzt.

xxsasch4xx 16. Sep 2010 20:58

AW: verschachtelte if funktion
 
ne das mit den hints ist nicht gewollt gewessen dass soll eigentlcih .text sein aber ich hab es wohl vergessen zu ändern.

Satty67 16. Sep 2010 21:13

AW: verschachtelte if funktion
 
Ich glaube Du prüfst grundsätzlich zuviel auf einmal und aus der falschen Perspektive.

Weniger auf einmal prüfen prüfen geht durch ein Helferlein in Form einer kleinen Boolean Variable:
Delphi-Quellcode:
var
  ZugGueltig : Boolean;
begin
  ZugGueltig := true; // Erstmal gültig annehmen

  // Jetzt jede Reihe einzeln prüfen und Zug bei Bedarf ungültig machen
  if Edit3.Text = '0' then
  begin
    if (Edit1.Text = '0') or (Edit2.Text = '0') then
      ZugGueltig := false;

    if (Edit6.Text = '0') or (Edit9.Text = '0') then
      ZugGueltig := false;
  end;

  // Am Ende auswerten
  if ZugGueltig then
    showmessage('Die Bedingungen wurden erfüllt');
.
So ist das zwar ein klein wenig mehr Schreibarbeit, aber erstmal wesentlich leichter zu kontrollieren. Ganz am Schluss (wenn es richtig funktioniert) kann man die Einzelbedingungen immer noch klammern und mit einem and verbinden.

Interessant wäre auch die Kontrolle aus Sicht des Steines, statt des Ziele, aber das muss nicht sein.

xxsasch4xx 16. Sep 2010 21:18

AW: verschachtelte if funktion
 
wenn ich nur ein edit feld überprüfen müsste und nicht 3 oder mehrere dann wär es ja einfacher aber später muss ich mindestens für 30 bilder.hints die gleiche prüfung ablegen und deswegn wollte ich das erstmal theoretisch für 3 edit felder machen dass ich das dann für die bilder umsetzen kann

Luckie 16. Sep 2010 21:43

AW: verschachtelte if funktion
 
Falscher Ansatz. Überlege doch mal. Du hast jetzt schon so einen Wust an if-Abfragen, wie soll denn das erst bei 30 Eingabefeldern aussehen?

Du musst dein Konzept überarbeiten. Ich würde erst mal für jedes Loch ein ein Objekt erstellen. das Loch weiß, ob ein Stift in ihm steckt oder nicht. Des weiteren kennt ein Loch-Objekt seine Nachbarlöcher, die einen gültigen Zug ermöglichen. Dann die Objekte in einen Container packen. Der Container ist das Spielfeld. Bei einem Zug, muss, das Spielfeld nur prüfen, ob ein Stift im Loch ist oder nicht und ob das Zielloch zu den gültigen Nachbarlöchern gehört.

Das war mal so schnell aus dem Kopf.

Kleines Beispiel: http://www.michael-puff.de/Programmi...ainer-Klassen/

xxsasch4xx 17. Sep 2010 14:03

AW: verschachtelte if funktion
 
was für ein objekt?
ich versteh das nicht.

xxsasch4xx 17. Sep 2010 14:05

AW: verschachtelte if funktion
 
okay ich geb es auf das ist zu schwer für mich ich mach einfach einen zusätzlichen button "Aufgeben" ^^
Trodzem danke für die die mir helfen wollten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:35 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz