Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
gf_informatik:algorithmen_ii [2024-12-12 20:50] – [Auftrag zu Primzahlen] hofgf_informatik:algorithmen_ii [2025-12-11 09:14] (aktuell) hof
Zeile 2: Zeile 2:
  
 =====  Struktogramme und Python ===== =====  Struktogramme und Python =====
 +<html><script type="module" src="https://bottom.ch/ksr/ed/bottom-editor.js"></script></html>
  
 ==== Aufgaben A ==== ==== Aufgaben A ====
Zeile 11: Zeile 12:
 === Aufgabe A1: Maximum === === Aufgabe A1: Maximum ===
  
-   * Teil 1: Zwei Zahlen sollen eingegeben und die grössere der beiden Zahlen ausgegeben werden. Die grössere von zwei gleich grossen Zahlen ist einfach diese eine Zahl. +   * Teil 1: Zwei Zahlen sollen eingegeben (`input`) und die grössere der beiden Zahlen ausgegeben werden. Sind die Zahlen gleich gross, soll einfach die Zahl ausgegeben (`print`) werden
-   * Teil 2: Schreibe Code um als Funktion `max2(a, b)`, die das Maximum von a und b mit `return` _zurückgibt_. Die _Eingabe_ (`input`) und die _Ausgabe_ (`print`) sollen ausserhalb der Funktion erfolgen. +   * Teil 2: Schreibe Code um als Funktion `max2(a, b)`, die das Maximum von `aund `bmit `return` _zurückgibt_. Die Eingabe und die Ausgabe sollen **ausserhalb** der Funktion erfolgen. 
-   * Teil 3: Schreibe eine Funktion `max3(a, b, c)`, die das Maximum von drei Zahlen zurückgibt. _Verwende dazu die `max2` Funktion!_+   * Teil 3: Schreibe eine Funktion `max3(a, b, c)`, die das Maximum von **drei** Zahlen zurückgibt. _Verwende dazu die `max2` Funktion!_
  
 <nodisp 1> <nodisp 1>
 ++++Lösung| ++++Lösung|
-<code python>+<html><bottom-editor>
 def max2(a, b): def max2(a, b):
     if a > b:     if a > b:
Zeile 28: Zeile 29:
  
 print(max3(int(input('a')), int(input('b')), int(input('c')))) print(max3(int(input('a')), int(input('b')), int(input('c'))))
-</code>+</bottom-editor></html>
 ++++ ++++
 </nodisp> </nodisp>
Zeile 37: Zeile 38:
 <nodisp 1> <nodisp 1>
 ++++Lösung:| ++++Lösung:|
-<code python>+<html><bottom-editor>
 def sort(a, b, c): def sort(a, b, c):
     if a > b:     if a > b:
Zeile 55: Zeile 56:
  
 sort(input(), input(), input()) sort(input(), input(), input())
-</code>+</bottom-editor></html>
 ++++ ++++
 </nodisp> </nodisp>
  
 <nodisp 2> <nodisp 2>
-   (Ausgeblendet): Teil 2: Schreibe Code um als Funktion `my_sort(a,b,c)`, die die drei Zahlen a,b,c sortiert und richtig geordnet in eine Liste schreibt. Die Liste wird zurückgegeben.+++++Ausgeblendet| 
 +   * Teil 2: Schreibe Code um als Funktion `my_sort(a,b,c)`, die die drei Zahlen a,b,c sortiert und richtig geordnet in eine Liste schreibt. Die Liste wird zurückgegeben. 
 +++++
 </nodisp> </nodisp>
  
Zeile 89: Zeile 92:
 ===== Mathematische Algorithmen ===== ===== Mathematische Algorithmen =====
  
 +Mit _iterativen_ Algorithmen berechnen wir Schritt für Schritt das gewünschte Resultat. Das Resultat wird in einer Variable sukzessive akkumuliert. In einer Schleife wird jede Runde ein Wert hinzugefügt, beispielsweise durch Addition oder Multiplikation.
 +
 +**Beispiel**: Summe aller natürlicher Zahlen
 +
 +<html><bottom-editor>
 +def summe_aller_zahlen(n):
 +    # Berechnet die Summe aller natürlicher Zahlen von 1..n
 +    resultat = 0  # Akkumulator, zu Beginn auf Null
 +    
 +    # Klassische Schleife mit Zähler-Variable
 +    zahl = 1
 +    while zahl <= n:
 +        resultat = resultat + zahl
 +        zahl = zahl + 1
 +    return resultat
  
 +print(summe_aller_zahlen(10))
 +</bottom-editor></html>
 ==== Aufgaben B ==== ==== Aufgaben B ====
  
-=== Aufgabe B1: Einfache (math.) Algorithmen ===+=== Aufgabe B1: Iterative Algorithmen ===
  
 Schreibe für jede Aufgabe eine Funktion, die passende Argumente entgegennimmt und das Resultat zurück gibt. Schreibe für jede Aufgabe eine Funktion, die passende Argumente entgegennimmt und das Resultat zurück gibt.
Zeile 111: Zeile 131:
 <nodisp 1> <nodisp 1>
 ++++Lösung:| ++++Lösung:|
-<code python>+<html><bottom-editor>
 def multiply(a, b): def multiply(a, b):
     """Multipliziert zwei natürliche Zahlen ohne Verwendung der Python-Multiplikation."""     """Multipliziert zwei natürliche Zahlen ohne Verwendung der Python-Multiplikation."""
Zeile 147: Zeile 167:
     return test == n     return test == n
    
-a = input("a"+a = int(input("a")
-b = input("b")+b = int(input("b"))
 print(str(a) + " * " + str(b) + " = " + str(multiply(a, b))) print(str(a) + " * " + str(b) + " = " + str(multiply(a, b)))
 print(str(a) + " ^ " + str(b) + " = " + str(exponentiate(a, b))) print(str(a) + " ^ " + str(b) + " = " + str(exponentiate(a, b)))
Zeile 157: Zeile 177:
 print(str(a) + " ist eine Zweierpotenz: " + str(is_power_of_2(a))) print(str(a) + " ist eine Zweierpotenz: " + str(is_power_of_2(a)))
 print(str(b) + " ist eine Zweierpotenz: " + str(is_power_of_2(b))) print(str(b) + " ist eine Zweierpotenz: " + str(is_power_of_2(b)))
-</code>+</bottom-editor></html>
 ++++ ++++
 </nodisp> </nodisp>
Zeile 172: Zeile 192:
 ++++ ++++
  
-<nodisp 1>+<nodisp 2>
 ++++Lösung:| ++++Lösung:|
-<code python>+<html><bottom-editor>
 def quersumme(x): def quersumme(x):
     summe = 0     summe = 0
Zeile 184: Zeile 204:
  
 print(quersumme(413)) print(quersumme(413))
-</code>+</bottom-editor></html>
 ++++ ++++
 </nodisp> </nodisp>
Zeile 199: Zeile 219:
      * Eine Funktion, die herausfindet (_zurückgibt_), ob eine Zahl `t` ein Teiler ist der Zahl `n`.      * Eine Funktion, die herausfindet (_zurückgibt_), ob eine Zahl `t` ein Teiler ist der Zahl `n`.
      * Wieviele Parameter hat die Funktion `is_divisor`?      * Wieviele Parameter hat die Funktion `is_divisor`?
 +
  
 === Auftrag zu Primzahlen === === Auftrag zu Primzahlen ===
Zeile 225: Zeile 246:
  
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung:| ++++Lösung:|
-<code python>+<html><bottom-editor>
 import math import math
  
Zeile 238: Zeile 259:
     if n < 2:     if n < 2:
         return False         return False
-    = 2+    = 2
     # Es reicht, bis zur Wurzel von n zu testen - gäbe es einen grösseren Teiler t so dass     # Es reicht, bis zur Wurzel von n zu testen - gäbe es einen grösseren Teiler t so dass
     # t*x == n, dann müsste x kleiner sein als Wurzel(n) und wir hätten x bereits gefunden.     # t*x == n, dann müsste x kleiner sein als Wurzel(n) und wir hätten x bereits gefunden.
-    while <= math.sqrt(n): +    while <= math.sqrt(n): 
-        if is_divisor(n, i):+        if is_divisor(n, t):
             # Wir haben einen Teiler gefunden -> keine Primzahl, beenden.             # Wir haben einen Teiler gefunden -> keine Primzahl, beenden.
             return False             return False
-        + 1+        + 1
     # Keinen Teiler gefunden -> wir haben eine Primzahl!     # Keinen Teiler gefunden -> wir haben eine Primzahl!
     return True     return True
-</code>+</bottom-editor></html>
 ++++ ++++
 </nodisp> </nodisp>
Zeile 260: Zeile 281:
    * Schreibe eine Funktion `prime_factors(x)`, die eine Zahl x entgegennimmt und deren (geordnete) Primfaktoren von x ausgibt.    * Schreibe eine Funktion `prime_factors(x)`, die eine Zahl x entgegennimmt und deren (geordnete) Primfaktoren von x ausgibt.
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung:| ++++Lösung:|
-Mit den Funktionen `is_prime` und `is_divisor` von oben:+Mit den Funktionen `is_prime` und `is_divisor` von oben ([[https://wtp.ethz.ch/#?code=NobwRAdghgtgpmAXGGUCWEB0AHAnmAGjABMoAXKJMNGbAewCcyACVMgCwB0Jnvi4AZszQBnAPrE0AN1GMAFJJn8IxAs0WyGASkTdm-3mE5GwAcTQAjFgBUGAVzjMAXnYYAfgMYBrNQHc4EDwaIozMcBjMAOZQEE5OUOwANmiRcAzM1uGJacxSdEHSaMrEwiJkaiEQZcwAYlCJInCYxi1GPAYMcGSuBUoBJQCk6oUh6QC8Y8wADHp8gqVi2Aw0cHIQOnoGrcbmVhn2ji7u3moC9Q3MPOEQjgAKyzDxSaXlzJXVdQ1N220GwkI8AA8zAATLp2n99J1ugweJ9Gpt9CxJiDEcwAMTMACiImYnTQHnYrwsomcrmYAHVXE44IlcvlLmTmGQ4GUAswALRRAAnFkcrLCGHZkQYADeRI1OjxMmhsukWCF1FAJWjMWQAFQAD2YE0ualIgVYbglLOY2q82SF6UaEXquKpDBpiTWWmYdhUzF8aHS7G5ZBZPG1fPxZFxqQE7uUzQhnvYsscLEBkzY7EwIgAjkwXeDIQY0EJRBIRvIIGoyBsY7n9JiKd7mOwoHyrkLpVkcuHI-yOQA-Zhea53B5PRJqPn9ALRquQ6E9Wp2uBov7I5nMADUzAAjKrmABpAet-PpDsqLu9r0-xvsgfMe40YcAQjRM9h-wcaLmALgmrIiweq3WOZbCYOyWCwkiOBA3KEmUIripKg53gkdKwRKOR2oyRyeF4zTAb8Bg3N-OqMuuW4xr4cbZJcdAsIWSwrGsX7loBuYEcurFrpuT5dLOrGzCeQh0fAYhnB4ZCMCI2bvrhuxgWgCEwBydReGJUr0jwPC2nYAhsik47pDUdCJKkZLHNhPxoiJKlESC1bMAI3rVIJC4xp0qAYPw4yXNuAAihT8IyFi4My7COBgHidMqGCRMwTmXHYMDBri7pkLKnqOBFhKbpOBjkfGeJwG5J7pL2G7MZCmIGekcBQJlTn6n5CYhflhUecwyrMIk-TRe1HCOLFoiLgYmJQMMMijNlua5ZRhbBPIrnoEVpw1SpFZTn883uTkkwbUVzAAPR2ctjCDbmdEQGQciWYwWgneVzC4HJiQlFdDB8VOmI7a1HgxFRHVdTkfKjUUcAlIFh2iaEPbMgwQVehwwUQYxMV_hNkIvURrG_vRL03Tw3BOcJR0MBJGAXRg2B2BdWjU2AAC-AC6QA&layout=%5B%22Editor%22%2C%22Console%22%5D|hier in WTP]]):
 <code python> <code python>
 def next_prime(n): def next_prime(n):
Zeile 299: Zeile 320:
    * Schreibe eine Funktion `ggT(x,y)`, die zwei Zahlen `x` und `y` entgegennimmt und den ggT der beiden zurückgibt.    * Schreibe eine Funktion `ggT(x,y)`, die zwei Zahlen `x` und `y` entgegennimmt und den ggT der beiden zurückgibt.
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung:| ++++Lösung:|
-<code python>+<html><bottom-editor>
 def ggt(a, b): def ggt(a, b):
     """Berechnet den grössten gemeinsamen Teiler von a und b."""     """Berechnet den grössten gemeinsamen Teiler von a und b."""
Zeile 311: Zeile 332:
  
 print(ggt(544, 391)) print(ggt(544, 391))
-</code>+</bottom-editor></html>
 ++++ ++++
 </nodisp> </nodisp>
Zeile 321: Zeile 342:
    * Schreibe eine Funktion `wurzel(x)`, die die Wurzel von `x` auf `0.0001` genau berechnet.    * Schreibe eine Funktion `wurzel(x)`, die die Wurzel von `x` auf `0.0001` genau berechnet.
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung:| ++++Lösung:|
-<code python>+<html><bottom-editor>
 def wurzel(n, precision=0.0001): def wurzel(n, precision=0.0001):
     """Quadratwurzel nach Heron."""     """Quadratwurzel nach Heron."""
Zeile 338: Zeile 359:
    
 print(wurzel(225)) print(wurzel(225))
-</code>+</bottom-editor></html>
 ++++ ++++
 </nodisp> </nodisp>
  
  
  • gf_informatik/algorithmen_ii.1734036634.txt.gz
  • Zuletzt geändert: 2024-12-12 20:50
  • von hof