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