lehrkraefte:blc:informatik:ffprg1-2020:loops

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
lehrkraefte:blc:informatik:ffprg1-2020:loops [2020/02/02 11:55]
Ivo Blöchliger [Aufgaben]
lehrkraefte:blc:informatik:ffprg1-2020:loops [2022/03/31 12:41]
Ivo Blöchliger [Zeilenumbrüche]
Line 38: Line 38:
 k=100 k=100
 p=1.01 p=1.01
-while (k<200): +while (k<200):   # Wiederhole solange wie k<200 
-    k*=p +    k*=p   # Kurzform für k = k*
-    n+=1+    n+=1   # Kurzform für n = n+1
 print(n) print(n)
 </code> </code>
 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.
 +</hidden>
 ==== Endlos-Schleife ==== ==== Endlos-Schleife ====
 <code python> <code python>
-while true:+import time 
 +while True:
    print("immer und immer wieder")    print("immer und immer wieder")
 +   time.sleep(0.5)   # Ein bisschen Pause, damit die Ausgabe nicht komplett überläuft.
 </code> </code>
  
 ===== break, continue ===== ===== break, continue =====
-Manchmal ist es wünschenswert, eine Schleife abzubrechen (**break**) oder direkt zur nächsten Wiederholung (**continue**) zu springen.+Manchmal ist es wünschenswert, eine ''while''- oder ''for'-Schleife irgendwo innerhalb abzubrechen (**break**) oder direkt zur nächsten Wiederholung (**continue**) zu springen, ohne den Rest des Blocks auszuführen
  
 <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("Sonst noch was mit %d tun" % a)
 </code> </code>
  
Line 65: Line 71:
 a = 1 a = 1
 while a<10: while a<10:
-   if a%2==0:+   if a%2==0:   # Wenn der Rest der Divison von a durch 2 Null ist, d.h. wenn a gerade ist. 
 +       a+=3
        continue  # Nächste Wiederholung        continue  # Nächste Wiederholung
    # Was kompliziertes mit a machen    # Was kompliziertes mit a machen
Line 78: Line 85:
         print("%d * %d = %d" %(i,j,i*j))         print("%d * %d = %d" %(i,j,i*j))
 </code>         </code>        
 +
 +
 +===== Zeilenumbrüche =====
 +Sie können eine print-Ausgabe ohne Zeilenumbruch erreichen, indem Sie nach der schliessenden Klammer ein Komma anfügen:
 +<code python>
 +print("Es geht "),
 +print("noch weiter")
 +</code>
 +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)                 # Ausgabe: Die Zahlen 1, 4, 9, 16
 +</code>
  
 ====== Aufgaben ====== ====== Aufgaben ======
Line 91: Line 115:
 </code> </code>
  
-Sie können eine print-Ausgabe ohne Zeilenumbruch erreichen, indem Sie nach der schliessenden Klammer ein Komma anfügen: 
-<code python> 
-print("Es geht "), 
-print("noch weiter") 
-</code> 
-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("Es geht") 
-sys.stdout.write("noch weiter\n" # Am Schluss ein Zeilenumbruch mit \n 
-</code> 
  
   * 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> </code>
 +
 +<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("%d " % z)
 +        n+=1
 +        if n%20 == 0:
 +            print
 +    z+=1
 +</code>
 +
 +<code python primes2.py>
 +import sys
 +n = 0
 +z = 2
 +while True:
 +    prime = True
 +    for t in range(2,int(z**0.5)+1):
 +        if (z % t==0):
 +            prime = False
 +    if prime:
 +        sys.stdout.write("%d " % z)
 +        n+=1
 +        if n%20 == 0:
 +            print
 +    z+=1
 +</code>
 +
 +<code python primes3.py>
 +import sys
 +n = 0
 +primes = [2]
 +sys.stdout.write("2 ")
 +z=3
 +while z<1000000:
 +    prime = True
 +    for p in primes:
 +        if p*p>z:
 +            break
 +        if (z % p==0):
 +            prime = False
 +    if prime:
 +        sys.stdout.write("%d " % z)
 +        n+=1
 +        primes.append(z)
 +        if n%20 == 0:
 +            print
 +    z+=2
 +</code>
 +
 +<code python eratosthenes.py>
 +import sys
 +n = 1000000
 +primes = [i>1 for i in range(0,n+1)]
 +p = 2
 +while (p*p<=n):
 +    for i in range(p*p,n+1,p):
 +        primes[i]=False
 +    p+=1
 +    while (not primes[p]):
 +        p+=1
 +np=0
 +for i in range(0,n+1):
 +    if primes[i]:
 +        sys.stdout.write("%d " % i)
 +        np+=1
 +        if np%20 == 0:
 +            print
 +</code>
 +
 <code python perfektezahl.py> <code python perfektezahl.py>
 z = 2 z = 2
Line 171: Line 261:
         if z%t == 0:         if z%t == 0:
             s+=t             s+=t
-            s+=z/t+            if t!=z/t: 
 +                s+=z/t
         t+=1         t+=1
     if s==z:     if s==z:
Line 178: Line 269:
     if (z%100000==0):     if (z%100000==0):
         print("[%d]" % z)         print("[%d]" % z)
- 
 </code> </code>
  
 </hidden> </hidden>
  • lehrkraefte/blc/informatik/ffprg1-2020/loops.txt
  • Last modified: 2022/04/07 13:16
  • by Ivo Blöchliger