AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

verschachtelte if funktion

Ein Thema von xxsasch4xx · begonnen am 16. Sep 2010 · letzter Beitrag vom 18. Sep 2010
Antwort Antwort
Seite 1 von 2  1 2      
xxsasch4xx

Registriert seit: 1. Mär 2010
210 Beiträge
 
#1

verschachtelte if funktion

  Alt 16. Sep 2010, 20:27
Delphi-Version: 7
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='0then

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='0then

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='0then
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.
Miniaturansicht angehängter Grafiken
form.jpg  

Geändert von xxsasch4xx (16. Sep 2010 um 20:30 Uhr)
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

AW: verschachtelte if funktion

  Alt 16. Sep 2010, 20:45
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='0then

  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='0then

          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='0then
                 
                 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?

Geändert von Satty67 (16. Sep 2010 um 20:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

AW: verschachtelte if funktion

  Alt 16. Sep 2010, 20:49
Du hast keine Fehlerbeschreibung gepostet.

Aber vielleicht hilft schon eine passende Einrückung:
Delphi-Quellcode:
if form1.edit1.hint='0then
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='0then
      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='0then
            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?
  Mit Zitat antworten Zitat
xxsasch4xx

Registriert seit: 1. Mär 2010
210 Beiträge
 
#4

AW: verschachtelte if funktion

  Alt 16. Sep 2010, 20:52
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.
  Mit Zitat antworten Zitat
xxsasch4xx

Registriert seit: 1. Mär 2010
210 Beiträge
 
#5

AW: verschachtelte if funktion

  Alt 16. Sep 2010, 20:58
ne das mit den hints ist nicht gewollt gewessen dass soll eigentlcih .text sein aber ich hab es wohl vergessen zu ändern.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#6

AW: verschachtelte if funktion

  Alt 16. Sep 2010, 21:13
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 = '0then
  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.

Geändert von Satty67 (16. Sep 2010 um 21:18 Uhr)
  Mit Zitat antworten Zitat
xxsasch4xx

Registriert seit: 1. Mär 2010
210 Beiträge
 
#7

AW: verschachtelte if funktion

  Alt 16. Sep 2010, 21:18
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: verschachtelte if funktion

  Alt 16. Sep 2010, 21:43
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/
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie (16. Sep 2010 um 21:47 Uhr)
  Mit Zitat antworten Zitat
xxsasch4xx

Registriert seit: 1. Mär 2010
210 Beiträge
 
#9

AW: verschachtelte if funktion

  Alt 17. Sep 2010, 14:03
was für ein objekt?
ich versteh das nicht.
  Mit Zitat antworten Zitat
xxsasch4xx

Registriert seit: 1. Mär 2010
210 Beiträge
 
#10

AW: verschachtelte if funktion

  Alt 17. Sep 2010, 14:05
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz