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:22] 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|}}
  
  
  
-==== Notendurchschnittsfunktion ====+===== Notendurchschnittsfunktion ====
 + 
 +Hier solltet ihr eine Funktion erstellen, die als Argument ein Array gefüllt mit Noten entgegennimmt, den Durchschnitt berechet und diesen dann zurückgibt. 
 +Der Knackpunkt ist hier die **for-Schleife**: Wir müssen alle Noten aus dem Array nehmen und aufaddieren. 
 +<code php> 
 +$summe = $summe + $noten[$i]; 
 +</code>  
 +In jedem Schleifendurchgang wird die "neue Summe" aus der Addition von "alter Summe" und des aktuellen Arraywertes erhalten. 
 +<code php> 
 +function durchschnitt($noten){ 
 +    //count($noten) gibt die Länge von $noten zurück, also wieviele Noten eingegeben wurden. 
 +    //Diese Zahl wird in der Variablen $anzahl_noten gespeichert 
 +    $anzahl_noten = count($noten); 
 +     
 +    $summe = 0 
 +    for($i = 0; $i < $anzahl_noten; $i++){ 
 +        $summe = $summe + $noten[$i]; 
 +    } 
 +     
 +    //Jetzt müssen wir noch die Summe durch die Anzahl der Noten teilen 
 +    $ergebnis = $summe / $anzahl_noten; 
 +     
 +    //Und das Ergebnis mit dem Befehl return wieder an das Hauptprogramm zurückgegeben. 
 +    return $ergebnis;     
 +
 + 
 +</code> 
 + 
 +Hier könnt ihr wieder das fertige Programm anschauen und runterladen:{{:info_ref2011:notendurchschnitt_1.php|}} 
 + 
 +===== 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 **"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> 
 +function gesamtschnitt($schr,$mndl,$prakt,$gewichtung){ 
 +    $schnitt_schr = durchschnitt($schr); 
 +    $schnitt_mndl = durchschnitt($mndl); 
 +    $schnitt_prakt = durchschnitt($prakt); 
 +     
 +    //Wir trennen den String "2:1:1" mit dem Trennzeichen ":" auf. die einzelnen Teilstrings werden in einem Array gespeichert"     
 +    $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]) / array_sum($gewichtungsarray); 
 +     
 +    return $ergebnis; 
 + 
 +</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|}}
  
-Hier solltet ihr eine Funktion erstellen, die als Argument ein Array gefüllt mit Noten entgegennimmt, den Durchschnitt berechet und diesen dann zurückgibt 
info_ref2011/musterloesungen.1305228135.txt.gz · Zuletzt geändert: 12.05.2011 19:22 von bauer

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki