Thema dieser Übung ist die Verarbeitung einer Liste von Zahlen.
Im Gegensatz zu der auf dem letzten Übungsblatt durchgeführten Berechnung der Fakultät können
die Zahlen nun beliebigen Typs und beliebiger Reihenfolge sein, d. h.
nicht nur die natürlichen Zahlen 1, 2, 3..n.
Variante 1: For-Schleife
Schreiben Sie zu diesem Zweck ein PHP-Script array.php,
in dem das Produkt einer Menge von n Zahlen mit Hilfe
einer for-Schleife berechnet wird. Die Zahlen werden als
feste Werte intern im Skript in einem Feld gespeichert, d.h. das Script
soll unabhängig vom bisher entwickelten Taschenrechner funktionieren.
Für die Liste 3.5, 12.1, 43.3, 5.2 ergibt sich dann z. B. 9535,526.
Erweitern Sie ihr Skript array.php um einen Algorithmus
zur Berechnung des Maximums der gegebenen Liste von Zahlen. Neben dem
Produkt soll jetzt also ebenfalls die größte in der Liste enthaltene
Zahl ausgegeben werden. Hinweis: Benutzen Sie NICHT die von
PHP zur Verfügung gestellte Maximumfunktion max()!
Variante 2: Foreach-Schleife
Schreiben Sie obige Algorithmen so um, dass eine foreach-Schleife
benutzt wird. (Sichern Sie aber vorher die FOR-Varianten der
Algorithmen, da wir diese für das nächste Übungsblatt wieder benötigen!)
Die in dieser Übung erstellte Lösung werden wir mit dem nächsten
Übungsblatt weiter entwickeln.
Aufgabe 2: Taschenrechner III
Integrieren Sie die in der vorigen Aufgabe entwickelten
Algorithmen zur Verarbeitung einer Liste von Zahlen mit Hilfe der
FOR-Schleife in ihren Taschenrechner. Erweitern Sie hierfür dessen GUI
um Radio Buttons für die folgenden Operationen.
Version 1: Produkt
Diese Operation integriert den Algorithmus zur Berechnung des Produkts
in die Benutzeroberfläche des Taschenrechners. Die übertragene Liste von
Zahlen soll unterschiedlich lang sein können und wird im Operandenfeld 1
übergeben. Der Inhalt von Operandenfeld 2 wird ignoriert. Die Ausgabe
der Operation soll wie folgt formatiert sein:
zahl_1* … *zahl_n = Produkt
Abb.1: Produkt einer
Liste von Zahlen
Für die Liste 3.5, 12.1, 43.3, 5.2 ergibt sich dann das Ergebnis in
Abbildung 1.
Version 2: Maximumsuche
Diese Operation integriert den Algorithmus zur Berechnung des Maximums
in die Benutzeroberfläche des Taschenrechners. Die beliebig lange Liste
von Zahlen wird wieder im Operandenfeld 1 übergeben. Das Resultat soll
dabei wie folgt formatiert sein:
max{zahl_1 … zahl_n} = Maximum
Für die Liste 3.5, 12.1, 43.3, 5.2 ergibt sich das Ergebnis in
Abbildung 2.
Abb.2: Maximumsuche aus
einer Liste von Zahlen
Version 3: Ausdrücke auswerten
Bisher ist der Taschenrechner nur über die Operationsknöpfe (+, * etc.)
steuerbar. Besser wäre es, wenn in das Operandenfeld direkt Ausdrücke,
wie z. B. a + b oder a / b, eingegeben
werden könnten und der Rechner diese automatisch auswerten würde.
Implementieren Sie daher die folgende Funktionalität:
Wird im ersten Operandenfeld ein Ausdruck übertragen, z. B. 3.5
+ 2.1, so soll der Taschenrechner dies bemerken, die gewünschte
Operation (hier: Addition) bestimmen, die beiden zugehörenden Operanden
extrahieren und auf diese die Operation anwenden. Der ausgewählte Radio
Button wird in diesem Fall ignoriert. Die Verzweigung entsprechend der
unterschiedlichen Operationen erfolgt zweckmäßigerweise mittels eines if-elseif-Befehls.
Das Ergebnis wird wie bei den durch die Radio Buttons ausgelösten
Operationen formatiert (siehe Abbildung 3).
Abb.3: Auswertung
eines Ausdrucks
Sie brauchen nur positive erste Operanden, die vier Grundrechenarten
und Ausdrücke, die lediglich aus zwei Operanden bestehen,
berücksichtigen. D. h. Ausdrücke der folgenden Art müssen nicht korrekt
ausgewertet werden: -12 - 3, 2.5 + 3 * 56 etc.
Aufgabe 3: Dateiupload II
Die im Rahmen des letzten Übungsblatts implementierte Anwendung für das
Hochladen von Dateien auf den Webserver hat bislang einen
Schönheitsfehler: Jeder, der die Benutzeroberfläche zur Eingabe der
Dateinamen aufruft, kann beliebige Dateien auf den Server laden. Hacker
könnten somit eigene Anwendungen auf ihren Server laden oder sogar ihre
gesamte Webanwendung vom Server löschen, sofern sie Zugriff auf die
Dateinamen der Anwendung erhalten (z. B. mit Hilfe von
Directory-Listing). Aus diesem Grunde werden wir das
Administrationswerkzeug mit einer Zugriffssteuerung ausstatten.
Webserver, die zum NCSA-Server kompatibel sind, wie unser
Apache-Server, kennen das Konzept der .htaccess-Dateien. Dies
sind reine Textdateien, mit denen sich durch Eintragen diverser
Direktiven der Zugriff auf die Server-Dateien steuern lässt. Lesen Sie
hierzu die folgenden SelfHTML-Abschnitte:
Erstellen Sie eine .htaccess und eine .htusers
Datei, in der Sie einen Benutzernamen sowie ein Passwort für sich selber
bzw. für alle Personen in ihrer Arbeitsgruppe vergeben. Der Schutz soll
dabei mindestens für die HTML- und PHP-Dateien gelten, die zu der Anwendung
für das Hochladen gehören. Für jede derartige Datei soll der Browser
zukünftig eine Sicherheitsabfrage machen und nur den autorisierten
Benutzern Zugriff auf die Dateien gestatten. Die .htusers-Datei
erfordert einen Eintrag mit vollständiger Pfadangabe in der .htaccess-Datei.
Der vollständige Pfad zu ihrem Web-Verzeichnis ist (mit x ersetzt durch die Nummer ihres Accounts):
C:\xampp\htdocs\dmuser\dmuserx\
Passwörter sollten möglichst nicht im Klartext an Administratoren
gegeben und in Passwortdateien abgespeichert werden, da sie dann Dritten
bekannt sind. Apache unter Windows gestattet die Verschlüsselung von
Passwörtern mit der MD5-Methode. Eine Webseite, die Ihnen Online die
Erzeugung von MD5-Passwörtern erlaubt, ist z. B. der Htpasswd
Generator.
Die in dieser Übung erstellten Dateien werden wir für das nächste
Übungsblatt wieder benötigen.