Freitag, 29. Oktober 2010
Primzahlensieb nach Eratosthenes (POS1: 2AHIF, 2CHIF)
Verwenden Sie für die Primzahlbestimmung das Sieb des Eratosthenes .
Variante 1 (einfacher)
Das Programm soll eine Primzahlentabelle fixer Größe (z.B. 1000) erstellen und dann bisEOF
Zahlen einlesen und ausgeben, ob die Zahl eine Primzahl ist (oder nicht).Variante 2 (schwieriger)
Das Programm soll zunächst wieder eine fixe Tabelle erzeugen. In derPrüfphase(Eingabe der Zahlen) soll wie oben ermittelt werden, ob die Zahl eine Primzahl ist. Ist die eingegebene Zahl jedoch größer als das letzte Tabellenelement, so soll die Tabelle entsprechend erweitert und neu geprüft werden.
Abgabe
Nennen Sie das Projekt2x-name-python-prim
, wobei x "a" für 2AHIF und "c" für 2CHIF und name Ihr Familienname sein soll (bei Namensgleichheit machen Sie bitte 2x-name-vorname-python-prim
daraus). Das Programm selbst soll prim.py
heißen. Checken Sie das Projekt am CVS ein und "commiten" Sie Ihre letzte Version.Labels: Aufgabe, POS1-2, Python
Donnerstag, 28. Oktober 2010
C lernen (PR5: 5AD, 5BD)
Machen Sie ein Projekt
5ad-name-learn-c
bzw. 5bd-name-learn-c
, in dem Sie die Lösungen der 15 Aufgaben dokumentieren (in erster Linie getesteter und kommentierter Source-Code).Achtung: die erste Aufgabe ist ziemlich schwierig, da das Prüfen, ob eine Taste gedrückt wurde, systemabhängig ist. Lösen Sie diese Aufgabe sowohl für Windows als auch für Linux.
Informationen:
- http://de.wikibooks.org/wiki/C-Programmierung
- http://www.jobsnake.com/seek/articles/index.cgi?openarticle=8533
- www.jobsnake.com im Google-Cache
- http://stackoverflow.com/
- Am edvoftp gibt es unter pr5/C zusätzliche Informationen
- Theorie-Unterricht - Themen für RuD
Dienstag, 26. Oktober 2010
ruby-loganalyse (PR: 5AD, 5BD)
Bei Webservern ist es oft interessant, welche Browser oder Betriebssysteme auf der Clientseite verwendet werden.
Schreiben Sie ein ruby-Programm
loganalyse.rb
, welches ein (Apache-)Logfile einliest und folgende Information ermittelt:- Liste der Browser und deren Häufigkeiten, absteigend sortiert nach Häufigkeit, prüfen Sie dabei folgende Browser(strings) ohne Berücksichtigung der Groß-/Kleinschreibung:
"Firefox", "Opera", "Mozilla", "Netscape", "MSIE"
- Liste der Betriebssysteme und deren Häufigkeiten, absteigend sortiert nach Häufigkeit, prüfen Sie dabei folgende Betriebsysteme(strings) ohne Berücksichtigung der Groß-/Kleinschreibung:
"Linux", "Windows", "Mac"
- Liste der Subnetze (
xx.xx.xx.*
) mit deren Häufigkeiten, absteigend sortiert nach Häufigkeit (Verwenden Sie zur Unterscheidung der Netze einfach die ersten drei Teile der IP-Adresse am Zeilenanfang). - Liste der IP-Adressen mit deren Häufigkeiten, absteigend sortiert nach Häufigkeit.
- Zugriffe pro Tag mit den Häufigkeiten, sortiert nach Datum (sortieren Sie einfach die Datumstrings – z.B.
27/May/2007
).
66.249.73.115
). Die weiteren Informationen bekommt man durch (Sub-)Stringvergleich bzw. reguläre Ausdrücke.Ausschnitt aus einem Logfile (↵ bedeutet Zeilenumbruch):
66.249.73.115 - - [27/May/2007:06:50:10 +0200] "GET /r.simon/html/Unterlagen/mysql_de/mysql-2.html HTTP/1.1" 200 3358 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"↵ 66.249.73.115 - - [27/May/2007:06:50:15 +0200] "GET /d03011/Art_of_War_Forum/board.php?boardid=17&sid=c8422d9b444a6ca37c37194516d35532 HTTP/1.1" 200 6297 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"↵ 81.52.143.15 - - [27/May/2007:06:51:11 +0200] "GET /robots.txt HTTP/1.1" 404 379 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (http://www.voila.com/)"↵ 81.52.143.15 - - [27/May/2007:06:51:12 +0200] "GET /d00050/http:/213.133.115.133/p/www.alpennic.com/zp_at.html HTTP/1.1" 403 550 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (http://www.voila.com/)"↵ 66.249.73.115 - - [27/May/2007:06:52:02 +0200] "GET /d03011/Art_of_War_Forum/thread.php?postid=227 HTTP/1.1" 200 20545 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"↵ 193.170.149.156 - - [27/May/2007:06:52:24 +0200] "GET / HTTP/1.0" 200 209 "-" "check_http/1.99 (nagios-plugins 1.4.6)"↵Laden Sie sich eine Beispieldatei von http://edvowww.htlwrn.ac.at/HP/blosxom/C/beispiele/access.log herunter (Achtung 14MB).
Schreiben Sie eine Klasse
LogAnalyse
mit einem Konstruktor, dem der Dateiname übergeben wird. In der Klasse muss eine Methode implementiert werden, welche obige Aufgabenstellung löst.Im Hauptprogramm muss ein Objekt der Klasse angelegt werden und diese Methode aufgerufen werden. Der Dateiname kommt aus der Kommandozeile.
Hinweise:
Verwenden Sie einen Hash zum Speichern der Zählinformation.
Verwenden Sie die Sortiermethode
sort
von Arrays, um die entsprechende Liste zu erzeugen.Abgabe am Ende der zweiten Übungsstunde:
Nennen Sie das Projekt
5xd-name-ruby-logfile-i
Dabei gilt:
- x ... a für 5A, b für 5B
- name ... Ihr Familienname
- i ... Information 1 bis 5, wobei jede Gruppe nur eine Information nach folgender Regel bearbeiten muss:
- 5BD Gruppe 1
- 5BD Gruppe 2
- 5AD Gruppe 1
- 5AD Gruppe 2
- alle, die beim Übungstermin gefehlt haben
ergebnis.txt
. Das Projekt enthält also 2 Dateien:loganalyse.rb
ergebnis.txt
Freitag, 22. Oktober 2010
newprog.py - erzeugen eines Programmgerüsts (POS1: 2AHIF, 2CHIF)
Neue Programmdateien haben im Allgemeinen eine ziemlich fixe (Anfangs-)Struktur. So wird immer ein Programmkopf (Kommentar) benötigt, der den Namen des Autors und andere Informationen enthält. Für Python sieht das z.B. so aus:
""" author: Maier Maria matnr: d84123 file: newprog.py desc: Erstellen eines Programmgerüsts aus einer Vorlage. date: 2010-10-22 class: 5AHDVK catnr: 23 """
Schreiben Sie ein Pythonprogramm newprog.py
, welches aus einer Vorgabedatei so ein Programmgerüst erzeugt. In dieser Vorgabedatei gibt es Wörter, die dann von newprog.py
durch die entsprechenden Werte ersetzt werden. Obiges Gerüst ist aus folgender Vorgabedatei entstanden:
""" author: AUTOR matnr: EVIDENZNUMMER file: DATEINAME desc: ZWECK date: DATUM class: KLASSE catnr: KATALOGNUMMER """
Für die Ersetzungen soll ein Dictionary verwendet werden, z.B.:
ersetzungen = { "DATEINAME": progname, "ZWECK": zweck, "DATUM": datum, "AUTOR": "Maier Maria", "KATALOGNUMMER": "23", "EVIDENZNUMMER": "d84123", "KLASSE": "5AHDVK" }
progname
, zweck
, datum
müssen natürlich vorher bestimmt werden (eingegeben).
Zur Bestimmung des Datums verwenden Sie strftime()
:
from time import strftime datum = strftime("%F")
strftime()
kennt verschiedenste Formatangaben und liefert die aktuelle Uhrzeit bzw. Datum formatiert zurück. Hilfe mit help(strftime)
in Python bzw. man strftime
von der Shell (liefert die Beschreibung der C-Funktion, aber die Formatangaben gelten auch für Python).
Die Vorgabedatei und der Name der zu erzeugenden Datei sind auf der Kommandozeile anzugeben, z.B.:
~/work/tmp > python newprog.py vorgabe.py meinNeuesProgramm.py ~/work/tmp >
Wird keine Vorgabedatei angegeben, so wird eine Standardvrogabedatei verwendet:
~/work/tmp > python newprog.py meinNeuesProgramm.py ~/work/tmp >
Für die Programmargumente betrachten Sie folgendes Beispiel, welches die Argumente einfach untereinander ausgibt:
""" author: Maier Maria matnr: d84123 file: argtest.py desc: Demo der Argumente an das Programm von der Kommandozeile. date: 2010-10-22 class: 5AHDVK catnr: 23 """ from sys import argv for arg in argv: print arg
Ausgabe bei Aufruf von python argtest.py hallo du da
:
argtest.py hallo du da
Das heißt, argv[0]
enthält den Programmnamen.
Labels: Aufgabe, POS1-2, Python
Aufgabe Notenberechnung (POS1: 2AHIF, 2CHIF)
Schreiben Sie ein Pythonprogramm, welches aus einer unsortierten Liste von Schülern/Prozenten eine sortierte Notenliste erzeugt. Die Eingabe erfolgt entweder über eine Datei oder von der Standardeingabe (meist Tastatur).
Als Notenschlüssel gilt:
Prozent < 50 ... 5 Prozent < 63 ... 4 Prozent < 75 ... 3 Prozent < 88 ... 2 sonst ... 1
Eingabeformat
name vorname prozent
Beispiel:
Meier Manfred 78 Freund Rudi 56 Schulz Peter 66 Sommer Max 90 Meier Manfred 80 Freund Rudi 66 Sommer Max 90 Schulz Peter 66 Freund Rudi 70
Ausgabe
Name Note Freund Rudi 3 Meier Manfred 2 Schulz Peter 3 Sommer Max 1
Aufruf
Das Programm kann mit einem Parameter aufgerufen werden (Hilfe oder Dateiname). Ohne Parameter liest das Programm von der Standardeingabe.
python noten.py [-h|eingabedatei]
Gestalten Sie das Programm so, dass der Notenschlüssel möglichst einfach zu ändern ist (Tabelle).
Labels: Aufgabe, POS1-2, Python
Freitag, 15. Oktober 2010
Listings (Source-Code drucken)
Das Listing sollte folgende Eigenschaften aufweisen:
- Autor und Dateiname ist sofort ersichtlich
- Seitennummern werden gedruckt
- Syntax-Hilighting: Schlüsselworte, Kommentare usw. sollten unterschiedlich formatiert sein
- Querformat mit zwei Spalten, um Papier zu sparen (Zwei Seiten auf eine drucken)
- Es muss ein "fixed font" (z.B. Courier) verwendet werden, d.h. jedes Zeichen hat die selbe Breite (ausgenommen String-Konstante)
- Optional sollen Zeilennummern gedruckt werden (siehe Beispiele unten).
a2ps
(ASCII to PostScript, 2 = two = to, daher a2ps
) verwenden.a2ps -Phpg1 dreieck.py
dreieck.py
wird auf dem Drucker hpg1
ohne Zeilennummern gedruckt.a2ps --line-numbers=1 -Phpg2 dreieck.py newprog.py
dreieck.py
und newprog.py
werden am Drucker hpg2
mit Zeilennummern gedruckt.a2ps --line-numbers=5 -Phpg3 dreieck.py newprog.py
dreieck.py
und newprog.py
werden am Drucker hpg3
mit Zeilennummern gedruckt, wobei nur jede fünfte Zeilennummer gedruckt wird.a2ps
finden Sie in der man
-Page (man a2ps
).Die meisten IDEs (z.B. eclipse oder netbeans) und viele Editoren bieten ähnliche Möglichkeiten, jedoch passt bei
a2ps
der Ausdruck praktisch immer (abgesehen davon, dass a2ps
nur ASCII-versteht und damit Probleme mit Umlauten hat, aber damit kann man leben).Labels: allgemeines, POS1-1, POS1-2, PR5
pythagoräisches Tripel mit a+b+c == 1000 (POS1: 2AHIF, 2CHIF) - "Kür"
Zum Beispiel 32 + 42 = 9 + 16 = 25 = 52
Es gibt genau ein pythagoräisches Tripel, für das a + b + c = 1000 gilt. Finden Sie das Produkt abc und die Werte a, b und c.
Labels: Aufgabe, POS1-2, Python
Ermittle größtes 6-stelliges Palindrom als Produkt 3-stelliger Zahlen (POS1: 2AHIF, 2CHIF) - "Kür"
Schreiben Sie ein Pythonprogramm, welches das größte 6-stellige Palindrom aus dem Produkt zweier 3-stelliger Zahlen ermittelt.
Labels: Aufgabe, POS1-2, Python
Weitere Python Beispiele (POS1: 2AHIF, 2CHIF)
Anzahl der Wörter in der Eingabe
Schreiben Sie ein Pythonprogramm, welches die Wörter in der Eingabe (Datei und/oder interaktiv) zählt. Das Programm soll aus einer Datei lesen, wenn ein Dateiname auf der Kommandozeile angegeben wurde: python wc.py eingabe.txt
. Das Programm wc.py
liest die Wörter aus der Datei eingabe.txt
.
Worte sind für den ersten Prototyp einfach Strings, die von Whitespaces (Leerzeichen, Tabulator, Zeilenumbruch, "Dateianfang" oder "Dateiende" umgeben sind - Stichwort split). Verfeinern Sie Ihr Programm dahingehend, dass tatsächlich nur gültige Worte gezählt werden. Beachten Sie dabei, dass bei der Eingabe "Beachten Sie, dass sie auch die Satzzeichen berücksichtigen müssen!" auch die Worte "Sie" und "müssen" gezählt werden (aber ohne Beistrich und Rufzeichen).
Beim Aufruf von python wc.py
wird von stdin
(Tastatur) gelesen.
Beginnen Sie mit der Variante ohne Datei in der Kommandozeile. Finden Sie anschließend heraus, wie Ihr Programm Argumente aus der Kommandozeile verarbeiten kann (Stichwort argv). Ihr Programm soll beliebig viele Argumente bearbeiten können. Jedes Argument entspricht einer (Eingabe-) Datei.
Anzahl der verschiedenen Worte in der Eingabe
Schreiben Sie ein Pythonprogramm, welches die Wörter in der Eingabe (Datei und/oder interaktiv) zählt. Mehrfach vorkommende Worte werden nur einmal gezählt. Das Programm soll aus einer Datei lesen, wenn ein Dateiname auf der Kommandozeile angegeben wurde: python wcd.py eingabe.txt
. Das Programm wcd.py
liest die Wörter aus der Datei eingabe.txt
.
Für den Begriff Wort gilt das weiter oben gesagte, d.h. es müssen wirklich die Worte gezählt werden.
Verwenden Sie ein Set um festzustellen, ob ein Wort schon vorgekommen ist.
Worthäufigkeiten in der Eingabe ermitteln
Schreiben Sie ein Pythonprogramm, welches die Häufigkeiten der Wörter in der Eingabe (Datei und/oder interaktiv) ermittelt und dann sortiert nach Häufigkeiten ausgibt (häufigstes Wort zuerst). Das Programm soll aus einer Datei lesen, wenn ein Dateiname auf der Kommandozeile angegeben wurde: python hauf.py eingabe.txt
. hauf.py
liest die Wörter aus der Datei eingabe.txt
. Groß-/Kleinschreibung soll nicht beachtet werden (
).heim
== Heim
Beim Aufruf von python hauf.py
wird von stdin
(Tastatur) gelesen.
Ausgegeben werden soll immer das Wort und dann die Häufigkeit, sortiert nach Häufigkeit (häufigstes zuerst).
Hinweis: verwenden Sie ein Dictionary zum Erfassen der Daten (Wort ist Schlüssel, Häufigkeit ist der Wert). Wandeln Sie am Ende das Dictionary in eine Liste zum Sortieren um.
Vokabeltrainer
Schreiben Sie ein Programm, welches als Vokabeltrainer verwendet werden kann. Dazu soll eine Vokabeldatei eingelesen werden, welche Worte und deren Übersetzung enthält. Das Programm hat zwei Modi:
Prüfungsmodus Das Programm gibt in zufälliger Reihenfolge Wörter aus. Der Benutzer gibt die Übersetzung ein. Das Programm prüft, ob das Wort in der Liste der Übersetzungen vorkommt und zählt die richtigen/falschen Eingaben. Zum Schluss wird die Anzahl der Fehler bzw. richtgen ausgegeben.
Übungsmodus Das Programm gibt der Reihe nach Wörter plus deren Übersetzungen aus.
Buchstabierhilfe
Schreiben Sie ein Programm, welches jeden Text buchstabieren kann, d.h. für jedes a
das Wort Alfa
, für jedes b
das Wort Bravo
usw. ausgibt. Groß-/Kleinschreibung soll nicht berücksichtigt werden. Verwenden Sie z.B. das Nato-Alphabet (alpha, bravo, charlie, delta, echo,...)
Labels: Aufgabe, POS1-2, Python
Samstag, 9. Oktober 2010
Berkeley Bionics - eLEGS
Die Personen, die das in dem Video probieren sind sehr zuversichtlich und sprechen sogar davon, dass es jetzt zu gebrauchen ist. Ich glaube das nicht, aber trotzdem bin ich überzeugt, dass das Zukunft hat - bald.
Links:
- http://berkeleybionics.com/
- http://de.wikipedia.org/wiki/Exoskelett
- http://www.youtube.com/watch?v=WcM0ruq28dc
Freitag, 8. Oktober 2010
idle-python3.1
idle-python3.1
macht ein paar Probleme:- wenn man zur Komplettierung von Code Strg-Leertaste drückt, stürzt
idle-python3.1
komplett ab - eine Endlosschleife ohne Ein-/Ausgabe, die in einem Script mit F5 gestartet wurde, kann man nicht wie sonst mit Strg-C abbrechen, es ist sogar so schlimm, dass das ganze System langsamer wird.
Abhilfe: in eine Konsole (Strg-F1) wechseln, einloggen und dann
killall -KILL /usr/bin/python3.1
ausführen. Damit werden alle python3.1-Scripts und damitidle-python3.1
abgebrochen.
Labels: Python
Python Beispiele (POS1: 2AHIF, 2CHIF)
Summe aus einer beliebigen Anzahl von positiven Zahlen
Schreiben Sie ein Pythonprogrammsumme.py
, welches eine beliebige Anzahl positiver Zahlen einliest und die Summe ausgibt. Ende der Eingabe mit einer Zahl kleiner oder gleich 0.Mittelwert aus einer beliebigen Anzahl von positiven Zahlen
Schreiben Sie ein Pythonprogrammmittelwert.py
, welches eine beliebige Anzahl positiver Zahlen einliest und den Mittelwert ausgibt. Ende der Eingabe mit einer Zahl kleiner oder gleich 0.Primzahlenbestimmung
Schreiben Sie ein Pythonprogrammprimzahlen.py
, welches eine untere und eine obere Grenze einliest und die Primzahlen in diesem Bereich ausgibt.Größter gemeinsamer Teiler
Schreiben Sie ein Pythonprogrammggt.py
, welches zwei ganze positive Zahlen einliest und den größten gemeinsamen Teiler dieser Zahlen ausgibt.Zahlen raten (I)
Schreiben Sie ein Pythonprogrammraten.py
, welches eine Zahl zwischen 1 und 100 zufällig auswählt. Der Benutzer versucht diese Zahl zu erraten. Das Programm gibt Hinweise der Art Zahl zu kleinoder
Zahl zu großaus.
Hinweis: ganze Zufallszahlen bekommt man mit
randint(a, b)
, wobei a
die unter Grenze und b
die obere Grenze ist (from random import *
nicht vergessen).Zahlen raten (II)
Schreiben Sie ein Pythonprogrammcraten.py
, welches eine versucht eine gedachte Zahl zwischen 1 und 100 zu erraten. Der Benutzer gibt Hinweise der Art
Zahl zu kleinoder
Zahl zu großein (z.B. mit
<
und >
bzw. =
, wenn fertig).Schaltjahrbestimmung
Schreiben Sie ein Pythonprogrammschaltjahr.py
, welches ein Jahr einliest und ausgibt, ob es ein Schaltjahr ist.1×1-Tabelle
Schreiben Sie ein Pythonprogramm, welches das kleine 1×1 als Tabelle ausgibt.Labels: Aufgabe, POS1-2, Python
Mittwoch, 6. Oktober 2010
Header für Python-Programme (POS1: 1BHIF, 2AHIF, 2CHIF)
""" author: AUTOR matnr: EVIDENZNUMMER file: DATEINAME desc: ZWECK date: DATUM class: KLASSE catnr: KATALOGNUMMER """besitzen. Zum Beispiel:
""" author: Neubauer, Claudia matnr: d09666 file: fibonacci.py desc: Gibt die Fibonacci-Zahlen bis zu einer gegebenen Grenze aus date: 2010-10-06 class: 2AHIF catnr: 33 """
Labels: POS1-1, POS1-2, Python
Montag, 4. Oktober 2010
Ruby lernen (PR: 5AD, 5BD)
Machen Sie ein Projekt
5ad-name-learn-ruby
bzw. 5bd-name-learn-ruby
, in dem Sie die Lösungen der 15 Aufgaben dokumentieren (in erster Linie getesteter und kommentierter Source-Code).Achtung: die erste Aufgabe ist ziemlich schwierig, da das Prüfen, ob eine Taste gedrückt wurde, systemabhängig ist. Lösen Sie diese Aufgabe sowohl für Windows als auch für Linux.
Informationen:
- http://www.ruby-lang.org/de/
- http://www.jobsnake.com/seek/articles/index.cgi?openarticle=8533
- www.jobsnake.com im Google-Cache
- http://stackoverflow.com/
Abonnieren Posts [Atom]