6 Jahr – Informatik – Kapitel 5 – Funktionen

Werbung
Sequenzen - Listen
Sequenzen
Listen: Definition
Listen: veränderliche Sequenzen
Methoden
Attribute
Eine Liste von ganzen Zahlen
Sequenzen
Definition
Eine Sequenz ist eine Datenstruktur, in der
mehrere Objekte stehen, wobei jede einen Index
hat, der von 0 bis zur (Länge der Sequenz)-1
geht.
 Strings und Listen sind Sequenzen.

Sequenzen
Slicing
s[i:j]
(Index j ausgeschlossen)
 (Index i eingeschlossen)

s[:j]

bis Offset j (ausgeschlossen)

ab Offset i (eingeschlossen)
s[i:]
Listen: Definition


Eine Liste ist eine veränderliche geordnete Sammlung beliebiger Objekte
Wir können auf ihre Komponenten über ihre Position ( Index) zugreifen
Listen: veränderliche Sequenzen

Wir können ihre Komponenten an Ort und Stelle ändern
– Teilbereich löschen
del L[i;j]
– Ein Objekt A bei Index n Einfügen L[n:n] = [A]
– Ein Objekt bei Index n ersetzen L[n] = A
Methoden: Definition


Eine Methode ist eine Funktion, die zu einem Objekt ‘gehört’
Code: obj.methodname
obj ist irgendein Objekt
– methodname ist der Name einer Methode, die vom Objekt-Typ definiert
wird.
–

Methoden ändern Objekte.
Methoden einer Liste




L.sort()
L.reverse()
L.append(a)
L.remove(a)
aufsteigend sortieren
umkehren
ein einzelnes Element an das Ende heften
ein einzelnes Element aus der liste entfernen
Attribute: Definition


Ein Attribut ist eine Funktion, die zu einem Objekt ‘gehört’
Code: obj.attributname
obj ist irgendein Objekt
– attributname ist der Name eines Attributes, das vom Objekt-Typ
definiert wird.
–

Attribute geben Eigenschaften des Objektes zurück.
Attribut einer Liste

L.index(a) gibt das Offset von a in L zurück
Eine Liste von ganzen Zahlen erstellen


Die Funktion range() erzeugt eine regelmäßige Liste
von ganzen Zahlen.
Sie kann mit einem, zwei oder mit drei Parametern
aufgerufen werden.
Die Funktion range()

Angabe von drei Parametern:
– Die Liste beginnt beim ersten Parameter
– Sie endet vor dem zweiten Parameter
– Die Schrittweite wird mit dem dritten Parameter
angegeben.

Angabe von zwei Parametern:
Die Liste beginnt beim ersten Parameter
– Sie endet vor dem zweiten Parameter
– Als Schrittweite wird 1 angenommen.
–

Angabe von einem Parameter:
– Die Liste beginnt bei 0
– Sie endet vor dem angegebenen Parameter
– Als Schrittweite wird 1 angenommen.
Echten Teiler einer natürlichen Zahl
●
●
Die echten Teiler der natürlichen Zahl n sind die
Teiler von n ohne die Zahl n selbst.
Die echten Teiler von 220 sind 1, 2, 4, 5, 10, 11,
20, 22, 44, 55 und 110.
Das Programm echteteiler.py
Das Programm echteteiler.py
Funktionen und Prozeduren
Definitionen
 Vorteile
 Eingebaute Funktionen
 Algorithmus
 Funktionen herstellen

Definitionen
●
●
●
●
●
●

Funktionen sind Objekte, die einen Namen besitzen.
Funktionen werden in Ausdrücken abgerufen.
Sie akzeptieren durchgereichte Werte: die Argumente.
Sie geben Ergebnisse zurück.
Funktionen sind ein Instrument, das eine Reihe von
Anweisungen so zusammenfasst, dass sie mehr als einmal
in einem Programm gestartet werden können.
Funktionen lassen auch Argumente spezifizieren, die jedes
Mal, wenn der Code abläuft, unterschiedlich sein können.
Eine Funktion ,die ihre Aufgabe ohne einen sinnvollen
Ergebniswert erledigt wird Prozedur genannt.
Vorteile
●
Codewiederverwendung
– Abläufe an mehreren Stellen und mehrere Male
verwenden
●
Prozedurale Zerlegung
– Zerlegen von Systemen in Teile mit wohldefinierten
Rollen.
– Es ist einfacher, kleinere Aufgaben einzeln zu
implementieren.
Eingebaute Funktionen
●
●
●
●
Input
raw_input
len
min
●
●
●
●
max
int
float
str
Funktionen in Python
●
●
def erstellt ein Funktions-Objekt und weist es
einem Namen zu
return sendet ein Ergebnis-Objekt zurück zum
Aufrufer.
Liste der echten Teiler einer natürlichen
Zahl
Das Programm
Die Funktion
Summe einer Zahlenliste
●
Die Funktion SUMMEVON(LISTE) rechnet die
Summe der Zahlen der LISTE
Befreundete Zahlen
Zwei verschiedene natürliche Zahlen, von denen
wechselseitig jeweils eine Zahl gleich der Summe der
echten Teiler der anderen Zahl ist, bilden ein Paar
befreundeter Zahlen.
Das kleinste befreundete Zahlenpaar wird von den
Zahlen 220 und 284 gebildet.
220 = 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
284 = 1 + 2 + 4 + 71 + 142 = 220.
Das Programm befreundete Zahlen
ECHTETEILERVON(ZAHL)
SUMMEVON(LISTE)
ISTFREUNDVON(ZAHL)
Befreundete Zahlen in einem Intervall
Lokale und Globale Variablen
Erklärungen
Beispiel
Lokale und Globale Variablen:
Erklärungen
●
●
Damit die Schnittstellen einer Funktion
überschaubar bleiben, beeinflusst die
Manipulation einer Variable innerhalb einer
Funktion den Rest des Programms normalerweise
nicht.
In Python ist das dadurch realisiert, dass jede
Funktion einen eigenen Namensraum hat, der
beim Aufruf neu erzeugt wird und verschwindet,
wenn sie fertig ist. Dieser Namensraum heißt
lokal.
Lokale und Globale Variablen:
Beispiel
Zahl: 20
Zahl: 21
Rekursivität
Definition
Beispiel
Algorithmen
Rekursivität:
Definition
●
Eine Funktion (Prozedur), die erneut
aufgerufen wird, bevor ein vorheriger Aufruf
beendet ist, ist rekursiv
Rekursivität:
Beispiel
●
Die Prozedur zaehlenbis(Zahl)
– Falls Zahl
dann

Zaehlenbis(Zahl-1)
– Zahl schreiben
Rekursivität:
Beispiel
0;1;2;3;4;
0;1;2;3;
0;1;2;
0;1;
0;
Algorithmen
ggt(Zahl)
Fakultaet(Zahl)
ggt(Zahl)
●
Funktion ggt(Zahl1,Zahl2)
– Rest  Rest der Division von Zahl1 durch Zahl2
– Falls Rest
Dann

Zahl2  ggt(Zahl2;Rest)
– Rückgabe von Zahl2
fakultaet(Zahl)
●
Zahl
Produkt
Funktion fakultaet(Zahl)
4
1*2*3*4
– Produkt  1
3
1*2*3
– Falls Zahl
2
1*2
1
1*1
0
1
Dann

Produkt  Zahl*fakultaet(Zahl-1)
– Rückgabe von Produkt
Übung
Das Problem
 aendert(CodeInZeichen)
WiederholungVon(EingegebenerCode)

Das Problem
●
Ein Bankdirektor stellte auf dem Ziffernschloß zum
Tresorraum die Codezahl 1986 ein.
Aus Sicherheitsgründen sollte der Code täglich geändert
werden.
Dazu dachte sich der Direktor folgende Methode aus:
Er bildete die Summe der aktuellen vier Ziffern (am ersten
Tag also 24) und fügte die Einerstelle dieser Summe (bei
24 also 4) der Codezahl rechts an, dafür wurde die erste
linksstehende Ziffer (am ersten Tag die 1) gestrichen.
Das Problem
●
●
Nun wollte der Bankdirektor wissen, ob bei diesem
Vorgehen die Zahl 1986 noch einmal als Code auftreten
werde. Als ihm dies ein Computerexperte bestätigte,
interessierte er sich brennend dafür, wieviel Tage
vergehen werden, bis die Codezahl wieder 1986 lautet.
Kannst Du ihm weiterhelfen? Wieviel Tage vergehen,
geht man vom Code 2006 aus?
aendert(CodeInZeichen)
●
●
SummeZiffer  0
CodeInZeichen durchlaufen
– Ziffer  das Zeichen als Integer
– SummeZiffer  SummeZiffer +Ziffer
CodeInZeichen
SummeZiffer
Ziffer
"1986"
0
1
"1986"
1
9
"1986"
10
8
"1986"
18
6
"1986"
24
aendert(CodeInZeichen)
●
●
●
LetztesZeichen  Das letzte Zeichen von SummeZiffer
Das erste Zeichen von CodeInZeichen entfernen,
LetztesZeichen hinzufügen und das Ergebnis in
NeuerCode speichern
NeuerCode zurückgeben
CodeInZeichen
SummeZiffer
LetztesZeichen
NeuerCode
"1986"
24
"4"
9864
aendert(CodeInZeichen)
WiederholungVon(EingegebenerCode)
Beispiele
WiederholungVon(EingegebenerCode)
●
●
●
●
Tage  0
NeuerCode  aendert(EingegebenerCode)
Tage  Tage + 1
Solange NeuerCode verschieden von EingegebenerCode
– NeuerCode  aendert(NeuerCode)
– Tage  Tage + 1
●
Tage zurückgeen
WiederholungVon(EingegebenerCode)
Algorithmus
Eine Funktion die doppelte Einträge
in einer Liste löscht
Beispiel
>>> loeschedoppelte(["a",3,
[4,5],"a","3",4,4,4,4,"Jules","Marie","Jules",5])
['a', 3, [4, 5], '3', 4, 'Jules', 'Marie', 5]
Pseudocode
Funktion loeschdoppelte(eintraege)
neueliste  []
eintraege durchlaufen und jedes Element in etwas
speichern
Falls etwas nicht in neueliste ist
Dann
etwas am Ende von neueliste
hinzufügen
neueliste zurückgeben
Code
Algorithmus
Eine Funktion, die das Skalaprodukt
von zwei Vektoren berechnet.
Beispiel
Pseudocode
Funktion skalarproduktvon(V1,V2)
produkt  Zahl bei Index 0 in V1
* Zahl bei Index 0 in V2
+ Zahl bei Index 1 in V1
* Zahl bei Index 1 in V2
produkt zurückgeben
Code
Algorithmus
Das versteckte Wort
Das versteckte Wort
●
●
●
●
Der Anwender soll ein verstecktes Wort raten.
Die Anzahl der Buchstaben im Wort bestimmt
wie viele Eingaben er machen darf.
Die gefundenen Zeichen erscheinen nach jeder
Eingabe an der richtigen Stelle im Wort.
Der Spieler erfährt am Ende des Spiels ob er das
versteckte Wort gefunden hat. Ist es nicht der Fall
dann wird ihm das versteckte Wort gezeigt
Ausführung
Voici le mot caché: ************
Vous proposez la lettre i
Voici le mot caché: i*form**i***
Vous proposez la lettre t
Voici le mot caché: i*******i***
Vous proposez la lettre f
Voici le mot caché: i*form*ti***
Vous proposez la lettre e
Voici le mot caché: i*f*****i***
Vous proposez la lettre x
Voici le mot caché: i*form*ti**e
Vous proposez la lettre a
Voici le mot caché: i*f*****i***
Vous proposez la lettre o
Voici le mot caché: i*formati**e
Vous proposez la lettre n
Voici le mot caché: i*fo****i***
Vous proposez la lettre r
Voici le mot caché: informati**e
Vous proposez la lettre q
Voici le mot caché: i*for***i***
Vous proposez la lettre m
Voici le mot caché: informatiq*e
Vous proposez la lettre u
bravo vous avez trouvé le mot caché!
Analyse
Dialog mit dem Anwender:
Eingabe: das, was bis jetzt gefunden worden ist
Ausgabe: ein Zeichen
Ein gefundenes Zeichen vom versteckten Wort an den
richtigen Platz im angezeigten Wort platzieren
Eingabe: ein Zeichen
Ausgabe: das, was bis jetzt gefunden worden ist
Das gefundene Wort mit dem versteckten Wort
vergleichen
Eingaben: das gefundene Wort
das versteckte Wort
Ausgabe: wahr oder falsch
Analyse
DIALOGMITANWAENDER(SchonGefunden)
ERSETZEN(InGefunden, Zeichen, VonVersteckt)
IST(Gefunden, Versteckt)
Dialog mit dem Anwender
Dialog mit dem Anwender:
Eingabe: das, was bis jetzt gefunden worden ist
Ausgabe: ein Zeichen
DIALOGMITANWAENDER(SchonGefunden)
Schreiben “Voici le mot caché”
Schreiben SchonGefunden
Schreiben “Vous proposez la lettre: “
Eingabe lesen und in Zeichen speichern
Zeichen zurückgeben
Ein gefundenes Zeichen platzieren
Ein gefundenes Zeichen vom versteckten Wort an den
richtigen Platz im angezeigten Wort platzieren
Eingabe: ein Zeichen
Ausgabe: das, was bis jetzt gefunden worden ist
ERSETZEN(InGefunden, Zeichen, VonVersteckt)
Index  0
solange Index < Länge von VonVersteckt tue:
falls Zeichen sich bei Index in VonVersteckt
befindet
dann * bei Index in InGefunden durch Zeichen
ersetzen
Index  Index + 1
InGefunden züruckgeben
Ein gefundenes Zeichen platzieren
ERSETZEN(InGefunden, Zeichen, VonVersteckt)
Index  0
solange Index < Länge von VonVersteckt tue:
falls Zeichen sich bei Index in VonVersteckt
befindet
dann * bei Index in InGefunden durch Zeichen
ersetzen
Index  Index + 1
InGefunden züruckgeben
Vergleichen
Das gefundene Wort mit dem versteckten Wort
vergleichen
Eingaben: das gefundene Wort
das versteckte Wort
Ausgabe: wahr oder falsch
IST(Gefunden, Versteckt)
Falls Gefunden ist Versteckt
dann Ausgabe  wahr
else Ausgabe  falsch
Ausgabe zurückgeben
Pseudocode
Spiel
Versteckt  „INFORMATIK“
Versuche  Länge von Versteckt
Geraten  so viel „*“ wie Zeichen in Versteckt
Solange nicht IST(Geraten, Versteckt)
und Versuche >0 tue:
Zeichen  DIALOGMITANWAENDER(Geraten)
Geraten  ERSETZEN(Geraten, Zeichen, Versteckt)
Versuche Versuche - 1
Falls IST(Geraten, Versteckt)
Dann schreiben „Bravo vous avez trouvé le mot caché“
Sonst schreiben „Pas de chance le mot caché était: „,
Versteckt
code
Spiel
Herunterladen