Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Prüfungen im Bachelor-Studium (1. - 5. Semester) » pfp » Aufgabe 1: Wissensfragen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
pruefungen:bachelor:pfp:loesungss13 [17.07.2014 14:00] Alicenpruefungen:bachelor:pfp:loesungss13 [18.02.2017 22:38] (aktuell) kafalk
Zeile 12: Zeile 12:
 ==== Aufgabe 2: Petri-Netze ==== ==== Aufgabe 2: Petri-Netze ====
  
-(Wer das hier mit Zeichnungen vervollständigen möchte, darf das gerne tun!)+(Das originale Word-Dokument zum Bild habe ich auch hier in denselben Namensraum zwecks etwaigen Änderungen hochgeladen.)
  
-a) +{{:pruefungen:bachelor:pfp:ss13-aufgabe2-petrinetz.png?600|}} 
-Wenn man auch ein Token ergänzen darf  + 
-Mit einer erneuten Stelle ergänzen. von t1 und t3 zur Stelle hin, von der Stelle zu t2 und t4. +  * a) (Mindestens?) 4 Möglichkeiten:
  
-Wenn man Beschränkungen hinzufügen darf, mit einer Stelle mit Beschränkung 1,  +  - Oben links: Wenn man auch ein Token ergänzen darf: Mit einer erneuten Stelle ergänzen. von t1 und t3 zur Stelle hin, von der Stelle zu t2 und t4.  
-dann von t2 und t4 zur Lockstelle, von der Lockstelle zu t1 und t3. +  - Oben rechts: Wenn man Beschränkungen hinzufügen darf, mit einer Stelle mit Beschränkung 1, dann von t2 und t4 zur Lockstelle, von der Lockstelle zu t1 und t3. 
 +  - Unten links: Ohne Token und Beschränkung Version II: p4 zu t2 und p2 zu t4, jeweils als Doppelpfeil. 
 +  - Unten rechts: Ohne Token und Beschränkung: p4 zu t2, p2 zu t4, t1 zu p4, t3 zu p2 (praxisfern)
  
-Ohne Token und Beschränkung: +  * b)
-p4 zu t2, p2 zu t4, t1 zu p4, t3 zu p2 +
-(Praxisfern)+
  
-   S = ( 0, 1, 1, 0, 0, 0)(Traversiert)+   S = ( 0, 1, 1, 0, 0, 0)(Transponiert)
  
    M:     M: 
Zeile 35: Zeile 35:
     0        -1   0     0        -1   0
  
-c)+  * c)
 Nein. Durch t4->t5->t2->t6->t6 verschwinden alle Marken! Nein. Durch t4->t5->t2->t6->t6 verschwinden alle Marken!
  
-d) +  * d) 
 t4->t5->t6->t1->t4 t4->t5->t6->t1->t4
  
Zeile 46: Zeile 46:
 a)  a) 
  
-for(int i = 0; i < nStages; i++){ +  for(int i = 0; i < nStages; i++){ 
- +    boolean lastThread = (i == threads.length - 1); 
-boolean lastThread = (i == threads.length - 1); +     
- +    inQueue<Integer> = queues[i];  
-inQueue<Integer> = queues[i];  +     
- +    outQueue<Integer> = queues[i+1];  
-outQueue<Integer> = queues[i+1];  +     
- +    threads[i] = new StageThread(i, inQueue, outQueue, lastThread);  
-threads[i] = new StageThread(i, inQueue, outQueue, lastThread);  +    threads[i].start();  
-threads[i].start();  +  }
- +
-}+
  
 b)  b) 
Zeile 69: Zeile 67:
 4) if(!lastThread) outQueue.put(value);  4) if(!lastThread) outQueue.put(value); 
  
-return; //break auch möglich!+return; break auch möglich!
  
 ==== Aufgabe 4: Schreibtischlauf ==== ==== Aufgabe 4: Schreibtischlauf ====
Zeile 96: Zeile 94:
 ==== Aufgabe 5: Collatz ==== ==== Aufgabe 5: Collatz ====
  
-a) +**a)** 
-(Int => Boolean) => (Int => Int, Int => Int) => Int => Int = +  def construct: (Int => Boolean) => (Int => Int, Int => Int) => Int => Int = 
 i => (e, o) => n => if(i(n)) e(n) else o(n) i => (e, o) => n => if(i(n)) e(n) else o(n)
  
-b)  +**b)**  
-def f: Int => Stream[Int] = n => n #:: f(c(n))+  def f: Int => Stream[Int] = n => n #:: f(c(n))
  
-c) +**c)** 
-def oddCount: (Int, Int) => Int =  +  // toList vor foldLeft ist optional, Stream bietet auch diese Funktion 
-(n, k) => f(n).take(k).toList.foldLeft(0)((a, b) => if(isEven(b)) a +1 else a)+  def oddCount: (Int, Int) => Int = (n, k) => f(n).take(k).toList.foldLeft(0)( (a, b) => if(isEven(b)) a else a+1)
  
 ==== Aufgabe 6: Scala / Graphen faerben ==== ==== Aufgabe 6: Scala / Graphen faerben ====
Zeile 123: Zeile 121:
  
   def getFreeColor: List[Color] => Color = l => (for(i <- List.range(0, l.length + 1 ) if !l.contains(i))yield i).head   def getFreeColor: List[Color] => Color = l => (for(i <- List.range(0, l.length + 1 ) if !l.contains(i))yield i).head
 +
 +Alternativ mit dropWhile:
 +
 +  def getFreeColor: List[Color] => Color = ms => List.range(0,ms.length+1).dropWhile(ms.contains(_)).head
 +
 +Rekursive Alternative:
 +
 +  def getFreeColor: List[Color] => Color = cs => {
 +    if (cs.contains(0)) {
 +      getFreeColor(cs.map(_-1)) + 1
 +    }
 +    else {
 +      0
 +    }
 +  }
 +
 +Oder mit foldLeft
 +
 +  def getFreeColor: List[Color] => Color = list =>
 +  list.foldLeft(0)((a,b) =>if(list.contains(a))a+1 else a)
 +
  
 **b)** **b)**
    def colorGraph: List[Node] => List[Coloring] => List[Coloring] = {    def colorGraph: List[Node] => List[Coloring] => List[Coloring] = {
-     case Nil => cols => cols +     nod => cols => nod match { 
-     case n::nod => cols => colorGraph(nod)(nextFreeColor(cols)(n)::cols) +          case Nil => cols 
-   }+          case n::ns=> colorGraph(ns)(nextFreeColor(cols)(n)::cols) 
 +          } 
 +    }