Computergrundlagen Programmieren lernen in Python
|
|
|
- Paulina Klein
- vor 10 Jahren
- Abrufe
Transkript
1 Computergrundlagen Programmieren lernen in Python Axel Arnold Institut für Computerphysik Universität Stuttgart Wintersemester 2011/12
2 Was ist Programmieren? Idee Algorithmus Programm Daten Computer Bildschirm A. Arnold Computergrundlagen 2/88
3 Algorithmus Wikipedia: Ein Algorithmus ist eine aus endlich vielen Schritten bestehende eindeutige Handlungsvorschrift zur Lösung eines Problems oder einer Klasse von Problemen. Ein Problem besteht dabei meist aus gegebenen Daten und einer Fragestellung. Beispiel: Gegeben Liste aller Teilnehmer der Vorlesung Fragestellung Wer wird die Klausur bestehen? Wieviele Studenten haben nur einen Vornamen? Wessen Matrikelnummer ist eine Primzahl? A. Arnold Computergrundlagen 3/88
4 Programm Ein Programm ist eine Realisation eines Algorithmus in einer bestimmten Programmiersprache. Es gibt derzeit mehrere 100 verschiedene Programmiersprachen Die meisten sind Turing-vollständig, können also alle bekannten Algorithmen umsetzen Softwareentwicklung und Programmieren Entwickeln der Algorithmen Aufteilen in einfachere Probleme Wiederverwendbarkeit Umsetzen in einer passenden Programmiersprache Das Schwierige sind die Algorithmen! A. Arnold Computergrundlagen 4/88
5 Von der Idee zum Programm Schritte bei der Entwicklung eines Programms. Problemanalyse Was soll das Programm leisten? Z.B. eine Nullstelle finden, Molekulardynamik simulieren Was sind Nebenbedingungen? Z.B. ist die Funktion reellwertig? Wieviele Atome?. Methodenwahl Schrittweises Zerlegen in Teilprobleme (Top-Down-Analyse) Z.B. Propagation, Kraftberechnung, Ausgabe Wahl von Datentypen und -strukturen Z.B. Listen oder Tupel? Wörterbuch? Wahl der Rechenstrukturen (Algorithmen) Z.B. Newton-Verfahren, Regula falsi Wahl der Programmiersprache A. Arnold Computergrundlagen 5/88
6 Von der Idee zum Programm Schritte bei der Entwicklung eines Programms. Implementation und Dokumentation Programmieren und gleichzeitig dokumentieren Kommentare und externe Dokumentation (z.b. Formeln). Testen auf Korrektheit Funktioniert das Programm bei erwünschter Eingabe? Z.B. findet es eine bekannte Lösung? Gibt es aussagekräftige Fehler bei falscher Eingabe? Z.B. vergessene Parameter, zu große Werte. Testen auf Effizienz Wie lange braucht das Programm bei beliebigen Eingaben? Wieviel Speicher braucht es?. Meist wieder zurück zur Problemanalyse, weil man etwas vergessen hat... A. Arnold Computergrundlagen 5/88
7 ... und jetzt das Ganze in Python schnell zu erlernende, moderne Programmiersprache tut, was man erwartet viele Standardfunktionen ( all batteries included ) Bibliotheken für alle anderen Zwecke freie Software mit aktiver Gemeinde portabel, gibt es für fast jedes Betriebssystem entwickelt von Guido van Rossum, CWI, Amsterdam A. Arnold Computergrundlagen 6/88
8 Informationen zu Python Aktuelle Versionen bzw x ist noch weiter verbreitet (z.b. Python im CIP-Pool) Diese Vorlesung behandelt daher noch 2.x Aber längst nicht alles, was Python kann Hilfe zu Python offizielle Homepage Einsteigerkurs A Byte of Python (englisch) (deutsch) mit Programmiererfahrung Dive into Python A. Arnold Computergrundlagen 7/88
9 Python starten Aus der Shell: > python Python (default, Aug , 05:14:39) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more.. >>> print "Hello World" Hello World >>> help("print") >>> exit() >>> markiert Eingaben print: Ausgabe auf das Terminal help(): interaktive Hilfe, wird mit q beendet Statt exit() reicht auch Control-d oder ipython mit Tab-Ergänzung, History usw. A. Arnold Computergrundlagen 8/88
10 Python-Skripte Als Python-Skript helloworld.py: #!/usr/bin/python # unsere erste Python-Anweisung print "Hello World" Mit python helloworld.py starten oder ausführbar machen (chmod a+x helloworld.py) Umlaute vermeiden oder Encoding-Cookie einfügen #! funktioniert genauso wie beim Shell-Skript Zeilen, die mit # starten, sind Kommentare Kommentare sind wichtig, um ein Programm verständlich machen!... und nicht, um es zu verlängern! A. Arnold Computergrundlagen 9/88
11 Beispiel: Fakultät Problem Gegeben: Eine ganze Zahl n Gesucht: Die Fakultät n! = 1 2 n von n Implementation # calculate factorial 1*2*...*n n = 5 factorial = 1 for k in range(1, n+1): factorial = factorial * k print n, "! =", factorial Ausgabe: 5! = 120 Gegebene Daten (n=5) fix ins Programm eingefügt = später lernen wir, Daten einzulesen Was bedeuten die ganzen Befehle? A. Arnold Computergrundlagen 10/88
12 Datentyp: Ganzzahlen >>> print >>> print >>> print 20/2 10 >>> print 3/2, -3/2 1-2 Klassische, mathematische Ganzzahlen Division liefert nur ganzzahligen Rest (anders in Python 3!) print gibt mit Komma auch mehrere Werte aus (nicht nur für Ganzzahlen) A. Arnold Computergrundlagen 11/88
13 Datentyp: (Fließ-)kommazahlen >>> print >>> print 6.023e23, 13.8E e e-23 >>> print 3.0/2 1.5 Reelle Zahlen der Form 6, e-23 steht z. B. für 1, Achtung: englische Schreibweise, Punkt statt Komma Keine Tausenderpunkte (oder -kommas) Endliche binäre Genauigkeit von Mantisse und Exponent (z. B. bei der Ausgabe) A. Arnold Computergrundlagen 12/88
14 Datentyp: Zeichenketten >>> print "Hello World" Hello World >>> print Hello World Hello World >>> print """Hello... World""" Hello World zwischen einfachen ( ) oder doppelten (") Anführungszeichen Über mehrere Zeilen mit dreifachen Anführungszeichen Leerzeichen sind normale Zeichen! "Hello World" "Hello World" Zeichenketten sind keine Zahlen! "1" 1 int(string) konvertiert Zeichenkette in Ganzzahl entsprechend float(string) für Fließkomma A. Arnold Computergrundlagen 13/88
15 Sich etwas merken Variablen >>> factorial = 2 >>> factor = 3 >>> print factorial, factor 2 3 >>> factorial = factorial * factor >>> factor = 4 >>> print factorial, factor 6 4 Werte können mit Namen belegt werden und verändert keine mathematischen Variablen, sondern Speicherplätze Daher ist factorial = factorial * factor kein Unsinn, sondern multipliziert factorial mit factor Die nachträgliche Änderung von factor ändert nicht factorial, das Ergebnis der vorherigen Rechnung! A. Arnold Computergrundlagen 14/88
16 Sich etwas merken Variablen >>> factorial = 2 >>> factor = 3 >>> print factorial, factor 2 3 >>> factorial = factorial * factor >>> factor = 4 >>> print factorial, factor 6 4 Variablennamen bestehen aus Buchstaben, Ziffern oder _ (Unterstrich), am Anfang keine Ziffer Groß-/Kleinschreibung ist relevant: Hase hase Richtig: i, some_value, SomeValue, v123, _hidden, _1 Falsch: 1_value, some value, some-value A. Arnold Computergrundlagen 14/88
17 Arithmetische Ausdrücke + Addition, bei Strings aneinanderfügen, z.b , "a" + "b" "ab" - Subtraktion, z.b * Multiplikation, Strings vervielfältigen, z.b. 2 * 3 = 6, "ab" * 2 "abab" / Division, bei ganzen Zahlen ganzzahlig, z.b. 3 / 2 1, -3 / 2-2, 3.0 / % Rest bei Division, z.b. 5 % 2 1 ** Exponent, z.b. 3**2 9, 0.1** mathematische Präzedenz (Exponent vor Punkt vor Strich), z. B. 2**3 * = 29 Präzedenz kann durch runde Klammern geändert werden: 2**(3 * (3 + 5)) = A. Arnold Computergrundlagen 15/88
18 for-schleifen Befehle Abbruch Voriger Befehl Für Wert in einer Sequenz Sequenzende Nächster Befehl Wiederholen eines Blocks von Befehlen Schleifenvariable nimmt dabei verschiedene Werte aus einer Sequenz (Liste) an Die abzuarbeitende Sequenz bleibt fest Kann bei Bedarf abgebrochen werden (Ziel erreicht, Fehler,... ) Für jeden Studenten in den Computergrundlagen finde einen Übungsplatz A. Arnold Computergrundlagen 16/88
19 for-schleifen in Python >>> for v in range(1, 3): print v 1 2 >>> b = 0 >>> for a in range(1, 100):... b = b + a >>> print b 4950 >>> print 100 * (100-1) / >>> print range(1,10) [1, 2, 3, 4, 5, 6, 7, 8, 9] Das aktuelle Element steht in den Variablen v bzw. a range(k,l) ist eine Liste der Zahlen a mit k a < l später lernen wir, Listen zu erstellen und verändern A. Arnold Computergrundlagen 17/88
20 Beispiel: Pythagoreische Zahlentripel (Schleifen) Problem Gegeben: Eine ganze Zahl c Gesucht: Zwei Zahlen a, b mit a 2 + b 2 = c 2 1. Verfeinerung: a = 0, b = c geht immer a,b > 0 2. Verfeinerung: Was, wenn es keine Lösung gibt? Fehlermeldung Methodenwahl Es muss offenbar gelten: a < c und b < c O.B.d.A. sei auch a b, also 0 < a b < c Durchprobieren aller Paare a, b mit 0 < a < c und a b < c: c = 5 = c 2 = 25, a 2 + b 2 = A. Arnold Computergrundlagen 18/88
21 Implementation # Try to find a pythagorean triple a^2 + b^2 = c^2. # parameter: rhs number, should be an integer larger than 0 c = # try all possible pairs for a in range(1,c): for b in range(a,c): if a**2 + b**2 == c**2: print "%d^2 + %d^2 = %d^2" % (a, b, c) exit() Ausgabe: 3^2 + 4^2 = 5^2 Gegebene Daten (c=5) fix ins Programm eingefügt = später lernen wir, Daten einzulesen Was bedeuten die ganzen Befehle? A. Arnold Computergrundlagen 19/88
22 Bedingte Ausführung wahr Bedingung falsch Wenn wahr Wenn falsch Nächster Schritt Das Programm kann auf Werte von Variablen verschieden reagieren Wird als Verzweigung bezeichnet Auch mehr Äste möglich (z.b. < 0, = 0, > 0) Student hat mehr als 50% Punkte? = zur Klausur zulassen A. Arnold Computergrundlagen 20/88
23 if: bedingte Ausführung in Python >>> a = 1 >>> if a < 5:... print "a ist kleiner als 5"... elif a > 5:... print "a ist groesser als 5"... else:... print "a ist 5" a ist kleiner als 5 >>> if a < 5 and a > 5:... print "Das kann nie passieren" if-elif-else führt den Block nach der ersten erfüllten Bedingung (logischer Wert True) aus Trifft keine Bedingung zu, wird der else-block ausgeführt elif oder else sind optional A. Arnold Computergrundlagen 21/88
24 Logische Ausdrücke ==,!= Test auf (Un-)Gleichheit, z.b. 2 == 2 True, 1 == 1.0 True, 2 == 1 False <,>,<=,>= Vergleich, z.b. 2 > 1 True, 1 <= -1 False or, and Logische Verknüpfungen oder bzw. und not Logische Verneinung, z.b. not False == True Vergleiche liefern Wahrheitswerte: True oder False Wahrheistabelle für die logische Verknüpfungen: a b a und b a oder b True True True True False True False True True False False True False False False False Präzedenz: logische Verknüpfungen vor Vergleichen 3 > 2 and 5 < 7 True, 1 < 1 or 2 >= 3 False A. Arnold Computergrundlagen 22/88
25 Blöcke und Einrückung >>> b = 0 >>> for a in range(1, 4):... b = b + a... print b >>> b = 0 >>> for a in range(1, 3): b = b + a... print b 9 Alle gleich eingerückten Befehle gehören zum Block Einzeilige Blöcke können auch direkt hinter den Doppelpunkt Einrücken durch Leerzeichen oder Tabulatoren (einfacher) A. Arnold Computergrundlagen 23/88
26 Blöcke und Einrückung ein Block kann nicht leer sein, aber der Befehl pass tut nichts: if a < 5: pass else: print "a ist groesser gleich 5" IndentationError bei ungleichmäßiger Einrückung: >>> print "Hallo" Hallo >>> print "Hallo" File "<stdin>", line 1 print "Hallo" ^ IndentationError: unexpected indent Falsche Einrückung führt im allgemeinen zu Programmfehlern! A. Arnold Computergrundlagen 23/88
27 Formatierte Ausgabe: der %-Operator >>> print "%d^2 + %d^2 = %05d^2" % (3, 4, 5) 3^2 + 4^2 = 00005^2 >>> print "Strings %s %10s" % ("Hallo", "Welt") Strings Hallo Welt >>> print "Fliesskomma %e %+8.4f %g" % (3.14, 3.14, 3.14) Fliesskomma e Im Beispiel bei der Ausgabe benutzt Ersetzen von %-Platzhaltern in einem String %d: Ganzahlen (Integers) %s: einen String einfügen %e, %f, %g: verschiedene Fließkommaformate %x[defgs]: füllt auf x Stellen auf %x.y[efg]: zeige y Nachkommastellen A. Arnold Computergrundlagen 24/88
28 Testen auf Effizienz Zahl (alle ohne Lösung) Zeit 0,2s 18,5s 30m Das ist sehr langsam! Geht das besser? Ja! 20 a^2 + b^2=c^2 20 a^2 + b^2=c^ b 10 b a a Statt alle Paare auszuprobieren, suche nur in der Umgebung des Halbkreises! A. Arnold Computergrundlagen 25/88
29 Testen auf Effizienz b a^2 + b^2=c^ a b a^2 + b^2=c^ a Methodenwahl, effizienterer Algorithmus: Sei zunächst a = 1 und b = c 1 Ist a 2 + b 2 > c 2, so müssen wir b verringern, und wir wissen, dass es keine Lösung mit b = c 1 gibt Ist a 2 + b 2 < c 2, so müssen wir a erhöhen und wir wissen, dass es keine Lösung mit a = 1 gibt Mit der selben Argumentation kann man fortfahren Wir haben alle Möglichkeiten getestet, wenn a > b braucht maximal c /2 statt c(c 1)/2 viele Schritte A. Arnold Computergrundlagen 25/88
30 Neue Implementation # parameter: rhs number, should be an integer larger than 0 c = 5 # starting pair a = 1 b = c - 1 while a <= b: if a**2 + b**2 < c**2: a += 1 elif a**2 + b**2 > c**2: b -= 1 else: print "%d^2 + %d^2 = %d^2" % (a, b, c) break Effizienz dieser Lösung: Zahl Zeit 0.04s 0.08s 0.65s 6.2s 62.4s Zeit (alt) 0,2s 18,5s 30m A. Arnold Computergrundlagen 26/88
31 while-schleifen Schleifenblock wahr Voriger Befehl Bedingung falsch Nächster Befehl Wiederholte Ausführung ähnlich wie for-schleifen Keine Schleifenvariable, sondern Schleifenbedingung Ist die Bedingung immer erfüllt, kommt es zur Endlosschleife Solange a > 0, ziehe eins von a ab Solange noch Zeilen in der Datei sind, lese eine Zeile A. Arnold Computergrundlagen 27/88
32 while-schleifen in Python >>> a = 1 >>> while a < 5:... a = a + 1 >>> print a 5 Führt den Block solange aus, wie die Bedingung wahr ist Block wird nicht ausgeführt, wenn Bedingung sofort verletzt ist: >>> a = 6 >>> while a < 5:... a = a print "erhoehe a um eins" >>> print a 6 A. Arnold Computergrundlagen 28/88
33 do-while-schleifen wahr Voriger Befehl Schleifenblock Bedingung falsch Nächster Befehl do...while-schleifen führen zunächst den Schleifenblock aus und überprüfen dann die Bedingung Nötig, wenn die Bedingung vom Ergebnis des Blocks abhängt In Python durch normale while-schleife ersetzen: >>> condition = True >>> while condition:... body()... condition = check() A. Arnold Computergrundlagen 29/88
34 break und continue: Schleifen beenden >>> for a in range(1, 10):... if a == 2: continue... elif a == 5: break... print a Beide überspringen den Rest des Schleifenkörpers break bricht die Schleife ganz ab continue springt zum Anfang Aber immer nur die innerste Schleife Befehl Voriger Befehl continue break Befehl Für Wert in einer Sequenz Sequenzende Nächster Befehl A. Arnold Computergrundlagen 30/88
35 Parameter einlesen import sys # get integer c from the command line try: c = int(sys.argv[1]) except: sys.stderr.write("usage: %s <c>\n" % sys.argv[0]) exit(-1) print c Bisher ist c fest im Programm = wenn wir c ändern wollen, müssen wir das Programm ändern Besser von der Kommandozeile lesen! So können wir das Programm direkt vom Terminal benutzen Wir brauchen keinen Editor, wenn es mal tut A. Arnold Computergrundlagen 31/88
36 Parameter einlesen import sys # get integer c from the command line try: c = int(sys.argv[1]) except: sys.stderr.write("usage: %s <c>\n" % sys.argv[0]) exit(-1) print c import sys lädt das sys-modul, dazu später mehr sys.argv[i] gibt dann den i-ten Parameter des Programms sys.argv[0] ist der Name des Skripts int(string) konvertiert Zeichenkette in Ganzzahl Der except-block wird nur ausgeführt, wenn es beim Lesen von c einen Fehler gab A. Arnold Computergrundlagen 31/88
37 Beispiel: Sortieren Gegeben: Gesucht: Liste A = a o,..., a N Liste A = a o,..., a N mit denselben Elementen wie A, aber sortiert, also a 0 a 1... a N Datentyp ist egal, so lange definiert ist In Python ganz einfach: A.sort() = A wird umsortiert B = sorted(a) = A bleibt gleich, B ist die sortierte Liste >>> A = [2,1,3,5,4] >>> print sorted(a), A [1, 2, 3, 4, 5] [2, 1, 3, 5, 4] >>> A.sort() >>> print A [1, 2, 3, 4, 5] Aber was passiert da nun? Wie sortiert der Computer? A. Arnold Computergrundlagen 32/88
38 Sortieralgorithmus 1: Bubblesort Idee paarweises Sortieren, größere Werte steigen wie Blasen auf ein Durchlauf aller Elemente = größtes Element ganz oben m Durchläufe = m oberste Elemente einsortiert = nach spätestens N Durchläufen fertig fertig, sobald nichts mehr vertauscht wird Effizienz im Schnitt N/2 Durchläufe mit N/2 Vergleichen = Laufzeit O(N 2 ) Auch Worst Case N 1 + N = O(N 2 ) Kein zusätzlicher Speicherbedarf A. Arnold Computergrundlagen 33/88
39 Implementierung def sort(a): "sort list A in place" N = len(a) for round in range(n): changed = False for k in range(n - round - 1): if A[k] > A[k+1]: A[k], A[k + 1] = A[k+1], A[k] changed = True if not changed: break A = [1,3,2,5,4] sort(a) print A Ausgabe: [1, 2, 3, 4, 5] A. Arnold Computergrundlagen 34/88
40 Listen in Python >>> kaufen = [ "Muesli", "Milch", "Obst" ] >>> kaufen[1] = "Sahne" >>> print kaufen[-1] Obst >>> del kaufen[-1] >>> print kaufen [ Muesli, Sahne ] >>> print "Saft" in kaufen False komma-getrennt in eckigen Klammmern können Daten verschiedenen Typs enthalten liste[i] bezeichnet das i-te Listenelement, negative Indizes starten vom Ende del elem löscht das Listenelement elem x in liste überprüft, ob liste ein Element mit Wert x enthält A. Arnold Computergrundlagen 35/88
41 Listen in Python >>> kaufen = [ "Muesli", "Milch", "Obst" ] >>> kaufen.append("brot") >>> kaufen.append("milch") >>> print kaufen [ Muesli, Milch, Obst, Brot, Milch ] >>> kaufen.remove("milch") >>> print kaufen [ Muesli, Obst, Brot, Milch ] >>> kaufen.remove("saft") ValueError: list.remove(x): x not in list liste.append(x) hängt x am Ende der Liste liste an liste.remove(x) entfernt das erste Element mit dem Wert x aus der Liste Fehler, wenn es kein solches gibt (daher mit in testen) A. Arnold Computergrundlagen 35/88
42 Listen in Python >>> kaufen = kaufen + [ "Oel", "Mehl" ] >>> print kaufen [ Muesli, Sahne, Obst, Oel, Mehl ] >>> for l in kaufen[1:3]:... print l Sahne Obst >>> print len(kaufen[:4]) 3 + fügt zwei Listen aneinander [i:j+1] ist die Subliste vom i-ten bis zum j-ten Element Leere Sublisten-Grenzen entsprechen Anfang bzw. Ende, also stets liste == liste[:] == liste[0:] for-schleife iteriert über alle Elemente len() berechnet die Listenlänge A. Arnold Computergrundlagen 35/88
43 Vorsicht: Flache Kopien! >>> kaufen = [ "Muesli", "Milch", "Obst" ] Flache Kopie: >>> merken = kaufen >>> del kaufen[-1] >>> print merken [ Muesli, Sahne ] Subliste, echte Kopie: >>> merken = kaufen[:] >>> del kaufen[-1] >>> print merken [ Muesli, Sahne, Obst ] = macht in Python flache Kopien von Listen! Flache Kopien (shallow copies) verweisen auf dieselben Daten Änderungen an einer flachen Kopie betreffen auch das Original Sublisten sind echte Kopien (deep copies, weil alles kopiert wird) daher ist kaufen[:] eine echte Kopie von kaufen A. Arnold Computergrundlagen 36/88
44 Vorsicht: Flache Kopien! >>> element = [] >>> liste = [ element, element ] # flache Kopien! >>> liste[0].append("hallo") >>> print liste [[ Hallo ], [ Hallo ]] Mit echten Kopien (deep copies) >>> liste = [ element[:], element[:] ] # tiefe Kopien! >>> liste[0].append("welt") >>> print liste [[ Hallo, Welt ], [ Hallo ]] Auch Listen in Listen sind flache Kopien und können daher mehrmals auf dieselben Daten verweisen kann zu unerwarteten Ergebnissen führen A. Arnold Computergrundlagen 36/88
45 Tupel: unveränderbare Listen >>> kaufen = "Muesli", "Kaese", "Milch" >>> for f in kaufen: print f Muesli Kaese Milch >>> kaufen[1] = "Camembert" TypeError: tuple object does not support item assignment >>> print k + ("Kaese", "Milch") ( Muesli, Kaese, Milch, Muesli, Kaese, Milch ) komma-getrennt in runden Klammern Solange eindeutig, können die Klammern weggelassen werden können nicht verändert werden ansonsten wie Listen einsetzbar Zeichenketten sind Tupel von Zeichen A. Arnold Computergrundlagen 37/88
46 Tupel: unveränderbare Listen >>> options, args = parser.parse_args() >>> A=1 >>> B=2 >>> A, B = B, A >>> print A, B 2 1 So hingegen nicht: >>> A = B >>> B = A >>> print A, B 1 1 Listen und Tupel können links vom Gleichheitszeichen stehen Elemente werden der Reihe nach zugeordnet A,B = B,A tauscht also die Werte zweier Variablen aus (Tupelzuweisung!) A. Arnold Computergrundlagen 37/88
47 Beispiel: Sieb des Eratosthenes (Listen) Problem Gegeben: Gesucht: Eine ganze Zahl N Alle Primzahlen kleiner als N Methode: Sieb des Eratosthenes Betrachte Liste aller Zahlen zwischen 2 und N Streiche nacheinander alle echten Vielfachen von (Prim-)zahlen Was übrig bleibt, sind Primzahlen = Sieb A. Arnold Computergrundlagen 38/88
48 Implementation import sys # last prime to print out N = int(sys.argv[1]) primes = range(2,n) for number in range(2,n/2): # not a prime, multiples already deleted if not number in primes: continue # remove all multiples multiple = 2*number while multiple < N: if multiple in primes: primes.remove(multiple) multiple += number print primes Ausgabe: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] A. Arnold Computergrundlagen 39/88
49 Funktionen Schritt 1 Schritt 2 Schritt 3 Schritt 4 Unterprogramm/Prozedur/Funktion Funktionen (Unterprogramme, Prozeduren) unterbrechen die aktuelle Befehlskette und fahren an anderer Stelle fort Kehren an ihrem Ende wieder zur ursprünglichen Kette zurück Funktionen können selber wieder Funktionen aufrufen Vermeiden Code-Duplikation kürzerer Code besser wartbar, Fehler müssen nur einmal verbessert werden A. Arnold Computergrundlagen 40/88
50 Funktionen in Python >>> def printpi():... print "pi ist ungefaehr " >>> printpi() pi ist ungefaehr >>> def printmax(a, b):... if a > b: print a... else: print b >>> printmax(3, 2) 3 eine Funktion kann beliebig viele Argumente haben Argumente verhalten sich wie Variablen Beim Aufruf bekommen die Argumentvariablen Werte in der Aufrufreihenfolge Der Funktionskörper ist wieder ein Block A. Arnold Computergrundlagen 41/88
51 Lokale Variablen >>> def max(a, b):... if a > b: maxval=a... else: maxval=b... print maxval >>> max(3, 2) 3 >>> print maxval NameError: name maxval is not defined neue Variablen innerhalb einer Funktion sind lokal existieren nur während der Funktionsausführung globale Variablen können nur gelesen werden >>> faktor=2 >>> def strecken(a): print faktor*a >>> strecken(1.5) A. Arnold Computergrundlagen 42/88
52 Vorgabewerte und Argumente benennen >>> def lj(r, epsilon = 1.0, sigma = 1.0):... return 4*epsilon*( (sigma/r)**6 - (sigma/r)**12 ) >>> print lj(2**(1./6.)) 1.0 >>> print lj(2**(1./6.), 1, 1) 1.0 Argumentvariablen können mit Standardwerten vorbelegt werden diese müssen dann beim Aufruf nicht angegeben werden >>> print lj(r = 1.0, sigma = 0.5) >>> print lj(epsilon=1.0, sigma = 1.0, r = 2.0) beim Aufruf können die Argumente auch explizit belegt werden dann ist die Reihenfolge egal A. Arnold Computergrundlagen 43/88
53 return: eine Funktion beenden >>> def printmax(a, b):... if a > b:... print a... return... print b >>> printmax(3, 2) 3 >>> def max(a, b):... if a > b: return a... else: return b >>> print max(3, 2) 3 return beendet die Funktion sofort (vgl. break) eine Funktion kann einen Wert zurückliefern der Wert wird bei return spezifiziert A. Arnold Computergrundlagen 44/88
54 Dokumentation von Funktionen def max(a, b): "Gibt das Maximum von a und b aus." if a > b: print a else: print b def min(a, b): """ Gibt das Minimum von a und b aus. Funktioniert ansonsten genau wie die Funktion max. """ if a < b: print a else: print b Dokumentation optionale Zeichenkette vor dem Funktionskörper wird bei help(funktion) ausgegeben A. Arnold Computergrundlagen 45/88
55 Sortieralgorithmus 2: Quicksort Idee Teile und Herrsche (Divide & Conquer): Aufteilen in zwei kleinere Unterprobleme Liste ist fertig sortiert, falls N 1 wähle Pivot- (Angel-) element p erzeuge Listen K und G der Elemente kleiner/größer als p sortiere die beiden Listen K und G Ergebnis ist die Liste K {p} G Effizienz im Schnitt log 2 N-mal aufteilen, dabei N Elemente einordnen = Laufzeit O(N log N) Aber Worst Case N 1 + N = O(N 2 ) A. Arnold Computergrundlagen 46/88
56 Implementation def sort(a): print "sorting", A if len(a) <= 1: return A pivot = A[0] smaller = [a for a in A[1:] if a < pivot] larger = [a for a in A[1:] if a >= pivot] print "smaller=",smaller,"pivot=",pivot,"larger=",larger return sort(smaller) + [pivot] + sort(larger) A = [3,1,2,5,4,2,3,4,2] print sort(a) Ausgabe: sorting [3, 1, 2, 5, 4, 2, 3, 4, 2] smaller= [1, 2, 2, 2] pivot= 3 larger= [5, 4, 3, 4] sorting [1, 2, 2, 2]... A. Arnold Computergrundlagen 47/88
57 Rekursion def factorial(n): "calculate the faculty of n, n >= 0." # termination for n=0,1 if n <= 1: return 1 # n! = n * (n-1)! return n * factorial(n-1) n = 5 print n, "! =", factorial(n) Eine Funktion, die sich selber aufruft, heißt rekursiv Rekursionen treten in der Mathematik häufig auf Viele Algorithmen lassen sich so elegant formulieren Die Verarbeitung ist dann aber meist nicht einfach zu verstehen Schon ob eine Rekursion endet, ist nicht immer offensichtlich Für die Fakultät ist die Schleife vom Anfang der Vorlesung effizienter A. Arnold Computergrundlagen 48/88
58 Listen aus Listen erzeugen >>> print [a**2 for a in [0,1,2,3,4]] [0, 1, 4, 9, 16] >>> print sum([a**2 for a in range(5)]) 30 >>> print [a for a in range(10) if a % 2 == 1] [1, 3, 5, 7, 9] >>> print [(a,b) for a in range(3) for b in range(2)] [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)] Listen können in neue Listen abgebildet werden Syntax: [ausdruck for variable in liste if bedingung] ausdruck: beliebige Formel, die meist von variable abhängt variable,liste: wie in einer for-schleife bedingung: welche Werte für variable zulässig sind mehrere fors können aufeinander folgen (rechteckiges Schema) A. Arnold Computergrundlagen 49/88
59 Beispiel: Wörter zählen (dicts) # count words in "gpl.txt" count = {} for line in open("gpl.txt"): # split into words at blanks text = line.split() for word in text: # normalize word word = word.strip(".,:;()\"").lower() # account: if already known, increase count if word in count: count[word] += 1 # other create counter else: count[word] = 1 # sort according to count and print 5 most used words c_sorted = sorted(count, key=lambda word: count[word]) for word in reversed(c_sorted[-5:]): print "%s: %5d" % (word, count[word]) A. Arnold Computergrundlagen 50/88
60 Wörterbücher (dicts) >>> de_en = { "Milch": "milk", "Mehl": "flour" } >>> de_en["eier"]="eggs" >>> print de_en["milch"] milk >>> if "Mehl" in de_en: print "I can translate \"Mehl\"" I can translate "Mehl" Komma-getrennte Paare von Schlüsseln (Keys) und Werten in geschweiften Klammern Die Werte sind zu den Schlüsseln assoziiert Vergleiche Wörterbuch: Deutsch Englisch Mit in kann nach Schlüsseln gesucht werden Gut für unstrukturierte Daten A. Arnold Computergrundlagen 51/88
61 Wörterbücher (dicts) >>> for de in de_en: print de, "=>", de_en[de] Mehl => flour Eier => eggs Milch => milk >>> de_en["mehl"] = "wheat flour" >>> for de, en in de_en.iteritems(): print de, "=>", en Mehl => wheat flour Eier => eggs Milch => milk Werte sind änderbar (siehe auch Zählprogramm) Indizierung über die Keys, nicht Listenindex o.ä. for iteriert auch über die Schlüssel Oder mit iteritems über Schlüssel-Wert-Tupel A. Arnold Computergrundlagen 51/88
62 Stringmethoden Zeichenkette in Zeichenkette suchen "Hallo Welt".find("Welt") 6 "Hallo Welt".find("Mond") -1 Zeichenkette in Zeichenkette ersetzen " abcdabcabe ".replace("abc", "123") 123 d123abe Groß-/Kleinschreibung ändern "hallo".capitalize() Hallo " Hallo Welt".upper() HALLO WELT " Hallo Welt".lower() hallo welt in eine Liste zerlegen "1, 2, 3, 4".split(",") [ 1, 2, 3, 4 ] zuschneiden " Hallo ".strip() Hallo "..Hallo..".lstrip(".") Hallo.. A. Arnold Computergrundlagen 52/88
63 Ein-/Ausgabe: Dateien in Python input = open("in.txt") output = open("out.txt", "w") linenr = 0 while True: line = input.readline() if not line: break linenr += 1 output.write("%d: %s\n" % (linenr, line)) output.close() Dateien sind mit open(datei, mode) erzeugte Objekte Nur beim Schließen (close) werden alle Daten geschrieben Mögliche Modi (Wert von mode): r oder leer lesen w schreiben, Datei zuvor leeren a schreiben, an existierende Datei anhängen A. Arnold Computergrundlagen 53/88
64 Ein-/Ausgabe: Dateien in Python input = open("in.txt") output = open("out.txt", "w") linenr = 0 while True: line = input.readline() if not line: break linenr += 1 output.write("%d: %s\n" % (linenr, line)) output.close() datei.read(): Lesen der gesamten Datei als Zeichenke datei.readline(): Lesen einer Zeile als Zeichenkette Je nach Bedarf mittels split, int oder float verarbeiten A. Arnold Computergrundlagen 53/88
65 Ein-/Ausgabe: Dateien in Python input = open("in.txt") output = open("out.txt", "w") linenr = 0 while True: line = input.readline() if not line: break linenr += 1 output.write("%d: %s\n" % (linenr, line)) output.close() datei.write(data): Zeichenkette data zur Datei hinzufügen Anders als print kein automatisches Zeilenende Bei Bedarf Zeilenumbruch mit \n Daten, die keine Zeichenketten sind, mittels %-Operator oder str umwandeln A. Arnold Computergrundlagen 53/88
66 Dateien als Sequenzen input = open("in.txt") output = open("out.txt", "w") linenr = 0 for line in input: linenr += 1 output.write(str(linenr) + ": " + line + "\n") output.close() Alternative Implementierung zum vorigen Beispiel Dateien verhalten sich in for wie Listen von Zeilen Einfache zeilenweise Verarbeitung Aber kein Elementzugriff usw.! write: alternative, umständlichere Ausgabe mittels str-umwandlung A. Arnold Computergrundlagen 54/88
67 Standarddateien wie in der bash gibt es auch Dateien für Standard-Eingabe, -Ausgabe und Fehler-Ausgabe Die Dateivariablen sind sys.stdin Eingabe (etwa Tastatur) sys.stdout Standard-Ausgabe sys.stderr Fehler-Ausgabe import sys line = sys.stdin.readline() sys.stderr.write("don t know what to do with %s\n" % line) for i in range(10): sys.stdout.write("%d, " % i) sys.stdout.write("\n) Ausgabe: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A. Arnold Computergrundlagen 55/88
68 Ein-/Ausgabe mittels raw_input >>> passwd = raw_input("enter password to continue: ") enter a password to continue: secret >>> control = input("please repeat the password: ") please repeat the password: passwd >>> if passwd == control: print "both are the same!" both are the same! Tastatureingaben können einfach über raw_input in eine Zeichenkette gelesen werden input wertet diese hingegen als Python-Ausdruck aus Dies ist eine potentielle Fehlerquelle: >>> passwd = input("enter a password to continue: ") enter a password to continue: secret NameError: name secret is not defined Eingaben über die Kommandozeile sind meist praktischer oder wäre Dir ein mv lieber, dass nach den Dateien fragt? A. Arnold Computergrundlagen 56/88
69 Umlaute Encoding-Cookie #! /usr/bin/python # encoding: utf-8 # Zufällige Konstante α alpha = 0.5 # α 2 ausgeben print "Mir dünkt, dass α 2 Ausgabe: Mir dünkt, dass α 2 = 0.25 = %g" % (alpha**2) Umlaute funktionieren bei Angabe der Codierung Muss in den ersten beiden Zeilen stehen Variablennamen trotzdem in ASCII! A. Arnold Computergrundlagen 57/88
70 Programmierpraxis: Funktionen statt Copy&Paste Fehler in kopiertem Code sind schwer an allen Stellen zu beheben Prozedurnamen beschreiben, was passiert Daher besser so: def countlines(filename): c = 0 for l in open(filename): c += 1 return c print countlines("in1.txt") print countlines("in2.txt") Und nicht so: # was tut das bloss? c = 0 for l in open("in1.txt"): c += 1 print c c = 0 for l in open("in2.txt"): c += 1 print c A. Arnold Computergrundlagen 58/88
71 Programmierpraxis: Variablen statt Konstanten Willkürliche Konstanten erschweren Austauschbarkeit und Wiederbenutzung Variablen mit sprechenden Namen sind einfacher zu verstehen Bei Funktionen: zu Parametern machen Daher besser so: start = 0.01 tolerance = min = minimum(pot, start, tolerance) Und nicht so: # welche Genauigkeit hat das? min = minimum(pot, 0.01, ) Und auch nicht so: a = 0.01 b = x = minimum(pot, a, b) A. Arnold Computergrundlagen 59/88
72 Module >>> import sys >>> print "program name is \"%s\"" % sys.argv[0] program name is "" >>> from random import random >>> print random() Bis jetzt haben wir einen Teil der Basisfunktionalität von Python gesehen. Weitere Funktionen sind in Module ausgelagert Manche sind nicht Teil von Python und müssen erst nachinstalliert werden Die Benutzung eines installierten Moduls muss per import angekündigt werden ( Modul laden ) Hilfe: help(modul), alle Funktionen: dir(modul) A. Arnold Computergrundlagen 60/88
73 Das sys-modul Schon vorher für Eingaben benutzt Stellt Informationen über Python und das laufende Programm selber zur Verfügung sys.argv: Kommandozeilenparameter, sys.argv[0] ist der Programmname sys.stdin, sys.stdout, sys.stderr: Standard-Ein-/Ausgabedateien import sys sys.stdout.write("running %s\n" % sys.argv[0]) line = sys.stdin.readline() sys.stderr.write("some error message\n") A. Arnold Computergrundlagen 61/88
74 optparse-modul: Parameter einlesen from optparse import OptionParser parser = OptionParser() parser.add_option(" f", " file", dest="filename", help="ausgabe in FILE", metavar="file") options, args = parser.parse_args() optparse liest Kommandozeilenflags add_option spezifiziert eine Option zum Beispiel mit kurzer und langer Form des Namens ( -f, -file ) einer Zielvariablen für den vom Benutzer gegebenen Wert einem zugehörigen Hilfetext einem bestimmten Datentyp (type="int") Bei Aufruf python parse.py -f test a b c ist: options ein Objekt mit options.filename = test args = [ a, b, c ] A. Arnold Computergrundlagen 62/88
75 argparse-modul: Parameter in Python 2.7 from argparse import ArgumentParser parser = ArgumentParser() parser.add_argument(" f", " file", dest="filename", help="write to FILE", metavar="file") parser.add_argument("positional", help="fixed argument") parser.add_argument("number", type=int, help="integer arg") args = parser.parse_args() Ab Python 2.7: verbessertes Modul argparse add_argument unterstützt auch positionale Argumente, die ohne Optionsmarker auf der Kommandozeile stehen Fehler bei falschem Typ oder fehlenden Parametern Bei Aufruf python parse.py -f test a 1 ist: args.filename = test args.positional = a args.number = 1 A. Arnold Computergrundlagen 63/88
76 math- und random-modul import math import random def boxmuller(): """ calculate Gaussian random numbers using the Box-Muller transform """ r1, r2 = random.random(), random.random() return math.sqrt(-2*math.log(r1))*math.cos(2*math.pi*r2) math stellt viele mathematische Grundfunktionen zur Verfügung, z.b. floor/ceil, exp/log, sin/cos, pi random erzeugt pseudozufällige Zahlen random(): gleichverteilt in [0,1) randint(a, b): gleichverteilt ganze Zahlen in [a, b] gauss(m, s): normalverteilt mit Mittelwert m und Varianz s A. Arnold Computergrundlagen 64/88
77 os-modul: Betriebssystemfunktionen import os import os.path dir = os.path.dirname(file) name = os.path.basename(file) altdir = os.path.join(dir, "alt") if not os.path.isdir(altdir): os.mkdir(altdir) newpath = os.path.join(altdir, name) if not os.path.exists(newpath): os.rename(file, newpath) betriebssystemunabhängige Pfadtools im Untermodul os.path: z.b. dirname, basename, join, exists, isdir os.system: Programme wie von der Shell aufrufen os.rename/os.remove: Dateien umbenennen / löschen os.mkdir/os.rmdir: erzeugen / entfernen von Verzeichnissen A. Arnold Computergrundlagen 65/88
78 GUI: das Tkinter-Modul import Tkinter # main window and connection to Tk root = Tkinter.Tk() root.title("test program") # a simple button, ending the program end = Tkinter.Button(root, text = "Quit", command = root.quit) end.pack({"side": "bottom"}) root.mainloop() bietet Knöpfe, Textfenster, Menüs, einfache Graphik usw. mit Tk.mainloop geht die Kontrolle an das Tk-Toolkit danach eventgesteuertes Programm (Eingaben, Timer) lehnt sich eng an Tcl/Tk an ( A. Arnold Computergrundlagen 66/88
79 Numerik mit Python numpy numpy ist ein Modul für effiziente numerische Rechnungen Nicht fester Bestandteil von Python, aber Paket in allen Linux-Distributionen Alles nötige unter Bietet unter anderem mathematische Grundoperationen Sortieren, Auswahl von Spalten, Zeilen usw. Eigenwerte, -vektoren, Diagonalisierung diskrete Fouriertransformation statistische Auswertung Zufallsgeneratoren Wird bei ipython --pylab automatisch unter dem Kürzel np geladen A. Arnold Computergrundlagen 67/88
80 np.ndarray n-dimensionale Arrays >>> A = np.identity(2) >>> print A [[ 1. 0.] [ 0. 1.]] >>> v = np.zeros(5) >>> print v [ ] >>> print type(a), type(v) <type numpy.ndarray > <type numpy.ndarray > NumPy basiert auf n-dimensionalem Array numpy.ndarray Technisch zwischen Array und Tupel Kein append/remove Aber elementweiser lesender und schreibender Zugriff Alle Elemente vom selben (einfachen) Datentyp Entspricht mathematischen Vektoren, Arrays, Tensoren,... A. Arnold Computergrundlagen 68/88
81 Eindimensionale Arrays Vektoren >>> import numpy as np >>> print np.array([1.0, 2, 3]) [ 1., 2., 3.] >>> print np.ones(5) [ 1., 1., 1., 1., 1.] >>> print np.arange(2.2, 3, 0.2, dtype=float) [ 2.2, 2.4, 2.6, 2.8] np.array erzeugt ein ndarray aus einer (geschachtelten) Liste np.arange entspricht range für beliebige Datentypen np.zeros/ones erzeugen 0er/1er-Arrays dtype setzt den Datentyp aller Elemente explizit float IEEE-Fließkommazahlen bool Wahrheitswerte complex Komplexe Fließkommazahlen int ganze Zahlen ansonsten der einfachste für alle Elemente passende Typ A. Arnold Computergrundlagen 69/88
82 Mehrdimensionale Arrays >>> print np.array([[1, 2, 3], [4, 5, 6]]) [[1, 2, 3], [4, 5, 6]] >>> print np.array([[[1,2,3],[4,5,6]], [[7,8,9],[0,1,2]]]) [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [0, 1, 2]]] np.array erzeugt ein mehrdimensionales ndarray aus einer (geschachtelten) Liste Alle Zeilen müssen die gleiche Länge haben Entsprechen Matrizen, Tensoren,... A. Arnold Computergrundlagen 70/88
83 Mehrdimensionale Arrays >>> print np.zeros((2, 2)) array([[ 0., 0.], [ 0., 0.]]) >>> print np.identity(2) [[ 1. 0.] [ 0. 1.]] >>> print np.outer([1,2],[3,5]) [[ 3 5] [ 6 10]] np.zeros/ones mit Tupeln von Dimensionen np.identity liefert die Identitätsmatrix (immer zweidimensional) np.outer ist das äußere Produkt von Vektoren: a b = a 1 b 1 a 1 b a n b 1 a n b A. Arnold Computergrundlagen 70/88
84 Array-Informationen >>> v = np.zeros(4) >>> print v.shape (4,) >>> I = np.identity(2) >>> print I.shape (2, 2) >>> print I.dtype float64 array.shape gibt die Größen der Dimensionen als Tupel zurück Anzahl der Dimensionen (Vektor, Matrix,... ) ergibt sich aus Länge des Tupels array.dtype gibt den gemeinsamen Datentyp aller Elemente Wichtig beim Debuggen (Warum passen die Matrix und der Vektor nicht zusammen?) A. Arnold Computergrundlagen 71/88
85 Elementzugriff >>> a = np.array([[1,2,3,4,5,6], [7,8,9,0,1,2]]) >>> print a[0] [ ] >>> print a[1] [ ] >>> print a[1,2] 9 [] indiziert Zeilen und Elemente usw. Anders als bei Pythonlisten können geschachtelte Indizes auftreten (wie bei Matrizen) a[1,2] entspricht mathematisch a 2,3 wegen der verschiedenen Zählweisen (ab 0 bzw. ab 1) Achtung: in der Mathematik bezeichnet a 1 meist einen Spaltenvektor, hier a[1] einen Zeilenvektor Es gilt wie in der Mathematik: Zeilen zuerst, Spalten später! A. Arnold Computergrundlagen 72/88
86 Subarrays >>> a = np.array([[1,2,3], [4,5,6], [7,8,9]]) >>> print a[1:,1:] [[5 6] [8 9]] >>> print a[:,2] [3 6 9] Wie bei Listen lassen sich auch Bereiche wählen, in allen Dimensionen a[1:,1:] beschreibt die 1,1-Untermatrix, also ab der 2. Zeile und Spalte a[:,2] beschreibt den 3. Spaltenvektor Achtung, dies sind keine Kopien! A. Arnold Computergrundlagen 73/88
87 Flache und tiefe Kopien von ndarray >>> a = np.array([[1,2,3], [4,5,6], [7,8,9]]) >>> b = a.copy() # tiefe Kopie >>> a[:,0] = np.zeros(3) # flache Kopie, ändert a >>> print a [[0 2 3] [0 5 6] [0 8 9]] >>> print b [[1 2 3] [4 5 6] [7 8 9]] Anders als bei Python-Arrays sind Unterlisten keine Kopien! Kopien gibt es nur explizit durch copy A. Arnold Computergrundlagen 74/88
88 Manipulation von ndarrays >>> a = np.array([[1,2], [3,4]]) >>> a = np.concatenate((a, [[5,6]])) >>> print a.transpose() [[1 3 5] [2 4 6]] >>> print a.max() 6 >>> a = np.array([1 + 2j]) >>> print a.conjugate() [ 1.-2.j] np.concatenate hängt Matrizen aneinander transpose(): Transponierte (Spalten und Zeilen vertauschen) conjugate(): Komplex Konjugierte min(),max() berechnen Minimum und Maximum aller Elemente A. Arnold Computergrundlagen 75/88
89 np.dot: Matrix-Matrix-Multiplikation >>> a = np.array([[1,2],[3,4]]) >>> i = np.identity(2) # Einheitsmatrix >>> print a*i # punktweises Produkt [[1 0] [0 4]] >>> print np.dot(a,i) # echtes Matrixprodukt [[1 2] [3 4]] >>> print np.dot(a[0], a[1]) # Skalarprodukt der Zeilen 11 Arrays werden normalerweise punktweise multipliziert np.dot entspricht bei zwei eindimensionalen Arrays dem Vektor-Skalarprodukt bei zwei zweidimensionalen Arrays der Matrix-Multiplikation bei ein- und zweidim. Arrays der Vektor-Matrix-Multiplikation Die Dimensionen müssen passen A. Arnold Computergrundlagen 76/88
90 Lineare Algebra >>> a = np.array([[1,0],[0,1]]) >>> print np.linalg.det(a) 1 >>> print np.linalg.eig(a) (array([ 1., 1.]), array([[ 1., 0.], [ 0., 1.]])) numpy.cross: Vektorkreuzprodukt numpy.linalg.det,.trace: Determinante und Spur numpy.linalg.norm,.cond: Norm und Kondition numpy.linalg.eig: Eigenwerte und -vektoren numpy.linalg.inv: Inverse einer Matrix berechnen numpy.linalg.cholesky,.qr,.svd: Matrixzerlegungen numpy.linalg.solve(a, b): Lösen von Ax = b A. Arnold Computergrundlagen 77/88
91 Beispiel: Rücksubstitution Problem Gegeben: Gesucht: Rechte obere Dreiecksmatrix A, Vektor b Lösung des linearen Gleichungssystems Ax = b a 11 x 1 + a 12 x a 1n x n = b 1 a 22 x a 2n x n = b a nn x n = b n Zum Beispiel aus dem Gaußschen Eliminationsverfahren Methode: Rücksubstitution Letzte Gleichung: a nn x n = b n Vorletzte Gleichung: = x n = b n /a nn x n 1 = (b n 1 a n 1,n x n )/a n 1,n 1 Und so weiter... A. Arnold Computergrundlagen 78/88
92 Implementation import numpy as np def backsubstitute(a, b): rows = b.shape[0] # length of the problem x = np.zeros(rows) # solution, same size as b for i in range(1, rows + 1): # looping the rows reversel row = rows - i x[row] = b[row] - np.dot(a[row,row+1:], x[row+1:]) x[row] /= A[row,row] return x A = np.array([[1, 2, 3], [0, 4, 5], [0, 0, 6]]) b = np.array([1, 2, 3]) print backsubstitute(a, b), np.linalg.solve(a, b) Ausgabe [ ] [ ] A. Arnold Computergrundlagen 79/88
93 Analyse und Visualisierung Zeit Winkel Geschw. Energie Zahlen anschauen ist langweilig! Graphen sind besser geeignet Statistik hilft, Ergebnisse einzuschätzen (Fehlerbalken) Histogramme, Durchschnitt, Varianz A. Arnold Computergrundlagen 80/88
94 Durchschnitt und Varianz >>> samples= >>> z = np.random.normal(0, 2, samples) >>> print np.mean(z) >>> print np.var(z) Arithmetischer Durchschnitt z = len(z) z i /len(z) i=1 Varianz σ(z) = (z z ) 2 A. Arnold Computergrundlagen 81/88
95 Histogramme >>> zz = np.random.normal(0,1,100000) >>> werte, rand = np.histogram(zz, bins=100, normed=true) Histogramme geben die Häufigkeit von Werten an In bins vielen gleich breiten Intervallen werte sind die Häufigkeiten, raender die Grenzen der Intervalle (ein Wert mehr als in werte) A. Arnold Computergrundlagen 82/88
96 Malen nach Zahlen matplotlib Ein Modul zum Erstellen von Graphen, mächtiger als Gnuplot 2D oder 3D, mehrere Graphen in einem Speichern als Bitmap Kann auch animierte Kurven darstellen A. Arnold Computergrundlagen 83/88
97 2D-Plots import matplotlib import matplotlib.pyplot as pyplot... x = np.arange(0, 2*np.pi, 0.01) y = np.sin(x) pyplot.plot(x, y, "g", linewidth=2) pyplot.text(1, -0.5, "sin(2 pi x)") pyplot.show() pyplot.plot erzeugt einen 2D-Graphen pyplot.text schreibt beliebigen Text in den Graphen pyplot.show() zeigt den Graphen an Parametrische Plots mit Punkten (x[t], y[t]) für Funktionen Punkte (x[t], y(x[t])) mit x Bereich Farbe und Form über String und Parameter ausprobieren A. Arnold Computergrundlagen 84/88
98 Mehrfache Graphen bild = pyplot.figure() graph_1 = bild.add_subplot(121, title="sinus und Cosinus") graph_1.plot(x, np.sin(x)) graph_1.plot(x, np.cos(x)) graph_2 = bild.add_subplot(122, title="sinh und Cosh") graph_2.plot(x, np.sinh(x), x, np.cosh(x)) Mehrere Kurven in einem Graphen: plot(x_1,y_1 [,"stil"], x_2,y_2,...)! Oder mehrere plot-befehle Mehrere Graphen in einem Bild 1.0 mit Hilfe von add_subplot Sinus und Cosinus Sinh und Cosh A. Arnold Computergrundlagen 85/88
99 Logarithmische Skalen 20 normal 20 x logarithmisch y logarithmisch 10-1 logarithmisch voll y = exp(x) y = x 2 y = log(x) set_xscale("log") bzw. set_yscale("log") y logarithmisch: y = exp(x) wird zur Geraden y = log(y) = x x logarithmisch: y = log(x) = x ist eine Gerade x + y logarithmisch: Potenzgesetze y = x n werden zu Geraden, da y = log(x n ) = n log(x) = nx A. Arnold Computergrundlagen 86/88
100 3D-Plots import matplotlib import matplotlib.pyplot as pyplot import mpl_toolkits.mplot3d as p3d... bild = pyplot.figure() z = np.arange(0, 10, 0.1) x, y = np.cos(z), np.sin(z) graph = p3d.axes3d(bild) graph.plot(x, y, z) Spirale Oberflaeche plot: wie 2D, nur mit 3 Koordinaten x, y, z plot_wireframe: Gitteroberflächen contourf3d: farbige Höhenkodierung Achtung! 3D ist neu und das Interface ändert sich noch A. Arnold Computergrundlagen 87/88
101 Interaktive Visualisierung import matplotlib matplotlib.use( TkAgg ) import matplotlib.pyplot as pyplot... abb = pyplot.figure() plot = abb.add_subplot(111) kurve, = plot.plot([],[]) def weiter(): abb.canvas.manager.window.after(1000, weiter) kurve.set_data(x, np.sin(x)) abb.canvas.draw()... abb.canvas.manager.window.after(100, weiter) pyplot.show() Update und Timing durch GUI (hier TkInter) set_data um die Daten zu verändern A. Arnold Computergrundlagen 88/88
Computergrundlagen Programmieren lernen in Python
Computergrundlagen Programmieren lernen in Python Axel Arnold Institut für Computerphysik Universität Stuttgart Wintersemester 2013/14 Was ist Programmieren? Idee Algorithmus Programm Daten Computer Bildschirm
Computergrundlagen Programmieren in Python
Computergrundlagen Programmieren in Python Axel Arnold Institut für Computerphysik Universität Stuttgart Wintersemester 2011/12 Python schnell zu erlernende Programmiersprache tut, was man erwartet objektorientierte
5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu
Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten
Programmierkurs Java
Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen
Primzahlen und RSA-Verschlüsselung
Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also
Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.
Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.
Erwin Grüner 09.02.2006
FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife
Physik auf dem Computer Wiederholung: Python, NumPy und C
Physik auf dem Computer Wiederholung: Python, NumPy und C Axel Arnold Olaf Lenz Institut für Computerphysik Universität Stuttgart Sommersemester 2012 Python Wiederholung der wichtigsten Eckpunkte interpretierte
Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:
VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt
Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.
Excel-Schnittstelle Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können. Voraussetzung: Microsoft Office Excel ab Version 2000 Zum verwendeten Beispiel:
1 Vom Problem zum Programm
Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren
Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff
Programmieren in C Felder, Schleifen und Fließkommaarithmetik Prof. Dr. Nikolaus Wulff Addition von Zahlen 1 2 3 4 5 #include int main() { int x,y,z,sum; x = 1; y = 2; z = 4; sum = x + y + z;
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als
Linux Prinzipien und Programmierung
Linux Prinzipien und Programmierung Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2014 1 / 25 2 / 25 Pipes Die Bash kennt drei Standard-Dateideskriptoren: Standard In (stdin) Standard-Eingabe,
Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen
Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe
Programmieren I. Kapitel 7. Sortieren und Suchen
Programmieren I Kapitel 7. Sortieren und Suchen Kapitel 7: Sortieren und Suchen Ziel: Varianten der häufigsten Anwendung kennenlernen Ordnung Suchen lineares Suchen Binärsuche oder Bisektionssuche Sortieren
Steht in der ersten Zeile #!/usr/bin/python und hat man die Ausführungsrechte gesetzt kann man es direkt ausführen.
Python Unter Windows empfiehlt sich der Download von Python unter folgender URL, http:// www.python.org/download/. Linux Distributionen wie z.b. Ubuntu liefern Python direkt in Ihrer Paketverwaltung mit:
FB Informatik. Fehler. Testplan
Fehler #include int i,n,summe; int summe (int); cout 0) cin>n; i=summme(n); cout
Abschnitt: Algorithmendesign und Laufzeitanalyse
Abschnitt: Algorithmendesign und Laufzeitanalyse Definition Divide-and-Conquer Paradigma Divide-and-Conquer Algorithmen verwenden die Strategien 1 Divide: Teile das Problem rekursiv in Subproblem gleicher
Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster
Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.
Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen
Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders
Mediator 9 - Lernprogramm
Mediator 9 - Lernprogramm Ein Lernprogramm mit Mediator erstellen Mediator 9 bietet viele Möglichkeiten, CBT-Module (Computer Based Training = Computerunterstütztes Lernen) zu erstellen, z. B. Drag & Drop
LU-Zerlegung. Zusätze zum Gelben Rechenbuch. Peter Furlan. Verlag Martina Furlan. Inhaltsverzeichnis. 1 Definitionen.
Zusätze zum Gelben Rechenbuch LU-Zerlegung Peter Furlan Verlag Martina Furlan Inhaltsverzeichnis Definitionen 2 (Allgemeine) LU-Zerlegung 2 3 Vereinfachte LU-Zerlegung 3 4 Lösung eines linearen Gleichungssystems
Überblick. Lineares Suchen
Komplexität Was ist das? Die Komplexität eines Algorithmus sei hierbei die Abschätzung des Aufwandes seiner Realisierung bzw. Berechnung auf einem Computer. Sie wird daher auch rechnerische Komplexität
! " # $ " % & Nicki Wruck worldwidewruck 08.02.2006
!"# $ " %& Nicki Wruck worldwidewruck 08.02.2006 Wer kennt die Problematik nicht? Die.pst Datei von Outlook wird unübersichtlich groß, das Starten und Beenden dauert immer länger. Hat man dann noch die.pst
10 Lesen und Schreiben von Dateien
10 Lesen und Schreiben von Dateien 10 Lesen und Schreiben von Dateien 135 10.1 Mit load und save Binäre Dateien Mit save können Variableninhalte binär im Matlab-Format abgespeichert werden. Syntax: save
Kontrollstrukturen, Pseudocode und Modulo-Rechnung
Kontrollstrukturen, Pseudocode und Modulo-Rechnung CoMa-Übung III TU Berlin 29.10.2012 CoMa-Übung III (TU Berlin) Kontrollstrukturen, Pseudocode und Modulo-Rechnung 29.10.2012 1 / 1 Themen der Übung 1
Kurs 1613 Einführung in die imperative Programmierung
Aufgabe 1 Gegeben sei die Prozedur BubbleSort: procedure BubbleSort(var iofeld:tfeld); { var hilf:integer; i:tindex; j:tindex; vertauscht:boolean; i:=1; repeat vertauscht := false; for j := 1 to N - i
VBA-Programmierung: Zusammenfassung
VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung
Grundlagen der Theoretischen Informatik, SoSe 2008
1. Aufgabenblatt zur Vorlesung Grundlagen der Theoretischen Informatik, SoSe 2008 (Dr. Frank Hoffmann) Lösung von Manuel Jain und Benjamin Bortfeldt Aufgabe 2 Zustandsdiagramme (6 Punkte, wird korrigiert)
Skripte. Beispiel. http://www.icp.uni-stuttgart.de. M. Fyta Computergrundlagen 73/93
Skripte Wie kann ich mir komplexe Befehle merken? Gar nicht aber der Computer kann es für mich! Einfach die Befehle in eine Textdatei schreiben und ausführbar machen #! (Shebang) in der ersten Zeile bestimmt
Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen
Brainfuck 1 Brainfuck 1.1 Brainfuck Geschichte und Umfeld Brainfuck ist eine sogenannte esoterische Programmiersprache. Sie wurde 1993 vom Schweizer Urban Müller entworfen mit dem Ziel, eine Sprache mit
Excel Funktionen durch eigene Funktionen erweitern.
Excel Funktionen durch eigene Funktionen erweitern. Excel bietet eine große Anzahl an Funktionen für viele Anwendungsbereiche an. Doch es kommt hin und wieder vor, dass man die eine oder andere Funktion
Python Einführung. Monica Selva Soto. 24 März Mathematisches Institut
Mathematisches Institut [email protected] 24 März 2009 Übungen zur Numerik 1 Vorlesung Übungen praktische Aufgaben Webseite: (Anmeldung, Übungsblätter) http://www.mi.uni-koeln.de/~mselva/numerik1.php
Handbuch Fischertechnik-Einzelteiltabelle V3.7.3
Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 von Markus Mack Stand: Samstag, 17. April 2004 Inhaltsverzeichnis 1. Systemvorraussetzungen...3 2. Installation und Start...3 3. Anpassen der Tabelle...3
PHP 5.4 ISBN 978-3-86249-327-2. Stephan Heller, Andreas Dittfurth 1. Ausgabe, September 2012. Grundlagen zur Erstellung dynamischer Webseiten GPHP54
PHP 5.4 Stephan Heller, Andreas Dittfurth 1. Ausgabe, September 2012 Grundlagen zur Erstellung dynamischer Webseiten ISBN 978-3-86249-327-2 GPHP54 5 PHP 5.4 - Grundlagen zur Erstellung dynamischer Webseiten
Einführung in die C++ Programmierung für Ingenieure
Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF
Variablen & erweiterte Aktionen nutzen
341 In Captivate können Sie mit Hilfe von Variablen Texte & Werte speichern oder Systeminformationen ausgeben. Außerdem können Sie auf Basis von Variablen komplexere Aktionen entwickeln, wie z. B. eine
Software Engineering Klassendiagramme Assoziationen
Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen
Java-Programmierung mit NetBeans
Java-Programmierung mit NetBeans Steuerstrukturen Dr. Henry Herper Otto-von-Guericke-Universität Magdeburg - WS 2012/13 Steuerstrukturen Steuerstrukturen Verzweigungen Alternativen abweisende nichtabweisende
Bilder zum Upload verkleinern
Seite 1 von 9 Bilder zum Upload verkleinern Teil 1: Maße der Bilder verändern Um Bilder in ihren Abmessungen zu verkleinern benutze ich die Freeware Irfan View. Die Software biete zwar noch einiges mehr
Lineare Gleichungssysteme
Brückenkurs Mathematik TU Dresden 2015 Lineare Gleichungssysteme Schwerpunkte: Modellbildung geometrische Interpretation Lösungsmethoden Prof. Dr. F. Schuricht TU Dresden, Fachbereich Mathematik auf der
Text-Zahlen-Formatieren
Text-Zahlen-Formatieren Beobachtung: Bei der Formatierung einer Zahl in eine Textzahl und umgekehrt zeigt Excel ein merkwürdiges Verhalten, welches nachfolgend skizziert werden soll: Wir öffnen eine neue
4 Vorlesung: 21.11. 2005 Matrix und Determinante
4 Vorlesung: 2111 2005 Matrix und Determinante 41 Matrix und Determinante Zur Lösung von m Gleichungen mit n Unbekannten kann man alle Parameter der Gleichungen in einem rechteckigen Zahlenschema, einer
Modellierung und Programmierung 1
Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {
Einführung in die Programmierung
: Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte
M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung
M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales
2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)
Wirtschaftsinformatik I
Wirtschaftsinformatik I - Tutorium 6/ 7 (April 2010) Zusatzinformationen - Lösungsvorschläge Wirtschaftsinformatik I Tutorium Jochen Daum (4.Semester BWL) Universität Mannheim Rechtshinweis: Diese Präsentation
Übungen zu C++ Kapitel 1
Übungen zu C++ Kapitel 1 Aufgabe 1 Ergänze den Text. a) Die sechs logischen Einheiten eines Computers sind Eingabe-Einheit, Ausgabe-Einheit, RAM, ALU, CPU, Plattenspeicher. b) Die Programme, welche Hochsprachenprogramme
1.4.12 Sin-Funktion vgl. Cos-Funktion
.4. Sgn-Funktion Informatik. Semester 36 36.4.2 Sin-Funktion vgl. Cos-Funktion Informatik. Semester 37 37 .4.3 Sqr-Funktion Informatik. Semester 38 38.4.4 Tan-Funktion Informatik. Semester 39 39 .5 Konstanten
Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben
Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16 Fakultät für Informatik Lehrstuhl 14 Lars Hildebrand, Marcel Preuß, Iman Kamehkhosh, Marc Bury, Diana Howey Übungsblatt
OP-LOG www.op-log.de
Verwendung von Microsoft SQL Server, Seite 1/18 OP-LOG www.op-log.de Anleitung: Verwendung von Microsoft SQL Server 2005 Stand Mai 2010 1 Ich-lese-keine-Anleitungen 'Verwendung von Microsoft SQL Server
Programming 101. Carl Herrmann IPMB & DKFZ
Programming 101 Carl Herrmann IPMB & DKFZ Programmieren Kommandozeile Einfache Befehle Shell Skript aneinanderketten von Befehlen Schleifen Programmiersprache Komplexere Aufgaben Gemeinsamkeiten Alle Programmiersprachen
Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER
AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER Inhalt 1 Einleitung... 1 2 Einrichtung der Aufgabe für die automatische Sicherung... 2 2.1 Die Aufgabenplanung... 2 2.2 Der erste Testlauf... 9 3 Problembehebung...
OECD Programme for International Student Assessment PISA 2000. Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland
OECD Programme for International Student Assessment Deutschland PISA 2000 Lösungen der Beispielaufgaben aus dem Mathematiktest Beispielaufgaben PISA-Hauptstudie 2000 Seite 3 UNIT ÄPFEL Beispielaufgaben
Datensicherung. Beschreibung der Datensicherung
Datensicherung Mit dem Datensicherungsprogramm können Sie Ihre persönlichen Daten problemlos Sichern. Es ist möglich eine komplette Datensicherung durchzuführen, aber auch nur die neuen und geänderten
Excel Pivot-Tabellen 2010 effektiv
7.2 Berechnete Felder Falls in der Datenquelle die Zahlen nicht in der Form vorliegen wie Sie diese benötigen, können Sie die gewünschten Ergebnisse mit Formeln berechnen. Dazu erzeugen Sie ein berechnetes
Berechnungen in Access Teil I
in Access Teil I Viele Daten müssen in eine Datenbank nicht eingetragen werden, weil sie sich aus anderen Daten berechnen lassen. Zum Beispiel lässt sich die Mehrwertsteuer oder der Bruttopreis in einer
Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.
Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen
Kontrollstrukturen - Universität Köln
Kontrollstrukturen - Universität Köln Mario Manno Kontrollstrukturen - Universität Köln p. 1 Was sind Sprachen Auszeichnungssprachen HTML, XML Programmiersprachen ASM, Basic, C, C++, Haskell, Java, Pascal,
1 topologisches Sortieren
Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung
Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen
Programmieren 10. Tutorium 4./ 5. Übungsblatt Inhalt I. Übungsblatt 4 II. III. - Rückgabe und Besprechung - Vorbereitung auf Wiederholung/ Nachtrag - Operatorpräzedenzen IV. Übungsblatt 5 - Vorstellung
Einführung in PHP. (mit Aufgaben)
Einführung in PHP (mit Aufgaben) Dynamische Inhalte mit PHP? 2 Aus der Wikipedia (verkürzt): PHP wird auf etwa 244 Millionen Websites eingesetzt (Stand: Januar 2013) und wird auf etwa 80 % aller Websites
Austausch- bzw. Übergangsprozesse und Gleichgewichtsverteilungen
Austausch- bzw. Übergangsrozesse und Gleichgewichtsverteilungen Wir betrachten ein System mit verschiedenen Zuständen, zwischen denen ein Austausch stattfinden kann. Etwa soziale Schichten in einer Gesellschaft:
Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler
Downloadfehler in DEHSt-VPSMail Workaround zum Umgang mit einem Downloadfehler Downloadfehler bremen online services GmbH & Co. KG Seite 2 Inhaltsverzeichnis Vorwort...3 1 Fehlermeldung...4 2 Fehlerbeseitigung...5
Einführung. Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (3) Vorlesungen zur Komplexitätstheorie. K-Vollständigkeit (1/5)
Einführung 3 Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (3) Univ.-Prof. Dr. Christoph Meinel Hasso-Plattner-Institut Universität Potsdam, Deutschland Hatten den Reduktionsbegriff
Informatik Grundlagen, WS04, Seminar 13
Informatik Grundlagen, WS04, Seminar 13 Informatik Informatik Grundlagen, Seminar 13 WS04 1 Was wir heute besprechen Nachbesprechen von Übungsblatt 11 Rekursion Grundprinzipien Übung Besprechung Übungsblatt
6.2 Scan-Konvertierung (Scan Conversion)
6.2 Scan-Konvertierung (Scan Conversion) Scan-Konvertierung ist die Rasterung von einfachen Objekten (Geraden, Kreisen, Kurven). Als Ausgabemedium dient meist der Bildschirm, der aus einem Pixelraster
3 Berechnungen und Variablen
3 Berechnungen und Variablen Du hast Python installiert und weißt, wie man die Python-Shell startet. Jetzt kannst Du etwas damit machen. Wir fangen mit ein paar einfachen Berechnungen an und wenden uns
Luis Kornblueh. May 22, 2014
Einführung in die Bash Luis Kornblueh KlosterCluster Team 2013/2014, Klosterschule May 22, 2014 1 / 17 Inhaltsverzeichnis Einführung in das Scripting Einfache Beispiele Kommandos ersetzen Bedingungen Tests
Praktische Mathematik: Lineare und Netzwerk-Optimierung (SS 2015) Praktikumsaufgaben
Technische Universität Kaiserslautern Prof Dr Sven O Krumke Dr Sabine Büttner MSc Marco Natale Praktische Mathematik: Lineare und Netzwerk-Optimierung (SS 2015) Praktikumsaufgaben Aufgabe 1 (Konvertieren
Entwurf von Algorithmen - Kontrollstrukturen
Entwurf von Algorithmen - Kontrollstrukturen Eine wichtige Phase in der Entwicklung von Computerprogrammen ist der Entwurf von Algorithmen. Dieser Arbeitsschritt vor dem Schreiben des Programmes in einer
Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter
Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter 2 Inhaltsverzeichnis 1 Web-Kürzel 4 1.1 Einführung.......................................... 4 1.2 Web-Kürzel.........................................
Kapitel 15. Lösung linearer Gleichungssysteme
Kapitel 15. Lösung linearer Gleichungssysteme Lineare Gleichungssysteme Wir befassen uns nun mit der Lösung im allgemeinen nichthomogener linearer Gleichungssysteme in zweifacher Hinsicht. Wir studieren
Grundbegriffe der Informatik
Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen
Künstliches binäres Neuron
Künstliches binäres Neuron G.Döben-Henisch Fachbereich Informatik und Ingenieurwissenschaften FH Frankfurt am Main University of Applied Sciences D-60318 Frankfurt am Main Germany Email: doeben at fb2.fh-frankfurt.de
Wir arbeiten mit Zufallszahlen
Abb. 1: Bei Kartenspielen müssen zu Beginn die Karten zufällig ausgeteilt werden. Wir arbeiten mit Zufallszahlen Jedesmal wenn ein neues Patience-Spiel gestartet wird, muss das Computerprogramm die Karten
Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java
Objektorientierte Programmierung mit Java Eine praxisnahe Einführung mit BlueJ Klassenentwurf Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? 1.0 Zentrale Konzepte
Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer
Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer Allgemein: Das RSA-Verschlüsselungsverfahren ist ein häufig benutztes Verschlüsselungsverfahren, weil es sehr sicher ist. Es gehört zu der Klasse der
Algorithmen mit Python
Algorithmen mit Python Vorbesprechung zum Proseminar im Sommersemester 2009 http://www.python.org 1 Sie lernen in DAP Java und C/C++: 80% Syntax, 20% Algorithmen-Design Idee Schon ein einfaches Hello World
Funktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel
Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!
Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen! Grundstrukturen: Sub [name]([übergabe]) End Sub [Übergabe] ist
Objektorientierte Programmierung
Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum
Tevalo Handbuch v 1.1 vom 10.11.2011
Tevalo Handbuch v 1.1 vom 10.11.2011 Inhalt Registrierung... 3 Kennwort vergessen... 3 Startseite nach dem Login... 4 Umfrage erstellen... 4 Fragebogen Vorschau... 7 Umfrage fertigstellen... 7 Öffentliche
Einführung in die Java- Programmierung
Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger [email protected] WiSe 2012/13 1 Wichtig... Mittags Pommes... Praktikum A 230 C 207 (Madeleine) F 112 F 113 (Kevin) E
Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse
Übung 03: Schleifen Abgabetermin: xx.xx.xxxx Name: Matrikelnummer: Gruppe: G1 (Prähofer) G2 (Prähofer) G3 (Wolfinger) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben elektronisch Aufgabe 03.1 12
Urlaubsregel in David
Urlaubsregel in David Inhaltsverzeichnis KlickDown Beitrag von Tobit...3 Präambel...3 Benachrichtigung externer Absender...3 Erstellen oder Anpassen des Anworttextes...3 Erstellen oder Anpassen der Auto-Reply-Regel...5
Visual Basic Express Debugging
Inhalt Dokument Beschreibung... 1 Projekt vorbereiten... 1 Verknüpfung zu Autocad/ProStructures einstellen... 2 Debugging... 4 Autocad/ProSteel Beispiel... 5 Dokument Beschreibung Debuggen nennt man das
Dateiname Name(n) und Matrikelnr. des/der Bearbeiter Tel.-Nr. und E-Mail-Adresse für den Fall, dass die Diskette nicht lesbar ist.
Matrizenrechner Schreiben Sie ein CProgramm, das einen Matrizenrechner für quadratische Matrizen nachbildet. Der Matrizenrechner soll mindestens folgende Berechnungen beherrschen: Transponieren, Matrizenaddition,
Gibt Daten im erweiterten Format aus. Dies beinhaltet die Angabe von Zugriffsrechten, Besitzer, Länge, Zeitpunkt der letzten Änderung und mehr.
ls [optionen] [namen]: ls zeigt den Inhalt von Verzeichnissen. Sind keine namen angegeben, werden die Dateien im aktuellen Verzeichnis aufgelistet. Sind eine oder mehrere namen angegeben, werden entweder
Kurzanleitung zur Bereitstellung von Sachverhalten und Lösungen zum Universitätsrepetitorium auf dem Server unirep.rewi.hu-berlin.
Humboldt-Universität zu Berlin Juristische Fakultät Kurzanleitung zur Bereitstellung von Sachverhalten und Lösungen zum Universitätsrepetitorium auf dem Server unirep.rewi.hu-berlin.de Stand: 1. Juni 2010
Diana Lange. Generative Gestaltung Operatoren
Diana Lange Generative Gestaltung Operatoren Begriffserklärung Verknüpfungsvorschrift im Rahmen logischer Kalküle. Quelle: google Operatoren sind Zeichen, die mit einer bestimmten Bedeutung versehen sind.
Datenbanken Kapitel 2
Datenbanken Kapitel 2 1 Eine existierende Datenbank öffnen Eine Datenbank, die mit Microsoft Access erschaffen wurde, kann mit dem gleichen Programm auch wieder geladen werden: Die einfachste Methode ist,
Englische Division. ... und allgemeine Hinweise
Das folgende Verfahren ist rechnerisch identisch mit dem Normalverfahren; es unterscheidet sich nur in der Schreibweise des Rechenschemas Alle Tipps und Anmerkungen, die über die Besonderheiten dieser
Tangentengleichung. Wie lautet die Geradengleichung für die Tangente, y T =? Antwort:
Tangentengleichung Wie Sie wissen, gibt die erste Ableitung einer Funktion deren Steigung an. Betrachtet man eine fest vorgegebene Stelle, gibt f ( ) also die Steigung der Kurve und somit auch die Steigung
Beispiel 19. December 4, 2009
Beispiel 9 December 4, 2009 Computermathematik (für Informatik) 4. Übungsblatt (Musterlösung) 2. 2. 2009 Die heutigen Übungen sollen mit dem Computeralgebrasystem Sage gelöst werden. Die Lösung der Beispiele
