TEIL 3: ZÄHLSCHLEIFEN, Aufgaben 13 bis 20


Aufgabe 13


Beim Programmieren kommt es oft vor, daß ein bestimmter Programmabschnitt mehrmals durchlaufen werden soll: eine Variable wird nacheinander um 1 (oder um einen anderen Betrag) erhöht bis zu einem Grenzwert, z.B.:

for j = 1 to 10
.....
next j


Alle Befehle, die zwischen for...next stehen, werden 10 mal ausgeführt. Besonders gut eignen sich solche Schleifen für grafisches Programmieren, falls ein Bildelement mehrmals wiederholt wird:





Ja, wenn du sie nicht nur gelesen, sondern auch durchgearbeitet hast, sollte das abgebildetet Muster kein Problem mehr für dich sein!



Na, weil´s die erste "Ecke" des Schnurmusters ist, hier noch ein Tip:

Startpunkte:
P1 (0 + 0*50, 300), i = 1
P2 (0 + 1*50, 300), i = 2
P3 (0 +2*50, 300), i = 3 usw.

Endpunkte:
P5 (300, 300 - 1*50), i = 1
P7 (300, 300 - 2*50), i = 2
P9 (300, 300 - 3*50), i = 3 usw.


Also hier die Aufgabe: programmiere das abgebildete Schnurmuster, zunächst ohne die Kreise in der Mitte.

Programmiere noch weitere Linienmuster, bis im Menü mindestens 5, höchstens 10 Linienmuster enthalten sind.

Aufgabe 14


Nun gehts an die Kreismuster:



Alles, was du hierzu noch nicht kennst, ist der Kreisbefehl:
circle (Mittelpunkt), Radius
Mittelpunktskoordinaten und Radius werden bei Skalierungsmodus 0 in Pixel angebenen.

... und die Aufgabe ? Na, 5 Kreismuster sollen ins Programm MUSTER eingefügt werden.

Aufgabe 15


Zählschleifen eignen sich nicht nur für Grafikelemente, auch bei mathematischen Aufgabenstellungen gibt es oft Programmteile, die mehrmals wiederholt werden müssen. Im Programm UNSUM_1, das die ff. Abbildung zeigt, soll eine Summe aus unendlich vielen Summanden berechnet werden:



Spiele zunächst mal mit Papier und Bleistift selber Prozessor und denke die ff. Zeilen durch und notiere die Ergebnisse in Form einer Tabelle:

a = 1
s = 0
for i = 1 to n
     s = s + a
     a = a * 0.5
Next i


Alles klar? Los geht´s mit UNSUM_1!

Aufgabe 16


Für die beiden nächsten "Unsummen-Programme" spare dir etwas Arbeit:
speichere UNSUM_1 gleich auch als UNSUM_2 und UNSUM_3 ab (auch das Formular, nicht nur das Projekt!), du mußt dann nur noch geringfügige Änderungen für das jeweils nächste Programm anbringen:

Unsum_2 soll 1 - 1/2 + 1/4 - 1/8 + - ... berechnen.
Unsum_3 soll 1 + 1/3 + 1/9 + ... berechnen.



Aufgabe 17


Erstelle für y = x2 - 1 eine Funktionstabelle im Intervall [-3,+3] mit der Schrittweite 0.5. Name: PARABEL



Wenn du in der Zählschleife für x List1.AddItem str(x) + " " + str(y)einfügst, dann werden die Zahlen der Wertetabelle sehr schlecht dargestellt, besser ist die ff. Zeile >List1.AddItem Format(x, " 0.00") + " " + Format(y, " 0.00").
Durch die Funktion format(x,"0.00") wird der Wert der Variablen x nicht nur in einen String (Zeichenkette) umgewandelt, sondern auch mit 2 Nachkommastellen ausgegeben, was der Wertetabelle ein einheitlicheres Aussehen gibt.



Aufgabe 18


Neben den Wiederholungen mit Anfangsbedingung, die mit for ... next programmiert werden, gibt es auch noch Wiederholungen mit Endbedingung: einzelne Schritte werden solange wiederholt, bis eine bestimmte Bedingung zutrifft. Beispielsweise wird eine Zahl z solange um 1 erhöht, solange sie kleiner als 100 ist: vgl. die Übersicht über die Struktogramme. Wiederholungen mit Endbedingung werden mit while ... wend oder mit do ... loop (while/until) programmiert.



Rechne den Euklid´schen Algorithmus anhand zweier anderer Beispiele mit Papier und Bleistift nochmals durch und versuche ein Struktogramm zu zeichnen!!!

Nun sieh´ dir die ff. Programmzeilen an und spiele wieder mit Papier und Bleistift selber Prozessor:

Dim ggt As Integer
Dim ganzteil As Single
Dim z_eins As Single
Dim z_zwei As Single

a = Val(Text1.Text)
b = Val(Text2.Text)

z_eins = a
z_zwei = b

Rest = 100  'irgendeine Zahl ungleich Null
While Rest > 0
  ganzteil = Int(a / b)
  Rest = a - b * ganzteil

  If Rest = 0 Then
    List1.AddItem "ggT(" + Str(z_eins) + "," + Str(z_zwei) + ")=" + Str(b)
  End If

  a = b
  b = Rest
Wend


Hier taucht auch wieder ein neuer Befehl auf: int (a/b) gibt den Quotienten von a durch b ohne die Kommastellen an: int (17/5) ergibt also 3.

So, nun nimm Papier und Bleistift zur Hand und setze a=120 und b=75.
Arbeite nun die Schleife durch, indem du tabellarisch alle Werte notierst, die die vorhandenen Variablen annehmen, solange die Variable Rest größer als Null ist.

Wähle noch ein 2. und 3. Beispiel mit geeigneten Zahlen und denke die Programmzeilen nochmals durch.

Hier nun das fertige Programm:




Aufgabe 19


Als letztes noch 2 Beispiele für die Verwendung einer do...loop-Schleife.
Will man z.B. eine Diashow ablaufen lassen, so ist es sinnvoll, Verzögerungen einzubauen, um den BetrachterInnen Zeit zu geben. Dies kann mit einer Zählschleife programmiert werden:

i = 0
  Do
     i = i + 1
  Loop Until i = 500000


Solange, bis der Rechner auf eine halbe Million hochgezählt hat, passiert nichts.
Benutze nun eine solche Verzögerungsschleife, um 10 Sternchen langsam nacheinander auszugeben:

Um die Sternchen an der gewünschten Position des Formulars auszugeben, gibt es die Befehle CurrentX (schickt den Cursor in die Position x in waagrechter Richtung) und CurrentY (schickt den Cursor in die Position y in senkrechter Richtung): wählt man dabei scalemode=6, dann ist die Maßeinheit Millimeter!

Schreibe nun zunächst im Programmcode für den Startknopf eine for..next-Schleife, für die Ausgabe von 10 Sternchen auf dem Formular. (Mit deinem Logo sieht´s natürlich noch besser aus!)
Füge nun nach der print-Zeile die Verzögerungsschleife dazu.
Für die Verzögerungsschleife muss der Zähler i als single deklariert werden, mit einer Deklaration als integer erhält man bei sehr großen Zahlen eine Fehlermeldung!!!

Setze nun zeile = 10 und spalte=4, füge currentx=spalte und currenty=zeile an geeigneter Stelle ein. Erhöhe den Wert von spalte nach jeder Verzögerung um 8.

Speichere das Programm unter dem Namen verzoeg und kompiliere es auch als exe-Datei!




Aufgabe 20


Der Abschluss des Kapitels "Zählschleifen" soll eine Mini-Diashow sein:



Drei kleine selbsterstellte Bilder sollen in eine PictureBox eingebunden werden. Sie sollen mit Verzögerung "abgespielt" werden, dazwischen soll jeweils mit picture1.picture=loadpicture(" ") die PictureBox freigemacht werden. Programmname: DIA







© 2010 Asti PoVRay-Site Mathematische Streiflichter