> restart: # Zaehlschleifen # Vorbetrachtung: Konstruktionen der folgenden Art finden sich vielfach in Schleifen. # Der bisherige Wert einer Variablen wird durch einen neuen Wert ueberschrieben: > b:=5; > b:=b+3; > b:=b*2; > # Beispiele zu Zaehlschleifen: > a:=1: > to 10 do a:=a*2; print(a) end do: > a; > 2^10; # Zur Kontrolle # Achtung: Der Befehl vor der Schleife leistet die Initialisierung # (das bedeutet: Zuweisung eines Anfangswertes) fuer die bei jedem Durchlaufen der Schleife # abzuaendernde Variable (hier a genannt). Ohne Initialisierung koennten # die Befehle in der Schleife beim ersten Durchlauf nicht ausgefuehrt werden. # Vor einem erneuten Abschicken der Schleife muss erst wieder # der Initialisierungsbefehl aufgerufen werden! # # Summenbildung mit Hilfe von Schleifen. Eine Summe ist mit 0 zu initialisieren. # Diesmal tritt eine Zaehlvariable i auf. > summe:=0: > for i to 10 do summe:=summe+i; print(summe) end do: > summe; > add(i,i=1..10); # Zur Kontrolle # Produktbildung mit Hilfe von Schleifen. Ein Produkt ist mit 1 zu initialisieren. > produkt:=1: > for i to 10 do produkt:=produkt*i; print(produkt) end do: > produkt; > mul(i,i=1..10); # Zum Vergleich > 10!; # Zum Vergleich # Bilden einer Aufzaehlung mit Hilfe von Schleifen. Die Initialisierung # geschieht mit der leeren Aufzaehlung; sie hat in Maple den Namen NULL (Achtung: Schreibweise!) > sequenz:=NULL: > for i to 10 do sequenz:=sequenz,i; print(sequenz) end do: > sequenz; > seq(i,i=1..10); # Zum Vergleich # Jetzt eine komplexere Schleife: > sequenz:=NULL: > summe:=0: > produkt:=1: > for i from 7 by 2 to 20 do > sequenz:=sequenz,i; > summe:=summe+i; > produkt:=produkt*i > end do: > sequenz; summe; produkt; # Durchlaufen rueckwaerts: > for i from 8 by -3 to 0 do > print(i) > end do: # > for i in [3,7,15] do print(i^2) end do: > seq(i^2,i=[3,7,15]); # Zum Vergleich # # Anwendung: Sparvertrag # Auszugeben ist fuer jedes Jahr das Guthaben auf dem Konto > einzahlung:=1000: # Euro an jedem Jahresanfang > zinssatz:=0.04: # gleichbleibend 4 Prozent > laufzeit:=8: # Jahre > guthaben:=einzahlung: # unmittelbar nach Vertragsabschluss > print(0,guthaben); > for i to laufzeit do > zinsgutschrift:=guthaben*zinssatz; > guthaben:=guthaben+zinsgutschrift+einzahlung; > print(i,guthaben) > end do: # Sparvertrag mit Dynamisierung der Einzahlung: # Jeweils 110 % des Vorjahresbetrages > anfangseinzahlung:=1000: # Euro bei Vertragsabschluss > zinssatz:=0.04: # gleichbleibend 4 Prozent > laufzeit:=8: # Jahre > dyn:=1.1:# Dynamisierungsfaktor 110 Prozent > einzahlung:=anfangseinzahlung: > guthaben:=anfangseinzahlung: # unmittelbar nach Vertragsabschluss > print(0,guthaben); > for i to laufzeit do > zinsgutschrift:=guthaben*zinssatz; > einzahlung:=einzahlung*dyn; > guthaben:=guthaben+zinsgutschrift+einzahlung; > print(i,guthaben) > end do: # Hypothekentilgung > anfangsschuld:=100000: # Euro > zinssatz:=0.07: # 7 Prozent > anfangstilgung:=0.01: # 1 Prozent > annuitaet:=anfangsschuld*(zinssatz+anfangstilgung); # jaehrliche Rate > schuld:=anfangsschuld: > kurve:=[0,schuld]: > for i to 40 do > schuld:=schuld*(1+zinssatz)-annuitaet; > kurve:=kurve,[i,schuld]; > if schuld<0 then break end if > end do: > convert([kurve],matrix); > plot([kurve]); # # Berechnung des Flaecheninhalts einer beliebigen Polygonflaeche. # Hilfsmittel: Ein Dreieck, dessen Ecken die Koordinaten (x_1,y_1), (x_2,y_2) und (0,0) # besitzen, hat den Flaecheninhalt (x_1 y_2 -x_2 y_1)/2. # Der Polygonzug wird als Liste von Listen beschrieben. Die Zahl der dabei # angegebenen Punkte kann man mit dem Befehl nops (number of operands=Zahl der Listenelemente) erfragen. > p:=[[-2,1],[7,1],[3,5],[-2,5],[-2,1]]; > nops(p); > plot(p,scaling=constrained); > p[3]; # Eckpunkt Nummer 3 > p[3,1]; p[3,2]; # x- und y-Koordinate von Eckpunkt 3 # > fl:=0: > for i to nops(p)-1 do > fl:=fl+(p[i,1]*p[i+1,2]-p[i,2]*p[i+1,1])*.5 > od: > fl; # Einfacher ohne Schleife: > add(p[i,1]*p[i+1,2]-p[i,2]*p[i+1,1],i=1..nops(p)-1)*.5;