Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler beim Einsatz von Schleife (https://www.delphipraxis.net/90061-fehler-beim-einsatz-von-schleife.html)

Hawkeye219 11. Apr 2007 12:51

Re: Fehler beim Einsatz von Schleife
 
Zitat:

Zitat von 3_of_8
Kommt drauf an. In der Rechnerarchitektur wird es oft so gesehen, in der Aussagen- und Prädikatenlogik sind and und or gleich stark bindend. In Delphi übrigens auch, habs grade ausprobiert.

Ich verlasse mich darauf:

Zitat:

Zitat von Delphi-Hilfe
Code:
Operator                            Rangfolge
@, not                              Erste (höchste)
*, /, div, mod, and, shl, shr, as   Zweite
+, –, or, xor                       Dritte
=, <>, <, >, <=, >=, in, is         Vierte (niedrigste)
Ein Operator mit einer höheren Rangfolge wird vor einem Operator mit einer niedrigeren Rangfolge ausgewertet. Operatoren mit gleicher Rangfolge werden von links nach rechts ausgewertet.

Hier ist mein Testprogramm:

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  a, b, c : Boolean;

begin
  WriteLn;
  WriteLn ('X = a or b and c');
  WriteLn ('Y = (a or b) and c');
  WriteLn ('Z = a or (b and c)');
  WriteLn;
  WriteLn ('abc X Y Z');
  WriteLn ('----------');
  for a := False to True do
    for b := False to True do
      for c := False to True do
        WriteLn (Format('%d%d%d %d %d %d', [Ord(a), Ord(b), Ord(c),
                                             Ord(a or b and c),
                                             Ord((a or b) and c),
                                             Ord(a or (b and c))]));
end.
Gruß Hawkeye

DelphiProgrammierer 11. Apr 2007 14:06

Re: Fehler beim Einsatz von Schleife
 
Zitat:

Zitat von 3_of_8
Delphi-Quellcode:
if (not ((i=x) and (j=y))) and (Feld[i,j]=1) then inc(k,1);
Das lösen wir jetzt noch schön auf, nach den De-Morgan'schen Regeln:

Delphi-Quellcode:
if (i<>x) or (j<>y) and (Feld[i,j]=1) then inc(k,1);

Erstmal finde ich Deine Anmerkung prima.

Zweitens: Ich würde zusätzlich klammern bei Deiner Lösung, egal, wie die Bindungsregeln nun zufällig sind.

Drittens: Ich finde meine Lösung weiterhin anschaulicher.
Symbolisch lautet meine Lösung ja:
if (not Ausnahmefall) and (Feld[i,j]=1) then inc(k,1);
der Ausnahmefall wird aufgelöst als ((i=x) and (j=y))).

Bei Deiner Lösung muss man (ich jedenfalls) kurz nachdenken (letztlich versteckst Du das not in das <>).

3_of_8 11. Apr 2007 14:33

Re: Fehler beim Einsatz von Schleife
 
Okay, Hawkeye, du hast offenbar Recht. Die Ausgabe meines Testprogramms hab ich offenbar falsch interpretiert. Außerdem bin ich es aus der Mathematik gewöhnt, dass die Konjunktion so stark bindet wie die Disjunktion, die Implikation und Äquivalenz weniger stark und die Negation am stärksten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.
Seite 2 von 2     12   

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