[gelöst] Logik-Operatoren und Klammern

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

TrueColor
******
Beiträge: 542
Registriert: Do, 11.03.2010 11:23

[gelöst] Logik-Operatoren und Klammern

Beitrag von TrueColor »

Hallo,

ich tu mich immer bisschen schwer, wenn mehrere Bedingungen für einen Gesamt-Wahrheitswert geprüft werden müssen. Mit Klammern ist das ganze kein Problem. Nur: Ich habe weder in der Doku noch, so weit ich mich erinnern kann, in diversen Quellcodes Prüfungen mit Klammern gefunden. Darf ich überhaupt Klammern verwenden? Ist der Ausdruck korrekt? Oder wie kann ich ihn ohne Klammern schreiben?

Code: Alles auswählen

If Not (sPart1 = sPart2 And sType1 = sType2) Then [...]
Vielen Dank!
Zuletzt geändert von TrueColor am Di, 30.06.2015 15:19, insgesamt 1-mal geändert.
System:
Arbeit: Windows 7 (64 bit) + Apache OpenOffice 4.1.2 (AOO412m3), LibreOffice 4.1.4.2
Home: Windows 10 (64 bit) + Apache OpenOffice 4.1.2 (AOO412m3)
Karolus
********
Beiträge: 7453
Registriert: Mo, 02.01.2006 19:48

Re: Logik-Operatoren und Klammern

Beitrag von Karolus »

Hallo

Woher sollen wir wissen ob der Ausdruck korrekt ist?

`not ( a=b and c=d)` ist equivalent zu `a<>b or c<>d`
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
TrueColor
******
Beiträge: 542
Registriert: Do, 11.03.2010 11:23

Re: Logik-Operatoren und Klammern

Beitrag von TrueColor »

Karolus hat geschrieben:Woher sollen wir wissen ob der Ausdruck korrekt ist?
Öhm... du hast natürlich recht, die Frage ist Blödsinn.
`not ( a=b and c=d)` ist equivalent zu `a<>b or c<>d`
Danke dir!
Und darf ich nun Klammern verwenden oder sind Klammern nicht erlaubt?
System:
Arbeit: Windows 7 (64 bit) + Apache OpenOffice 4.1.2 (AOO412m3), LibreOffice 4.1.4.2
Home: Windows 10 (64 bit) + Apache OpenOffice 4.1.2 (AOO412m3)
Karolus
********
Beiträge: 7453
Registriert: Mo, 02.01.2006 19:48

Re: Logik-Operatoren und Klammern

Beitrag von Karolus »

Hallo

Sie sind erlaubt (sonst würde der Basic-Interpreter ja ein Fehlermeldung ausgeben)

Im Fall von `not ...` scheinen die Klammern sogar notwendig? -- soweit ich das jetzt getestet habe werden der|die Ausdrück|e sonst nicht sinnvoll ausgewertet.

nb:
`not (a=b and c=d)` ist nicht das gleiche wie `not (a=b) and c=d`
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Logik-Operatoren und Klammern

Beitrag von Stephan »

nb:
`not (a=b and c=d)` ist nicht das gleiche wie `not (a=b) and c=d`
das verstehe ich sofort, weshalb ich mich jetzt doch einmal oute das ich:
`not ( a=b and c=d)` ist equivalent zu `a<>b or c<>d`
nicht so recht verstehe. Ich habe den Ausdruck heute früh mehrfach überlegt, aber mir ist das nicht sicher verständlich obwohl ich sonst mit Logik-Ausdrücken keine Probleme habe.

Gib mir doch bitte mal einen Denkanstoss.


Gruuß
Stephan
Karolus
********
Beiträge: 7453
Registriert: Mo, 02.01.2006 19:48

Re: Logik-Operatoren und Klammern

Beitrag von Karolus »

Stephan hat geschrieben: das ich:
`not ( a=b and c=d)` ist equivalent zu `a<>b or c<>d`
nicht so recht verstehe. Ich habe den Ausdruck heute früh mehrfach überlegt, aber mir ist das nicht sicher verständlich obwohl ich sonst mit Logik-Ausdrücken keine Probleme habe.
`not ( a=b and c=d)` wird nur dann wahr, wenn mindestens eine der Bedingungen in der Klammer falsch ist.

`a<>b or c<>d` wird dann wahr, wenn mindestens eine der Bedingungen richtig ist, da die Bedingungen selbst das Gegenteil vom oberen Ausdruck sind, sind beide Ausdrücke gleich.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Logik-Operatoren und Klammern

Beitrag von Stephan »

`not ( a=b and c=d)` wird nur dann wahr, wenn mindestens eine der Bedingungen in der Klammer falsch ist.
ja, verstehe ich
`a<>b or c<>d` wird dann wahr, wenn mindestens eine der Bedingungen richtig ist,
und das verstehe ich nicht, denn einerseits kann ich zwar nicht erklären warum es falsch sein sollte andererseits glaube ich rein intuitiv es müsste XOR sein.
Nein, ich behaupte nicht das OR falsch ist, aber ich bin unsicher.

Ich wollte gerade ein Makro schreiben um das Ganze durchzuprobieren, scheitere aber bereits an der Abbildung des ersten Ausdrucks (a=b and c=d), denn warum verdammt ist sind im Folgenden E und F True jedoch (E AND F) -1?

Code: Alles auswählen

Sub Main
A=10 : B=10 : C=5 : D=5
E = (A=B) 
F = (C=D)
Msgbox E & "-" & F & "-" & (E AND F) 
End Sub
oder auch:

Code: Alles auswählen

Sub Main
A=10 : B=10 : C=5 : D=5
x = (A=B) AND (C=D)
Msgbox x
End Sub


Gruß
Stephan

Tschuldigung, ich habe gerade nochmals geändert und sehe Dich schon als angemeldet.
Karolus
********
Beiträge: 7453
Registriert: Mo, 02.01.2006 19:48

Re: Logik-Operatoren und Klammern

Beitrag von Karolus »

Hallo
denn warum verdammt ist sind im Folgenden E und F True jedoch (E AND F) -1?
weil Basic immer wieder mal völlig kaputte implizite Konvertierungen abliefert.

Code: Alles auswählen

Msgbox E & " " & F & " " & cbool(E AND F)
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Benutzeravatar
Krangel
**
Beiträge: 35
Registriert: Di, 22.04.2014 12:23
Wohnort: 3. Planet

Re: Logik-Operatoren und Klammern

Beitrag von Krangel »

Hi

Wahrheitstabellen sind besser als Intuition.
http://workupload.com/file/Gyzb4dvR
Grüße

Edit: Dateianhang
Dateianhänge
Logik-Operatoren und Klammern.ods
(11.52 KiB) 116-mal heruntergeladen
Zuletzt geändert von Krangel am Do, 25.06.2015 15:03, insgesamt 1-mal geändert.
Karolus
********
Beiträge: 7453
Registriert: Mo, 02.01.2006 19:48

Re: Logik-Operatoren und Klammern

Beitrag von Karolus »

Krangel hat geschrieben:Hi

Wahrheitstabellen sind besser als Intuition.
http://workupload.com/file/Gyzb4dvR
Grüße
Prima, aber deine Tabelle hättest du besser gleich hier angehängt
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
TrueColor
******
Beiträge: 542
Registriert: Do, 11.03.2010 11:23

Re: Logik-Operatoren und Klammern

Beitrag von TrueColor »

Karolus hat geschrieben:Sie sind erlaubt (sonst würde der Basic-Interpreter ja ein Fehlermeldung ausgeben)


Hm... das ist ein Argument :-)
Karolus hat geschrieben:Im Fall von `not ...` scheinen die Klammern sogar notwendig? [...]
nb:
`not (a=b and c=d)` ist nicht das gleiche wie `not (a=b) and c=d`
Ja, weil ja ohne Klammern strikt von links nach rechts ausgewertet wird, das hab ich zumindest schon irgendwo gelesen, was dann also
(not (a=b)) and (c=d) ergäbe
Krangel hat geschrieben:[Wahrheitstabellen]
Das ist mal übersichtlich!

Ich danke euch!
System:
Arbeit: Windows 7 (64 bit) + Apache OpenOffice 4.1.2 (AOO412m3), LibreOffice 4.1.4.2
Home: Windows 10 (64 bit) + Apache OpenOffice 4.1.2 (AOO412m3)
Karolus
********
Beiträge: 7453
Registriert: Mo, 02.01.2006 19:48

Re: Logik-Operatoren und Klammern

Beitrag von Karolus »

Hallo
Ja, weil ja ohne Klammern strikt von links nach rechts ausgewertet wird, das hab ich zumindest schon irgendwo gelesen, was dann also
(not (a=b)) and (c=d) ergäbe
Es wäre ja ok, wenn wenigstens der VergleichsOperator = vor der `not`-Operation ausgeführt würde, tut es aber nicht, ohne Klammern wird ausgewertet ((not a)=b) and (c=d)
und es kommt noch schlimmer, die Operation `not a` wird intern berechnet über den Term `(a*-1)-1` was prima funktioniert wenn a ein tatsächlich ein Wahrheitswert -1(wahr) oder 0(falsch) ist, nicht aber bei jeder anderen Zahl.

(Hab ich eigentlich schon erwähnt das Basic völliger Schrott ist?)
Bevor jemand die Frage stellt - ja Python macht das besser, Vergleichsoperatoren ( ==, <=, >=, <, >, !=) haben Vorzug vor logischen Operationen, und selbst ein einzelnes `not 42` gibt schlicht False zurück anstatt -43
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
TrueColor
******
Beiträge: 542
Registriert: Do, 11.03.2010 11:23

Re: Logik-Operatoren und Klammern

Beitrag von TrueColor »

oh... das klingt ja übel, bin bisher immer davon ausgegangen, dass generell Vergleichsoperatoren höchste Priorität haben.
System:
Arbeit: Windows 7 (64 bit) + Apache OpenOffice 4.1.2 (AOO412m3), LibreOffice 4.1.4.2
Home: Windows 10 (64 bit) + Apache OpenOffice 4.1.2 (AOO412m3)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Logik-Operatoren und Klammern

Beitrag von Stephan »

Msgbox E & " " & F & " " & cbool(E AND F)
aah, OK.

Ich habs jetzt ausprobiert mit durchspielen aller Fälle durch Ändern der Variablenwerte in:

Code: Alles auswählen

tmp = ""
A=32 : B=13 : C=1 : D=5
E = (A=B) 
F = (C=D)
tmp = E & " " & F & " " & cbool(NOT(E AND F))
E = (A<>B)
F= (C<>D)
Msgbox tmp & CHR(13) & E & " " & F & " " & cbool(E OR F)
und sehe das das OR stimmt, ich muss aber wohl noch einige Tage mit 'dem kleinen Mann in meinem Kopf' kämpfen der das nur widerwillig verstehen mag.
Hab ich eigentlich schon erwähnt das Basic völliger Schrott ist?
zumindest heute noch nicht :-)

Womit hast Du denn ursprünglich programmieren gelernt?
Ich auf einer 8-Bit Maschine mit 16 KB Hauptspeicher und eben Basic-Interpreter. Jahre später, zur Zeit meine zweiten Studiums, wollte ich mich dann einmal rein aus Interese informieren wie sich die Technik weiterentwickelt hat und dank Studentenausweis gabs damals VB6 für 99 DM und der erste Eindruck von VB6 haftet irgendwie noch heute, wegen des riesigen Unterschieds zu dem 8Bit-Basic-Interpreter den ich bis dahin nur kannte.
Nö, ich mache hier keine Basic-Werbung, denn ich bin mir der zumindest niedrigen Effizienz von VB6 oder VB .Net bewusst, aber es ist halt bequem damit zu programmieren.

Beruflich hingegen ist es so das im Office-Bereich kaum ein Kunde von mir etwas Anderes nachfragt als Basic, der Grund ist einfach: es hat sich in den Jahren in den Firmen genügend eigenes (Halb-)Wissen zu VBA angesammelt und so kommt man mit StarBasic auch ganz gut zurecht. Für andere Sprachen müsste man Mitarbeiter erst schulen und das würde kosten.
Weil das so ist habe ich wenig 'Druck' mich mit Alternativen zu beschäftigen. Wenn dann käme für mich Python in Frage (aber Du weist ja das ich damit schon einmal begonnen hatte das zu lernen).





Gruß
Stephan
Dreh-Gel
**
Beiträge: 28
Registriert: Sa, 25.10.2014 16:58

Re: Logik-Operatoren und Klammern

Beitrag von Dreh-Gel »

Moin,

Karolus hat recht mit
not ( a=b and c=d)` ist equivalent zu `a<>b or c<>d
Das liegt an den deMorganschen Gesetzen https://de.wikipedia.org/wiki/De_Morgansche_Gesetze

Also: Not( a=b and c=d ) ergibt Not (a=b) or Not (c=d)
und Not (a=b) ist a<>b

cu.
Win7, AOO 4.1.1
Antworten