<!-- author: Rico Meiner email: rico.meiner@jade-hs.de version: 1.0.0 logo: pic/logo.jpg comment: Lösungsvorschläge für Prüfung FIAE language: de narrator: Deutsch Female mode: Textbook import: https://raw.githubusercontent.com/liascript/CodeRunner/master/README.md @run: @LIA.eval(`["main.c"]`, `gcc -Wall main.c -o a.out`, `./a.out`) --> # FIAE Abschlussprüfung 2021/22 [Prüfung als PDF](https://ccs.jade-hs.de/f/237119373) (nur intern) :::spoiler Inhaltsverzeichnis [toc] ::: ## GA1 1. Handlungsschritt a) Zustandsdiagramm zur Lichtsteuerung ```plantuml 'Controller im Modus wartend' (*) -> "wartend \nEntry Licht aus" -> [Person in] "auto \nEntry Licht an" -> ["Schalter ein\nLicht aus"] "manuell \nEntry Licht an" -> [Person out] "zeitgesteuert" -> [Timeout] "wartend \nEntry Licht aus" "auto \nEntry Licht an" -> [Person out] "zeitgesteuert" "zeitgesteuert" --> [Person in] "auto \nEntry Licht an" ``` b) Use Case Diagramm ```plantuml left to right direction skinparam packageStyle rectangle package Rollen { actor Mitarbeiter as M actor Wartung as W actor Administrator as A } package Sensordaten { usecase "Sensordaten lesen" as lesen usecase "Sensordaten auswerten" as auswerten usecase "Sensor kalibrieren" as kalibrieren usecase "Login" as login } M -- lesen A -- auswerten W -- kalibrieren login .> auswerten : <<extends>> login .> kalibrieren : <<extends>> auswerten .> lesen : <<include>> M <|-- A M <|-- W ``` ## GA1 2. Handlungsschritt gegeben ```plantuml skinparam style strictuml class Value { - sensor_id: integer - value: Double - time: Long + Konstruktor(sensor_id: Integer, value: Double, time: Long) + getId(): Integer + getValue(): Double + getTime(): Long } class TempList { + setValue(Value) + getValue(sensor_id, pos: Integer): Value + getSize(sensor_id: Integer): Integer } ``` Aufgabe: 2 weitere Methoden a) und b) a) ```java= onNewValue(sensor_id: Integer, value: double, timestamp: Lang) { // Methode und Parameter gegeben // Value-Objekt mit übergebenen Parametern erstellen: Value s = new Value(sensor_id, value, timestamp); // dieses in vorhandene tempList mit setValue() hinzufügen: tempList.setValue(v); } ``` b) Aufgabe der Methode: - gegeben: Reihe von Temperaturwerten (tempList) - Anzahl längeste Reihe von Werten über gegebenen Mindestwert zurückgeben ```java= maxPeriod(sensor_id: integer, mindestwert: double): integer { // Methode und Parameter gegeben period_max = 0; anzahl_werte = tempList.getSize(sensor_id); for (pos = 0; pos < anzahl_werte; pos++) { wert = tempList.getValue(sensor_id, pos).getValue(); // period über mindestwert zählen if (wert >= mindestwert) { period++; } else { // period_max erhöhen if (period > period_max) { period_max = period; period = 0; } } } return period_max; } ``` Schritte zur Lösung: - Methode gegeben `maxPeriod(...): Integer {` - `return period_max` da Rückgabewert notwendig - `period_max = 0;` Variable initialisieren - for-Schleife für tempList - `anzahl_werte` aus tempList ermittelt - 0 bis anzahl_werte - `pos` als Position für den Wert in tempList - `wert` aus tempList an aktueller Postition ermitteln - Wenn `wert` über `mindestwert` liegt dann aktuelle `period` erhöhen - sonst `period_max` erhöhen, Wenn `period > period_max` dann `period_max = period` setzen - `period = 0` Zähler zurücksetzen - (neue längste Folge über Mindestwert ermittelt und gesetzt) ## GA1 2. Handlungsschritt (Spielwiese) [Lösung zum Testen](https://liascript.github.io/course/?https://hackmd.io/mjR95_1qRvCSig3vS_0xZw/download#4) ``` cpp #include <stdio.h> int maxperiod(int sensor_id, int mindestwert) { int tempList[13] = {20, 22, 23, 21, 19, 18, 20, 22, 23, 23, 24, 22, 23}; int period_max = 0; int period = 0; for (int pos = 0; pos < 13; pos++) { if (tempList[pos] >= mindestwert) { period++; } else { if (period > period_max) { period_max = period; } period = 0; } printf("pos: %d, period: %d, period_max: %d\n", pos, period, period_max); } if (period > period_max) { return period; } else { return period_max; } } int main() { int max = 0; max = maxperiod(1, 22); printf("max: %d\n", max); } ``` @run ## GA1 3. Handlungsschritt aa) ```plantuml skinparam style strictuml class Tank { - bezeichner: string - fuellstand: double - fassungsvermoegen: integer + Tank(bezeichner: string, fuellstand: double, fassungsvermoegen: integer) + setFuellstand(fuellstand: double) + getFuellstand(): double } ``` ab) ```java public setFuellstand(fuellstand: double) { this.fuellstand = fuellstand; } public getFuellstand(): double { return this.fuellstand; } ``` ba) ```plantuml skinparam style strictuml interface ObservedSubject<<interface>> { + addObserver(Observer): void + removeObserver(Observer): void + notifyObserver(): void } interface Observer<<interface>> { + update(): void } class TankDaten { - observers: Observer[] - fuellstaende: int[] - fuellstaende_datum: string[] + setDaten(int[], string[]): void + getFuellstaende(): int[] + getFuellstaende_Datum(): string[] + addObserver(Observer): void + notifyObsevers(): void + <b>removeObserver(Observer): void</b> } class Dashboard { - tankDaten: ObservedSubject - fuellstaende: int[] + Dashboard(o : ObservedSubject) + display(): void + <b>update(): void</b> } class History { - tankDaten: ObservedSubject - fuellstaende_datum: string[] + History(o: ObservedSubject) + display(): void + <b>update(): void</b> } TankDaten *-r- Observer #red TankDaten --|> ObservedSubject Dashboard -u-|> Observer History -u-|> Observer ``` - Die Klassen Dashboard und Histroy implementieren das Interface Observer. In beiden Klassen muss somit die Methode update() implemntiert werden. - Die Klasse TankDaten implementiert das Interface ObservedSubject. bb) ## GA1 4. Handlungsschritt a) <!--' Notation: Funktionalität/Kardinalität und (min/max)--> ```plantuml @startchen left to right direction entity Sensor { } entity Sensor_Art { } relationship gehoert_zu { } Sensor_Art -1- gehoert_zu gehoert_zu -n- Sensor entity Standort { } relationship ist_an { } Standort -1- ist_an ist_an -n- Sensor entity Messung { } relationship fuehrt_aus { } Sensor -1- fuehrt_aus fuehrt_aus -n- Messung entity Aktion { } relationship loest_aus { } Aktion -n- loest_aus loest_aus -m- Messung entity Aktionsprotokoll { } relationship schreibt { } Aktion -1- schreibt schreibt -1- Aktionsprotokoll entity Aktion_Art { } relationship hat { } Aktion -1- hat hat -n- Aktion_Art @endchen ``` ## GA1 5. Handlungsschritt ## GA2 1. Handlungsschritt ## GA2 2. Handlungsschritt ## GA2 3. Handlungsschritt ## GA2 4. Handlungsschritt ## GA2 5. Handlungsschritt ## 3 WiSo --- TODO (RM) ```plantuml @startditaa 1 +-------------+ 3 +-------------------->| +---------------------+ | | Staat | | | +----------------+ cCCC |<---------------+ | | | 2 +--------+----+ 4 | | | | ^ | | | | | 11 | | | | | v | | | v +---+---------+ | | 9 +----+--------+ | +------------------------------------>| +--+ | Haushalte | | | | Unternehmen | | 13 | cCCC +<------------------------------------+ cCCC |<-+ +--------+----+ 10 | | +---------+---+ ^ | | | ^ | | | | | 12 | | | | | v | | | | 5 +---+---------+ 7 | | | +--------------->| +----------------+ | | | Banken | | +---------------------+ cCCC |<--------------------+ 6 +-------------+ 8 @endditaa ``` 01 Steuern 02 Transferleistungen, Einkommen 03 Subventionen, Investitionen 04 Steuern 05 Sparen 06 Kredite, Zinsen 07 Kredite 08 Einlagen 09 Konsumausgaben 10 Löhne, Gehälter 11 Kredite 12 Zinsen 13 Investitionen