Hi
Ich habe von meinem Lehrer den Auftrag bekommen, die Intervallverschachtelung für PHP zu machen.
Hab mich hingesetzt und der Code sollte meiner Meinung nach funktionieren.
Doch des Problem ist, bei eval("\$erga = $stra;"); bleibt mir des Script immer hängen und überschreitet das Zeitlimit von 30 Sekunden.
Dass Ganze ist HIER zu erreichen!
Eingaben sind zum Beispiel diese:
f(x) = x-1
a = -1
b = 2
Alles anzeigen
Kann mir da wer helfen?
Vielen Dank ihm Vorraus für die Mühe
lu
Ich habe von meinem Lehrer den Auftrag bekommen, die Intervallverschachtelung für PHP zu machen.
Hab mich hingesetzt und der Code sollte meiner Meinung nach funktionieren.
Doch des Problem ist, bei eval("\$erga = $stra;"); bleibt mir des Script immer hängen und überschreitet das Zeitlimit von 30 Sekunden.
Dass Ganze ist HIER zu erreichen!
Eingaben sind zum Beispiel diese:
f(x) = x-1
a = -1
b = 2
Quellcode
- <?php
- /* Variablen:
- * $var = Zahl mit unbekanntem Vorzeichen
- */
- function sign($var) {
- if($var >= 0) {
- return "+";
- }else{
- return "-";
- }
- }
- /* Variablen:
- * $a = Intervalanfang
- * $b = Intervalende
- * $c = Stellen
- */
- function stellentest($a, $b, $c) {
- // Alle $c Stellen auf Genauigkeit prüfen
- for($i=0;$i<=$c-1;$i++) {
- if(substr($a, $i) == substr($b, $i)) {
- $j = $i;
- }else{
- break 2;
- }
- }
- // Wenn alle Stellen gleich waren true, sonst false
- if($j == $c) {
- return true;
- }else{
- return false;
- }
- }
- /* Variablen:
- * $var = Term
- * $a = a
- * $a = b
- */
- function rechne($var, $a, $b) {
- // 1. Startwerte
- $stra = @str_replace("x",$a,$var);
- $strb = @str_replace("x",$b,$var);
- @eval("\$erga = $stra;");
- @eval("\$ergb = $strb;");
- // 2. Prüfen ob alle Variablen vorhanden sind
- if(!isset($var, $a, $b) OR $var == "" OR $a == "" OR $b == "" OR $var == "Term" OR $a == "a" OR $b == "b") {
- return "Bitte füllen sie alle Felder aus!";
- // 3. Prüfen ob a und b Zahlen sind
- }elseif(!is_numeric($a) OR !is_numeric($b)) {
- return "Bitte geben Sie nur Zahlen an!";
- // 4. Prüfen ob nur x vorhanden ist (Sicherheitsrisiko ausschließen)
- }elseif(eregi("[a-w]", $var) OR eregi("[y-z]", $var)) {
- return "Bitte verwenden Sie nur die Variable x!";
- // 5. Prüfen ob a und b gleiches Vorzeichen haben
- }elseif(($erga < 0 AND $ergb < 0) OR ($erga > 0 AND $ergb > 0)) {
- return "Die beiden Grenzen haben das gleiche Vorzeichen<br />\n-> Nullstelle kann nicht berechnet werden!";
- // 6. Intervallschachtelung
- }else{
- while($i != "break") {
- // a) Mittelwert berechnen
- $h = ($a + $b) / 2;
- // b) Zahlenwert für x einsetzten
- $stra = str_replace("x",$a,$var);
- $strb = str_replace("x",$b,$var);
- $strh = str_replace("x",$h,$var);
- // c) Funktionen berechnen
- eval("\$erga = $stra;");
- eval("\$ergb = $strb;");
- eval("\$ergh = $strh;");
- // d) Vorzeichen prüfen und betreffende Variable austauschen
- if(sign($erga) == "-") {
- if(sign($strh) == "-") {
- $a = $ergh;
- }else{
- $b = $ergh;
- }
- }else{
- if(sign($strh) == "-") {
- $b = $ergh;
- }else{
- $a = $ergh;
- }
- }
- // e) Auf Genauigkeit testen
- $testa = explode(".", $a);
- $testb = explode(".", $b);
- // d) Wenn auf 6 Stellen genau, dann Abbruch
- if(stellentest($testa, $testb, 6)) {
- $i = "break";
- $erg = round($testa, 7);
- }
- }
- return "Nullstelle bei ".$erg;
- }
- }
- ?>
Kann mir da wer helfen?
Vielen Dank ihm Vorraus für die Mühe
lu
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von venum-lk ()