Seite 1 von 1

Übungsblatt 3: Daten- und Kontrollflüsse

Verfasst: 25. Mai 2011 22:21
von Gerrit
Zu dem Fatenflussgraphen aus der AUfgabe 1d) : Wie sollen wir dort Attribute behandeln, die in der Methode NIE definiert, jedoch öfters gelesen werden? Sollen wir die unter den Tisch fallen lassen?

Zur Veranschaulichung meiner FRage zu KOntrollflüssen hier ein kurzer Code-Schnipsel:

Code: Alles auswählen

1   while(c<15) {
2      y = 1;
3      z = 3;
4      c--;
5    }
6    b = 6;
Es iat ja klar, dass Zeile 2, 3 und 4 von Zeile 1 abhängig sind. Ist denn nun Zeile 6 ebenfalls abhängig von Zeile 1? Sie wird ja eben erst ausgeführt, wenn die while-Schliefe zuende ist... Oder steht sie so wie ich mir das denke unter keinem Kontrollfluss?

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Verfasst: 26. Mai 2011 08:59
von saller
Hi,

Attribute, denen niemals ein Datenwert zugewiesen wird, lässt man tatsächluich 'unter den Tisch fallen'. Daten müssen irgendwo festgelegt werden, um zu einer Lesestelle fließen zu können.

Zu Deinem Beispiel:
In dem Kontrollflussgraphen hättest Du eine Kante von 1->2,3,4 und 1->6. In dem Datenflussgraphen hast Du allerdings nur Kanten von 1->2 1->3 und 1->4. Eine Kante von 1->6 ist unnötig, da 6 auf jeden Fall - unabhängig von 1 - ausgeführt wird. Du hast also Recht - der Knoten 6 steht im Datenflussgraphen unter keinem 'Kontrollfluss'.

Gruß
Karsten

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Verfasst: 26. Mai 2011 11:09
von ~usz
Warum sind den 1 -> 2, 1 -> 3 und 1 -> 4 Datenflusskanten? Nach der formalen Definition des Datenflussgraphen im Skript (ca. S. 200) muss eine Datenflusskante ein Pfad im Kontrollflussgraphen sein, die mit der Wertzuweisung einer Variable anfängt, und mit der Nutzung dieser Variable aufhört.

Da in Zeile 1 kein Wert zugewiesen wird, haben wir demzufolge keine Datenflusskante, oder?

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Verfasst: 26. Mai 2011 11:17
von saller
Ok - hätte ich wohl noch einmal explizit dazuschreiben sollen - da die Frage sich auf Kontrollfluss im Datenflussgraphen bezogen hat, bezieht sich meine Antwort also nur auf Kontrollflusskanten im Datenflussgraphen - sprich bezogen auf die Aufgabenstellug "Erweiterung zu einem Abhängigkeitsgraphen".

Du hast natürlich Recht: In dem Beispiel exisitert zwischen den Knoten 1 bis 6 kein Datenfluss!
Es wird nur y und z definiert - allerdings nicht gelesen und zu c und b existiert keine Definitionsstelle ==> kein Datenfluss

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Verfasst: 26. Mai 2011 12:22
von ~usz
saller hat geschrieben:Da die Frage sich auf Kontrollfluss im Datenflussgraphen bezogen hat, bezieht sich meine Antwort also nur auf Kontrollflusskanten im Datenflussgraphen - sprich bezogen auf die Aufgabenstellug "Erweiterung zu einem Abhängigkeitsgraphen".
Hmm, ja okay, habe etwas gebraucht bis ich eine Ahnung bekommen habe, zu welcher Frage deine Antwort passt :) Wenn du dir aber nochmal Gerrit's ursprüngliche Frage anschaust, dann bezieht sie sich ja explizit auf Aufgabe 1d) den Datenflussgraph. Erst in Aufgabe 1e) wird der Abhängigkeitsgraph erstellt. Wahrscheinlich ist dieser Thread eh schon maximal verwirrend, also wünsche ich allen Beteiligten noch einen schönen Tag :)

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Verfasst: 26. Mai 2011 12:28
von saller
Hehe - wohl wahr - ich hatte noch einmal den letzten Satz aufgenommen. Aber nun, nachdem jetzt alle Klarheiten beseitigt sind, kann ich auch ruhig in die Mittagspause gehen :D

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Verfasst: 30. Mai 2011 17:49
von blackcomb
Ich habe noch eine Frage zum Kontrollflussattribut u, bezogen auf folgenden Code:

Code: Alles auswählen

1 while (z) {
2   int x = 0;
3   if (y) {
4     ...
5   }
6 }
7 return x;
Welcher Knoten des Kontrollflussgraphen würde (wenn man für jede Zeile einen Knoten erstellt) das Attribut u(x) erhalten?

Ich hätte intuitiv einen Knoten für Zeile 6 eingeführt, weil dort der Scope endet, in dem x definiert ist, und diesen Knoten mit "u(x)" beschriftet. Eine ähnliche Situation gibt es in der Übung - dort sind aber offensichtlich keine Knoten für Zeilen vorgesehen, die nur eine Klammer enthalten...


Und noch eine Frage: Sollen/können wir in der Übung vor Aufgabe c) die Segmente des Kontrollflussgraphen zusammenfassen?

Danke schön schon einmal.

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Verfasst: 30. Mai 2011 18:17
von oren78
blackcomb hat geschrieben:Ich habe noch eine Frage zum Kontrollflussattribut u, bezogen auf folgenden Code:

Code: Alles auswählen

1 while (z) {
2   int x = 0;
3   if (y) {
4     ...
5   }
6 }
7 return x;
Welcher Knoten des Kontrollflussgraphen würde (wenn man für jede Zeile einen Knoten erstellt) das Attribut u(x) erhalten?
Wenn ich mir das Codefragment dazu betrachte, würde ich behaupten ab zeile 7, sprich wir hätten: c(x), u(x), u(y), u(z) unter der annahme das keine weiteren Variablen in dem if() Block vorkommen, ansonsten müssten diese ebenfalls auf "unused" gesetzt werden. Ich hoffe, ich sehe das soweit richtig? 8)
blackcomb hat geschrieben: Und noch eine Frage: Sollen/können wir in der Übung vor Aufgabe c) die Segmente des Kontrollflussgraphen zusammenfassen?
Es hieß ja nirgends "Geben sie ein segmentfreien Kontrollflussgraphen an..." daher ist die Entscheidung wohl uns überlassen.

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Verfasst: 30. Mai 2011 19:08
von saller
Hallo

oren hat die Frage schon sehr gut beantwortet - wenn man annimmt, dass 'x' auch außerhalb des Kontrollblockes der while-Schleife existiert.
Sollte dies jedoch nicht der Fall sein, wird in Zeile 2 in der while-Schleife x initial definiert. Dann muss es am Ende der while-Schleife wieder 'undefined' werden. Dies trifft bei allen Kontrollstrukturen wir Subklassen, If-Anweisungen oder Schleifen zu.

Angenommen im Beispiel würden wir 'y' am Ende zurückgeben und 'x' wäre vorher nirgends definiert oder initialisiert worden, dann würd es sich folgendermaßen verhalten:
01 p(z)
02 d(x)
03 p(y)
06 u(x) --> Kann al eine Art Pseudoknoten gesehen werden oder einfach mit einem anderen Knoten zu einem Segment zusammengefasst werden
07 c(y) u(y) u(z)

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Verfasst: 30. Mai 2011 19:37
von blackcomb
Ok, dann ist alles klar :)