[gelöst] Logik-Operatoren und Klammern

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [gelöst] Logik-Operatoren und Klammern

Re: [gelöst] Logik-Operatoren und Klammern

von TrueColor » Di, 30.06.2015 15:23

Dann danke ich euch allen noch mal, für meinen Part sehe ich das Problem als gelöst an.

Wie sieht's bei dir aus, Stephan? Wenn noch Diskussionsbedarf ist, nimmst du das Tag grad wieder raus.

Re: Logik-Operatoren und Klammern

von Dreh-Gel » Fr, 26.06.2015 17:08

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.

Re: Logik-Operatoren und Klammern

von Stephan » Fr, 26.06.2015 09:27

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

Re: Logik-Operatoren und Klammern

von TrueColor » Do, 25.06.2015 18:29

oh... das klingt ja übel, bin bisher immer davon ausgegangen, dass generell Vergleichsoperatoren höchste Priorität haben.

Re: Logik-Operatoren und Klammern

von Karolus » Do, 25.06.2015 17:52

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

Re: Logik-Operatoren und Klammern

von TrueColor » Do, 25.06.2015 16:20

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!

Re: Logik-Operatoren und Klammern

von Karolus » Do, 25.06.2015 14:19

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

Re: Logik-Operatoren und Klammern

von Krangel » Do, 25.06.2015 13:31

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) 142-mal heruntergeladen

Re: Logik-Operatoren und Klammern

von Karolus » Do, 25.06.2015 12:06

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)

Re: Logik-Operatoren und Klammern

von Stephan » Do, 25.06.2015 11:24

`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.

Re: Logik-Operatoren und Klammern

von Karolus » Do, 25.06.2015 10:22

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.

Re: Logik-Operatoren und Klammern

von Stephan » Do, 25.06.2015 09:41

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

Re: Logik-Operatoren und Klammern

von Karolus » Do, 25.06.2015 09:12

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`

Re: Logik-Operatoren und Klammern

von TrueColor » Do, 25.06.2015 07:55

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?

Re: Logik-Operatoren und Klammern

von Karolus » Mi, 24.06.2015 18:19

Hallo

Woher sollen wir wissen ob der Ausdruck korrekt ist?

`not ( a=b and c=d)` ist equivalent zu `a<>b or c<>d`

Nach oben