Informatikwiki

Albert Einstein Gymnasium Reutlingen

Benutzer-Werkzeuge

Webseiten-Werkzeuge


info_ref2011:musterloesungen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
info_ref2011:musterloesungen [12.05.2011 19:41] bauerinfo_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, d.h. es gibt noch viele andere Wege zum Ziel.
 +  - 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, zusätzlich sind die "Knackpunkte" der Funktionen nochmals beschrieben.
 +  - So, alle Musterlösungen sind nun da. Bei Fehlern meldet euch bitte!
 +
 +Und nun viel Spass :-)
 +
 ===== Fibonacci Folge ===== ===== Fibonacci Folge =====
  
Zeile 29: Zeile 37:
 </code> </code>
  
-Das komplette Beispiel könnt ihr hier fertig anschauen und dann auch runterladen:[[http://ernest.aeg-reutlingen.de/~bauer/musterloesungen/fibonacci.php|fibonacci.php]]+Das komplette Beispiel könnt ihr hier fertig anschauen und dann auch runterladen: {{:info_ref2011:fibonacci.php|}}
  
  
Zeile 61: Zeile 69:
 </code> </code>
  
-Hier könnt ihr wieder das fertige Programm anschauen und runterladen:{{http://ernest.aeg-reutlingen.de/~bauer/musterloesungen/notendurchschnitt_1.php|notendurchschnitt_1.php}}+Hier könnt ihr wieder das fertige Programm anschauen und runterladen:{{:info_ref2011:notendurchschnitt_1.php|}}
  
 ===== Notendurschnittsfunktion Erweiterung ===== ===== Notendurschnittsfunktion Erweiterung =====
 Diesmal sollte eine Funktion geschrieben werden, die bei Eingabe von 3 Notenarrays und einer Gewichtung den Gesamtschnitt ausrechnet: Diesmal sollte eine Funktion geschrieben werden, die bei Eingabe von 3 Notenarrays und einer Gewichtung den Gesamtschnitt ausrechnet:
-Der Knackpunkt war hier, die Gewichtung **"2:1:1"**, welche als String gegeben ist, mit der vorgegebenen Funktion **explode** aufzutrennen. Die einzelnen Teile (also 2,1,1) werden in einem weiteren Array gespeichert +Der Knackpunkt war hier, die Gewichtung **"2:1:1"**, welche als String gegeben ist, mit der vorgegebenen Funktion **explode** aufzutrennen. Die einzelnen Teile (also 2,1,1) werden in einem weiteren Array gespeichert.
  
 <code php> <code php>
Zeile 82: Zeile 90:
  
 </code> </code>
 +
 +
 +Zur Berechnung der schriftlichen, mündlichen und praktischen Notendurchschnitte benutzen wir natürlich die vorher geschriebene Funktion **durchnschnitt()**
 +Hier könnt ihr wieder das fertige Programm anschauen und runterladen: {{:info_ref2011:notendurchschnitt_2.php|}}
 +
 +===== 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,$c){
 +    //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
 +        $x_1 = (-$b + sqrt($diskriminante) ) / (2*$a);
 + $x_2 = (-$b - sqrt($diskriminante) ) / (2*$a);
 + $ergebnis = array($x_1,$x_2);
 + return $ergebnis;
 +    }
 +    
 +}
 +</code>
 +Die von PHP bereitgestellte Funktion **sqrt()** berechnet die Wurzel der ihr übergebenen Zahl.
 +Hier gibt's das komplette Beispiel: {{:info_ref2011:mitternachtsformel.php|}}
 +
 +===== Skalarprodukt =====
 +
 +Nochmal die Gedächtnisstütze zum anguggen:
 +
 +[[http://www.rither.de/a/mathematik/lineare-algebra-und-analytische-geometrie/winkel/winkel-zwischen-vektor-und-vektor/]]
 +
 +Der Kopf der Funktion sieht folgendermaßen aus:
 +<code php>
 +function sprodukt($a,$b,$text="")
 +</code>
 +Das zweite Argument wird hierbei **vorbelegt**, dadurch wird es optional und wir müssen es beim Aufruf der Funktion nicht angeben (können aber natürlich, wenn wir wollen!)
 +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,$text=""){
 +    if ($text == "winkel") {
 +        $skal = $a[0]*$b[0]+$a[1]*$b[1]+$a[2]*$b[2];
 +        $laenge_a = abs(sqrt($a[0]*$a[0]+$a[1]*$a[1]+$a[2]*$a[2]));
 +        $laenge_b = abs(sqrt($b[0]*$b[0]+$b[1]*$b[1]+$b[2]*$b[2]));
 +        $winkel = acos($skal / ($laenge_a * $laenge_b));
 +        $winkel = rad2deg($winkel);
 +        return $winkel;
 +    }
 +    else {
 +        $ergebnis = $a[0]*$b[0]+$a[1]*$b[1]+$a[2]*$b[2];
 +        return $ergebnis;
 +    }
 +}
 +</code>
 +Wie immer hier das fertige Programm: {{:info_ref2011:skalarprodukt.php|}}
 +
 +===== 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];
 +</code>
 +^^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,$text=""){ 
 +    if ($text == "flaeche"){
 +        $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{
 +         $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];
 +         return $ergebnis;    
 +        
 +}
 +</code>
 +Vollständiges Beispiel hier: {{:info_ref2011:kreuzprodukt.php|}}
 +
info_ref2011/musterloesungen.1305229263.txt.gz · Zuletzt geändert: 12.05.2011 19:41 von bauer

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki