Wer kann diesen Code lesen?

IF NOT ( NOT (T-MSG OF ACP11C03-DX-WPOFN OF
DECISION-IO-AREA(1 : 9) = ‚000000000‘) AND NOT
(L-MSG OF ACP11C03-DX-WPOFN OF DECISION-IO-AREA(1
: 6) = ‚RABATT‘))
PERFORM 1080-PARAGRAPH THRU 1080-PARAGRAPH-EXIT
ELSE
PERFORM 1160-PARAGRAPH THRU 1160-PARAGRAPH-EXIT

Habe ich gerade gefunden und bin bei der Fehlersuche.
Meine Vorstellung:
NOT NOT hebt sich gegenseitig auf, kann aber auch nicht sein,
wenn man glaubt, dass mein Vorgänger ein normaler Mensch war?

Danke für Rat!

Caro

if !( !(dings1 == 0) && !(dings2 == „RABATT“) )
perform1
else
perform2

Wärs in C-variante (sorry, musste umschreiben zur Lesbarkeit

Also würde sich es wohl aufheben:
if ( (dings1 == 0) && (dings2 == „RABATT“) )
perform1
else
perform2

Falls nicht habe ich ein echtes Logik-Problem :smile:

bye
Christoph

Moin

Das:

IF NOT

(NOT

(T-MSG OF ACP11C03-DX-WPOFN OF DECISION-IO-AREA(1 : 9) = ‚000000000‘)

AND NOT

(L-MSG OF ACP11C03-DX-WPOFN OF DECISION-IO-AREA(1 6) = ‚RABATT‘)

)

PERFORM 1080-PARAGRAPH THRU 1080-PARAGRAPH-EXIT
ELSE
PERFORM 1160-PARAGRAPH THRU 1160-PARAGRAPH-EXIT

müsste dem entsprechen:
if Not (not (Bedingung1) And not (Bedingung2))

=

if (not (Bedingung1) And not (Bedingung2)){
}

aber mit umgedrehten if-else-zweig

=

if ((Bedingung1) or (Bedingung2)){
}

aber mit wieder umgedrehten if-else-zweig… also mit dem orginal-if-else.

NOT NOT hebt sich gegenseitig auf, kann aber auch nicht sein,
wenn man glaubt, dass mein Vorgänger ein normaler Mensch war?

… alles eine Frage der Vorstellungskraft … es gibt auch Leute die Brainfuck-code einfachso runtertippen.

cu

dann hat einer von uns ein logik problem (aber kein wunder so früh am morgen).
ich würde eher behaupten, daß
!(!A&&!B) entspricht A||B oder bin ich noch nicht richtig wach?

tobias

Danke und Sorry!
Aber was ihr hier schreibt verstehe ich genauso wenig.
Wenn ich richtig verstehe, weiss von euch auch niemand,
was hier letztendlich rauskommt?

Dank und Gruß
Caro

hallo.

Aber was ihr hier schreibt verstehe ich genauso wenig.

erklärungsversuch auf deutsch:
wenn die ersten neun zeichen des einen bereichs null sind, ODER die ersten sechs zeichen des anderen bereichs „RABATT“ heißen, (oder beides gleichzeitg zutrifft) dann wird das ausgeführt, was in 1080-PARAGRAPH steht.
ansonsten wird das ausgeführt, was in 1160-PARAGRAPH steht.

Wenn ich richtig verstehe, weiss von euch auch niemand,
was hier letztendlich rauskommt?

nein. woher auch?

gruß

michael

1 Like

Hallo,

ich würde das zur besseren Lesbarkeit erstmal etwas umformatieren:

IF NOT (
 NOT ( T-MSG OF ACP11C03-DX-WPOFN OF DECISION-IO-AREA(1 : 9) = '000000000' )
 AND NOT ( L-MSG OF ACP11C03-DX-WPOFN OF DECISION-IO-AREA(1 : 6) = 'RABATT' )
 ) 
PERFORM 1080-PARAGRAPH THRU 1080-PARAGRAPH-EXIT 
ELSE 
PERFORM 1160-PARAGRAPH THRU 1160-PARAGRAPH-EXIT 

Vereinfacht sieht das dann so aus:

If not ( not ( Bed1 ) and not ( Bed2 ) ) then 
 1080
else
 1160

Das sollte das selbe sein wie:

If Bed1 and Bed2 then 
 1080
else
 1160

Hallo Michael,

bist du dir ganz sicher?

Danke!

Caro

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hallo.

Vereinfacht sieht das dann so aus:

If not ( not ( Bed1 ) and not ( Bed2 ) ) then
1080
else
1160

ok.

Das sollte das selbe sein wie:

If Bed1 and Bed2 then
1080
else
1160

nein.

0 1 0 1 = a
1 0 1 0 = NOT(a)

0 0 1 1 = b
1 1 0 0 = NOT(b)

0 0 0 1 = a AND b
1 0 0 0 = NOT(a) AND NOT(b)

0 1 1 1 = NOT( NOT(a) AND NOT(b) )
0 1 1 1 = a OR b

gruß

michael

Vereinfacht sieht das dann so aus:

If not ( not ( Bed1 ) and not ( Bed2 ) ) then
1080
else
1160

Das sollte das selbe sein wie:

If Bed1 and Bed2 then
1080
else
1160

Stimmt nicht ganz.

Die obige if-Abfrage anders formuliert: !(!a&&!b)

Nach De Morgan kann man das so umformen:

!(!a&&!b) = !(!(a||b)) = a||b

Müsste also am Ende heißen:

If Bed1 or Bed2 then
 1080
else
 1160

Hallo Michael,

bist du dir ganz sicher?

Danke!

Caro

ja. oder hängen menschenleben davon ab? dann rechne ich NOCHMAL alles haarklein durch und schick dir ein notariell beglaubigtes protokoll :smile:
mal ernsthaft und rein interessehalber: welche fehler suchst du denn in welcher software?

gruß

michael

Ganz ehrlich gesagt dieses not not not…
verstehe ich überhaupt nicht.
Deshalb muss ich dir blind vertrauen :smile:
Als erstes hat der Entwickler den Fehler gesehen und korrigiert.
Es ist jetzt ein Statement geworden, dass ich wieder verstehe.
Also der Fehlerfall ist abgeschlossen.
Aber trotzdem würde ich es gerne verstehen.
Wo kann ich diese Regel nachlesen?

Nochmal Danke!

Caro

PS die Postings unten, ist das Spaß oder sind das Professoren?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hallo.

Ganz ehrlich gesagt dieses not not not…
verstehe ich überhaupt nicht.

NOT heißt einfach, daß die aussage dahinter negiert wird:
eine bedingung trifft zu -> WAHR
NOT (eine bedingung trifft zu) -> FALSCH
bei mehreren bedingungen (wie in deinem fall) klammern beachten!

Wo kann ich diese Regel nachlesen?

googel mal nach: boole algebra de morgan
da dürftest du einiges finden.
„de morgan“ ist weiter oben schon mal gefallen. nach dem typ sind ein paar gesetze benannt, die für boolesche algebra gelten.
bei fragen meldest du dich einfach wieder.

PS die Postings unten, ist das Spaß oder sind das Professoren?

das ist ernst gemeint, teilweise korrekt, und stammt u.a. von programmierern.

gruß

michael

Hallo Chris und Michael,

Stimmt nicht ganz.

Die obige if-Abfrage anders formuliert: !(!a&&!b)

Nach De Morgan kann man das so umformen:

!(!a&&!b) = !(!(a||b)) = a||b

Müsste also am Ende heißen:

If Bed1 or Bed2 then
1080
else
1160

Ihr habt natürlich recht.

Gruß
Christian

Hallo Carolin -

PS die Postings unten, ist das Spaß oder sind das Professoren?

Du hast in Wer-Weiss-Was.de eine Frage gestellt - Und wie in jedem anderen Forum kann jeder Antworten, der sich dazu berufen fühlt - Auf Richtigkeit gibts natürlich keinen Anspruch. Allerdings bin ich seit 97 hier dabei und kann dir sagen, dass sich die meisten wirklich bemühen, anderen zu helfen. Und sollte mal was leicht falsch sein, finden sich andere, die darauf hinweisen (Siehst du eh in diesem Thread).

Du kannst ja mal auf die Namen überhalb der Postings klicken und bekommst dann eine Visitenkarte des jeweiligen Posters zu Gesicht.

lg,

J.P.Jarolim