1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

PHP Gleichung mit 2 Unbekannten

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von mschoening, 15.01.08.

  1. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Hi,
    ich bin gerade am coden eines Tools und bin auf eine Gleichung mit 2 Unbekannten gestoßen und würde die gerne mit PHP lösen. Da man ja bekanntlich eine Gleichung mit 2 Unbekannten nur lösen kann wen eine weitere Gleichung vorliegt ist eine genaue bestimmung des Wertes nicht möglich. Ich hätte gerne, dass mir PHP eine Menge von Werten ausgibt. Das Beispiel soll Erleuchtung bringen:
    Die Formel:
    Code:
    [B][Gegebener Wert über POST][/B]-(n*x) = (n-1)y
    Ich möchte jetzt eine Menge aller möglichen Kombinationen aufgestellt haben mit einer Begrenzung auf ganze Zahlen und einer Begrenzung von dem Wert A bis zum Wert D:

    Beispiel des Outputs für eine Begrenzung von Wert A bis D:

    Code:
    X: Wert A1     Y: Wert A2
    X: Wert B1     Y: Wert B2
    X: Wert C1     Y: Wert C2
    X: Wert D1     Y: Wert D2
    
    In wie weit die Begrenzung stattfinder (abgesehen von der Begrenzung für ganze Zahlen) kann man durch einen Wer über POST definieren:

    Biespiel:

    minimal gewünschter Wert (Wert A) bis maximal gewünschter Wert (Wert D).

    P.S: N ist auch gegeben. ALLE WERTE SIND IMMER GANZZAHLIG!
    Thanks,
    Max
     
  2. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Das geht bestimmt mit einer while Schleife aber wie? Hat jemand einen Ansatz?
     
  3. creative7even

    creative7even Jerseymac

    Dabei seit:
    23.02.05
    Beiträge:
    454
    meinst du sowas?
    Code:
    
    $lo = (int)$_POST['lo'];
    $hi = (int)$_POST['hi'];
    $n = (int)$_POST['n'];
    
    for($x=$lo; $x<=$hi; $x++) {
      $y = ([Gegebener Wert über POST]-($n*$x)) / ($n-1);
      print("x-Wert: ".$x."\t");
      print("y-Wert: ".$y."\n");
    }
    
    

    würde allerdings die Eingabewerte noch überprüfen und eventuell fixe Grenzen definieren…
    lg
     
    #3 creative7even, 16.01.08
    Zuletzt bearbeitet: 16.01.08
  4. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Hi,
    vielen Dank, dass sieht ja schon mal gut aus! Nur bei mir printed er irgendwie nichts :S

    Das ist mein jetziger Code:
    Code:
    <?php
        $width = (int)$_POST['width'];
        $lo = (int)$_POST['lo'];
        $hi = (int)$_POST['hi'];
        $n = (int)$_POST['n'];
    
        $for($x=$lo; $x<=$hi; $x++) {
          $y = ($width-($n*$x)) / ($n-1);
          echo ("x-Wert: ".$x."<br />\n");
          echo ("y-Wert: ".$y."<br />\n");
        }
    ?>
    
    Es sollte so sein, dass er alle Gültigen Lösungen dieser Gleichung innerhalb des Wertebereichs $lo bis $hi von $x auflistet. Aber irgendwie zeigt es nichts an.

    P.S: Damit man das richtig versteht. Die Gleichung hat dann ja einige Lösungen und ich will natürlich die Werte für X und Y haben!
     
  5. kauan

    kauan Stina Lohmann

    Dabei seit:
    31.12.05
    Beiträge:
    1.043
    Da hast du einen Fehler von creative7even kopiert, schau mal dein for genau an. Da brauchts doch kein $? :)
     
  6. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Wo genau?

    Edit: Sorry war nicht genau dabei eben...Stimmt!
     
  7. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Okay,
    noch eine letzte Sache: wie bekomme ich das hin, dass nur Wertgruppen mit ganzen Zahlen angezeigt werden?
     
  8. kauan

    kauan Stina Lohmann

    Dabei seit:
    31.12.05
    Beiträge:
    1.043
    Wie meinst du das genau, moechtest du die Werte auf Ganzzahlen runden, Zahlen ueberspringen, oder wie?
    Runden kannst du so:
    Code:
    $n = 123.456;
    $gerundet = round($n);
    $aufgerundet = ceil($n);
    $abgerundet = floor($n)
     
  9. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Hi,
    nein ich würde die Werte gar nicht erst ausgeben lassen wollen...
     
  10. creative7even

    creative7even Jerseymac

    Dabei seit:
    23.02.05
    Beiträge:
    454
    bspw. in einem Array:
    Code:
    $resultset = array();
    
    for(...) {
      ...
      $resultset[$x] = $y;
      ...
    }
    
     
  11. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Hi,
    thanks. Könntest du mir das noch genauer erklären? Ich bekomme das scheinbar nicht hin...Eine andere Lösung die ich schon fast bevorzugen würde wäre die Möglichkeite allen Wertegruppen die nicht integer sind (also wenn schon einer von x und y nicht integer ist) eine CSS class zuzuweisen.

    Die Erklärung der ersten Lösung würde mich trotzdem interessieren...:D.

    P.S: Ich bekomme beides nicht hin!

    Thanks,
    Max
     
    #11 mschoening, 16.01.08
    Zuletzt bearbeitet: 16.01.08
  12. creative7even

    creative7even Jerseymac

    Dabei seit:
    23.02.05
    Beiträge:
    454
    jetzt welcher Lösung? was genau bekommst du nicht hin? Welche Fehlermeldungen treten auf?
     
  13. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Hi,
    also dein erstes Skript für die Ausgabe aller richtigen Werte der Gleichung funktioniert super. Jetzt habe ich zum Beispiel solch eine Ausgabe:
    Code:
    x-Wert: 15 y-Wert: 31.25[COLOR=Red][B]
    x-Wert: 16 y-Wert: 30[/B][/COLOR]
    x-Wert: 17 y-Wert: 28.75
    x-Wert: 18 y-Wert: 27.5
    x-Wert: 19 y-Wert: 26.25[COLOR=Red][B]
    x-Wert: 20 y-Wert: 25[/B][/COLOR]
    
    Ich möchte nun aber nur die rot markierten Werte gefiltert haben (also alle Werte wo sowohl X als auch Y integer sind). Mit gefiltert meine ich folgende zwei Lösungsansätze (die mich beide interessieren):
    A) Die Werte die nicht integer sind werden einfach nicht angezeigt.

    B) Die Werte die nicht integer sind bekommen eine CSS Class die ich "dimmen" kann (zum Beispiel ein leichtes Grau).
    Da ich mit PHP erst vor einer Woche begonnen habe bringt es mich nicht weiter wenn ihr schreibt mit array geht das :D. Dazu bin ich noch zu blöd...Ich wäre euch sehr dankbar wenn ihr mir beide Lösungsansätze nahebringen könntet.

    P.S: Ich bin schon von dem ersten Skript begeistert! Danke! :-*

    Mit freundlichen Grüssen,
    Max
     
  14. creative7even

    creative7even Jerseymac

    Dabei seit:
    23.02.05
    Beiträge:
    454
    Du prüfst einfach auf integer/float:

    Version 1 (mit CSS Klasse):
    Code:
    ...
    
    foreach($resultset as $x => $y) {
      if(is_int($y)) {
        echo '<div class="integer">x-Wert: '.$x.' y-Wert: '.$y.'</div>';
      } else if(is_float($y)) {
        echo '<div class="float">x-Wert: '.$x.' y-Wert: '.$y.'</div>';
      }
    }
    
    
    Version 2 (nur integer Werte):
    Code:
    ...
    
    foreach($resultset as $x => $y) {
      if(is_int($y)) {
        echo '<div class="integer">x-Wert: '.$x.' y-Wert: '.$y.'</div>';
      }
    }
    
    
     
  15. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Hi,
    tut mir Leid aber ich bekomme es immer noch nicht hin:

    Code:
    <?php
    
    $width = (int)$_POST['width'];
    $lo = (int)$_POST['lo'];
    $hi = (int)$_POST['hi'];
    $n = (int)$_POST['n'];
    
    for ($x=$lo; $x<=$hi; $x++) {
        $y = ($width-($n*$x)) / ($n-1);
    }
    
    $resultset = array();
    
    foreach ($resultset as $x => $y) {
        if (is_int($y)) {
            echo '<div class="integer">x-Wert: ' . $x . ' y-Wert: ' . $y . '</div>';
        }
    }
    
    ?>
    
    Wo ist der Fehler?

    Thanks,
    Max
     
  16. creative7even

    creative7even Jerseymac

    Dabei seit:
    23.02.05
    Beiträge:
    454
    kein (Syntax) Fehler - die Frage ist nur: woher kommen die Post-Werte bzw. schickst du generell Werte von einem Formular an das Skript?

    EDIT: kommt eine Fehlermeldung?
     
  17. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Hi,
    ja ich schicke generell Werte an das Skript von einer HTML Form. Ich meine ich bekomme ja Werte und es funktioniert alles perfekt. Der letzte Teil des Skripts ist der, der nicht geht. Wenn ich einfach nur echo $x und echo $y haben will geht alles super. Sobald ich aber die errechneten werte für $x und $y auf INTEGER prüfe werden keine Ergebnisse mehr geliefert...

    EDIT: Nein es wird einfach nichts angezeigt!
     
  18. creative7even

    creative7even Jerseymac

    Dabei seit:
    23.02.05
    Beiträge:
    454
    ahja - na klar - so muss es aussehen:

    Code:
    <?php
    
    $width = (int)$_POST['width'];
    $lo = (int)$_POST['lo'];
    $hi = (int)$_POST['hi'];
    $n = (int)$_POST['n'];
    
    $resultset = array(); // hier kommen die ergebnisse rein
    
    for ($x=$lo; $x<=$hi; $x++) {
       $y = ($width-($n*$x)) / ($n-1);
       $resultset[$x] = $y;
    }
    
    foreach ($resultset as $x => $y) {
        if (is_int($y)) {
            echo '<div class="integer">x-Wert: ' . $x . ' y-Wert: ' . $y . '</div>';
        }
    }
    
    ?>
    
     
    mschoening gefällt das.
  19. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Hey,
    super jetzt geht alles und die kleinen Modifikationen die ich noch brauche bekomme ich selbst hin. Vielen vielen Dank! Karmadusche!
     

Diese Seite empfehlen