5.2.20
12/07/19
Last Modified 06/30/19 by Walter Tasin
AlgoDat_LU6 Reload Page

Algorithmen und Datenstrukturen

Übung zum Kapitel "Ausdruck/Anweisung"

W. Tasin, M.Sc.


Theoretische Fragen

  • Führen Sie die folgenden Ausdrücke auf ihre Einzeloperationen zurück. Stellen Sie dar, in welcher Reihenfolge die Einzeloperationen ausgeführt werden.

3 + 4 * 5 * 2

Vergleich erster Operator + mit zweiten Operator * --> Extrahiere Teilterm mit Operationen höherer Präzedenz als Operation +
4 * 5 * 2

  Vergleich erster Operator * mit zweiten Operator * --> gleiche Präzedenz mit Assoziativität links->rechts
  20 * 2

  Führe letzte Multiplikation des Teilterms aus -->
  40

Einsetzen des Teilterms -->
3 + 40

Ausführen der Addition -->
43

3 == x && y != 3

Vergleich erster Operator == mit zweiten Operator && --> 
Sichern des Zwischenergebnisses: temp <- (3 == x)

Nächste Operation && --> Sonderfall: Nur weiterinterpretieren, falls temp==1 (true)

Fallunterscheidung:
 1) temp==0 (false) --> Ergebnis ist 0 (false)

 2) temp==1 (true)  --> Extrahiere Teilterm mit Operationen höherer Präzedenz als Operation && -->
                        y != 3

                        Ermittle Teilergebnis

    ==> Ergebnis: y != 3 (falls temp==1)                    
 

x=y=0

Vergleich erster Operator = mit zweiten Operator = --> gleiche Präzedenz mit Assoziativität rechts->links

Extrahiere rechten Teilterm mit Operationen höherer Präzedenz als Zuweisungsoperator --> Konstante 0

Führe Zuweisung y <- 0 aus; Resultat der Zuweisung ist erneut der rechte Teilterm.

Führe Zuweisung x <- 0 aus. 

x=y=3*x>9

Vergleich erster Operator = mit zweiten Operator = --> gleiche Präzedenz mit Assoziativität rechts->links

Extrahiere rechten Teilterm mit Operationen höherer Präzedenz als Zuweisungsoperator --> 3*x>9

   Vergleich erster Operator * mit zweiten Operator > --> Ausführung der Multiplikation

   Ausführung der Vergleichsoperation > mit 9 --> Sicherung des Teilergebnisses 

Führe Zuweisung y <- Teilergebnis aus; Resultat der Zuweisung ist erneut das Teilergebnis.

Führe Zuweisung x aus. 


  • Welche Codefragmente stellen Endlosschleifen dar?

/* Keine Endlosschleife */
int x=40;
while (x>5)
{
   printf("%d ", x);
   x=x-1;
}

/* Endlosschleife, da Variable zeichen die Laufbedingung festlegt, diese aber in der while-Verbundanweisung
nicht geeignet modifiziert wird. 
*/ 
char zeichen='A';
int x=0;
while (zeichen<='Z')
{
   printf("%d ", x);
   x=x+1;
}

/* Endlosschleife, da nach while-Kontrollstruktur eine Leeranweisung folgt 
(; unmittelbar nach while) 
*/
int x=0;
while (x<=0x60);
{
   printf("%d ", x);
   x=x+1;
}

/* Keine Endlosschleife */
char zeichen='A';
int x=0x41;
while (zeichen<='Z')
{
   printf("%d %c", x, zeichen);
   x=x+1;
   zeichen=zeichen+1;
}

/* Keine Endlosschleife */
char zeichen='A';
while (zeichen<='Z')
{
   printf("%d %c", zeichen, zeichen);
   zeichen=zeichen+1;
}

/* Endlosschleife, da x nicht erhöht wird.
x wird ausserhalb der while-Schleife modifiziert (fehlende Verbundanweisung). */
int x=0;
while (x<=0x60)
   printf("%d ", x);
   x=x+1;




Links

Uebungen Algorithmen und Datenstrukturen
Unterlagen Algorithmen und Datenstrukturen
Praktikum Algorithmen und Datenstrukturen
Zur Hauptseite