Kurs: Logeleien
C 64/VC 20
Logeleien

Logeleien (Teil 3)

Diese letze Folge der Logeleien wird zum krönenden Abschluß unseren Commodore 64 als »Schlußfolgerungs-Maschine« vorstellen und den Zusammenhang mit der sogenannten Künstlichen Intelligenz beleuchten.

Das Aschenputtel unseres Basic-Sprachvorrates, den WAIT-Befehl, hatten wir in der letzten Folge untersucht. Dabei kam heraus, daß er — mit nur einem Argument versehen — testet, ob in einer spezifizierten Speicherstelle ein bestimmtes Bit gesetzt ist. Im Gegensatz dazu prüft WAIT mit zwei Argumenten, ob ein bestimmtes Bit gelöscht ist.

16. Nochmal WAIT: Diesmal mit zwei Argumenten.

Wie funktioniert das? Gehen wir aus vom Befehl WAIT C,A,B

Dabei ist C die abzufragende Speicherstelle, A eine AND-Maske und B eine EOR-Maske. Sogar im Programmers Reference Guide findet man eine falsche Funktionsbeschreibung. Tatsächlich geschieht folgendes:

  1. Der Wert der Speicherstelle C wird gelesen.
  2. Dieser Wert wird mit B als EOR-Maske exklusiv-oder-verknüpft
  3. Das Ergebnis davon wird mit A als AND-Maske verknüpft.

Anhand eines Beispiels wollen wir uns ansehen, was passiert. Der Befehl WAIT 1,32,32 hält ein Programm an, bis eine Datasettentaste gedrückt wird (H. Hauck, 64’er, Ausgabe 11/1984, Seite 135). Bit 4 der Speicherstelle 1 ist in dem Fall nämlich Null. Der normale Inhalt dieses Registers ist 55 (binär 0011 0111), also Bit 4 = 1. Die Zahl 32 lautet binär 0001 0000

Mit WAIT1,32,32 geschieht folgendes:

keine Taste:

0011 0111 55
0001 0000 32
EOR
0010 0111
0001 0000 32
AND
0000 0000 0

Das Ergebnis ist Null, der Computer wartet weiter.

Taste gedrückt:

0010 0111 39
0001 0000 32
EOR
0011 0111
0001 0000 32
AND
0001 0000 32

Das Ergebnis ist ungleich Null, der Computer geht im Programm weiter.

Im Programmers Reference Guide steht es genau umgekehrt: Danach soll erst die AND und dann die EOR-Operation stattfinden. Lassen Sie uns diese Variante ebenfalls einmal durchspielen:

keine Taste:

0011 0111 55
0010 0000 32
AND
0010 0000
0010 0000 32
EOR
0000 0000 0

Ergebnis also wieder Null. Der Computer wartet weiter.

Taste gedrückt:

0010 0111 39
0010 0000 32
AND
0010 0000
0010 0000 32
EOR
0000 0000 0!

Auch wenn eine Taste gedrückt ist, würde bei dieser Funktionweise der Computer weiter warten bis zum jüngsten Gericht.

Wir sollten uns das merken: Es kommt bei mehreren logischen Verknüpfungen auch auf die Reihenfolge an.

Daß der WAIT-Befehl so selten benutzt wird, hängt zum einen sicherlich mit seiner relativ komplexen Handhabung zusammen, zum anderen aber auch damit, daß meist ein äußeres Ereignis eintreten muß, um den zu überprüfenden Bit-Wert zu verändern. Dafür kommen Kontrollregister in Frage, die für Ein-/Ausgabe-Operationen jeglicher Art eine Rolle spielen, einige VIC-II-Chip-Register und auch Speicherstellen des SID-Chip. Die beiden letzteren sind allerdings von der Firmware her ohnehin auf allerlei Ereignisse hin programmiert, so daß eine Behandlung mittels des WAIT-Befehls lediglich manchmal als Alternative gesehen werden kann. Bleiben also die CIA-Register, deren komplexe Funktion aber meist eher zur Bearbeitung in Assembler zwingt als in Basic.

Ein Anwendungsbeispiel soll aber noch vorgestellt werden. Es stammt von H. Kohlen und wurde im 64’er, Ausgabe 10/ 1984, Seite 92 abgedruckt. Es handelt sich um eine Joystickabfrage (Port 2), die allerdings immer nur eine Joystickbewegung erfaßt:

Das gleiche mit der Speicherstelle 56321 bezieht sich dann auf den Joystickport 1. Wenn also ein Programmabschnitt warten soll, bis der Feuerknopf gedrückt wird, ist WAIT 56320,16,16 sicher eine Möglichkeit, so etwas zu programmieren.

17. Logische Sätze

Im Grunde haben wir bisher lediglich das logische Handwerkszeug kennengelernt. Zwar erbrachte das auch einige direkte Anwendungen, aber richtig logische Probleme zu lösen, dazu bedarf es noch einiger Überlegungen. Genau das wollen wir versuchen: Kann ein Computer verzwickte logische Aufgabenstellungen befriedigend lösen?

Die meisten logischen Fragestellungen bestehen nicht nur aus der Anwendung einer einzigen Verknüpfungsart, sondern — wie schon der WAIT-Befehl mit zwei Argumenten — aus mehreren verkoppelten Aussagen. Wie stellt man die Wahrheitswerte solcher Kombinationen her?

Zunächst ein Beispiel für solch einen logischen SATZ (so nennt man diese verkoppelten Aussagen auch häufig): NOT(A AND (NOTB))

Zum Ergebnis gelangt man wieder über eine Wahrheitstabelle. Abhängig von der Anzahl der Variablen (hier also zwei: A,B) muß eine Anzahl von Zeilen vorgesehen werden, die alle möglichen W/F-Kombinationen enthält. Bei zwei Variablen sind das dann vier Zeilen, allgemein aber bei N Variablen 2N Zeilen. Die Anzahl der Spalten ergibt sich aus der Menge der Variablen und der vorzunehmenden Verknüpfungen. In Bild 1 sehen Sie die Wahrheitstabelle für unser Beispiel.

A B NOT B A AND (NOT B) NOT (A AND (NOT B))
W W F F W
W F W W F
F W F F W
F F W F W
Bild 1. So sieht die Wahrheitstabelle des logischen Satzes NOT(A AND (NOTB)) aus

Links finden Sie die Kombinationen der Wahrheitswerte der Variablen A und B. Daneben wurde NOTB entwickelt, dann (wie bei algebraischen Rechnungen Schritt für Schritt) die AND-Verknüpfung und schließlich die Verneinung der Spalte davor. Diese letzte Spalte ist auch eine Zusammenstellung der Ergebnisse.

Das kann auch unser C 64 für uns rechnen. Das Programm »Logelei-1« erledigt das in der Weise, daß es erst nach der logischen Funktion fragt, deren Wahrheitstabelle berechnet werden soll, sich dann selbst verändert (Zeilen 100-130) und schließlich die Berechnungen durchführt.

Zu beachten ist, daß »Logelei-1« nur die normalerweise in unserem Basic-Sprachvorrat enthaltenen logischen Operatoren kennt.

Zwei Sonderfälle von logischen Sätzen sollen Sie kennenlernen. Zunächst die sogenannte »Tautologie« (hochdeutsch: Gleichbedeutung). Davon spricht man, wenn sämtliche Wahrheitswerte des Ergebnisses W (wahr) sind (beziehungsweise 1). Das ist der Fall in Hamlets berühmten Satz (wenn er damit ein inklusiv-Oder gemeint hat) »sein oder nicht sein«. Probieren Sie mal aus: A OR (NOT A)

(Das Programm Logelei-1 ist übrigens darauf nicht eingerichtet). Das Gegenteil der Tautologie ist die »Kontradiktion« (zu hochdeutsch: Widerspruch). Sämtliche Wahrheitswerte des Ergebnisses sind F (falsch oder 0). Das findet man zum Beispiel bei: A AND (NOT A)

Als Beispiel sei A die Aussage »es regnet«. Dann ist es eine Kontradiktion zu behaupten: »Es regnet und es regnet nicht«.

Bisher fehlen uns aber noch einige entscheidende Werkzeuge: Wir können noch keine Schlußfolgerungen ziehen. Das steuern wir nun an.

Es gibt in einigen Basic-Dialekten den Operator EQV. Das kommt von »äquivalent«, also »gleich«. Wir dürfen in unserem C 64 getrost dafür das Gleichheitszeichen (=) verwenden. Äquivalenz zweier logischer Sätze liegt vor, wenn die Wahrheitswerte der Ergebnisse gleich sind. Probieren Sie mal mittels unseres Programmes:

  1. NOT (A AND B)
  2. (NOT A) OR (NOT B)

Beide Sätze sind äquivalent, weil die Ergebnisse gleiche Wahrheitswerte besitzen. Nebenbei: Das ist eines der sogenannten Gesetze von DeMorgan. Das Programm Logelei-1 zeigt sich — wie Sie nun sehen werden — auch schon als »Beweismaschine«. Bei der Frage nach der Funktion geben Sie doch mal dieses DeMorgan-Gesetz ein: (NOT(AANDB)) = ((NOTA)OR(NOTB))

Das Ergebnis zeigt lauter -1, also W. Für alle Variablenkombinationen ist dieser Satz also richtig. Vielleicht ahnen Sie jetzt schon, was ein Computer in Fragen Logik zu leisten imstande ist. Probieren Sie doch mal selbst einfach ein paar Äquivalenzen aus. So können Sie selbst noch zum Entdecker werden.

18. Bedingungen

Auf dem Weg zum Computer als »Schlußfolgerungs-Maschine« fehlt uns noch etwas Wichtiges: Bedingungen. Das sind Verknüpfungen der Form »Wenn… dann…«. Man nennt diese Verknüpfungen »Implikationen« und findet in manchen Basic-Dialekten dafür den Operator IMP. Wir dürfen statt dessen >= verwenden.

(Der Vollständigkeit halber sei noch angemerkt, daß wir im C 64 anstelle von EOR »<>« verwenden können. Der C 128 kennt diesen Befehl als XOR.)

Im weiteren soll für diese Wenn-/Dann-Verknüpfung immer IMP verwendet werden. Sie können dann in einem Programm leicht >= dafür einsetzen. Für eine Aussagen-Operation der Form A IMP B gibt es wieder genaue Vorschriften, wie die einzelnen Wahrheitswerte miteinander verrechnet werden. Bild 2 zeigt Ihnen die Wahrheitstabelle der IMP-Operation:

A B A IMP B
W W W
W F F
F W W
F F W
Bild 2. Das ist die Wahrheitstabelle der IMP-Verknüpfung

Nur dann also, wenn A richtig und B falsch ist, ist auch A IMP B falsch. Diese Wahrheitstabelle erstellt Ihnen auch ohne weiteres Logelei-1. Wenn Sie schon am Probieren sind, dann geben Sie doch noch mal diese Äquivalenz ein: (A>=B) = ((NOTA)ORB)

Das Ergebnis zeigt: Anstelle von A IMP B kann auch (NOTA) ORB verwendet werden. Solche Äquivalenzen sind sehr brauchbar. Deshalb werden wir uns noch eine weitere IMP-Operation ansehen. Überprüfen Sie doch mal mittels Logelei-1 die Wahrheitswerte dieses Satzes: (NOTB) IMP (NOTA)

Sie sehen, daß genau dieselben Wahrheitswerte herauskommen wie für A IMP B. Auch diese Sätze sind demnach äquivalent. Man nennt den letzteren »Kontraposition« von A IMP B. Als Beispiel für eine Anwendung dieser Erkenntnis wollen wir einen Beweis führen:

Der Satz »Wenn x2 ungerade ist, dann ist x ungerade« soll bewiesen werden. Wenn wir für A einsetzen »x2 ungerade« und für B »x ungerade«, dann ist also zu beweisen A IMP B. Die Kontraposition davon wäre dann der Satz: »Wenn x gerade ist, dann ist auch x2 gerade«. Das zu zeigen, ist relativ einfach. Eine gerade Zahl x ist auszudrücken durch 2n: x = 2n. Dann ist für x2 zu schreiben:
x2 = (2n) (2n) = 2 (2n2),
was wieder eine gerade Zahl ist. Damit haben wir die Kontraposition bewiesen. Weil aber die Kontraposition äquivalent ist zu unserem Ausgangssatz, ist so auch dieser bewiesen.

Was damit zu zeigen war, ist die Tatsache, daß man zu Beweisen häufig nur einen geeigneten äquivalenten Satz beweisen muß, was unter Umständen sehr viel leichter sein kann.

19. Argumente, Schlußfolgerungen

Wenn jemand in einer Diskussionsrunde einen anderen Teilnehmer abbügelt, indem er behauptet, dieser habe keine gültigen Argumente, dann kommt er dem, was ein Logiker unter diesem Begriff versteht, schon ziemlich nahe. Für diesen ist ein Argument eine Beziehung zwischen logischen Sätzen, die er »Prämissen« (Voraussetzungen) nennt und einem Satz, der »logischer Schluß« heißt. Solche Argumente können dann »gültig« sein oder »irrig« (also ungültig).

Gültigkeit liegt nur dann vor, wenn alle Prämissen den Wahrheitswert W aufweisen und außerdem gleichzeitig auch der logische Schluß den Wahrheitswert W hat. Das ist vielleicht so trocken etwas unverständlich. Wir sehen uns daher ein Beispiel an.

Unser Beispiel beinhaltet ein grundlegendes Gesetz, das Gesetz der logischen Schlußfolgerung (Gesetz der Syllogistik, aufgestellt von Aristoteles). Man kann es so ausdrücken: »Aus A folgt B. Aus B folgt C. Dann folgt auch aus A die Aussage C.« Die beiden ersten Sätze sind die Prämissen. Der letzte Satz ist der logische Schluß. In Formeln:

Das Ganze ist ein Argument, und wir müssen nun nachprüfen, ob es gültig ist. Dazu bauen wir uns eine Wahrheitstabelle, die nun (weil drei Variable vorhanden sind) 23 = 8 Zeilen enthalten muß. Außerdem soll jedem Satz und jeder Variablen eine Spalte zugeordnet sein. In Bild 3 ist diese Wahrheitstabelle zu sehen.

A B C A IMP B B IMP C A IMP C
W W W W W W
W W F W F F
W F W F W W
W F F F W F
F W W W W W
F W F W F W
F F W W W W
F F F W W W
Bild 3. Wahrheitstabelle eines gültigen Argumentes. Hier das $yllogistische Gesetz des Aristoteles.

Links finden Sie alle möglichen Kombinationen der Variablen-Wahrheitswerte, rechts daneben dann die Werte, die bei den drei Sätzen herauskommen. In den markierten Zeilen sind die Werte beider Prämissen W und — wie Sie unschwer feststellen werden — auch der Wahrheitswert des Schlusses ist dort W. Damit ist dieses Argument gültig.

Eine andere, etwas computergerechtere Form, lernen wir nun noch kennen. Dabei verknüpft man alle Prämissen durch die AND-Operation und dies so entstandene Gebilde wird durch die IMP-Operation mit dem Schluß verkoppelt. Das Ergebnis ist eine Tautologie, wenn das Argument gültig ist. Unser Beispiel lautet in dieser Form dann: ((A IMP B)AND(B IMP C)) IMP (A IMP C)

Unser Computer wird also eine »Schlußfolgerungs-Maschine«, wenn wir das Programm Logelei-1 etwas erweitern und umbauen. Als »Logelei-2« sehen Sie diese Schlußfolgerungsmaschine hier abgedruckt.

Im Grunde genommen tut dieses Programm nichts anderes als Logelei-1, nur sind jetzt unterschiedliche Variablen-Anzahlen zugelassen (von einer bis zu vier Variablen). Ebenso wie vorhin wird hier auch nach Anzeigen der vorhandenen Funktion gefragt, ob eine andere gewünscht sei. Danach muß die Anzahl der Variablen eingegeben werden und unter Umständen die neue Funktion. Wenn eine Schlußfolgerung zu untersuchen ist, wird sie in der eben erklärten Form (Prämissen AND-verknüpft etc.) eingegeben. Ansonsten verfahren Sie wie bei Logelei-1. Der Computer erstellt nun eine Wahrheitstabelle. Liegt eine Tautologie vor, dann sind alle Ergebnis-Wahrheitswerte gleich -1 und damit das Argument gültig, die Schlußfolgerung also richtig. Um das Programm überschaubar zu halten, sind einige Eleganzen nicht verwendet worden. Aber vielleicht reizt Sie das ja zum Erweitern, Verfeinern, etc.

Versuchen Sie es mal mit dem obigen Beispiel. Sie sehen, wir können mit Logelei-2 ein logisches Gesetz beweisen. Natürlich kann man diese Schlußfolgerungsmaschine auch im alltäglichen Bereich einsetzen. Das soll das folgende einfache Beispiel zeigen:

Ein Student erzählt seine Situation: »Wenn ich jobbe, dann kann ich nicht gleichzeitig studieren. Wenn ich studiere, dann schaffe ich das Examen. Wenn ich nicht jobbe, dann muß ich am Hungertuch nagen. Ich habe mich entschlossen, trotzdem zu studieren. Dann habe ich mein Examen und nage am Hungertuch.« Das sind 4 Sätze mit 4 Variablen:

In der verkürzten Form lautet die Äußerung des Studenten dann:

Nach dem Starten der Schlußfolgerungs-Maschine geben Sie also ein: ((A IMP (NOTB)) AND (B IMP C) AND ((NOTA) IMP C) AND B) IMP (C AND D)

Anstelle von IMP verwenden Sie die oben genannten Zeichen. Die Zwischenräume können wegbleiben, denn sie sind nur der Deutlichkeit halber eingefügt. Außerdem sagen Sie bitte dem Computer, daß er es mit vier Variablen zu tun hat. Das Ergebnis zeigt, daß die Schlußfolgerung richtig ist: Lauter -1 treten auf.

So, nun können Sie dieses Programm auf eigene Probleme anwenden. Ein paar nette Beispiele finden Sie in einem Artikel von D. Herrmann in der Zeitschrift computer colleg, Ausgabe 2/1985, Seite 26. Wenn Sie öfters versuchen, Schlüsse auf diese Weise per Computer zu überprüfen, werden Sie feststellen, daß der schwierigste Schritt die Umwandlung von Sätzen in die mathematische Kurzform darstellt. Das kennen Sie vielleicht schon von Textaufgaben in der Mathematik her.

20. Künstliche Intelligenz?

Wenn Sie diese Folge bis hierher gelesen und vielleicht einige Schlüsse selbst ausprobiert haben, ist bei Ihnen möglicherweise der Eindruck entstanden, daß Sie hier so etwas wie den Keim der Künstlichen Intelligenz (auch mit dem Kürzel KI bedacht) vorliegen haben. Ein Programm, das in der Lage ist, mehr Variable — vielleicht sogar Hunderte — zu verarbeiten, welches die Schlüsse aus allen möglichen Variablenkombinationen selbst erstellt und mittels der Tautologien überprüft auf Richtigkeit, solch ein Programm wäre im Prinzip auf der gleichen Basis wie »Logelei-2« zu erstellen, also relativ einfach. Zwar hätte es ziemlich große Ausmaße und es bedürfte sicherlich eines wesentlich schnelleren Prozessors, um in absehbaren Zeiten zu Resultaten zu kommen, aber es wäre technisch realisierbar. Ist das Künstliche Intelligenz, und — diese etwas utopisch anmutende Zusatzfrage stellt sich zwangsläufig — wäre das Programm nicht in der Lage, Firmen, Gesellschaften, ja auch dem Staat eine wichtige Hilfe bei Entscheidungen zu sein?

Versuchen wir zunächst, die Frage nach KI zu beantworten, dann erkennen wir sehr schnell, daß eine Antwort nicht möglich ist. Noch gibt es keine allgemein anerkannte Definition, was Intelligenz eigentlich sei. Dann kann auch kein Begriff einen sinnvollen Inhalt haben, der daraus abgeleitet ist.

Die zweite Frage ist nicht ganz so leicht zu klären. Solch eine »Super-Schlußfolgerungs-Maschine« wäre sicherlich in einigen Anwendungsbereichen sehr nützlich. Aber vielleicht ist Ihnen schon bei der Formulierung von Problemstellungen für unser Programm »Logelei-2« aufgefallen, daß es da manchmal Schwierigkeiten gibt. Irgendwie fällt es ab und zu schwer, einen Satz, in dem Adjektive oder Adverbien eine große Rolle spielen, in die Kurzform umzusetzen. Nun haben Sie recht, wenn Sie sagen, daß das sicher eine Frage der Feinheit der Methode sei. Wie haben hier ja auch nur einen kleinen Zipfel der Logik zu fassen bekommen. Aber trotzdem bleiben Probleme. Im täglichen Leben werden Sie höchst selten Situationen vor sich haben, die mit JA oder NEIN (Wahr oder Falsch) zu bewältigen sind. Da gibt es zum Beispiel noch ein JA,ABER oder ein VIELLEICHT oder ein JEIN etc. Die zweiwertige Logik, auf der all das fußt, was wir in diesen drei Folgen behandelt haben, spielt in der Realität nur eine untergeordnete Rolle! Sie ist deshalb auch nur höchst selten und jedesmal mit einer gehörigen Portion Skepsis auf reale Problemstellungen anwendbar.

Allen, die neugierig auf dieses Thema geworden sind, möchte ich zwei Bücher ans Herz legen, die ebenso unterschiedlich wie nützlich sind:

1) Seymour Lipschutz: »Essential Computer Mathematics«. McGraw-Hill 1982. ISBN 0-07-037990-4. Das ist einer der Bände der Serie »Schaum’s Outline Series«, der auch noch andere mathematische Themen anpackt und das alles mit vielen Beispielen würzt.

2) Douglas R. Hofstadter: »Gödel, Escher, Bach ein Endloses Geflochtenes Band«. Klett-Cotta 1985. ISBN 3-608-93037-X. Das ist für jeden, der sich für Computer, Logik, KI und das Denken an sich interessiert, eine Art Bibel.

(Heimo Ponnath/gk)
Bild 4. Das Programm »Logelei-2« überprüft Aussagen. Wenn alle Ergebnisse —1 lauten, ist die Aussage richtig (so wie hier).
1 rem *********************************
2 rem *                               *
3 rem *      logeleien fuer zwei      *
4 rem *           variable            *
5 rem *                               *
6 rem *  heimo ponnath  hamburg 1985  *
7 rem *                               *
8 rem *********************************
9 rem
10 printchr$(147):poke53280,0:poke53281,0:poke646,5:goto30
15 rem **** up cursor setzen ****
20 poke211,s:poke214,z:sys58640:return
25 rem **** hp-1: funktioneneingabe ***
30 s=11:z=5:gosub20:poke646,7:print"logeleien fuer zwei"
35 s=16:z=6:gosub20:poke646,2:print"variable"
40 s=6:z=10:gosub20:poke646,5:print"im programm ist die funktion:"
45 k=1:gosub100:k=0:s=0:z=15:gosub20:print"c="l$
50 s=6:z=20:gosub20
55 printchr$(18)"a"chr$(146)"lte oder "chr$(18)"n"chr$(146)"eue funktion ?"
60 geta$:ifa$<>"a"anda$<>"n"then60
65 ifa$="a"then95
70 s=0:z=22:gosub20:print"c(a,b)=";:inputl$:poke781,22:sys59903
75 gosub20:print"c="l$:fori=0to500:next:poke646,0
80 printchr$(147)chr$(17):print"100l$="chr$(34)l$chr$(34)
85 print"110deffnl(a)="l$:print"120deffnm(b)="l$:print"run95"chr$(19);
90 poke631,13:poke632,13:poke633,13:poke634,13:poke198,4:end
94 rem **** hp-2: berechnungen ****
95 poke646,5:printchr$(147)
100 l$="not(a and(not b))"
110 deffnl(a)=not(a and(not b))
120 deffnm(b)=not(a and(not b))
130 ifk=1thenreturn
140 s=5:z=5:gosub20:poke646,2:print"hier ist die wahrheitstabelle:"
145 print:print:print:poke646,1:printtab(5)"a"tab(10)"b"tab(25)"ergibt c"
150 printtab(4)"--------------------------------":poke646,5:print
155 fora=-1to0:forb=-1to0:printtab(5)atab(10)btab(27)fnm(b)
160 nextb:nexta
165 print:poke646,1:printtab(4)"--------------------------------":poke646,5
170 s=0:z=20:gosub20:print"c="l$
Listing Logelei-1. Eine Hilfe zum Erstellen von Wahrheitstabellen bei zwei Variablen
1 rem *********************************
2 rem *                               *
3 rem * die schlussfolgerungsmaschine *
4 rem *       bis zu 4 variable       *
5 rem *                               *
6 rem *  heimo ponnath  hamburg 1985  *
7 rem *                               *
8 rem *********************************
9 rem
10 printchr$(147):poke53280,0:poke53281,0:poke646,5:goto30
15 rem **** up cursor setzen ****
20 poke211,s:poke214,z:sys58640:return
25 rem **** hp-1: funktioneneingabe ***
30 s=7:z=5:gosub20:poke646,7:print"schlusfolgerungsmaschine
35 s=10:z=6:gosub20:poke646,2:print"bis zu 4 variable"
40 s=6:z=9:gosub20:poke646,5:print"im programm ist die funktion:"
45 k=1:gosub100:k=0:s=0:z=12:gosub20:print"y="l$
46 z=14:gosub20:print"mit "n" variablen"
50 s=6:z=16:gosub20
55 printchr$(18)"a"chr$(146)"lte oder "chr$(18)"n"chr$(146)"eue funktion ?"
60 geta$:ifa$<>"a"anda$<>"n"then60
62 z=17:gosub20:print"wieviele variable (max 4)";:inputb$
63 n=val(b$):ifn<1orn>4then62
65 ifa$="a"then95
70 s=0:z=19:gosub20:print"y(a,b,..)=";:inputl$:poke781,19:sys59903
75 gosub20:print"y="l$:fori=0to500:next:poke646,0
80 printchr$(147)chr$(17):print"100l$="chr$(34)l$chr$(34)
85 print"110deffnl("chr$(64+n)")="l$:print"120n="n:print"run95"chr$(19);
90 poke631,13:poke632,13:poke633,13:poke634,13:poke198,4:end
94 rem **** hp-2: berechnungen ****
95 poke646,5:printchr$(147)
100 l$="((a>=b)and(b>=c)and(c>=d))>=(a>=d)"
110 deffnl(d)=((a>=b)and(b>=c)and(c>=d))>=(a>=d)
120 n= 4
125 c$="    --------------------------------"
130 ifk=1thenreturn
140 s=2:z=0:gosub20:poke646,2:print"hier ist die wahrheitstabelle von:"
145 s=0:z=2:gosub20:print"y="l$:poke646,1:print:printc$:poke646,5
150 onngosub200,300,400,500:print:poke646,1:printc$:poke646,5:print
155 print"wenn alle ergebnisse -1 lauten, dann"
160 print"ist der schluss richtig ! (taste)":poke198,0:wait198,1
190 end
195 rem ***** 1 variable *****
200 printtab(15)"a"tab(30)"ergibt":poke646,1:printc$:print:poke646,5
205 fora=-1to0:printtab(15)atab(30)fnl(a)
210 nexta:return
295 rem ***** 2 variable *****
300 printtab(5)"a"tab(10)"b"tab(30)"ergibt":poke646,1:printc$:print:poke646,5
305 fora=-1to0:forb=-1to0
310 printtab(5)atab(10)btab(30)fnl(b)
315 nextb:nexta:return
395 rem ***** 3 variable *****
400 printtab(5)"a"tab(10)"b"tab(15)"c"tab(30)"ergibt"
405 poke646,1:printc$:print:poke646,5
410 fora=-1to0:forb=-1to0:forc=-1to0
415 printtab(5)atab(10)btab(15)ctab(30)fnl(c)
420 nextc:nextb:nexta:return
495 rem ***** 4 variable *****
500 printtab(5)"a"tab(10)"b"tab(15)"c"tab(20)"d"tab(30)"ergibt"
505 poke646,1:printc$:print:poke646,5
510 fora=-1to0:forb=-1to0:forc=-1to0:ford=-1to0
515 printtab(5)atab(10)btab(15)ctab(20)dtab(30)fnl(d)
520 nextd:nextc:nextb:nexta:return
Listing Logelei-2. Die Schlußfolgerungs-Maschine. Ein Programm zum Uberprüfen der Stimmigkeit logischer Schlüsse.
Kurs: Logeleien
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →