Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
lehrkraefte:blc:informatik:ffprg1-2020:arrays [2020/02/10 16:22] Ivo Blöchliger created |
lehrkraefte:blc:informatik:ffprg1-2020:arrays [2022/05/05 12:58] (current) Ivo Blöchliger [Pascal-Dreieck] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ====== Arrays |
- | * Liste: Wird mit runden Klammern geschrieben, | + | * Tuples: Wird mit runden Klammern geschrieben, |
- | * Array: Wird mit eckigen Klammern geschrieben. Kann verändert werden (Länge und Inhalt). | + | * Array/Liste: Wird mit eckigen Klammern geschrieben. Kann verändert werden (Länge und Inhalt). |
* Zugriff bei beiden via eckige Klammern, z.B. a[4], Index von 0 bis Anzahl Elemente minus 1. | * Zugriff bei beiden via eckige Klammern, z.B. a[4], Index von 0 bis Anzahl Elemente minus 1. | ||
- | Wo möglich, mit Listen | + | Wo möglich, mit Tuples |
<code python> | <code python> | ||
- | a = (1, | + | a = (1, |
- | b = [1,4,9,16] | + | b = [1, |
print(a[2]) | print(a[2]) | ||
b[2]=8 | b[2]=8 | ||
print(b) | print(b) | ||
- | a[2]=8 | + | a[2]=8 |
</ | </ | ||
==== Wichtige Funktionen und Methoden ==== | ==== Wichtige Funktionen und Methoden ==== | ||
- | * len: Anzahl Element einer Liste/ | + | * '' |
- | * Negative | + | * Negative |
- | * Unterliste/ | + | * Unterliste/ |
- | * Anfang | + | * Unterliste/ |
+ | * Array/Liste «umdrehen»: | ||
+ | * Anfang | ||
Nur für Arrays: | Nur für Arrays: | ||
- | * a.append(5) -> zusätzliches Element hinten anfügen | + | * '' |
+ | * '' | ||
Weitere nützliche Methoden: https:// | Weitere nützliche Methoden: https:// | ||
Line 29: | Line 32: | ||
<code python> | <code python> | ||
dirs = ((1,0), (0,1), (-1,0), (0,-1)) | dirs = ((1,0), (0,1), (-1,0), (0,-1)) | ||
- | print d[1][1] | + | print dirs[1][1] |
for d in dirs: | for d in dirs: | ||
| | ||
Line 41: | Line 44: | ||
print(feld) | print(feld) | ||
</ | </ | ||
+ | |||
+ | ==== Loop über Arrays ==== | ||
+ | <code python> | ||
+ | quadrate = [i**2 for i in range(1,9)] | ||
+ | |||
+ | # Loop über alle Elemente | ||
+ | for q in quadrate: | ||
+ | print(" | ||
+ | |||
+ | # Loop mit Index über alle Elemente | ||
+ | for i,q in enumerate(quadrate): | ||
+ | print(" | ||
+ | |||
+ | </ | ||
+ | |||
+ | ====== Aufgaben ====== | ||
+ | |||
+ | ===== Array-Rätsel ===== | ||
+ | Geben ist folgendes Array: | ||
+ | <code python array.py> | ||
+ | a = [58, 64, 2, 79, 92, 46, 80, 54, 50, 86, 72, 50, 84, 37, 76, 84, 14, 60, 99, 65, 66, 47, 28, 48, 38, 51, 17, 51, 6, 73, 20, 5, 83, 15, 43, 76, 93, 53, 65, 15, 91, 64, 86, 1, 63, 82, 96, 96, 35, 62, 37, 55, 51, 39, 96, 5, 24, 31, 23, 45, 75, 100, 81, 57, 67, 1, 55, 21, 80, 77, 89, 13, 75, 7, 49, 28, 31, 30, 41, 1, 57, 58, 75, 42, 14, 47, 64, 59, 9, 95, 59, 68, 74, 60, 99, 93, 39, 38, 65, 24] | ||
+ | </ | ||
+ | Gesucht sind folgende Dinge (wenn es mehrere Lösungen geben sollte, ist immer nur die erste auszugeben) | ||
+ | * Position und Wert des kleinsten und grössten Elements | ||
+ | * Position und Länge der längsten Sequenz strikt aufsteigender Zahlen | ||
+ | * Position und Länge der längsten Sequenz ungerader Zahlen | ||
+ | < | ||
+ | Minimum 1 bei Index 43 | ||
+ | Maximum 100 bei Index 61 | ||
+ | Aufsteigende Sequenz mit Länge 4, Start bei 33, Sequenz [15, 43, 76, 93] | ||
+ | Ungerade Sequenz mit Länge 6, Start bei 62, Sequenz [81, 57, 67, 1, 55, 21] | ||
+ | </ | ||
+ | |||
+ | <hidden Lösungsvorschläge> | ||
+ | <code python arraysuche.py> | ||
+ | a = [58, 64, 2, 79, 92, 46, 80, 54, 50, 86, 72, 50, 84, 37, 76, 84, 14, 60, 99, 65, 66, 47, 28, 48, 38, 51, 17, 51, 6, 73, 20, 5, 83, 15, 43, 76, 93, 53, 65, 15, 91, 64, 86, 1, 63, 82, 96, 96, 35, 62, 37, 55, 51, 39, 96, 5, 24, 31, 23, 45, 75, 100, 81, 57, 67, 1, 55, 21, 80, 77, 89, 13, 75, 7, 49, 28, 31, 30, 41, 1, 57, 58, 75, 42, 14, 47, 64, 59, 9, 95, 59, 68, 74, 60, 99, 93, 39, 38, 65, 24] | ||
+ | |||
+ | minimum = a[0] # Kleinster Wert | ||
+ | minpos=0 | ||
+ | maximum = a[0] # Grösster Wert | ||
+ | maxpos=0 | ||
+ | |||
+ | maxlen = 1 # Maximale Länge aufsteigender Sequenz | ||
+ | inclen = 1 # Aktuelle Länge der Sequenz | ||
+ | incpos = 0 # Startposition der längsten Sequenz | ||
+ | |||
+ | oddlen = 0 # Aktuelle Länge ungerader Sequenz | ||
+ | oddpos = 0 # Startposition der längsten Sequenz | ||
+ | maxodd = 0 # Maximale Länge der Sequenz, die bis jetzt gefunden wurde. | ||
+ | |||
+ | for i in range(len(a)): | ||
+ | if a[i]< | ||
+ | minimum=a[i] | ||
+ | minpos = i | ||
+ | if a[i]> | ||
+ | maximum=a[i] | ||
+ | maxpos = i | ||
+ | if i>0 and a[i]> | ||
+ | inclen+=1 | ||
+ | if (inclen> | ||
+ | maxlen=inclen | ||
+ | incpos = i-maxlen+1 | ||
+ | else: | ||
+ | inclen=1 | ||
+ | | ||
+ | if a[i]%2==1: | ||
+ | oddlen+=1 | ||
+ | if oddlen> | ||
+ | maxodd=oddlen | ||
+ | oddpos = i-maxodd+1 | ||
+ | else: # Gerade | ||
+ | oddlen=0 | ||
+ | | ||
+ | print(" | ||
+ | print(" | ||
+ | print(" | ||
+ | print(" | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | ===== Fibbonacci-Zahlen ===== | ||
+ | * Erzeugen Sie ein Array mit gegebener Länge mit den Fibbonacci-Zahlen: | ||
+ | * Bilden Sie auf dem Array mit den Fibbonacci-Zahlen ein Array mit den Quotienten zweier aufeinanderfolgenen Fibbonacci-Zahlen | ||
+ | |||
+ | <hidden Lösungsvorschläge> | ||
+ | <code python fib.py> | ||
+ | n=20 # 20 Fibbonacci-Zahlen | ||
+ | fib = [0,1] | ||
+ | for i in range(n-2): | ||
+ | fib.append(fib[-1]+fib[-2]) | ||
+ | print(fib) | ||
+ | quotient = [fib[i]/ | ||
+ | print(quotient) | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Pascal-Dreieck ===== | ||
+ | |||
+ | * Erzeugen Sie ein zweidimensionales Array mit dem Pascal-Dreieck. | ||
+ | * **Challenge**: | ||
+ | < | ||
+ | [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1], [1, 6, 15, 20, 15, 6, 1], [1, 7, 21, 35, 35, 21, 7, 1], [1, 8, 28, 56, 70, 56, 28, 8, 1], [1, 9, 36, 84, 126, 126, 84, 36, 9, 1], [1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1]] | ||
+ | 1 | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | <hidden Lösungsvorschläge> | ||
+ | Erzeugung des Dreiecks: | ||
+ | <code python> | ||
+ | n = 10 | ||
+ | p = [[1]] | ||
+ | for zeile in range(n): | ||
+ | neu = [1] # Neue Zeile mit einem 1 beginnen | ||
+ | for index in range(zeile): | ||
+ | # Aus der letzten Zeile p[-1] benachbarte Einträge zusammenzählen | ||
+ | neu.append(p[-1][index] + p[-1][index+1]) | ||
+ | neu.append(1) | ||
+ | p.append(neu) | ||
+ | |||
+ | print(p) | ||
+ | </ | ||
+ | |||
+ | Folgende Lösung ist keine schöne Lösung, schon eher eine Aufgabe in sich, den Code zu verstehen. | ||
+ | <code python pascaldreieck.py> | ||
+ | n=10 # Anzahl Zeilen | ||
+ | space = 4 | ||
+ | p = [[1]] | ||
+ | for i in range(n): | ||
+ | p.append([1]+[p[-1][j]+p[-1][j+1] for j in range(i)]+[1]) | ||
+ | for i in range(n+1): | ||
+ | print((" | ||
+ | </ | ||
+ | </ | ||