Allgemeine Informatik I WS 00/01 - Lösung Probeklausur

Aufgabe 1:
  1. nein
  2. ja
  3. nein
  4. nein
  5. ja
Aufgabe 2:
  1. Syntaxdiagramm:
    1. AXXXA => nein
    2. ABAXA => ja
    3. XXXB => nein
    4. AXXBBA => nein
Aufgabe 3:
  1. StartSymbol=S; Nicht-Terminalsymbole={S,A}; Terminalsymbole={x,y}
    Regeln:
  2. x(yx)*

Aufgabe 4: Aufgabe 5:
  1. 
          DREIECK = RECORD
                       typ: DREIECKTYP;
                       punkt: PUNKT;
                       laenge1, laenge2: REAL;
                       winkel: REAL;
                       umfang: REAL;
                    END;
    
    
  2. 
    (* 2 REAL-Zahlen sollte man nicht direkt auf Gleichheit prüfen,
       da durch Rundungsfehler exakte Gleichheit fast nie erreicht wird.
       2 REAL-Zahlen x und y werden als gleich betrachtet wenn ABS(x-y) < eps
       gilt, für hinreichend kleines eps *)
    
       PROCEDURE Eintragen(pos: CARDINAL; VAR objects: OBJEKTE);
          CONST
             eps = 1.0e-8;
          VAR
             laenge1, laenge2, laenge3, winkel: REAL;
       BEGIN
          ReadTriangle(objects[pos].punkt, laenge1, laenge2, winkel);
    
          objects[pos].laenge1 := laenge1;
          objects[pos].laenge2 := laenge2;
          objects[pos].winkel := winkel;
          laenge3 := DritteSeiteDreieck (laenge1, laenge2, winkel);
          objects[pos].umfang := laenge1 + laenge2 + laenge3;
    
          IF ABS(laenge1 - laenge2) < eps THEN  (* laenge1 = laenge2 *)
             IF (ABS(laenge1 - laenge3) < eps) & (ABS(laenge2 - laenge3) <eps) THEN
                objects[pos].typ := Gleichseitig;
             ELSE
                objects[pos].typ := Gleichschenkelig;
             END;
          ELSIF (ABS(laenge1 - laenge3) < eps) OR (ABS(laenge2 - laenge3) <eps) THEN
             objects[pos].typ := Gleichschenkelig;
          ELSE 
             objects[pos].typ := Beliebig;
          END;
       END Eintragen;
    
    
  3. 
       PROCEDURE MittlererUmfang (belegt  : CARDINAL; objects : OBJEKTE);
          VAR
             summeGleichseitig,
             summeGleichschenkelig,
             summeBeliebig : REAL;
             anzahlGleichseitig,
             anzahlGleichschenkelig,
             anzahlBeliebig : INTEGER;
             pos: INTEGER;
    
       BEGIN
          summeGleichseitig := 0.0;
          summeGleichschenkelig := 0.0;
          summeBeliebig := 0.0;
          anzahlGleichseitig := 0;
          anzahlGleichschenkelig := 0;
          anzahlBeliebig := 0;
    
          FOR pos := 0 TO INTEGER(belegt)-1 DO
             CASE objects[pos].typ OF
             | Gleichseitig:
                summeGleichseitig := summeGleichseitig + objects[pos].umfang;
                INC(anzahlGleichseitig);
             | Gleichschenkelig:
                summeGleichschenkelig := summeGleichschenkelig + objects[pos].umfang;
                INC(anzahlGleichschenkelig);
             | Beliebig:
                summeBeliebig := summeBeliebig + objects[pos].umfang;
                INC(anzahlBeliebig);
             END;
          END;
    
          IF anzahlGleichseitig > 0 THEN
             WriteString("Mittlerer Umfang der gleichseitigen Dreiecke: ");
             WriteFloat(summeGleichseitig/FLOAT(anzahlGleichseitig),10,10);
             WriteLn;
          ELSE
             WriteString("Es gibt keine gleichseitigen Dreiecke");
             WriteLn;
          END;
    
          IF anzahlGleichschenkelig > 0 THEN
             WriteString("Mittlerer Umfang der gleichschenkeligen Dreiecke: ");
             WriteFloat(summeGleichschenkelig/FLOAT(anzahlGleichschenkelig),10,10);
             WriteLn;
          ELSE
             WriteString("Es gibt keine gleichschenkeligen Dreiecke");
             WriteLn;
          END;
    
          IF anzahlBeliebig > 0 THEN
             WriteString("Mittlerer Umfang der beliebigen Dreiecke: ");
             WriteFloat(summeBeliebig/FLOAT(anzahlBeliebig),10,10);
             WriteLn;
          ELSE
             WriteString("Es gibt keine beliebigen Dreiecke");
             WriteLn;
          END;
       END MittlererUmfang;
    
    
Aufgabe 6: Aufgabe 7: Aufgabe 8: Aufgabe 9: Aufgabe 10: *** Lösung kommt noch ***