Freitag, 29. Oktober 2010

 

Primzahlensieb nach Eratosthenes (POS1: 2AHIF, 2CHIF)

Schreiben Sie ein python Programm, welches für eingegebene Zahlen prüft, ob es eine Primzahl ist.
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 bis EOF 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 der Prü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 Projekt 2x-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: , ,


Donnerstag, 28. Oktober 2010

 

C lernen (PR5: 5AD, 5BD)

Lernen Sie C anhand der Vorgangsweise 15 Exercises for Learning a new Programming Language.

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:
Die Links zu jobsnake funktionieren nicht mehr. Am besten sucht man nach
"15 exercises for learning a new programming language"

Labels: , ,


Dienstag, 26. Oktober 2010

 

ruby-loganalyse (PR: 5AD, 5BD)

Diverse Server (z.B. Webserver) tragen verschiedene Informationen in ein Logfile ein. Webserver loggen normalerweise jeden Zugriff auf die Website: IP-Adresse, Seite, Browser, Betriebssystem.
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:
  1. 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"
  2. 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"
  3. 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).
  4. Liste der IP-Adressen mit deren Häufigkeiten, absteigend sortiert nach Häufigkeit.
  5. Zugriffe pro Tag mit den Häufigkeiten, sortiert nach Datum (sortieren Sie einfach die Datumstrings – z.B. 27/May/2007).
Die nötigen Informationen sind im Klartext im Logfile enthalten. Am Anfang jeder Zeile steht die IP-Adresse (z.B. 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:
Geben Sie auch das Ergebnis als Textdatei innerhalb des Projekts ab: ergebnis.txt. Das Projekt enthält also 2 Dateien:
  1. loganalyse.rb
  2. ergebnis.txt

Labels: , ,


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 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: , ,


Freitag, 15. Oktober 2010

 

Listings (Source-Code drucken)

Sollten Sie Source Code in gedruckter Form abliefern (müssen), dann sollte ein Listing etwa so aussehen:
Das Listing sollte folgende Eigenschaften aufweisen:
Beispiel mit Zeilennummern:

Beispiel mit Zeilennummern, nur jede 5. Zeile bekommt eine Nummer:

Unter Linux können Sie den Befehl a2ps (ASCII to PostScript, 2 = two = to, daher a2ps) verwenden.

Beispiele:
a2ps -Phpg1 dreieck.py
Die Datei dreieck.py wird auf dem Drucker hpg1 ohne Zeilennummern gedruckt.

a2ps --line-numbers=1 -Phpg2 dreieck.py newprog.py
Die Dateien dreieck.py und newprog.py werden am Drucker hpg2 mit Zeilennummern gedruckt.

a2ps --line-numbers=5 -Phpg3 dreieck.py newprog.py
Die Dateien dreieck.py und newprog.py werden am Drucker hpg3 mit Zeilennummern gedruckt, wobei nur jede fünfte Zeilennummer gedruckt wird.

Weitere Optionen zu 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: , , ,


 

pythagoräisches Tripel mit a+b+c == 1000 (POS1: 2AHIF, 2CHIF) - "Kür"

Ein pythagoräisches Tripel ist eine Menge von drei natürlichen Zahlen a < b < c, für die gilt: a2 + b2 = c2
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: , ,


 

Ermittle größtes 6-stelliges Palindrom als Produkt 3-stelliger Zahlen (POS1: 2AHIF, 2CHIF) - "Kür"

Ein Palindrom liest sich von vorne und hinten gleich. Das größte 4-stellige Palindrom als Produkt zweier 2-stelliger Zahlen ist 9009 = 91 × 99.
Schreiben Sie ein Pythonprogramm, welches das größte 6-stellige Palindrom aus dem Produkt zweier 3-stelliger Zahlen ermittelt.

Labels: , ,


 

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: , ,


Samstag, 9. Oktober 2010

 

Berkeley Bionics - eLEGS

Eine Anwendung der Robotik: Exoskelett für Rollstuhlfahrer. Super Sache!
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:

Labels: ,


Freitag, 8. Oktober 2010

 

idle-python3.1

idle-python3.1 macht ein paar Probleme:
  1. wenn man zur Komplettierung von Code Strg-Leertaste drückt, stürzt idle-python3.1 komplett ab
  2. 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 damit idle-python3.1 abgebrochen.

Labels:


 

Python Beispiele (POS1: 2AHIF, 2CHIF)

Summe aus einer beliebigen Anzahl von positiven Zahlen

Schreiben Sie ein Pythonprogramm summe.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 Pythonprogramm mittelwert.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 Pythonprogramm primzahlen.py, welches eine untere und eine obere Grenze einliest und die Primzahlen in diesem Bereich ausgibt.

Größter gemeinsamer Teiler

Schreiben Sie ein Pythonprogramm ggt.py, welches zwei ganze positive Zahlen einliest und den größten gemeinsamen Teiler dieser Zahlen ausgibt.

Zahlen raten (I)

Schreiben Sie ein Pythonprogramm raten.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 klein oder 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 Pythonprogramm craten.py, welches eine versucht eine gedachte Zahl zwischen 1 und 100 zu erraten. Der Benutzer gibt Hinweise der Art Zahl zu klein oder Zahl zu groß ein (z.B. mit < und > bzw. =, wenn fertig).

Schaltjahrbestimmung

Schreiben Sie ein Pythonprogramm schaltjahr.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: , ,


Mittwoch, 6. Oktober 2010

 

Header für Python-Programme (POS1: 1BHIF, 2AHIF, 2CHIF)

Jedes Python-Programm bzw. Python-Modul muss einen Header der Form
"""
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: , ,


Montag, 4. Oktober 2010

 

Ruby lernen (PR: 5AD, 5BD)

Lernen Sie Ruby anhand der Vorgangsweise 15 Exercises for Learning a new Programming Language.

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:

Labels: , ,


This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]