ERLEDIGT
NEIN
NEIN
ANTWORTEN
0
0
ZUGRIFFE
1300
1300
EMPFEHLEN
-
Hallo zusammen,
das hier ist meine erste Abgabe, weil ich meistens nicht fertig werde...wie auch dieses Mal... :-/
aber ich dachte ich gebe meinen Code trotzdem zum Abschuss frei...
ich hatte dieses mal noch weniger Zeit als sonst, deshalb hab ich nur einige Funktionen geschrieben und mir auch nicht viel Mühe bei deren Namen gegeben...
Ich hab auch nur einfache Regeln abgedeckt... also das "normale" Ableiten und die Kettenregel...
Auch ist bei mir das "Eingabeformat" der Formeln nicht wirklich flexibel, wie man am letzten Beispiel erkennen kann...
Ich hab meine Lösung trotzdem eingereicht, weil ich vielleicht hoffe, dass mir jemand helfen/sagen kann meine Regular Expressions zu verbessern...
mfg,
enne
PHP-Code:<?php
function derivate($term, $var) {
$search = "~((([0-9+\-\*/a-z\(\)]+|[0-9a-z]+))\^(.+?))~ie";
#echo "{$search}<br>";
if(preg_match($search, $term)) { # contains a circumflex "^"
$term = preg_replace($search, "derivateComplex(array('\\3', '\\4'), $var)", $term);
} else {
//echo "Not Matched<br>";
$search_s = "~([0-9]|[a-z])*\**".$var."*([\+\-\*/a-z0-9]+)~ie";
if(preg_match($search_s, $term)) {
$term = preg_replace($search_s, "derivateSimple(array('\\1', '\\3', '\\3', '\\4'), $var)", $term);
}
}
return simplify($term);
}
function derivateSimple($array, $var) {
#echo "<br>Parse Simple<pre>".print_r($array, true)."</pre><br>";
return $array[0];
}
function derivateComplex($array, $var) {
list($base, $exp) = $array;
#echo "<pre>".print_r($array, true)."</pre>";
$derivate = " ";
#echo "PREG MATCH: ".$base."^".$exp." == {$exp} * {$pot}^".($exp-1)."<br>";
if(strlen($base) > 1)
return $exp." * ".$base."^".(--$exp)." * ".derivate($base, $var);
else
return $exp." * ".$base."^".(--$exp);
}
function simplify($term) {
#echo "TERM before simplification: ".$term."<br>";
$pattern = "~([0-9]).\*.([0-9])+~ie";
do {
$term = preg_replace($pattern, "mul('$1', '$2')", $term);
} while(preg_match($pattern, $term));
// remove "^1"
$term = preg_replace("~\^1~", "", $term);
// remove unnecessary brackets. Example: x * (1)
$term = preg_replace("~\((.)\)~", "\\1", $term);
return $term;
}
function mul($one, $two = 1) {
#DEBUG: echo "MUL: $one * $two<br />";
return $one * $two." ";
}
$term = "5 * a^2 + b + a^3";
$x = "a";
$result = derivate($term, $x);
echo "<hr />\n";
echo "> {$term}<br />\n";
echo "> {$x}<br />\n";
echo "< {$result}<br />\n";
echo "<h1>2. Formel</h1>\n";
$term = "5 * (3*x+a)^2";
$x = "x";
$result = derivate($term, $x);
echo "<hr />\n";
echo "> {$term}<br />\n";
echo "> {$x}<br />\n";
echo "< {$result}<br />\n";
echo "<h1>3. Formel</h1>\n";
$term = "5 * (3x+a)^2";
$x = "x";
$result = derivate($term, $x);
echo "<hr />\n";
echo "> {$term}<br />\n";
echo "> {$x}<br />\n";
echo "< {$result}<br />\n";
?>
Ähnliche Themen
-
[QUIZ#7] mAu (PHP)
Von mAu im Forum ArchivAntworten: 0Letzter Beitrag: 06.12.08, 14:09 -
Quiz: Was bin ich?
Von MrTwister im Forum WerkstattAntworten: 3Letzter Beitrag: 05.04.06, 19:14 -
Quiz
Von JannyR im Forum PHPAntworten: 2Letzter Beitrag: 21.05.05, 15:58 -
Quiz
Von alkaline im Forum PHPAntworten: 0Letzter Beitrag: 27.09.04, 10:16 -
php Quiz
Von Sim im Forum PHPAntworten: 0Letzter Beitrag: 09.05.04, 12:43





Login





