disjnorm.txt
   Kommentar zu dijnorm.java
   Autor: e0060387@student.tuwien.ac.at
   MatNr: 0060387
   BspNr: 1154
   Beschreibung: Einlesen einer disjunktiven Normalform und ausgeben des 
   dazugehörigen kv Diagramms
 
Spezifikation (HTML-Konvertierung):
Eine bool'sche Funktion in disjunktiver Normalform wird eingelesen; das entsprechende Karnaugh-Veitsch-Diagramm wird ausgegeben. 
Lesen Sie eine bool'sche Funktion in der disjunktiven Normalform ein. 
Eine disjunktive Normalform besteht aus Diskunktionen von Vollkunjunktionen. (Siehe auch Einführung in die Informatik!) 
Dazu wird folgende Notation verwendet: Es gibt genau vier Eingabevariablen, nämlich A,B,C und D. 
Diese werden immer in dieser Reihenfolge angegeben; es müssen immer alle vier Variablen vorkommen. 
Negierte Variablen werden klein geschrieben; es werden keine Operatoren angegeben. 
Jede Vollkonjunktion wird in einem eigenen String eingelesen. 
Am Ende des Ausdrucks wird ein "=" geschrieben. 

Beispiel:  

(a UND NOT(b) UND NOT(c) UND D) ODER
(NOT(a) UND B UND NOT(c) UND D) ODER
(NOT(a) UND B UND B UND NOT(D)  
wird durch AbcD aBcD aBCd = dargestellt. 

Für diesen Ausdruck soll Ihr Programm eine Karnaugh-Veitch-Tabelle mit folgender Variablenanornung erstellen: 
   c C C c 
 a 0 0 0 0 b
 A 1 0 0 0 b
 A 0 0 0 0 B
 a 1 0 1 0 B
   D D d d

Verwenden Sie die Zeichen "0" und "1" zum Beschreiben der logischen Zustände "falsch" und "wahr". 

Eingabedaten:
Lesen Sie die Strings ein, die zusammen die disjunktive Normalform darstellen. 
Diese Strings müssen jeweils 4 Zeichen lang sein und die Buchstaben A, B, C, und D in genau 
dieser Reihenfolge beinhalten (wobei es wie gesagt bedeutsam ist, ob die Buchstaben groß oder klein geschrieben werden). 
Es dürfen keine zwei gleichen Strings eingegeben werden. Das Ende des Datensatzes wird durch das Zeichen "=" markiert. 

Ausgabedaten:
Bei korrekten Eingabesätzen soll Ihr Programm die vier Zeilen des Karnaugh-Veitch-Diagramms ausgeben, 
also vier Strings zu je vier Zeichen, wobei nur die Zeichen "0" und "1" vorkommen 
(der "Rahmen" der Tabelle 'cCCc' etc. in der oberen Darstellung dient nur zur Erläuterung und soll in der Ausgabe nicht aufscheinen). 
Trennen Sie die vier Strings durch jeweils ein Leerzeichen und geben Sie am Ende einen Zeilenvorschub aus. 

Fehlerbehandlung:
Sämtliche Eingabedatensätze sind immer bis zum definierten Endezeichen einzulesen. 
Generell wird bei fehlerhaften Eingabedatensätzen nur eine einzige Fehlermeldung erzeugt, 
weitere Berechnungen werden nicht mehr durchgeführt. 
Sind die Datentypen bei allen Eingaben richtig, die eingegebenen Daten aber inhaltlich nicht korrekt oder 
erfüllen nicht die Bedingungen, so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.

Beispiele:
Eingabedaten  
AbCD ABCD aBCD AbCd = 

--------------------------------------------------------------------------------
abCD abCd AbcD AbCD Abcd ABCD aBCD aBcd = 

--------------------------------------------------------------------------------
 
Ausgabedaten  
0000 0110 0100 0100 

--------------------------------------------------------------------------------
0110 1101 0100 0101 

--------------------------------------------------------------------------------

Kurzbeschreibung des Programms: 
  Dieses Programm liest eine disjunktive Normalform als String ein, berechnet
  das dazugehörige kv - Diagramm (siehe "Informatik, Blieberger et al.") und 
  gibt dieses aus.
  Neben der Klasse disjnorm, die beinahe den gesamten Code hält, wird 
  zusätzlich die Klasse inputException erzeugt, um die aufwendige 
  Fehlerbehandlung zu erleichtern.
  Das kv - Diagramm ist eine 4x4 Felder große Tabelle, in der jede Zelle 
  eine Vollkonjunktion repräsentiert.
  Das Einlesen und Ausgeben der Strings erfolgt mit Hilfe des "eprog" Paketes.

Klassen:
java.lang.Object
  |__ disjnorm 
Diese Klasse enthält den Code für Ein/Ausgabe und die Berechnung sowie die main-Methode 
  Methoden:
    main: Hier beginnt die Programmausführung
      @param args Kommandozeilenparameter
      Anm.: disjnorm verarbeitet keine Kommandozeilenparameter
  Pakete:
    eprog
Dieses Paket enthält Methoden für Standariserte Ein/Ausgabe; verwendet werden readWord() und print(String) sowie println(String)

java.lang.Object
  |__ java.lang.Throwable
        |__ inputException
Diese Klasse erzeugt ein inputException Objekt, falls eine inputExcepion auftrit
  Methoden:
    inputException: Konstruktor
       @param void keine Parameter
       Anm.: Der Konstruktor enthält keinerlei Code
  
Detailbeschreibung:
Variablen:
  Die Zeilennummer(x-Koordinate) der Zelle wird ebenso wie die Spaltennummer(y - Koordinate) 
  durch jeweils 2 boolsche Werte (für x: aA und bB, für y: cC und dD) definiert, wobei ein Großbuchstabe
  die logische 1 und der Kleinbuchstabe die logische 0 repräsentiert 
  Nach Einlesen jeweils einen Wertes (aA bzw. cC) muß noch die Auswahl zwischen 
  zwei möglichen ZeilenSpalten getroffen werden. Diese von dem ersten Wert abhängigen Möglichkeiten werden durch 
  die Konstanten(2 elementige Arrays) zeilen_a, zeilen_A, spalten_c, spalten_C modeliert. 
  Dies entspricht einerseits einer möglichen Vorgangsweise eines Menschen und erleichtert 
  andererseits etwaige Änderungen im Layout des kv-Diagramms.
  Das Zeichen, welches das Ende des Eingabestrings kennzeichnet, wird in der Konstante
  eingabeEnde vom Typ String gespeichert.
  Das Ergebniss der Berechnung - eine 4x4 große Tabelle, in deren Zellen entweder wahr(1) oder 
  falsch(0) enthalten sein können, wird in der Variable <kvDiagramm> abgespeichert
  Einen möglichen Fehler in der Eingabe speichert <istFehler>
  Die Position, die die momentan ausgelesene Vollkunjunktion in der Tabelle belegt, wird in den 
  Variablen zeile (zeile) und spalte (spalte) gespeichert, die oben erwähnten zwei 
  Möglichkeiten nach Einlesen eines Wertes im Array <moeglPos>
  Die Anzahl der eingelesenen Worte (d.h. durchgehende Zeichenketten ohne WHITESPACE-Zeichen) 
  wird in anzahlWorte gespeichert. 
  Da nur 16 verschiedene Vollkonjunktionen existieren, genügen 16 Strings in einem Array zum Speichern
  der einzelnen Vollkonjunktionen, da bei zwei identen Vks oder anderen Fehlern im Eingabeformat
  keine weiteren Berechnungen mehr ausgeführt werden müssen.
  Der String eingabeString beinhaltet das aktuell eingelesene Wort.
Einlesen: 
  Solange das eingelsene Wort nicht dem für das Ende der Eingabe definierten String entspricht werden Worte eingelesen
  Die ersten 16 Worte werden gespeichert, der Rest ist zwar uninteressant, muß aber lt.Spez. gelesen werden
Berechnen:
     Solange das Eingabeformat korrekt lt.Spez. ist,wird keine Ausnahme <inputException> erzeugt 
     Eine gültige disj. Normalform enthält min. 1 und max. 16 Vollkonjunktionen
     Eine Vollkonjunktion besteht aus genau 4 boolschen Ausdrücken
     A bzw. a (sonst Fehler) als ersten Buchstaben einlesen (nun bleiben noch 2 Möglichkeiten für die x-Koordinate übrig)
     B bzw. b (sonst Fehler) als zweiten Buchstaben einlesen. Die xKoordinate der Zelle im kv Dagramm wird bestimmt
     C bzw c(sonst Fehler) als dritten Buchstaben einlesen (nun bleiben noch 2 Möglichkeiten für die y-Koordinate übrig)
     D bzw. d(sonst Fehler) als vierten Buchstaben einlesen. DieyxKoordinate der Zelle im kv Dagramm wird bestimmt
     Wenn die soeben bestimmte Vollkonjunktion in der Tabelle noch nicht gesetzt ist, wird sie auf 1 gesetzt, ansonsten
     Fehler
     Alle Fehler werden am Ende des Berechnen Blocks gefangen und istFehler wird true gesetzt
 Ausgabe:
     Im Fehlerfalle Fehlermeldung ("FALSCHE AUSGABE")
     Ansonsten ausgeben des kv Diagramms
     Es werden für alle Zeilen die Spalten ausgegeben (ohne Seperator), die Zeilen werden durch SPACE getrennt
     Und am Schluss einen Zeilenvorschub ausgegeben

 Der Konstruktor der Klasse <inputException> wird aufgerufen, falls die Eingabedaten fehlerhaft sind
 Er hat jedoch keinerlei Funktion

Abschließend: "EOF !"