![]() |
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:
Es ist eine Datei angehängt von dem design des formulars.
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; 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: |
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? |
AW: verschachtelte if funktion
Du hast keine Fehlerbeschreibung gepostet.
Aber vielleicht hilft schon eine passende Einrückung:
Delphi-Quellcode:
P.S.: Du fragst zweimal einen Hint ab. Ist das gewollt?
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; |
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) ![]() 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. |
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.
|
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. |
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
|
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: ![]() |
AW: verschachtelte if funktion
was für ein objekt?
ich versteh das nicht. |
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. |
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