BOOLE   : Boole Algebra - waarheidstabel                             -1- 

Titel   : BOOLE
Versie  : 4.2
Datum   : 06 feb 2000
Auteur  : J.R. Ferguson, Amsterdam
Gebruik : DOS (BOOLE.EXE) en Windows (BOOLEW.EXE) applicatie
Download: Internet adres http://hello.to/ferguson
E-mail  : j.r.ferguson@iname.com

Dit  programma,  de  broncode  en  de beschrijving mag zonder vergoeding
worden gebruikt en gekopieerd, maar uitsluitend zonder winstoogmerk.  De
auteur  is niet aansprakelijk voor enige schade of verlies van gegevens,
veroorzaakt door het gebruik ervan.

Het  programma BOOLE gaat na of een Boole'se bewering waar is,  of maakt 
een waarheidstabel bij een Boole'se bewering.

Het programma komt op met het volgende hoofdmenu :

  <H>elp  <E>xpression  <L>ist  E<x>it :

Door  de tussen < > staande beginletter in te tikken kan men de gewenste  
optie kiezen.

-- Help
   Na  het indrukken van de toets H verschijnt een korte uitleg  op  het 
   scherm.  Als men deze gelezen heeft moet men op de RETURN toets druk-
   ken om het hoofdmenu weer te laten verschijnen.

-- Expression
   Drukt  men op de toets E dan verschijnt de prompt "S : " en kan   men 
   een schakelfunktie intikken waarvan men een waarheidstabel wil  zien. 
   De ingevoerde regel wordt afgesloten met RETURN.
   Nadat  de  bijbehorende  waarheidstabel of foutmelding  is  afgedrukt 
   verschijnt  weer de prompt "S : " en kan men een nieuwe regel  intik-
   ken.  Als  men na de "S : " prompt direkt op RETURN drukt  verschijnt 
   het hoofdmenu weer.

-- List
   Kiest  men  de L optie uit het hoofdmenu dan verschijnt  een  submenu 
   waarmee  men  een listing naar file of  printer  kan  verzorgen.  Dit 
   submenu heeft de volgende gedaante :

      <P>rinter  <F>ile  <O>ff  <M>enu :

   ++ Printer
      De schakelfuncties en bijbehorende waarheidstabellen worden  vanaf 
      dit moment ook op de printer afgedrukt.
      N.B. Als  geen  printer beschikbaar is kan deze mogelijkheid  door 
      een eenvoudige programmawijziging worden uitgeschakeld.  Zie hier-
      voor de technische informatie verderop.

   ++ File
      Men kan de naam van een file opgeven waarin de schakelfuncties  en 
      waarheidstabellen  moeten worden weggeschreven.  Werd reeds eerder 
      een uitvoerfile opgegeven dan wordt deze eerst afgesloten.

   ++ Off
      De  eerder gestarte echo naar printer of uitvoerfile wordt  uitge-
      zet. Een eventueel openstaande uitvoerfile wordt eerst afgesloten.

   ++ Menu
      Terug naar het hoofdmenu.

-- Exit
   Kies X om het programma te beeindigen.
BOOLE   : Boole Algebra - waarheidstabel                             -2- 

In te voeren opdrachten
-----------------------

Na  de prompt "S : " kan men de schakelfunctie intikken waarvan men  een 
waarheidstabel  wil zien.  Daarbij worden hoofdletters geconverteerd tot 
kleine letters.  Ter verduidelijking mogen naar believen op elke  plaats 
spaties worden tussengevoegd.

Als konstanten gelden de waarden 0 en 1.

Voor de variabelen kan men alle letters van het alfabet gebruiken.

De basisoperatoren zijn :

  + : inclusief "of"          * of . of niets : lgische "en"  
  @ : exclusief "of"          ' of `          : logische "niet"

De prioriteitsvolgorde is als gebruikelijk,  dus eerst "niet",  dan "en" 
en  als laatste "of".  De twee "of" operatoren (inclusief en  exclusief) 
hebben  onderling dezelfde prioriteit.  Men kan haakjes gebruiken om  de 
prioriteitsvolgorde te doorbreken.

  Voorbeelden:
  S : (a + b)'. (a'b + c)
  S : xy.(x`+wx)`

Bovendien beschikt men nog over de volgende relationele operatoren:

  = : is gelijk aan           > : impliceert
  # : is ongelijk aan         < : volgt uit

Zet men aan het einde van de regel een vraagteken, dan wordt nagegaan of
de opgegeven bewering altijd waar is. Als dit zo is, dan wordt het woord
'true' afgedrukt. Als dit niet zo is wordt het woord 'false'  afgedrukt,
gevolgd   door  een  waarheidstabel,  zodat  men  kan  zien  voor  welke
kombinaties van de opgegeven variabelen de bewering niet waar is.

  Voorbeelden:
  S : (x'y'z')' = x+y+z ?
  S : a+b > a ?
BOOLE   : Boole Algebra - waarheidstabel                             -3- 

Hieronder volgt een kompleet overzicht van de verschillende  operatoren. 
Het  cijfer  dat er aan vooraf gaat heeft de betekenis van  een  priori-
teitsniveau (niveau 0 = hoogste prioriteit).

 0    '      logische "niet"
 0    `      idem

 1    *      logische "en"
 1    .      idem
 1  <leeg>   idem

 2    +      logische "inclusief of"
 2    @      logische "exclusief of"

 3    =      is gelijk aan
 3    #      is niet gelijk aan
 3    >      impliceert
 3    <      volgt uit

De waarheidstabellen voor de operatoren zijn als volgt:

  S : a'       S : ab        S : a+b       S : a@b
                                                  
  a|S          ab|S          ab|S          ab|S   
  -+-          --+-          --+-          --+-   
  0|1          00|0          00|0          00|0   
  1|0          01|0          01|1          01|1   
               10|0          10|1          10|1   
               11|1          11|1          11|0   
                                           
                                           
  S : a=b      S : a#b       S : a>b       S : a<b 
                                                   
  ab|S         ab|S          ab|S          ab|S    
  --+-         --+-          --+-          --+-    
  00|1         00|0          00|1          00|1    
  01|0         01|1          01|0          01|1    
  10|0         10|1          10|1          10|0    
  11|1         11|0          11|1          11|1    

Opmerking: De operatoren @ (exclusief of) en # (is ongelijk aan)  hebben 
dezelfde waarheidstabel, maar niet dezelfde prioriteit.

BOOLE   : Boole Algebra - waarheidstabel                             -4-

De syntaxregels voor een opdracht luiden:

<opdracht>     ::=  <bewering> <sluitteken>
<bewering>     ::=  <uitdrukking> |
                    <uitdrukking> <relatieteken> <uitdrukking>
<uitdrukking>  ::=  <term> { <plusteken> <term> }
<term>         ::=  <faktor> { <maalteken> <faktor> }
<faktor>       ::=  <konstante> | <variabele> | "(" <uitdrukking> ")" |
                    <faktor> <accent>
<sluitteken>   ::=  "?" | <leeg>
<relatieteken> ::=  "=" | "#" | ">" | "<"
<plusteken>    ::=  "+" | "@"
<maalteken>    ::=  "*" | "." | <leeg>
<accent>       ::=  "'" | "`"
<konstante>    ::=  "0" | "1"
<variabele>    ::=  "a"|"b"|"c"|"d"|"e"|"f"|"g"|"h"|"i"|"j"|"k"|"l"|"m"|
                    "n"|"o"|"p"|"q"|"r"|"s"|"t"|"u"|"v"|"w"|"x"|"y"|"z"



Technische informatie
---------------------

Het programma is opgebouwd uit de volgende sourcefiles:

  BOOLE.PAS   : invoegopdrachten en hoofdprogramma
  BOOLE.1     : deklaraties
  BOOLE.2     : algemeen gereedschap
  BOOLE.3     : systeem afhankelijke procedures en functies
  BOOLE.4     : in- en uitvoer
  BOOLE.5     : verwerking opdracht
  BOOLE.6     : menu

De volgende gecompileerde versies worden meegeleverd:

  BOOLE.EXE   : DOS programma
  BOOLEW.EXE  : Windows programma

Er is een beschrijving in het Nederlands en in het Engels

  BOOLEN.TXT  : Nederlandse beschrijving
  BOOLEE.TXT  : Engelse beschrijving

Het  programma is geschreven voor de Turbo Pascal compiler versie 4.0 in 
een MS-DOS omgeving. Om de overdraagbaarheid zo groot mogelijk te houden 
zijn alle systeem-afhankelijke procedures en functies in BOOLE.3  bijel-
kaar gezet en is daarbuiten strikt in standaard  Pascal  geprogrammeerd.
In  BOOLE.PAS  zijn  bovendien  Borland/Turbo  Pascal  bedoelde compiler
directives opgenomen ({$IFDEF WINDOWS}) waarmee het mogelijk  wordt  een
Windows versie (BOOLEW.EXE) van het programma te genereren.

In  het  programma is debug-code tussen {[ en  ]}  opgenomen.  Deze  kan 
meegecompileerd worden door overal {[ te veranderen in {[} en ]} in {]}. 
Wanneer men vervolgens de programmakonstante "test" de waarde true geeft 
verschijnt  aan het begin van het programma de vraag  "Debug? (Y/N) : ". 
Door hierop met "Y" of "y" te antwoorden aktiveert men de debug-code. Er 
wordt  dan  informatie  afgedrukt waarmee men het  programmaverloop  kan 
volgen.  Dit is vooral van belang als men het programma gaat wijzigen of 
uitbreiden.

De boolean konstante printavail kan op "false" worden gezet indien  geen 
printer  beschikbaar is.  De optie P van "printer" uit het List  submenu 
komt dan te vervallen.
