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 !"