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:loops [2020/02/02 14:53] Ivo Blöchliger [Aufgaben] |
lehrkraefte:blc:informatik:ffprg1-2020:loops [2022/04/07 13:16] (current) Ivo Blöchliger [Aufgaben] |
||
---|---|---|---|
Line 38: | Line 38: | ||
k=100 | k=100 | ||
p=1.01 | p=1.01 | ||
- | while (k< | + | while (k< |
- | k*=p | + | k*=p # Kurzform für k = k*p |
- | n+=1 | + | n+=1 # Kurzform für n = n+1 |
print(n) | print(n) | ||
</ | </ | ||
Was berechnet das obige Programm? | Was berechnet das obige Programm? | ||
+ | <hidden Lösung> | ||
+ | Das Programm berechnet die Anzahl Jahre, die nötig sind, bis das Ausgangskapital $k$ bei einem Zinsatz von $p-1$ auf über 200 angewachsen ist. | ||
+ | </ | ||
==== Endlos-Schleife ==== | ==== Endlos-Schleife ==== | ||
<code python> | <code python> | ||
- | while true: | + | import time |
+ | while True: | ||
| | ||
+ | | ||
</ | </ | ||
===== break, continue ===== | ===== break, continue ===== | ||
- | Manchmal ist es wünschenswert, | + | Manchmal ist es wünschenswert, |
<code python> | <code python> | ||
Line 60: | Line 65: | ||
if a>5: | if a>5: | ||
break # Sofort die while-Schlaufe beenden | break # Sofort die while-Schlaufe beenden | ||
+ | print(" | ||
</ | </ | ||
Line 65: | Line 71: | ||
a = 1 | a = 1 | ||
while a<10: | while a<10: | ||
- | if a%2==0: | + | if a%2==0: |
+ | a+=3 | ||
| | ||
# Was kompliziertes mit a machen | # Was kompliziertes mit a machen | ||
Line 78: | Line 85: | ||
print(" | print(" | ||
</ | </ | ||
+ | |||
+ | |||
+ | ===== Zeilenumbrüche ===== | ||
+ | Sie können eine print-Ausgabe ohne Zeilenumbruch erreichen, indem Sie nach der schliessenden Klammer ein Komma anfügen: | ||
+ | <code python> | ||
+ | print(" | ||
+ | print(" | ||
+ | </ | ||
+ | Leider wird damit auch ein Leerschlag eingefügt. | ||
+ | |||
+ | Noch mehr Kontrolle hat man, wen man die ganze Zeile erst in einem String aufbaut und diesen am Schluss ausgibt: | ||
+ | <code python> | ||
+ | zeile = "Die Zahlen 1" | ||
+ | for i in range(2,5): | ||
+ | zeile += ", %d" % (i*i) | ||
+ | print(zeile) | ||
+ | </ | ||
====== Aufgaben ====== | ====== Aufgaben ====== | ||
Line 87: | Line 111: | ||
Sie können wie folgt überprüfen, | Sie können wie folgt überprüfen, | ||
<code python> | <code python> | ||
- | if a % b == 0: # Wenn der Rest der Division von a durch b gleich Null ist, ist a druch b teilbar | + | if a % b == 0: # Wenn der Rest der Division von a durch b gleich Null ist, ist a durch b teilbar |
# Tu was | # Tu was | ||
</ | </ | ||
- | Sie können eine print-Ausgabe ohne Zeilenumbruch erreichen, indem Sie nach der schliessenden Klammer ein Komma anfügen: | ||
- | <code python> | ||
- | print(" | ||
- | print(" | ||
- | </ | ||
- | Leider wird damit auch ein Leerschlag eingefügt. Eine flexiblere Methode ist die Verwendung von sys.stdout.write(): | ||
- | <code python> | ||
- | import sys | ||
- | |||
- | sys.stdout.write(" | ||
- | sys.stdout.write(" | ||
- | </ | ||
* Schreiben Sie ein Programm, das sämtliche Teiler der eingegebenen Zahl ausgibt. | * Schreiben Sie ein Programm, das sämtliche Teiler der eingegebenen Zahl ausgibt. | ||
Line 109: | Line 121: | ||
* Primfaktorzerlegung von 123456 = 1 * 2 * 2 * 2 * 2 * 2 * 2 * 3 * 643 | * Primfaktorzerlegung von 123456 = 1 * 2 * 2 * 2 * 2 * 2 * 2 * 3 * 643 | ||
* Primfaktorzerlegung von 123456 = 1 * 2^6 * 3 * 643 | * Primfaktorzerlegung von 123456 = 1 * 2^6 * 3 * 643 | ||
+ | * Schreiben Sie ein Programm, das eine Primzahl nach der anderen ausgibt. | ||
* Schreiben Sie ein Programm, das perfekte Zahlen sucht, d.h. solche, die gleich der Summe Ihrer Teiler (sich selbst ausgenommen) sind. | * Schreiben Sie ein Programm, das perfekte Zahlen sucht, d.h. solche, die gleich der Summe Ihrer Teiler (sich selbst ausgenommen) sind. | ||
Line 163: | Line 176: | ||
t+=1 | t+=1 | ||
</ | </ | ||
+ | |||
+ | <code python primes1.py> | ||
+ | import sys | ||
+ | n = 0 | ||
+ | z = 2 | ||
+ | while True: | ||
+ | prime = True | ||
+ | for t in range(2,z): | ||
+ | if (z % t==0): | ||
+ | prime = False | ||
+ | if prime: | ||
+ | sys.stdout.write(" | ||
+ | n+=1 | ||
+ | if n%20 == 0: | ||
+ | |||
+ | z+=1 | ||
+ | </ | ||
+ | |||
+ | <code python primes2.py> | ||
+ | import sys | ||
+ | n = 0 | ||
+ | z = 2 | ||
+ | while True: | ||
+ | prime = True | ||
+ | for t in range(2, | ||
+ | if (z % t==0): | ||
+ | prime = False | ||
+ | if prime: | ||
+ | sys.stdout.write(" | ||
+ | n+=1 | ||
+ | if n%20 == 0: | ||
+ | |||
+ | z+=1 | ||
+ | </ | ||
+ | |||
+ | <code python primes3.py> | ||
+ | import sys | ||
+ | n = 0 | ||
+ | primes = [2] | ||
+ | sys.stdout.write(" | ||
+ | z=3 | ||
+ | while z< | ||
+ | prime = True | ||
+ | for p in primes: | ||
+ | if p*p>z: | ||
+ | break | ||
+ | if (z % p==0): | ||
+ | prime = False | ||
+ | if prime: | ||
+ | sys.stdout.write(" | ||
+ | n+=1 | ||
+ | primes.append(z) | ||
+ | if n%20 == 0: | ||
+ | |||
+ | z+=2 | ||
+ | </ | ||
+ | |||
+ | <code python eratosthenes.py> | ||
+ | import sys | ||
+ | n = 1000000 | ||
+ | primes = [i>1 for i in range(0, | ||
+ | p = 2 | ||
+ | while (p*p< | ||
+ | for i in range(p*p, | ||
+ | primes[i]=False | ||
+ | p+=1 | ||
+ | while (not primes[p]): | ||
+ | p+=1 | ||
+ | np=0 | ||
+ | for i in range(0, | ||
+ | if primes[i]: | ||
+ | sys.stdout.write(" | ||
+ | np+=1 | ||
+ | if np%20 == 0: | ||
+ | |||
+ | </ | ||
+ | |||
<code python perfektezahl.py> | <code python perfektezahl.py> | ||
z = 2 | z = 2 |