[gelöst] Probleme mit Ausgabetyp boolean bei einer Funktion
Verfasst: So, 03.01.2016 15:02
Hallo zusammen,
vorweg: Ich benutze LibreOffice 5 unter Linux Mint Mate 17.3 64 Bit. Ich habe Programmiererfahrung, aber dies ist mein erster Versuch mit LibreOffice Basic. Ich entschuldige mich auch für den langen Beitrag; ich habe mich bemüht, mein Problem so genau und verständlich wie möglich zu schildern.
Jetzt zu meinem Problem: Ich muss öfter mal längere aussagenlogische Formeln auswerten und möchte dazu LibreOffice Calc benutzen.
Ein Beispiel: Gesucht ist die Wahrheitswertetabelle der Formel

(in Worten: (aus a folgt b) genau dann wenn (aus nicht b folgt nicht a))
Diese Formel schreibe ich in Calc so, dass jeder Buchstabe und jedes Zeichen, das ausgewertet werden muss, in einer eigenen Spalte steht. Unter jeden Buchstaben trage ich alle Kombinationen der Wahrheitswerte ein, die möglich sind, das sieht dann so aus:

Dann beginne ich mit der Auswertung, indem ich unter jedes Zeichen (in der Reihenfolge, die die Struktur der logischen Formel für die Auswertung vorschreibt) eine passende Formel eintrage und dann in die drei darunterliegenden Zeilen kopiere. Z.B. benutze ich für das 'nicht' in Spalte 8 die logische Funktion NICHT von LibreOffice.
Für die Junktoren 'nicht', 'und' und 'oder' stellt LibreOffice logische Funktionen zur Verfügung, für das Konditional ('daraus folgt', einfacher Pfeil) und das Bikonditional ('genau dann wenn', Doppelpfeil) aber nicht. Deshalb wollte ich mir dafür selbst je eine Funktion schreiben.

Deshalb habe ich diese Funktion für das Konditional geschrieben:
und diese Funktion für das Bikonditional:
Angewendet auf die Formel von oben sieht das Ergebnis dann so aus:

Dabei bin ich so vorgegangen:
1. Auswertung des Konditionals in Spalte 2; dazu habe ich meine Funktion implikation benutzt; Eingabe: die Werte von a und b aus Spalte 1 und Spalte 3.
2. Auswertung der beiden Verneinungen in Spalte 5 und Spalte 8 mit der logischen Funktion NICHT von LibreOffice; Eingabe: die Werte von b aus Spalte 6 bzw. von a aus Spalte 9.
3. Auswertung des Konditionals in Spalte 7 mit meiner Funktion implikation; Eingabe: die Werte der beiden Negationen aus Spalte 5 und Spalte 8.
4. Auswertung des Bikonditionals in Spalte 4 mit meiner Funktion implikation; Eingabe: die Werte des Konditionals aus Spalte 2 und die Werte des Konditionals aus Spalte 7.
Wie ihr seht, werden die Werte der Funktionen, die ich selbst geschrieben habe, auf Englisch ausgegeben, die Werte der logischen Funktion NICHT von LibreOffice dagegen auf Deutsch. Etwas irritierend, aber die Werte sind immerhin korrekt.
Wenn ich jetzt aber das Bikonditional in Spalte 4 durch ein logisches 'und' ersetze, sieht das Ergebnis so aus:

Bei der Auswertung bin ich so vorgegangen wie beim vorigen Beispiel, nur habe ich in Schritt 4 für die Auswertung der 4. Spalte die logische Funktion UND von LibreOffice benutzt. Wenn ich zur Auswertung von Spalte 4 statt der logischen Funktion UND von LibreOffice folgende selbst geschriebene Funktion und1 benutze, dann bekomme ich für Spalte 4 korrekte Werte, aber auf Englisch.
Offenbar sind die logischen Funktionen von LibreOffice mit den Werten der von mir selbst geschriebenen Funktionen nicht kompatibel, aber warum? Was habe ich falsch gemacht?
Ich bedanke mich bei allen, die sich die Mühe gemacht haben, meine Frage bis zum Ende zu lesen.
MfG, kondi
vorweg: Ich benutze LibreOffice 5 unter Linux Mint Mate 17.3 64 Bit. Ich habe Programmiererfahrung, aber dies ist mein erster Versuch mit LibreOffice Basic. Ich entschuldige mich auch für den langen Beitrag; ich habe mich bemüht, mein Problem so genau und verständlich wie möglich zu schildern.
Jetzt zu meinem Problem: Ich muss öfter mal längere aussagenlogische Formeln auswerten und möchte dazu LibreOffice Calc benutzen.
Ein Beispiel: Gesucht ist die Wahrheitswertetabelle der Formel

(in Worten: (aus a folgt b) genau dann wenn (aus nicht b folgt nicht a))
Diese Formel schreibe ich in Calc so, dass jeder Buchstabe und jedes Zeichen, das ausgewertet werden muss, in einer eigenen Spalte steht. Unter jeden Buchstaben trage ich alle Kombinationen der Wahrheitswerte ein, die möglich sind, das sieht dann so aus:

Dann beginne ich mit der Auswertung, indem ich unter jedes Zeichen (in der Reihenfolge, die die Struktur der logischen Formel für die Auswertung vorschreibt) eine passende Formel eintrage und dann in die drei darunterliegenden Zeilen kopiere. Z.B. benutze ich für das 'nicht' in Spalte 8 die logische Funktion NICHT von LibreOffice.
Für die Junktoren 'nicht', 'und' und 'oder' stellt LibreOffice logische Funktionen zur Verfügung, für das Konditional ('daraus folgt', einfacher Pfeil) und das Bikonditional ('genau dann wenn', Doppelpfeil) aber nicht. Deshalb wollte ich mir dafür selbst je eine Funktion schreiben.

Deshalb habe ich diese Funktion für das Konditional geschrieben:
Code: Alles auswählen
function implikation (a as boolean, b as boolean) as boolean
implikation = not (a and not b)
end function
Code: Alles auswählen
function aequivalenz (a as boolean, b as boolean) as boolean
aequivalenz = implikation (a, b) and implikation (b, a)
end function

Dabei bin ich so vorgegangen:
1. Auswertung des Konditionals in Spalte 2; dazu habe ich meine Funktion implikation benutzt; Eingabe: die Werte von a und b aus Spalte 1 und Spalte 3.
2. Auswertung der beiden Verneinungen in Spalte 5 und Spalte 8 mit der logischen Funktion NICHT von LibreOffice; Eingabe: die Werte von b aus Spalte 6 bzw. von a aus Spalte 9.
3. Auswertung des Konditionals in Spalte 7 mit meiner Funktion implikation; Eingabe: die Werte der beiden Negationen aus Spalte 5 und Spalte 8.
4. Auswertung des Bikonditionals in Spalte 4 mit meiner Funktion implikation; Eingabe: die Werte des Konditionals aus Spalte 2 und die Werte des Konditionals aus Spalte 7.
Wie ihr seht, werden die Werte der Funktionen, die ich selbst geschrieben habe, auf Englisch ausgegeben, die Werte der logischen Funktion NICHT von LibreOffice dagegen auf Deutsch. Etwas irritierend, aber die Werte sind immerhin korrekt.
Wenn ich jetzt aber das Bikonditional in Spalte 4 durch ein logisches 'und' ersetze, sieht das Ergebnis so aus:

Bei der Auswertung bin ich so vorgegangen wie beim vorigen Beispiel, nur habe ich in Schritt 4 für die Auswertung der 4. Spalte die logische Funktion UND von LibreOffice benutzt. Wenn ich zur Auswertung von Spalte 4 statt der logischen Funktion UND von LibreOffice folgende selbst geschriebene Funktion und1 benutze,
Code: Alles auswählen
function und1 (a as boolean, b as boolean) as boolean
und1 = a and b
end function
Offenbar sind die logischen Funktionen von LibreOffice mit den Werten der von mir selbst geschriebenen Funktionen nicht kompatibel, aber warum? Was habe ich falsch gemacht?
Ich bedanke mich bei allen, die sich die Mühe gemacht haben, meine Frage bis zum Ende zu lesen.
MfG, kondi