Übungsaufgabe zur Veranstaltung IT Systeme im Bachelorstudiengang Wirtschaftsinformatik an der Hochschule Rosenheim.
In dieser Übung werden wir uns weiter ein wenig mit Schaltnetzwerken beschäftigen.
Die Lösung befindet sich im Branch Musterloesung.
Alarmanlagen sind heutzutage allseits bekannt und werden auch im Privaten sehr häufig eingesetzt. Ziel soll es im Folgenden sein, eine Schaltung einer einfachen Alarmanlage zu entwickeln:
- Durch das Auslösen eines Sensors (s) (bspw. an Fenstern, Haustüren etc.) soll eine Alarm-Sirene (A) aktiviert werden, die erst durch ein manuelles Rücksetzen (r) wieder verstummt.
Entwickeln Sie mit einem ODER-Gatter eine „Selbsterhalte“-Schaltung, die beim Auslösen eines Sensors (s) den Ausgang A dauerhaft auf 1 setzt, auch wenn s wieder deaktiviert wird.
Note: Bei einer „Selbsterhalte“-Schaltung wird das Ausgangssignal eines Gatters nicht nur als Signal für den Ausgang verwendet, sondern auch durch eine zusätzliche Kabel-Abzweigung zurückgeführt und als Eingang für ein Gatter verwendet (Hier mit einem Oder-Gatter).
Ergänzen Sie die Schaltung um eine Möglichkeit, die Alarmanlage zurückzusetzen (r für Rücksetzen). Füllen Sie dazu zunächst die Wahrheitstabelle aus (den Zustand r=1 und s=1 betrachten wir später gesondert):
r | s | A |
---|---|---|
0 | ||
0 | ||
1 | ||
1 | 1 | ??0 |
Note: Nutzen Sie den Ausgang des ODER-Gatters als Eingang in ein neues UND-Gatter. Der Ausgang des UND-Gatters wird zum 2. Eingang des ODER-Gatters geführt. Jetzt muss nur noch der Schalter Rücksetzen richtig angeschlossen werden.
Konzipieren Sie eine Alarmanlage mit Setzen (s) und Rücksetzen (r) nur aus NAND-Gattern.
Note: Ein NICHT-Gatter kann mit einem NAND-Gatter erzeugt werden, indem man beide Eingänge mit dem gleichen Eingangssignal verbindet. Behalte weiter die sich "kreuzende Leitungsstruktur" bei, ersetze die bisherigen Gatter mit NAND-Gatter, ...
Eine digitale Schaltung, mit der zwei Dualzahlen auf Gleichheit oder Ungleichheit geprüft werden, wird als Zahlenkomparator bezeichnet.
In der Aufgabe soll eine Schaltung entwickelt werden, die in der Lage ist, zwei Dualzahlen P (P1 und P2) und Q (Q1 und Q2) mit je zwei Bits zu vergleichen. Im Falle der Ungleichheit soll noch ein Größer -kleiner- Vergleich erfolgen.
P1 | P2 | Q1 | Q2 | Y1 (P>Q) | Y2 (P=Q) | Y3 (P<Q) |
---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | |||
0 | 0 | 0 | 1 | |||
0 | 0 | 1 | 0 | |||
0 | 0 | 1 | 1 | |||
0 | 1 | 0 | 0 | |||
0 | 1 | 0 | 1 | |||
0 | 1 | 1 | 0 | |||
0 | 1 | 1 | 1 | |||
1 | 0 | 0 | 0 | |||
1 | 0 | 0 | 1 | |||
1 | 0 | 1 | 0 | |||
1 | 0 | 1 | 1 | |||
1 | 1 | 0 | 0 | |||
1 | 1 | 0 | 1 | |||
1 | 1 | 1 | 0 | |||
1 | 1 | 1 | 1 |
Schreiben Sie eine Klasse FlipFlop, die eine Flip-Flop Schlatung simuliert. Diese soll das Interface Latch implementieren:
public interface Latch {
// simulates setting S and R of a latch
void set(boolean S, boolean R);
// returns the A value
boolean getA();
// returns the B value
boolean getB();
}
Hierzu benötigt man kein grosses Projekt in IntelliJ, sondern eine einzelne Klasse sollte reichen, sowie eine Datei für das Latch
-Interface.
Main-Methode nicht vergessen!
In der main()-Methode können die einzelnen Fälle abgedeckt werden.
Erinnern Sie sich and FunctionalInterfaces
?
Gegeben ist folgendes Interface:
public interface Logic {
//
boolean operate(boolean in1, boolean in2);
}
Schreiben Sie eine Klasse Gate
, die eine Methode public static boolean proc(boolean in1, boolean in2, Logic l)
hat. Diese Methode führt die FunctionalInterface
Methode operate
aus und gibt die Liste der Wahrheitswerte zurück.
Folgende main()
Methode sollte laufen:
public class Gate {
//
public static void main(String[] args) {
System.out.println(Gate.proc(false,false, (i1,i2) -> i1 || i2));
System.out.println(Gate.proc(true,false, (i1,i2) -> i1 || i2));
System.out.println(Gate.proc(false,true, (i1,i2) -> i1 || i2));
System.out.println(Gate.proc(true,true, (i1,i2) -> i1 || i2));
System.out.println(Gate.proc(false,false, (i1,i2) -> i1 && i2));
System.out.println(Gate.proc(true,false, (i1,i2) -> i1 && i2));
System.out.println(Gate.proc(false,true, (i1,i2) -> i1 && i2));
System.out.println(Gate.proc(true,true, (i1,i2) -> i1 && i2));
}
}
Produziert:
false
true
true
true
false
false
false
true
Erweitern Sie die Lambda-Ausdrücke um NOR, NAND und XOR Funktionen!