KLAUSUR ZUM BACHELORMODUL EINFÜHRUNG IN DIE PROGRAMMIERUNG WS 2013/14, DR. MAXIMILIAN HADERSBECK KLAUSUR AM 03.02.2014 VOR NACH MATRIKELNUMMER: STUDIENGANG: B.Sc. Computerlinguistik, B.Sc. Informatik, Magister Bitte unterstreichen Sie den für Sie zutreffenden Studiengang! Die Klausur besteht aus 15 Aufgaben. Die Punktzahl ist bei jeder Aufgabe angegeben. Die Bearbeitungsdauer beträgt 90 Minuten. Bitte überprüfen Sie, ob Sie ein vollständiges Exemplar erhalten haben. Tragen Sie die Lösungen in den dafür vorgesehenen Raum im Anschluss an jede Aufgabe ein. Falls der Platz für Ihre Lösung nicht ausreicht, benutzen Sie bitte nur die ausgeteilten Zusatzblätter! Aufgabe mögliche Punkte erreichte Punkte 1. Ein-/Ausgabe 3 2. UNICODE I: Properties 9 3. UNICODE II: Codierung 2 4. Zahlenkonvertierung 2 5. Subsitute Befehl 9 6. Reguläre Ausdrücke 11 7. Subroutine I 9 8. Subroutine II 7 9. Rekursion 8 10. Frequenzliste 20 11. Allgemeine Befehle 5 12. Zeichensaetze 3 13. UNIX Internet Copy 5 14. Ein- und Ausgabeumleitung 2 15. Frequenzliste 5 Summe 100 Note Einwilligungserklärung Hiermit stimme ich einer Veröffentlichung meines Klausurergebnisses in der Vorlesung vom 03.02.2014 unter Verwendung meiner Matrikelnummer im Internet zu. Datum: Unterschrift:
1 Fragen zu utf-8 Aufgabe 1 Ein-/Ausgabe 1. Was bedeutet die Anweisung use utf8; in einem PERL Programm? (1 Punkt) 2. Was bedeutet die Anweisung use strict; in einem PERL Programm? (1 Punkt) 3. Wie lautet das open Statement in PERL zum Öffnen der utf-8 Datei sz.txt zum Schreiben? (1 Punkt) 3 PUNKTE 2 UNICODE und Codierung Aufgabe 2 UNICODE I: Properties Was geben die folgenden PERL Fragmente 2.1),2.2) und 2.3) aus, wenn die Zeilen der folgenden Liste mit den regulären Ausdrücken getestet werden. my @lines = ("mir geht es gut?", "Die 1. Klausur im Februar 2014", "ist sehr lange."); foreach my $line (@lines).... hier die Fragmente einsetzen 2.1 Fragement: while ($line =~ /(\P{Ll)(.{3,)\s/g) { print " $1 $2 \n"; Ausgabe: 2.2 Fragement: if ($line =~ /(\p{l.*(\p{p)/) { print " $1 gefolgt von $2 \n"; Seite 2 von 10
Ausgabe: 2.3 Fragement: if ($line =~ /\s([^.]+?)\s(.*)$/) { print " $1 $2\n"; Ausgabe: Aufgabe 3 UNICODE II: Codierung In wievielen nachfolgenden Bytes wird das Wort Öl, bestehend aus den 2 Buchstaben Ö und l in einer Datei gespeichert, wenn die Datei im Format 1) ISO-Latin und im Format 2) utf-8 gespeichert ist. Geben Sie Anzahl der Bytes bei 1) und 2) an: 9 PUNKTE 1. Anzahl der Bytes bei ISO-Latin : (1 Punkt) 2. Anzahl der Bytes bei UTF-8 : (1 Punkt) Aufgabe 4 Zahlenkonvertierung Geben Sie die fehlenden Zahlendarstellungen in den entsprechenden Codierung an. 2 PUNKTE 1. Dezimalzahl: 11 Binär: Oktal: Hexadezimal (1 Punkt) 2. Hexadezimal: AF Binär: Oktal: Dezimalzahl (1 Punkt) 2 PUNKTE Seite 3 von 10
3 Reguläre Ausdrücke Was wird bei folgenden substitute Befehlen ausgegeben? Begründen Sie kurz warum? Aufgabe 5 Substitute Befehl: 1. $string="sie findet in der Siemensküche sieben Siegel im Teesieb" $string=~s/sie.+sie/xxx/; print "$string; 2. $string="sie findet in der Siemensküche sieben Siegel im Teesieb" $string=~s/sie.+?sie/xxx/ig; print $string; 3. $string=""tiger haben gestreifte Haut, nicht nur gestreiftes Fell."" $string=~ s/gestreift(\p{l*)/schön$1/; print $string; Aufgabe 6 Reguläre Ausdrücke Sie arbeiten mit Wörtern aus einem deutschen Text, die in der Liste @woerter gespeichert sind. Wie lauten die regulären Ausdrücke (verwenden ausschliesslich(!) UNICODE Properties), die folgende Wörter in der Liste @woerter finden (geben Sie nur den regulären Ausdruck an!). 9 PUNKTE 1. findet alle Wörter, die mit 2 Vokalen anfangen. (1 Punkt) 2. findet alle Wörter, die mit einem Kleinbuchstaben beginnen und mit einem Punktuationszeichen enden. (2 Punkte) 3. findet alle Wörter, die mit einem Großbuchstaben, mit heit enden und maximal 10 Buchstaben lang sind. (2 Punkte) 4. findet alle Zahlen (auch Kommazahlen und Zahlen mit Tausendertrennzeichen, also z.b. 2,99 oder 12.800). (2 Punkte) 5. findet alle Wörter die genau eine Zahl enthalten. (1 Punkt) 6. findet alle Wörter mit Buchstaben die alphabetisch zwischen "a" "m" liegen. (1 Punkt) 7. findet alle Wörter, die mit einem Konsonanten (Tipp: einem Nichtvokal also) anfangen und höchstens 8 Buchstaben lang sind (2 Punkte) 11 PUNKTE Seite 4 von 10
4 Kleine Programme und Subroutinen Aufgabe 7 Subroutine I Schreiben Sie eine Subroutine sub anagramm($) die eine Zeichenkette als Skalar als Argument bekommt und den Wert 1 zurückgibt, wenn die Zeichenkette ein Anagramm ist, ansonsten den Wert 0. (Sie dürfen die Systemroutine rewind nicht verwenden.) z.b. $ja=&anagramm("anna") gibt den Wert 1 zurück. Aufgabe 8 Subroutine II Schreiben Sie eine Subroutine sub mittelwert($@), die mit zwei Argumenten aufgerufen wird. Im ersten Argument ist gespeichert, wie viele Elemente in der Liste sind. Die Liste wird als zweites Element übergeben. Die Subroutine soll den Mittelwert aller Werte aus der übergebenen Liste berechnen und zurückliefern. z.b. $erg=&mittelwert(3,(2,4,6)) berechnet den Wert 4 im Skalar $erg 9 PUNKTE Seite 5 von 10
Aufgabe 9 Rekursion 7 PUNKTE!/usr/bin/perl use strict; { my (@werte) = (1,34,6,4,9); my $result = &werbinich(@werte); print "Result= $result \n"; sub werbinich (@) { my @liste = @_; if (scalar(@liste) == 0) { return 0; else { shift(@liste); return 2 + &werbinich(@liste); 1. Welchen Wert gibt das Programm aus? (2 Punkte) 2. Was ist das Ergebnis bei der Liste my (@werte) = (1,34,6);? (1 Punkt) 3. Was ist das Ergebnis, bzw. was passiert, wenn in der Subroutine anstatt shift(@liste) die Anweisung pop(@liste) steht? (2 Punkte) 4. Was ist das Ergebnis, bzw. was passiert, wenn in der Subroutine anstatt shift(@liste) die Anweisung push(@liste,1) steht? (2 Punkte) 8 PUNKTE 5 PERL-Programm: Erstellen einer Frequenzliste Aufgabe 10 Es werden die vier häufigsten Wörter in einer Datei gesucht, die mindestens 4 Buchstaben lang sind. Von einer utf-8 Datei sz.txt, in der deutscher Text gespeichert ist, sollen die 4 häufigsten Wörter ausgeben werden, die mindestens 4 Buchstaben lang sind. Die Datei ist zu öffnen, soll zeilenweise gelesen, die Anzahl der gesuchten Wörter gezählt werden und in einen HASH eingetragen werden. Der HASH soll nach der Häufigkeit der Wörter sortiert werden und die sortierten Keys in einer Liste gespeichert werden. Aus dieser Liste sollen die 4 häufigsten Wörter auf dem Terminal ausgegeben werden und in der Datei viele.txt gespeichert werden. Seite 6 von 10
Es soll die Anzahl aller gesuchten Wörter ausgeben werden. Tragen Sie in den freigelassenen Raum auf der linken Seite, die den Anweisungen auf der rechten Seite entsprechenden PERL-Programmzeilen ein. Startzeile eines PERL-Programms 20 PUNKTE PERL soll sich streng verhalten Codierungseigenschaften einstellen Nationalität einstellen Programmanfang Variablendeklaration (füllen Sie diese Zeilen erst aus, wenn Sie wissen, welche Variablen benötigt werden) Öffnen der utf8 Datei sz.txt zum Lesen Öffnen der utf8 Datei viele.txt zum Schreiben Zeilenweise einlesen nach $line mit while Zerteilen Sie line an Zeichen, die keine Buchstaben sind (verwenden sie UNICODE Properties) und speichern Sie das Ergebnis in der Liste woerter) Durchlaufen der Liste, zählen Sie die gesuchten Wörter mit maximal 4 Buchstaben in speichern Sie sie HASH freq while-schleife zu Ende Speichern Sie alle Wörter, die in freq vorkommen, nach Häufigkeit sortiert, in sortierte_woerter Geben Sie am Terminal aus, wieviele gesuchten Wörter im Text vorkommen Geben Sie die fünf häufigsten Wörter auf dem Terminal aus und speichern Sie sie in der Ausgabedatei important.txt. nach dem Muster (z.b.): 1002 = der 1000 = die... Schliessen Sie geöffneten Dateihandles Programmende Seite 7 von 10
6 UNIX Aufgabe 11 Allgemeine Befehle Ordnen Sie die Befehle: "du", "ps", "ls", "top", "ip", "kill", "netstat", "ifconfig", "renice", "chmod" den Aufgabenbereichen zu 1. Prozessverwaltung: 2. Netzwerkeigenschaften/Netzwerkverwaltung: 3. Dateianzeige/Dateieigenschaften: Aufgabe 12 Zeichensätze Was ist hier passiert? Statt "abc äöü" wird "abc à à ü" angezeigt. Erklären Sie die Ursache und mögliche Abhilfe! 5 PUNKTE Aufgabe 13 Internet Copy Gegeben ist ein entfernter Server mit folgenden Daten: -die IP-Adresse: 2001:db8::1 -der Loginname: chef -das Passwort: dckskpm!3 -der Dateiname und Pfad: /projekt/wichtig.zip -der Hostname ist nicht bekannt Kopieren Sie die angegebene Datei auf Ihren Rechner in Ihr aktuelles Verzeichnis mit Hilfe des Befehls "scp"! Hinweis: IPv6-Adressen sind in vielen Fällen, so auch bei der Verwendung mit scp in eckige Klammern [] zu setzen. Wie lautet der Befehl? 3 PUNKTE Welche Angabe wird interaktiv abgefragt? (4 Punkte) (1 Punkt) Aufgabe 14 Ein- und Ausgabeumleitung Sie haben eine Datei namens "dump.sql" erhalten. Diese soll via "stdin" dem Programm "mysql" übergeben werden. Welcher der drei folgenden Aufrufe ist falsch? 5 PUNKTE Seite 8 von 10
1. mysql < dump.sql 2. cat dump.sql mysql 3. cat dump.sql > mysql Was passiert bei dem falschen Aufruf? 2 PUNKTE Aufgabe 15 Frequenzliste Sie haben einfachen Text (Kodierung utf8) als komprimierte Datei erhalten: text.txt.gz Packen Sie diese Datei aus! (1 Punkt) Erstellen Sie eine Datei "frequenzliste.txt" (Eine Liste mit zwei Spalten Anzahl und Wort, nach Anzahl sortiert) mit Hilfe der Linux-Befehle: cat, sort, tr und uniq unter Anwendung von Pipes in einer Befehlszeile. (4 Punkte) 5 PUNKTE Seite 9 von 10
es folgt ein Schmierblatt... Bitte entfernen Seite 10 von 10