Sie sind auf Seite 1von 8

Softwareentwicklung ● 1-8

Softwareentwicklung

Softwareentwicklung - Fortgeschrittene Konzepte

Aufgabenblätter - 01.09.2020

Dipl.-Ing. Msc. Paul Panhofer BSc.1∗

1 ZID, TU Wien, Taubstummengasse 11, 1040, Wien, Austria

Abstract:
MSC: paul.panhofer@gmail.com
Keywords:

. .


E-mail: paul.panhofer@tuwien.ac.at

1
Softwareentwicklung - Fortgeschrittene Konzepte

1.) Aufgabenblatt - Gruppe A(5.Punkte) 3.Beispiel) Fibanocci Zahlen - 1.Punkt


 Schreiben Sie eine rekursive Methode zur Berech-
nung der Fibanocci Zahlen. Testen Sie die Metho-
L Kompetenzen  de in einem Unittest

Algorithmen und Datenstrukturen: Entwick-  Codebeispiel: Algorithm.cs 


1 // ----------------------------------------
lung von Algorithmen zur Problemlösung
2 // Klasse: Algorithm.cs
‚ rekursive Algorithmen Lösen von Problemen 3 // ----------------------------------------
mit rekursiven Methoden. 4 // Zur Berechnung des n-ten Werts der
5 // Fibanocci Folge wird folgende Definition
6 // verwendet:
1.Beispiel) GGT - 1.Punkt 7

8 // F(n) = F(n-1) + F(n-2)


Schreiben Sie eine rekursive Methode zur Berech-
9 // F(1) = 1
nung des größten gemeinsamen Teilers 2er Zahlen.
10 // F(0) = 1
Testen Sie die Methode in einem Unittest.

q
 Codebeispiel: Algorithm.cs 
1 // ----------------------------------------
2 // Klasse: Algorithm.cs
4.Beispiel) Binäre Suche - 2.Punkt
3 // ----------------------------------------
4 // Der groesste gemeinsame Teiler 2 Zahlen Schreiben Sie eine rekursive Methode die prüft ob
5 // ist folgendermassen definiert: ein bestimmtes Element in einem Array von Ele-
6 menten enthalten ist.
7 // ggt(a,b) = b wenn a%b = 0
8 // ggt(b, a%b) sonst
9

10 // ggt(58,18) = ggt(18,4) = ggt(4,2) = 2

2.Beispiel) Modulo Funktion - 1.Punkt

Schreiben Sie eine rekursive Methode zur Berech-


nung der Modulo Funktion. Testen Sie die Methode
in einem Unittest.

 Codebeispiel: Algorithm.cs 
 Codebeispiel: Algorithm.cs 
1 // ----------------------------------------
1 // ----------------------------------------
2 // Klasse: Algorithm.cs
2 // Klasse: Algorithm.cs
3 // ----------------------------------------
3 // ----------------------------------------
4 // Die Modulo Funktion 2er Zahlen ist wie
4 // In einem geordneten Array von Integern
5 // folgt definiert:
5 // soll geprueft werden ob ein bestimmtes
6
6 // Element enthalten ist.
7 // mod(a,b) = a wenn a<b
7
8 // mod(a-b, b) sonst
8 // Schreiben Sie eine rekusive Methode die
9
9 // das Problem loest.
10 // mod(58,16) = mod(42,16) = mod(26,16)
11 // = mod(10,16) = 10
q

2
© Dipl.Ing.- Msc. Paul Panhofer Bsc.

2.) Aufgabenblatt - Gruppe A(4.Punkte) 1 /*


 2 * Verschieben Sie den Punkt um den Vektor
3 * v im Koordinatensystem
4 */
L Kompetenzen  5 public void Move(Point v){...}
6
Algorithmen und Datenstrukturen: Entwick-
7 }
lung von Algorithmen zur Problemlösung

‚ graphische Algorithmen Lösen von Proble- q


men der linearen Algebra.

2.Beispiel) Vektorrechung - 3.Punkt


1.Beispiel) Vektorrechung - 1.Punkt
Vervollständigen Sie die CalculateRoute Metho-
Vervollständigen Sie die folgenden Methoden der den der Point.cs Klasse.
Point.cs Klasse. Schreiben Sie für jede Methode
einen UnitTest.  Codebeispiel: Point.cs 
1 // ----------------------------------------
 Codebeispiel: Point.cs  2 // Klasse: Point.cs
1 // ---------------------------------------- 3 // ----------------------------------------
2 // Klasse: Point.cs 4 public class Point {
3 // ---------------------------------------- 5 /*
4 public class Point { 6 * Berechnen Sie eine Route vom Punkt zum
5
7 * destination Point. Die Route ist eine
6 private int _x; 8 * Liste von Punkten. Der Punkt selbst
7 private int _y; 9 * soll in der Liste nicht enthalten sein.
8 private int _z; 10 *
9
11 * Die Route soll dabei den kuerzesten Weg
10 public int X { 12 * zwischen den 2 Punkten darstellen.
11 get => _x; 13 *
12 set => _x = value; 14 * Solange es moeglich ist waehlen Sie eine
13 } 15 * diagonale Annaeherung an den Zielpunkt.
14
16 *
15 public int Y { 17 * Die Route muss dabei aus benachbarten
16 get => _y; 18 * Punkten bestehen. 2 Punkte gelten eben-
17 set => _y = value; 19 * falls als benachbart wenn sie diagonal
18 } 20 * miteinander verbunden sind.
19
21 *
20 public int Z { 22 * Liegt der Zielpunkt weit hoeher als der
21 get => _z; 23 * eigentliche Punkt reicht eine Annaherung
22 set => _z = value; 24 * auf die z-Achse aus. Der letze Punkte
23 } 25 * der Route muss jedoch dieselben x und y
24
26 * Koordinaten haben wie der Zielpunkt.
25 public Point(int x, int y, int z) { 27 *
26 _x = x; 28 * Der Algorithmus darf nur eine einzelne
27 _y = y; 29 * Schleife enthalten!
28 _z = z; 30 */
29 } 31 public List<Point> CalculateRoute(Point
30
destination){
31 /* 32 ...}
32 * Berechnen Sie wie weit der Punkt vom 33 }
33 * Kooridinatenursprung entfernt ist.
34 */
35 public int Distance(){} q

3
Softwareentwicklung - Fortgeschrittene Konzepte

3.) Aufgabenblatt - Gruppe A(9.Punkte) 2.Beispiel) Verkette Liste: Count 2.Punkte



Erweitern Sie die List Klasse um die Count Metho-
L Kompetenzen  de/Propery.

Algorithmen und Datenstrukturen: Dynami-  Codebeispiel: List.cs 


1 // ----------------------------------------
sche Datenstrukturen, Verkettete Listen
2 // Klasse: List.cs
3 // ----------------------------------------
1.Beispiel) Verkettete Liste 1.Punkt 4 // Implementieren Sie fuer die List Klasse
5 // die Methode Count. Die Methode gibt an
Veraendern Sie die Implementierung der Dynami- 6 // wieviele Knoten in der Liste gespeichert
schen Liste. Die Liste soll nun Daten unabhängig 7 // sind.
vom Datentyp, Knoten verwalten. 8 //
9 // Testen Sie die Methode in einem Unittest.
 Codebeispiel: List.cs, Node.cs  10 public int Count(){
1 // ----------------------------------------
11 ...
2 // Klasse: List.cs, Node.cs
12 }
3 // ----------------------------------------
4 public class Node<T> where T:IComparable<T> {
5 q
6 private Node<T> _next = null;
7

8 private T _data;
9

10 public T Data {
11 get => _data;
12 set => _data = value;
13 }
14

15 public Node<T> Next {


16 get => _next;
17 set => _next = value; 3.Beispiel) Verkettete Liste: Push 2.Punkte
18 }
19 Erweitern Sie die List Klasse um die AddRoot Me-
20 public Node(T data) { thode.
21 _data = data;  Codebeispiel: List.cs 
22 } 1 // ----------------------------------------
23 } 2 // Klasse: List.cs
24
3 // ----------------------------------------
25 public class List<T> where T:IComparable<T> { 4 // Implementieren Sie fuer die List Klasse
26 private Node<T> root = null; 5 // die AddRoot Methode. Die AddRoute Methode
27
6 // fuegt im Gegensatz zur Add(int data)
28 public void Add(T data) { 7 // Methode neue Knoten nicht am Ende sondern
29 if (root == null) { 8 // am Anfang einer Liste ein.
30 root = new Node<T>(data); 9
31 return; 10 // Testen Sie die Methode in einem Unittest
32 } 11 public void Push(T data){
33 Add(root, data); 12 ...
34 } 13 }
35 }

q
q

4
© Dipl.Ing.- Msc. Paul Panhofer Bsc.

4.Beispiel) Verkettete Liste: Remove 2.Punkte .

Erweitern Sie die List Klasse um die Remove Metho-


de.
 Codebeispiel: List.cs 
1 // ----------------------------------------
2 // Klasse: List.cs
3 // ----------------------------------------
4 // Die Remove Methode loescht alle Knoten
5 // mit dem gegebenen Datenpaket aus der
6 // Liste.
7

8 // Testen Sie die Methode in einem Unittest.


9 public void Remove(T data){
10 ...
11 }
12

13 // Hinweis:
14 private void Remove(
15 Node<T> previous,
16 Node<T> current,
17 T data
18 ){...}

5.Beispiel) Verkettete Liste: Add 2.Punkte

Erweitern Sie die List Klasse um die Add Methode.


 Codebeispiel: List.cs 
1 // ----------------------------------------
2 // Klasse: List.cs
3 // ----------------------------------------
4 // Die Add Methode fuegt ein Element an
5 // einem bestimmten Index an. Existiert der
6 // entsprechende Index nicht wird ein Fehler
7 // geworfen.
8

9 // Testen Sie die Methode in einem Unittest.


10 public void Add(int index, T data){
11 ...
12 }
13

14 // Hinweis:
15 private void Add(
16 Node<T> previous,
17 Node<T> current,
18 int index,
19 T data
20 ){...}

5
Softwareentwicklung - Fortgeschrittene Konzepte

4.) Aufgabenblatt - Gruppe A(5.Punkte) 3.Beispiel) AdjacencyMatrix 1.Punkt


 Erweitern Sie die AdjacencyMatrix um folgende
Methode.
L Kompetenzen   Codebeispiel: AdjacencyMatrix.cs 
1 // ----------------------------------------
Algorithmen und Datenstrukturen: Dynami-
2 // Klasse: AdjacencyMatrix.cs
sche Datenstrukturen, Graphen
3 // ----------------------------------------
4 public class AdjacencyMatrix<E, T> ... {
1.Beispiel) Netzwerkgraph 1.Punkt 5 /*
6 * Die GetNeighbours Methode ermittelt
Implementieren Sie alle Klassen die notwendig 7 * fuer einen Knoten alle Nachbarknoten
sind um den folgenden Graphen zu implemen- 8 * mit denen dieser direkt verbunden ist.
tieren. Testen Sie den Graph in einem Unittest. 9 *
10 * Hinweis:
11 *
12 *
(E)Enum.GetValues(typeof(E)).GetValue(i)
13 * ermittelt das Enum mit einem bestimmten
14 * Index
15 */
16 public List<E> GetNeighbours(E e) {
17 ...
18 }
19 }

q
4.Beispiel) AGraph 1.Punkt

Erweitern Sie die AGraph, DefaultGraph und Direc-


2.Beispiel) Edge 1.Punkt tedGraph Klassen um folgende Methoden.
Erweitern Sie die Implementierung des Graphen  Codebeispiel: AGraph.cs 
um die Edge Klasse. 1 // ----------------------------------------
2 // Klasse: AGraph.cs
 Codebeispiel: Edge.cs 
3 // ----------------------------------------
1 // ----------------------------------------
4 public class AGraph<E, T> ... {
2 // Klasse: Edge.cs
5 public abstract void AddEdge(
3 // ----------------------------------------
6 Edge<E, T> edge
4 public class Edge<E, T> where E : System.Enum
7 );
5 where T : class {
8 public abstract void DeleteEdge(
6
9 Edge<E, T> edge
7 // Implementieren Sie einen Konstruktor
10 );
8 // und Properties fuer die Klasse
11
9 private readonly E _origin;
12 // Implementieren Sie die Methode
10 private readonly E _target;
13 public List<Edge<E, T>> GetNeighbours(
11 private T weight;
14 E e
12
15 ) {
13 }
16 ...
17 }
q 18 }

6
© Dipl.Ing.- Msc. Paul Panhofer Bsc.

1 // ---------------------------------------- .
2 // Klasse: DefaultGraph.cs/DirectedGraph.cs
3 // ----------------------------------------
4 public class DefaultGraph<E, T> ... {
5 public override void AddEdge(
6 Edge<E, T> edge
7 ) {...}
8 public override void DeleteEdge(
9 Edge<E, T> edge
10 ) {...}
11 }
12

13 public class DirectedGraph<E,T> ... {


14 public override void AddEdge(
15 Edge<E, T> edge
16 ) {...}
17 public override void DeleteEdge(
18 Edge<E, T> edge
19 ) {...}
20 }

5.Beispiel) AGraph 2.Punkte

Erweitern Sie die AGraph Klasse um folgende Me-


thoden.

 Codebeispiel: AGraph.cs 
1 // ----------------------------------------
2 // Klasse: AGraph.cs
3 // ----------------------------------------
4 public class AGraph<T,E> ... {
5 /*
6 * Die IsPath Methode prueft ob die
7 * Kannten der Liste eine durchgehenden
8 * Pfad im Graphen beschreiben.
9 *
10 * Implementieren Sie die Methode
11 * rekursiv.
12 */
13 public bool IsPath(List<Edge<T,E>>){...}
14 private bool IsPath(
15 List<Edge<E,T>> path,
16 int current, int next
17 ) {...}
18 }

7
Softwareentwicklung - Fortgeschrittene Konzepte

5.) Aufgabenblatt - GruppeA(16.Punkte) 2.) Beispiel - DML (8.Punkt)


 Fügen Sie in jede Tabelle mindestens 3 Datensät-
ze ein. Formulieren Sie anschließen folgende Ab-
L Kompetenzen  fragen.

Entityframework: Entity, DbContext, ORM  Codebeispiel: Programm.cs 


1 // ----------------------------------------
2 // Klasse: Programm.cs
3 // ----------------------------------------
1.) Beispiel - Modelschicht (8.Punkte)
4 // Finden Sie alle Angestellten der Nachname
ORM - Entityframework: Programmieren Sie für fol- 5 // mit einem "H" beginnt.
gendes Model die entsprechenden Entitäten. 6

7 // Finden Sie den Angestellten mit dem hoech-


‚ EMPLOYEES: Ärzte und Pfleger gehören zum Per- 8 // sten Gehalt.
sonal. 9

10 // Geben Sie alle Angestellten einer bestim-


Mitarbeiter sind eindeutig durch eine ID EM-
11 // mten Station aus.
PLOYEE_ID (int - not null, unique). Für Mitarbeiter
12
wird eine Sozialversicherungsnummer SVNR (int
13 // Geben Sie fuer ein Krankenhaus alle Sta-
- not null, unique), der Vorame FIRST_NAME (var-
14 // tionen aus.
char(30) - not null), der Nachname LAST_NAME
15
(varchar(30) - not null) und das Gehalt SALARY (int
16 // Geben Sie fuer ein Krankenhaus alle Ange-
- not null) gespeichert.
17 // stellten aus.
Bei Ärzten (PHYSICANS) wird zusatzlich noch
ihr Spezialgebiet JOB_SPECIALISATION (varchar(30)
q
- not null, {GENERAL_PROACTITIONER, SURGE-
ON, DIAGNOSTICIAN}) gespeichert. Für Pfleger
(CARE_TAKERS) wird gespeichert, welcher an-
dere Pfleger ihm vorgesetzt ist. Es gibt aller-
dings auch Pfleger ohne Vorgesetzten. Ein Pfle-
ger kann der Vorgesetzte mehrerer Pfleger sein.

‚ HOSPITAL_FACILITIES: Ein Krankenhaus wird durch


eine ID FACILITY_ID (int - not null, unique) iden-
tifiziert. Für Krankenhäuser wird ein Name NAME
(varchar(100) - not null, unique) und die Telefon-
nummer der Information PHONE_NR (varchar(20) -
not null, unique) gespeichert.

‚ WARDS: Jedes Krankenhaus hat mindestens eine,


meistens jedoch mehrere Stationen. Eine Station
ist eindeutig durch eine ID WARD_ID (int - not null,
unique). Für Stationen wird ein Namen NAME (var-
char(100) - not null) gespeichert. Zusätzlich wird
die Anzahl der Betten CARRYING_CAPACITY (int -
not null) gespeichert.
Eine Station wird von genau einem Arzt gelei-
tet, wobei ein Arzt jedoch maximal eine Station
leiten kann. Zusätzlich wird gespeichert, welcher
Angestellte wieviele Stunden WORKING_HOURS (int
- not null) in einer Station arbeiten. Angestellte
können durchaus in mehreren Stationen arbei-
ten.