• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Es regnet, ist neblig und kalt, alle sind krank und der Chef wird zunehmend cholerisch. Das Thema des Monats ist also folgerichtig --> Das Grau(en)
    Wir sind gespannt, war Euch dazu einfällt! Zum Wettbewerb --> Klick

PHP Gleichung mit 2 Unbekannten

mschoening

Gelbe Schleswiger Reinette
Registriert
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
 

mschoening

Gelbe Schleswiger Reinette
Registriert
21.02.07
Beiträge
1.764
Das geht bestimmt mit einer while Schleife aber wie? Hat jemand einen Ansatz?
 

creative7even

Jerseymac
Registriert
23.02.05
Beiträge
454
Das geht bestimmt mit einer while Schleife aber wie? Hat jemand einen Ansatz?

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
 
Zuletzt bearbeitet:

mschoening

Gelbe Schleswiger Reinette
Registriert
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!
 

kauan

Stina Lohmann
Registriert
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 $? :)
 

mschoening

Gelbe Schleswiger Reinette
Registriert
21.02.07
Beiträge
1.764
Wo genau?

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

mschoening

Gelbe Schleswiger Reinette
Registriert
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?
 

kauan

Stina Lohmann
Registriert
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)
 

mschoening

Gelbe Schleswiger Reinette
Registriert
21.02.07
Beiträge
1.764
Hi,
nein ich würde die Werte gar nicht erst ausgeben lassen wollen...
 

mschoening

Gelbe Schleswiger Reinette
Registriert
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
 
Zuletzt bearbeitet:

creative7even

Jerseymac
Registriert
23.02.05
Beiträge
454
jetzt welcher Lösung? was genau bekommst du nicht hin? Welche Fehlermeldungen treten auf?
 

mschoening

Gelbe Schleswiger Reinette
Registriert
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
 

creative7even

Jerseymac
Registriert
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>';
  }
}
 

mschoening

Gelbe Schleswiger Reinette
Registriert
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
 

mschoening

Gelbe Schleswiger Reinette
Registriert
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!
 

creative7even

Jerseymac
Registriert
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>';
    }
}

?>
 
  • Like
Reaktionen: mschoening

mschoening

Gelbe Schleswiger Reinette
Registriert
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!