Dlaczego program błędnie oblicza liczby?

0

Witam :)
Jestem początkującą osobą, w dodatku to mój pierwszy post także proszę o wyrozumiałość :))

Napisałam program, który po podaniu sumy liczb a i b oraz ich iloczynu, ma podać wartość liczby a i b. Oto kod:

program Liczby;  
var
il,s : real;
delta : real;
begin
     writeln('Podaj iloczyn liczb a i b');
     readln(il);
     writeln('Podaj sume liczb a i b');
     readln(s);

delta:= ((s*s) - (4*il));

if delta >= 0 then
  writeln ('Twoje liczby to:', (-s+(sqrt(delta))/(-2)):0:2, (-s-(sqrt(delta))/(-2)) :0:2)
  else Writeln ('Podales bledne liczby');

readln;
end.

Program kompiluje się bez najmniejszego problemu jednak liczby a i b są niepoprawne.

Zmodyfikowałam troszkę kod na taki:

program Liczby;
var
il,s : real;
delta : real;
d : real;
begin
     writeln('Podaj iloczyn liczb a i b');
     readln(il);
     writeln('Podaj sume liczb a i b');
     readln(s);

delta:= ((s*s) - (4*il));
d := sqrt(delta);

if delta >= 0 then
  writeln ('Twoje liczby to:', ((-s+d)/(-2)):0:2, ((-s-d)/(-2)):0:2)
  else Writeln ('Podales bledne liczby');

readln;
end.

i ten już oblicza liczby poprawnie :)

Zastanawia mnie jednak fakt, dlaczego pierwszy kod błędnie oblicza liczby, skoro wykonany jest analogicznie tylko przy pomocy jednej zmiennej mniej niż w programie drugim. Czy ktoś mógłby mi napisać dlaczego tak jest?

Z góry dziękuję za odpowiedź, pozdrawiam
Magda :)

dodanie znaczników <code class="delphi"> - furious programming

2

Pierwszy nie poprawny dla tego że liczysz: -s + sqrt(delta)/-2 zamiast: (-s+sqrt(delta))/-2
Drugi też nie działa poprawnie ponieważ wyliczasz pierwiastek z liczby ujemnej więc będzie się wywalać.

0

Dziękuję za pomoc, faktycznie po poprawie nawiasów jest ok :) Delta ujemna wyszłaby tylko w przypadku braku rozwiazań, a jeżeli ktoś poda prawidłowe wartości iloczynu i sumy tych dwóch liczb to powinno być ok, chociaż faktycznie powinnam to uwzględnić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1