Dr. Peter Pfahler Luca Hammer Paderborn, 28. November 2016 Übungen zur Vorlesung Einführung in Web-bezogene Sprachen WS 2016/2017 Lösungsvorschlag zu Blatt 6 AUFGABE 1 (5 Punkte): 1. (3 Pkt) Die Funktion index nach dem Muster des Such-Algorithmus von Folie H-13. <?php function index($buchstabe, $zeichenreihe) { // gibt den Index des ersten Auftretens von $buchstabe // in $zeichenreihe zurück. // Kommt das Zeichen nicht vor, wird -1 zurückgegeben. $lg = strlen($zeichenreihe); // die Länge dieser Zeichenreihe $i = 0; // der Index in der Zeichenreihe $gefunden = false; // Zeichen gefunden? while (!$gefunden and $i < $lg) { if ($buchstabe == $zeichenreihe{$i}) { $gefunden = true; } else { $i = $i + 1; } } if ($gefunden) return $i; else return -1; } ?> 2. (2 Pkt) Das Programmstück berechnet, wie viele Vokale in der Zeichenkette in der Variablen $text vorkommen. Dazu wird für jedes Zeichen in dieser Zeichenkette geprüft, ob es ein Vokal ist. In diesem Fall wird die Zählvariable $vokale erhöht. Zur Prüfung, ob ein Zeichen ein Vokal ist, wird die Funktion index verwendet, indem geprüft wird, ob das Zeichen in der Zeichenkette enthalten ist, die aus allen Vokalen besteht. AUFGABE 2 (5 Punkte): 1. (3 Pkt) Entwicklung des Laufzeitkellers für den Funktionsaufruf rsquare(3): $n 3 $ug ? $tmp ? $n 3 $ug 5 $tmp ? $n 3 $ug 5 $tmp ? $n 3 $ug 5 $tmp ? $n 3 $ug 5 $tmp ? $n 3 $ug 5 $tmp ? $n 3 $ug 5 $tmp ? $n 2 $ug ? $tmp ? $n 2 $ug 3 $tmp ? $n 2 $ug 3 $tmp ? $n 2 $ug 3 $tmp ? $n 2 $ug 3 $tmp ? $n 2 $ug 3 $tmp 4 $n 1 $ug ? $tmp ? $n 1 $ug 1 $tmp ? $n 1 $ug 1 $tmp ? $n 1 $ug 1 $tmp 1 $n 0 $ug ? $tmp ? $n 0 $ug ? $tmp ? Kellern $n 3 $ug 5 $tmp 9 Entkellern 2. (2 Pkt) Zwei verschiedene nicht-rekursive Varianten von rsquare: function square_v1($n) { // berechnet das Quadrat von n durch Aufsummieren der // ungeraden Zahlen von 2*n-1 bis 1 $sq = 0; while ($n > 0) { $sq = $sq + 2*$n-1; $n = $n - 1; } return $sq; } function square_v2($n) { // berechnet das Quadrat von n durch Aufsummieren der // ersten n ungeraden Zahlen (von 1 bis 2*n-1) $sq = 0; $ungerade = 1; while ($n > 0) { $sq = $sq + $ungerade; $ungerade = $ungerade + 2; $n = $n - 1; } return $sq; }