AGB  ·  Datenschutz  ·  Impressum  







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

Problem bei logischer abfrage

Ein Thema von richie_k · begonnen am 9. Dez 2006 · letzter Beitrag vom 9. Dez 2006
Antwort Antwort
Seite 1 von 3  1 23      
richie_k

Registriert seit: 9. Dez 2006
10 Beiträge
 
#1

Problem bei logischer abfrage

  Alt 9. Dez 2006, 22:12
Hallo!
Ich wusste nicht, was ich bei der Suche hätte eingeben sollen (also bei "logisches problem" hab ich nix dolles gefunden zB)
Naja mein Problem ist folgendes:
Delphi-Quellcode:
  if
  (cardexistsnoco(14,Club)AND
   cardexistsnoco(2,Club) AND
   cardexistsnoco(3,Club) AND
   cardexistsnoco(4,Club) AND
   cardexistsnoco(5,Club))
  or
  (cardexistsnoco(14,Heart)AND
   cardexistsnoco(2,Heart) AND
   cardexistsnoco(3,Heart) AND
   cardexistsnoco(4,Heart) AND
   cardexistsnoco(5,Heart))
cardexistsnoco ist eine funktion, die true oder false liefert.. ich habe zur überprüfung ein Showmessage in diese Funktion geschrieben.. er kontrolliert nur 14,Club und 14, Heart.. den Rest läuft er leider garnicht durch. Liegts an meinem Quelltext? (ja) was muss ich anders machen?
danke!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 22:27
Nein, das ist eine Optimierung. Du hast ja definiert, dass alle Dinger ein True zurück liefern müssen um die Gesamtbedingung zu erfüllen. Warum sollte er also noch die anderen Dinge abprüfen, wenn schon der erste Aufruf False gibt? Dadurch kann er die Bedingung eh nicht mehr erfüllen.

Du kannst in den Projektoptionen unter Compiler die Komplette Boolean Evaluation einschalten, aber im Normalfall ist diese aus.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 22:32
Wenn cardexistsnoco(14,Club) false ergibt (so wird es hier wohl sein), werden die restlichen mit AND verknüpften Ausdrücke gar nicht erst überprüft, um die Geschwindigkeit zu optimieren (kann man imho irgendwo in den Compiler-Optionen auch abschalten, ist aber sinnlos).
Dasselbe gilt für cardexistsnoco(14,Heart).
Wenn diese beiden Audrücke schon false sind, kann ja die ganze IF-Abfrage auch nur false ergeben.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
richie_k

Registriert seit: 9. Dez 2006
10 Beiträge
 
#4

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 22:37
okay hätte ich dazu sagen müssen.. er gibt nach dem ersten true zurück.. also im prinzip müsste er so wie ich die Werte eingestellt habe auch überall im ersten true wiedergeben.. aber das zweite kommt eben garnicht erst zum aufruf
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 22:44
Zitat von richie_k:
okay hätte ich dazu sagen müssen.. er gibt nach dem ersten true zurück.. also im prinzip müsste er so wie ich die Werte eingestellt habe auch überall im ersten true wiedergeben.. aber das zweite kommt eben garnicht erst zum aufruf
Dann glaube ich einfach nicht, dass er true zurück gibt.
  Mit Zitat antworten Zitat
richie_k

Registriert seit: 9. Dez 2006
10 Beiträge
 
#6

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 22:51
also hab jetzt ein showmessage an den anfang der noco funktion gemacht und bei erfolg auch noch eins.. ich bekomme jetzt

14
14
14=14

zurück..
sprich das mit club gibt false und das mit heart gibt true zurück.. er macht aber nich weiter
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 22:52
Warum sollte er auch, es reicht ja das einer der beiden wahr ist.
Markus Kinzler
  Mit Zitat antworten Zitat
richie_k

Registriert seit: 9. Dez 2006
10 Beiträge
 
#8

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 22:55
also nochmal:
Delphi-Quellcode:
if
  (cardexistsnoco(14,Club)AND
   cardexistsnoco(2,Club) AND
   cardexistsnoco(3,Club) AND
   cardexistsnoco(4,Club) AND
   cardexistsnoco(5,Club))
  or
  (cardexistsnoco(14,Heart)AND
   cardexistsnoco(2,Heart) AND
   cardexistsnoco(3,Heart) AND
   cardexistsnoco(4,Heart) AND
   cardexistsnoco(5,Heart))
cardexistsnoco müsste bei allen 5 heart-abfragen true geben.. also nach dem schema müsste

14
14
14=14
2
2=2
3
3=3
4
4=4
5
5=5


zurückgegeben werden.. aber wie gesagt hört er nach 14=14 auf..
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 22:58
Wenn cardexistsnoco(14,Club) false ergibt, geht die Überprüfung mit cardexistsnoco(14,Heart) weiter.
Ergibt dies true, müsste als nächstes cardexistsnoco(2,Heart) überprüft werden.

Ich mache mal ein vereinfachtes Beispiel:
Delphi-Quellcode:
var a, b, c, d: Boolean;
{...}

  if (a and b) or (c and d) then
  //...
- Wenn a false ist, wird als nächstes c überprüft. Ist c true, wird d überprüft, wenn c false ist, wird nichts mehr überprüft.
- Wenn a true ist wird b überprüft, wenn b auch true ist, wird nichts mehr überprüft.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
richie_k

Registriert seit: 9. Dez 2006
10 Beiträge
 
#10

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 23:01
und genau das passiert hier leider nicht und ich verstehe nicht warum.. wie gesagt bei club wird nur das erste überprüft - gibt false zurück und wird in ruhe gelassen.. dann kommt das heart dran. es kommt true zurück, aber die zweite abfrage wird nicht mehr überprüft, was sie aber eigentlich werden müsste.
das ist ja gerade das problem

das einzige was ich mir logisch vorstellen kann ist, dass die funktion eigentlich immer false zurückliefert, obwohl sie da deutlich als true deklariert wurde.. oder wie schreibt man das auf, dass die funktion dann true werden soll? (also innerhalb der funktion)

namederfunktion:=true;

oder?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 03:50 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