---
# System prepended metadata

title: FIAE Prüfung 2021/22 Winter
tags: [Ausbildung_FIAE_Prüfung]

---

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