Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:ffprg1-2020:arrays [2020/02/10 16:51] – [Aufgaben] Ivo Blöchliger | lehrkraefte:blc:informatik:ffprg1-2020:arrays [2022/05/05 10:58] (current) – [Pascal-Dreieck] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Arrays und Tuples ====== | ||
| + | * Tuples: Wird mit runden Klammern geschrieben, | ||
| + | * Array/ | ||
| + | * Zugriff bei beiden via eckige Klammern, z.B. a[4], Index von 0 bis Anzahl Elemente minus 1. | ||
| + | |||
| + | |||
| + | Wo möglich, mit Tuples arbeiten. Ist in vielen Fällen effizienter (Zeit und Speicher). | ||
| + | |||
| + | <code python> | ||
| + | a = (1, | ||
| + | b = [1, | ||
| + | print(a[2]) | ||
| + | b[2]=8 | ||
| + | print(b) | ||
| + | a[2]=8 | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Wichtige Funktionen und Methoden ==== | ||
| + | * '' | ||
| + | * Negative Indexe: '' | ||
| + | * Unterliste/ | ||
| + | * Unterliste/ | ||
| + | * Array/Liste «umdrehen»: | ||
| + | * Anfang | ||
| + | Nur für Arrays: | ||
| + | * '' | ||
| + | * '' | ||
| + | Weitere nützliche Methoden: https:// | ||
| + | |||
| + | ==== Mehrdimensionale Arrays/ | ||
| + | <code python> | ||
| + | dirs = ((1,0), (0,1), (-1,0), (0,-1)) | ||
| + | print dirs[1][1] | ||
| + | for d in dirs: | ||
| + | | ||
| + | </ | ||
| + | |||
| + | ==== Erzeugung von Arrays ==== | ||
| + | <code python> | ||
| + | quadrate = [i**2 for i in range(20)] | ||
| + | print(quadrate) | ||
| + | feld = [ [x*y for y in range(1,4)] for x in range(1,4) ] | ||
| + | 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((" | ||
| + | </ | ||
| + | </ | ||
| + | |||