info_ref2011:musterloesungen
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
info_ref2011:musterloesungen [12.05.2011 19:32] – bauer | info_ref2011:musterloesungen [14.05.2011 16:29] (aktuell) – bauer | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | Ein Paar Worte zu den hier vorgestellen Musterlösungen: | ||
+ | - Es sind nur Musterlösungen, | ||
+ | - Im Text unten seht ihr immer nur die eigentlichen Funktionen, den Rest des Programms könnt ihr jeweils herunterladen. | ||
+ | - Der Code ist ausführlich kommentiert, | ||
+ | - So, alle Musterlösungen sind nun da. Bei Fehlern meldet euch bitte! | ||
+ | |||
+ | Und nun viel Spass :-) | ||
+ | |||
===== Fibonacci Folge ===== | ===== Fibonacci Folge ===== | ||
Zeile 29: | Zeile 37: | ||
</ | </ | ||
- | Das komplette Beispiel könnt ihr hier fertig anschauen und dann auch runterladen: | + | Das komplette Beispiel könnt ihr hier fertig anschauen und dann auch runterladen: |
Zeile 37: | Zeile 45: | ||
Hier solltet ihr eine Funktion erstellen, die als Argument ein Array gefüllt mit Noten entgegennimmt, | Hier solltet ihr eine Funktion erstellen, die als Argument ein Array gefüllt mit Noten entgegennimmt, | ||
Der Knackpunkt ist hier die **for-Schleife**: | Der Knackpunkt ist hier die **for-Schleife**: | ||
- | |||
- | In jedem Schleifendurchgang wird die "neue Summe" aus der Addition von "alter Summe" und des aktuellen Arraywertes erhalten. | ||
<code php> | <code php> | ||
summe=summe + noten[i]; | summe=summe + noten[i]; | ||
</ | </ | ||
+ | In jedem Schleifendurchgang wird die "neue Summe" aus der Addition von "alter Summe" und des aktuellen Arraywertes erhalten. | ||
<code php> | <code php> | ||
function durchschnitt($noten){ | function durchschnitt($noten){ | ||
Zeile 62: | Zeile 68: | ||
</ | </ | ||
+ | |||
+ | Hier könnt ihr wieder das fertige Programm anschauen und runterladen: | ||
+ | |||
+ | ===== Notendurschnittsfunktion Erweiterung ===== | ||
+ | Diesmal sollte eine Funktion geschrieben werden, die bei Eingabe von 3 Notenarrays und einer Gewichtung den Gesamtschnitt ausrechnet: | ||
+ | Der Knackpunkt war hier, die Gewichtung **" | ||
+ | |||
+ | <code php> | ||
+ | function gesamtschnitt(schr,mndl, | ||
+ | schnittschr=durchschnitt(schr); | ||
+ | schnittmndl=durchschnitt(mndl); | ||
+ | schnittprakt=durchschnitt(prakt); | ||
+ | | ||
+ | //Wir trennen den String " | ||
+ | gewichtungsarray=explode(":",gewichtung); | ||
+ | | ||
+ | //Nun ganz normal den Schnitt berechnen. array_sum() berechnet die Summe Zahlen im Array | ||
+ | ergebnis=(schnitt_schr * gewichtungsarray[0]+schnitt_mndl * gewichtungsarray[1]+schnitt_prakt * gewichtungsarray[2])/arraysum(gewichtungsarray); | ||
+ | | ||
+ | return $ergebnis; | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Zur Berechnung der schriftlichen, | ||
+ | Hier könnt ihr wieder das fertige Programm anschauen und runterladen: | ||
+ | |||
+ | ===== Mitternachtsformel ===== | ||
+ | Mit dieser Formel lässt sich bekanntlich die Lösungen einer quadratischen Gleichung | ||
+ | ax^2+bx+c = 0 errechnen. | ||
+ | |||
+ | Wir müssen also einfach diese 3 Koeffizienten einlesen und eine Funktion schreiben, die die drei möglichen Fälle mit einer **if-Verzweigung** abfrägt. | ||
+ | |||
+ | <code php> | ||
+ | function mnf(a,b, | ||
+ | //Der Ausdruck unter der Wurzel heißt Diskriminante und entscheidet, | ||
+ | //ob die Gleichung 1,2 oder keine Lösung hat | ||
+ | diskriminante=b*b−4∗a*$c; | ||
+ | | ||
+ | if ($diskriminante == 0) { //Eine Lösung | ||
+ | ergebnis=−b/(2*$a); | ||
+ | return $ergebnis; | ||
+ | } | ||
+ | else if ($diskriminante < 0 ){ //Keine Lösung | ||
+ | return "Keine reelle Lösung"; | ||
+ | } | ||
+ | else if ($diskriminante > 0) { //zwei Lösungen | ||
+ | x1=(−b + sqrt(diskriminante))/(2∗a); | ||
+ | x2=(−b - sqrt(diskriminante))/(2∗a); | ||
+ | ergebnis=array(x_1, | ||
+ | return $ergebnis; | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | Die von PHP bereitgestellte Funktion **sqrt()** berechnet die Wurzel der ihr übergebenen Zahl. | ||
+ | Hier gibt's das komplette Beispiel: {{: | ||
+ | |||
+ | ===== Skalarprodukt ===== | ||
+ | |||
+ | Nochmal die Gedächtnisstütze zum anguggen: | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | Der Kopf der Funktion sieht folgendermaßen aus: | ||
+ | <code php> | ||
+ | function sprodukt(a,b, | ||
+ | </ | ||
+ | Das zweite Argument wird hierbei **vorbelegt**, | ||
+ | Für die Fallunterscheidung verwenden wir wieder eine **if-Abfrage**. | ||
+ | Um den Winkel zwischen den Vektoren zu berechnen gehen wir folgendermaßen vor: | ||
+ | - Wir berechnen das Skalarprodukt der Vektoren. | ||
+ | - Dann jeweils deren Länge. **abs()** gibt den Betrag zurück, **sqrt()** berechnet die Wurzel. | ||
+ | - **acos()** ist der normale cos^(-1), wird allerdings im **Bogenmaß** ausgerechnet. | ||
+ | - Um den Winkel im Gradmaß zu erhalten benutzen wir die Funktion **rad2deg()**. | ||
+ | |||
+ | <code php> | ||
+ | function sprodukt(a,b, | ||
+ | if ($text == " | ||
+ | skal=a[0]*b[0]+a[1]*b[1]+a[2]*$b[2]; | ||
+ | laengea=abs(sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*$a[2])); | ||
+ | laengeb=abs(sqrt(b[0]*b[0]+b[1]*b[1]+b[2]*$b[2])); | ||
+ | winkel=acos(skal / (laengea∗laenge_b)); | ||
+ | winkel=rad2deg(winkel); | ||
+ | return $winkel; | ||
+ | } | ||
+ | else { | ||
+ | ergebnis=a[0]*b[0]+a[1]*b[1]+a[2]*$b[2]; | ||
+ | return $ergebnis; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | Wie immer hier das fertige Programm: {{: | ||
+ | |||
+ | ===== Kreuzprodukt ===== | ||
+ | Das Kreuzprodukt ist in der analytischen Geometrie der Oberstufe seeehr hilfreich. Ein Grund mehr darüber mal ein Programm zu schreiben: | ||
+ | Wichtig: Beim Kreuzprodukt kommt wieder ein **Vektor** heraus: | ||
+ | <code php> | ||
+ | ergebnis[0]=a[1]*b[2]−a[2]*$b[1]; | ||
+ | </ | ||
+ | ^^So berechnet ihr den obersten Eintrag des Vektors und speichert in einem Array $ergebnis an der Stelle 0. Und das muss eben für die zwei anderen Stellen noch berechnet werden. | ||
+ | Beim einen Fall der if-Verzweigung wir eben noch die Fläche berechnet. | ||
+ | |||
+ | |||
+ | <code php> | ||
+ | function kreuzprodukt(a,b, | ||
+ | if ($text == " | ||
+ | ergebnis[0]=a[1]*b[2]−a[2]*$b[1]; | ||
+ | ergebnis[1]=a[2]*b[0]−a[0]*$b[2]; | ||
+ | ergebnis[2]=a[0]*b[1]−a[1]*$b[0]; | ||
+ | flaeche=sqrt(ergebnis[0]*ergebnis[0]+ergebnis[1]*ergebnis[1]+ergebnis[2]*$ergebnis[2]); | ||
+ | return $flaeche; | ||
+ | } | ||
+ | else{ | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | Vollständiges Beispiel hier: {{: | ||
+ |
info_ref2011/musterloesungen.1305228759.txt.gz · Zuletzt geändert: 12.05.2011 19:32 von bauer