Prof. Dr. Franz Schweiggert Abteilung Angewandte
Informationsverarbeitung 3. Mai 2002
Ingo MelzerBlatt 3
Software Engineering Praxis (SS 2002)
Abgabetermin 10. Mai 2002 vor den Übungen
Schreiben Sie ein kleines Perl-Skript, das die Häufigkeit von
alphanumerischen Zeichen bestimmt und sortiert ausgibt. Alle Parameter
sind als Dateinamen zu interpretieren. Sollte keiner angegeben sein,
so lesen Sie bitte von STDIN. Beispiel:
thales$ ./count.pl /usr/dict/words | tail -2
y: 3596
z: 410
Es ist bei Programmen oft sinnvoll zu testen, ob der Benutzer auch
eine gültige Eingabe gemacht hat. Schreiben Sie daher ein Perl-Skript,
das Zeilen überprüft, ob sie nur aus einer gültigen Uhrzeit bestehen.
Die Stunden (0 bis 23, einstellig mit optional führender Null) und
Minuten sind durch einen Doppelpunkt getrennt:
thales$ ./time.pl
21:11
Valid time
04:59
Valid time
3:00
Valid time
3:60
25:00
Nach einer Klausur haben wir eine Datei erzeugt, die alle Teilnehmer
enthält. Jede Zeile enthält durch Doppelpunkte getrennt Informationen.
Das vorletzte Feld enthält die Note, das letzte die aus mindestens sechs
Ziffern bestehende Matrikelnummer. Schreiben Sie ein Perl-Skript, das
einen Aushang der Form Letzte 4 Ziffern der Matrikelnummer:Note
erzeugt. Die Datei kann auch Kommentare und Fehler enthalten. Daher
sollten nur Zeilen beachtet werden, die mindestens 3 Felder haben
(Caveat: die Anzahl der Felder in jeder Zeile ist nicht konstant), die
Note bei uns gültig ist (1.0, 1.3, ..., 4.0, 5.0) und die Matrikelnummer
auch mindestens 6 Zeichen lang ist. Beispiel:
thales$ cat grade
Peter Lustlos:Medizin:5.0:123456
Paul Magnet:Mathe:4711:1.3:987654321
Peter, Paul, Mary:Info:1.5:123456
Ungueltig:WiWi:2.7:1234
Superman:Mathe:WiMa:Info:1.0:08154711
thales$ ./grade.pl grade
3456:5.0
4321:1.3
4711:1.0
Noch ein paar Tipps:
- Für die erste Aufgabe bietet sich ein Hash an.
- Bei allen Aufgaben kann der Diamond Operator genutzt werden.
- Reguläre Ausdrücke helfen auch bei allen Aufgaben.
- Bauen Sie bei der dritten Aufgabe einen Substitute.
Ingo Melzer
2002-05-03