Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   while mit 3 Bedingungen - Logik-Problem (https://www.delphipraxis.net/166968-while-mit-3-bedingungen-logik-problem.html)

apm 7. Mär 2012 20:10

Delphi-Version: 2009

while mit 3 Bedingungen - Logik-Problem
 
Hi!
Ich stell mich gerade zu glatt an was die Logik angeht. Ich habe eine while mit drei Bedingungen die ALLE erfüllt sein müssen bevor das Programm weiterspringen darf.

Delphi-Quellcode:
    while (i_arr_global_Ausgabe_Kat_Art_Schleifenwert <> Length(i_arr_global_Ausgabe_Kat_Art))
    and (i_arr_global_Ausgabe_Kat_Schleifenwert <> Length(i_arr_global_Ausgabe_Kat))
    and (i_arr_global_Ausgabe_Sehenswue_Schleifenwert <> Length(i_arr_global_Ausgabe_Sehenswue)) do
    begin
      ausgabe_i_arr_global_ausgabe_kat_art;
      ausgabe_i_arr_global_ausgabe_kat;
      ausgabe_i_arr_global_ausgabe_sehenswue;
    end;
Das sind jeweils Integer und Arrays. Ich bekomms nur hin, wenn ich eine der drei Sachen prüfen. Und verschachteln geht auf keinen Fall.

silver-moon-2000 7. Mär 2012 20:25

AW: while mit 3 Bedingungen - Logik-Problem
 
Hi,

Du willst also, wenn ich Dich richtig verstanden habe:
Die while Schleife darf erst verlassen werden, wenn also drei Schleifenwerte = Length(array) sind?

Dann sollte es mit "or" statt dem "and" funktionieren.

Delphi-Quellcode:
while (a_schleifenwert <> Length(a)) or
              (b_schleifenwert <> Length(b)) or
              (c_schleifenwert <> Length(c)) then
Wenn Du mit "and" verknüpfst, wird die bedingungskette ja schon "false", sobald einer der drei Teile zutrifft, die anderen Beiden Teile aber noch nicht.

Mit "or" werden diese sozusagen unabhängig voneinander überprüft und die Gesamtbedingung wird false, sobald alle drei zutreffen:

Laut den De Morgan'schen Regeln gilt:
Code:
((a_s <> a) or (b_s <> b) or (c_s <> c)) == ((a_s = a) and (a_s = a) and (a_s = a))
Kann aber auch sein, dass ich Dich völlig missverstanden habe...

[edit]
Yay, 111 Posts, Schnapszahl, meine Güte, bin ich guuut! :zwinker:

apm 7. Mär 2012 20:32

AW: while mit 3 Bedingungen - Logik-Problem
 
:thumb: Wie einfach es auch sein kann!
Ich mach lieber Feierabend heut! :P THX

himitsu 8. Mär 2012 00:04

AW: while mit 3 Bedingungen - Logik-Problem
 
@Tobias: Ich glaub bei deinem Morgan fehlt noch ein wichtiges NOT. :angle:

Ach ja, kann es sein, daß daß du eigentlich ein < meinst und nicht <> ?

Was genau soll denn geprüft werden?
Versuch deine Bedingungen mal als Satz zu definieren.
Erstmal alle drei Dinge einzeln und versuch es dann in einem Satz zusammenzusügen.

Wiederhole "kat_art" so lange, wie ... ist.
oder
Wiederhole "kat_art" so lange, wie ... nicht ist.
oder
Wiederhole ... so lange bis ... ist.
...


Vorallem hattest du etwas wichtges vergessen zu erwähnen, also in diner Fehlerbeschreibung.
Wie du es verknüpft haben wolltest.

Delphi-Quellcode:
while (i_arr_global_Ausgabe_Kat_Art_Schleifenwert < Length(i_arr_global_Ausgabe_Kat_Art)) ...
.
oder
Delphi-Quellcode:
while (i_arr_global_Ausgabe_Kat_Art_Schleifenwert <= High(i_arr_global_Ausgabe_Kat_Art)) ...
.
Denn wenn mal, durch einen "Fehler" i_arr_global_Ausgabe_Kat_Art_Schleifenwert größer ist, dann würde dir die Auswirkung bestimmt nicht gefallen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:14 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