Szczerze? Nie wiem z czym masz problem... Wzorki Viete'a są banalne, masz więc zwykłe podstawienie i potem już zabawę w podstawianiu kolejnych liczba pod a oraz sprawdzanie czy wynik jest OK dla Twoich wymagań :/ Ja bym zrobił tak:
a) Pobieramy x1 i x2, przypuśćmy -3 i -1
b) x1*x2 = 3; x1+x2 = -4 więc podstawiamy - mamy 3 = c/a oraz -4 = -b/a ale możemy od razu przenieść a na drugą stronę, czyli 3*a = c i -4*a = -b
c) bierzemy sobie dowolne a ( ja wezmę 1) i podstawiamy 3 = c oraz -4 = -b, czyli c = 3 i b = 4. KONIEC
d) Można iść dalej i dać kilka dodatkowych warunków jak choćby to, ile równań ma być znalezionych. Jeśli chcesz ograniczyć ,b,c,x1,x2 jedynie do całkowitych to zrób sobie skakanie od 1 do wolnej liczby w zakresie Z = <-z, z> z pominięciem 0. To jak to zrobisz, zależy od Ciebie. Ja bym sobie zrobił poprzez skakanie z naprzemienną zmianą znaku na zasadzie: 1, -1, 2, -2, 3, -3 i wyjściem gdy dojdzie się do końca zakresu lub zostanie znaleziona określona liczba równań. Można też to olać, bo jeśli się przyjrzysz, to mając jedno rozwiązanie, możesz łatwo kolejne uzyskać. Równania kwadratowe się prosto skalują ;) Wystarczy wszystkie parametry pomnożyć przez tę samą liczbę. Jeśli więc masz tylko jedno rozwiązanie, masz od razu dla tej samej pary rozwiązań, nieskończenie wiele możliwości równań.
WERSJA OBLICZAJĄCA - PODSTAWOWA:
<?php
$a = 1;
$x1 = 3;
$x2 = -2;
$koniec = 3;
$answers = array('rozwiazania' => array('x1' =>$x1, 'x2' => $x2 ), 'wspolczynniki' => array()); //tablica odpowiedzi while($a <= $koniec )
{
$c = $a* ($x1*$x2);
$b = -1*$a*($x1+$x2);
$answers['wspolczynniki'][] = array('a' => $a, 'b' => $b, 'c' => $c); if($a > 0)
{
$a *= -1;
}
else
{
$a = -1*$a + 1;
}
}
?>
WERSJA OPTYMALIZOWANA:
<?php
$a = 1; // to zostawiamy... jest naszym licznikiem, ale i parametrem a
$x1 = 3; // jedno z rozwiązań
$x2 = -2; // drugie z rozwiązań
$koniec = 3; // tu sobie zrobiłem zakończenie, czyli zakres od współczynnika a od -3 do 3, włącznie
$answers = array('rozwiazania' => array('x1' =>$x1, 'x2' => $x2 ), 'wspolczynniki' => array()); // tablica odpowiedzi //obliczenie rozwiązania dla 1
$c = $a* ($x1*$x2); // obliczenie c
$b = -1*$a*($x1+$x2); //obliczenie b
$answers['wspolczynniki'][] = array('a' => $a, 'b' => $b, 'c' => $c); // wrzucenie pierwszego rozwiązania $a = -1; // przestawienie a na wartość ujemną
while($a <= $koniec ) // można wykorzystać podatność równania kwadratowego na skalowanie jako optymalizację
{
$answers['wspolczynniki'][] = array('a' => $answers['wspolczynniki'][0]['a']*$a, 'b' => $answers['wspolczynniki'][0]['b']*$a, 'c' => $answers['wspolczynniki'][0]['c']*$a); // proste wyliczenie kolejnych rozwiązań na podstawie współczynnika skalującego a i obliczonego pierwszego rozwiązania if($a > 0) // przestawianie na ujemną liczbę współczynnika a...
{
$a *= -1;
}
else // ... i przywracanie na dodatni gdy mamy ujemny
{
$a = -1*$a + 1;
}
}
?>
Weź sobie sam porównaj tablice z wynikami i powiedz, czy są identyczne :) Jak dla mnie - są.