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 2 von 3     12 3      
Benutzerbild von Martin K
Martin K

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

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 23:08
Der Rückgabewert einer Funktion wird mit Result festgelegt.
Damit eine Funktion true zurück gibt, schreibst Du also einfach:
Result := true; //Edit:
Ob das mit dem Namen der Funktion auch funktioniert, weiß ich nicht - sollte aber eigentlich
Aber einfach mal ausprobieren, indem Du einmal den Namen und einmal Result nimmst und dann guckst, was jeweils dabei raus kommt
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#12

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 23:11
Hi,

getestet, und funktioniert so wie du es erwartest:


Delphi-Quellcode:

function cardexistsnoco(a,b : integer) : boolean;
begin
  showMessage('Bin bei '+IntToStr(a));
  if a = b then result := true else result := false;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
if
  (cardexistsnoco(1,1)AND
   cardexistsnoco(2,2) AND
   cardexistsnoco(3,3333) AND
   cardexistsnoco(4,4) AND
   cardexistsnoco(5,5))
  or
  (cardexistsnoco(6,6)AND
   cardexistsnoco(7,7) AND
   cardexistsnoco(8,8) AND
   cardexistsnoco(9,9) AND
   cardexistsnoco(10,10)) then ShowMessage('fertig');
end;
MJ
  Mit Zitat antworten Zitat
richie_k

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

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 23:14
oh - mein - gott..
war ne schwere geburt, aber ich hab den fehler.. danke an euch alle - war ein (dummer) denkfehler in einer schleife..
dass man auf sowas immer erst nach stundenlangem suchen kommt.. naja zumindest kann ich delphis logik den fehler nicht in die schuhe schieben
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 23:15
Moin Maja,

Du kannst auch gleich

Result := a = b; schreiben.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

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

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 23:19
Hab Majas Beispiel anstatt mit result mal mit dem Namen der Funktion getestet und es funktioniert genuso!
Der einzige Vorteil von Result ist wohl, dass es auch noch funktioniert, wenn die Funktion umbenannt wurde
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#16

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 23:22
Zitat von Christian Seehase:
Moin Maja,

Du kannst auch gleich

Result := a = b; schreiben.
Ja, stimmt. Ist auch eine Möglichkeit.
Delphi-Quellcode:
function cardexistsnoco(a,b : integer) : boolean;
begin
  showMessage('Bin bei '+IntToStr(a));
  result := a = b;
end;
oder wie Martin K schrieb über den Namen der function

Delphi-Quellcode:
function cardexistsnoco(a,b : integer) : boolean;
begin
  showMessage('Bin bei '+IntToStr(a));
  cardexistsnoco := a = b;
end;
Was ist nun die "beste Version"?

Grüsse, MJ
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 23:25
Zitat:
Was ist nun die "beste Version"?
Eigentliche keine die Version über den Namen der Funktion ist die klassische von Pascal, das Schlüsselwort result wurde in Delphi eingeführt.
Markus Kinzler
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 23:34
Moin Maja,

spätestens, wenn Du das Ergebnis innerhalb der Funktion noch weiterverwenden willst, wirst Du den Funktionsnamen nicht mehr verwenden können, da, z.b., die Benutzung auf der rechten Seite eines := als Funktionsaufruf interpretiert wird.

Die Verwendung von Result finde ich aber auch aus Gründen der Dokumentation sinnvoll, was besonders bei rekursiven Funktionen interessant wird.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 23:36
Zitat:
spätestens, wenn Du das Ergebnis innerhalb der Funktion noch weiterverwenden willst,
Das sollte man mit result aber auch nicht machen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

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

Re: Problem bei logischer abfrage

  Alt 9. Dez 2006, 23:42
Zitat von mkinzler:
Zitat:
spätestens, wenn Du das Ergebnis innerhalb der Funktion noch weiterverwenden willst,
Das sollte man mit result aber auch nicht machen.
Warum nicht?

So steht es in der Delphi-Hilfe:
Zitat von Delphi-Hilfe:
Sie können der Variablen Result oder dem Funktionsnamen im Anweisungsblock mehrmals einen Wert zuweisen. Die zugewiesenen Werte müssen jedoch dem deklarierten Rückgabetyp entsprechen. Sobald die Ausführung der Funktion beendet wird, bildet der Wert, der zuletzt der Variablen Result oder dem Funktionsnamen zugewiesen wurde, den Rückgabewert der Funktion. Zum Beispiel:
Delphi-Quellcode:
function Power(X: Real; Y: Integer): Real;
var
  I: Integer;
begin
  Result := 1,0;
  I := Y;
  while I > 0 do
   begin
    if Odd(I) then Result := Result * X;
    I := I div 2;
    X := Sqr(X);
   end;
end;
Result und der Funktionsname repräsentieren immer denselben Wert. Deshalb gibt die Deklaration
Delphi-Quellcode:
function MyFunction: Integer;
begin
  MyFunction := 5;
  Result := Result * 2;
  MyFunction := Result + 1;
end;
den Wert 11 zurück. Result ist jedoch nicht mit dem Funktionsnamen identisch. Wenn der Funktionsname auf der linken Seite einer Zuweisungsanweisung verwendet wird, verwaltet der Compiler den Funktionsnamen als Variable (wie Result) zur Aufzeichnung des Rückgabewerts. Taucht der Funktionsname dagegen an einer anderen Stelle im Anweisungsblock auf, wird er vom Compiler als rekursiver Aufruf der Funktion interpretiert. Result kann dagegen als Variable in Operationen eingesetzt werden, beispielsweise bei Typkonvertierungen, in Konstruktoren, Indizes und in Aufrufen anderer Routinen.

Wenn die Ausführung einer Funktion beendet wird, bevor Result oder dem Funktionsnamen ein Wert zugewiesen wurde, ist der Rückgabewert der Funktion nicht definiert.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 06:48 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