|
/**
* Beschreiben Sie hier die Klasse Nand.
*
* Nand ist eine Klasse, die ein Gatter erzeugt welches
spezifiziert wird durch beliebig viele Eingänge und einen
* Ausgang. Sie wird dadurch in den Programmablauf
einbezogen, dass ein Signal welches diesem Gatter als Eingang diehnt
* ihm bei einer Änderung einen Rechenimpuls gibt. Das
Gatter schreibt dann auf das Ausgangssignal was zur Folge hat,
* dass ein neuer Impuls gegebn wird und so weiter....
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
import java.util.Arrays;
public class Nand
{
// Instanzvariablen - ersetzen Sie das folgende Beispiel
mit Ihren Variablen
int eingänge;
Signal [] Array2;
boolean berechnung=true;
boolean holen=false;
Nand Gatter;
/**
* Konstruktor bekommt vom FS die Anzahl der Eingänge
* anlegen eines Array welches über ein Element mehr
verfügt als anzahlEingänge
* dieser zusätzliche Slot dient dem Ausgang
*/
public Nand(int anzahlEingänge)
{
eingänge = anzahlEingänge;
Array2 = new Signal [anzahlEingänge+1];
}
/**
* bekommt Kanalnummer, entsprechendes Signal und
eigenen Namen mitgeteilt
* dies hat den Grund, dass dadurch gleich dem Signal mitgeteilt
wird welches Gatter von einer Änerdung betroffen ist
*
*
*/
public void setInput(int kanal, Signal
INummer)
{
This paragraph has been concealed! Download the complete document for free! • Click on download to get complete and readable text • This is a free of charge document sharing network • First upload your own document, and you get a word document per email • No registration necessary, gratis Swap homeworks and notes at no charge! Gratis scripts for students and pupils!
Gatter=this;
INummer.speichere(Gatter);
}
/*
* Einzig relevante Anmerkung hier ist, dass man als
Zuweiung des Ausgangs die Zahl eingänge nehmen kann, da
* bei ArrayList die Zählung bei 0 beginnt
*/
public void setOutput(Signal ONummer)
{
Array2[eingänge] = ONummer;
}
/*
* berechne() führt die eigentliche Rechnung aus
* dabei werden mit einer for Schleife alle benötigten
Signale ausgelesen (aus ArrayList)
* danch wird Ausgang gesetzt
* wichtig ist noch, das man berechnung nach alledem neu
initialisiert, da es sonst unter Umständen nicht true ist
*
*/
public void berechne()
{
for (int i = 0; i < eingänge;
i++)
{
holen=Array2[i].GetErg();
//System.out.println("Das ist holen "+holen);
berechnung = berechnung && holen;
//System.out.println("Das ist Berechnung
"+berechnung);
}
berechnung=!berechnung;
Array2[eingänge].setValue(berechnung);
berechnung=true;
// System.out.println(berechnung);
}
}
/**
* Beschreiben Sie hier die Klasse Signal.
*
* Signal ist eine Klasse die ein Zustand hat und bei einer
Änderung des Zustands den betrfenden Gattern einen Rechenimpuls geben kann
*
* @author (Ihr Name)
* @version (24.Mai 2008)
*/
import java.util.ArrayList;
import java.util.Iterator;
This paragraph has been concealed! Download the complete document for free! • Click on download to get complete and readable text • This is a free of charge document sharing network • First upload your own document, and you get a word document per email • No registration necessary, gratis Swap homeworks and notes at no charge! Gratis scripts for students and pupils!
{
// Status entspricht dem Zustan des Signals Name ist
der Name des Signals Nand n dient der Zuweisung zu den Gattern
boolean Status=false;
String Name;
Nand n;
private ArrayList Ausgänge;
/**
* Konstruktor gibt Namen weiter
* Initialisieren der Arrayliste für alle Gatter denen
dieses Signal als Eingang diehnt
*/
public Signal(String Name)
{
this.Name=Name;
Ausgänge=new ArrayList();
}
/**
* Ein Beispiel einer Methode - ersetzen Sie diesen
Kommentar mit Ihrem eigenen
*
*/
public boolean GetErg()
{ //System.out.println("GetErg
"+ Status + Name);
return Status;
}
/*
* die Methode setValue wird entweder durch den
Funktionalgenerator oder durch das Nand Gatter aufgerufen.
* dabei wird immer der Status (boolsche Wert des
Signals) geändert
* da Signal für mehrere Gatter ein Eingang sein kann
muss die Signaländerung an jedes dieser Gatter erfolgen (siehe speichere())
* erste if Anweisung ist Test ob es sich um Ausgang
handelt und 2. if ist Test welches Ausgangssignal
* falls if1 übersprungen dann wird abei allen betroffen
Gattern die berechne() methode aufgerufen
*/
public void setValue(boolean neuerWert)
{
Status=neuerWert;
//System.out.println(Name + Status);
if (Name.equals("s0")
|| (Name.equals("s1")))
{
if
(Name.equals("s1"))
This paragraph has been concealed! Download the complete document for free! • Click on download to get complete and readable text • This is a free of charge document sharing network • First upload your own document, and you get a word document per email • No registration necessary, gratis Swap homeworks and notes at no charge! Gratis scripts for students and pupils!
System.out.println("s1 --->" +Status);
}
else
{System.out.println("s0
--->" +Status);}
}
else
{
Iterator
it=Ausgänge.iterator();
while (it.hasNext())
{
Nand n= (Nand)it.next();
n.berechne();
}
}
}
/*
* ist Methode, die con Nand ausgeführt wird, wenn
gatter initalisiert wird
* diehnt der Zuordnung des Signals zu den Gattern die
von einer Änderung dieses Signals betroffen sind
* da Reihenfolge irrelevant einfacher Stack
*/
public void speichere(Nand Gatter)
{
Ausgänge.add(Gatter);
}
}
|