Złe obliczanie delty w funkcji kwadratowej.

0

Szukałem problemu, na pewno będzie w funkcji, która to oblicza, ale za cholerę nie mogę znaleźć tego.
Witam, napisałem program który:
1. Prosi o dane wejściowe: A, B i C, czyli te, które potrzebne są do obliczenia funkcji kwadratowej.
2. W programie znajdują się 4 funkcje:** X1,X2,X0,DELTA**.
3. Po wprowadzeniu danych obliczana jest delta i pokazywana na ekranie.
4. Teraz zaczynają się 3 instrukcje warunkowe. Jeżeli d>0 (d=delta) to oblicz x1i x2. Jeżeli d=0 wtedy liczy x0, jeżeli d<0 wtedy pisze, że nie ma rozwiązań.
PROBLEM:
1. Program ogólnie źle liczy, nie wiem dlaczego tak się dzieje.
Na przykład:

Podam a=-2, b=0 i c=0. 
DELTA=B^2-4*a*c
czyli DELTA=0^2-4*(-2)*0
DELTA = 0, mi oblicza, że jest to 4.00 a x1 i x2 to -4.

KOD PROGRAMU:
http://pastebin.com/Bam2cGbg

2

Szukałem problemu, na pewno będzie w funkcji, która to oblicza, ale za cholerę nie mogę znaleźć tego.

Od tego jest debugger, użyj go, tam masz podgląd zmiennych...

Podam a=-2, b=0 i c=0.
DELTA=B^2-4ac

Nie prawda, Delta=A^2-4bc . Zobacz jak wykonujesz funkcję. Zobaczyłem to właśnie używając DEBUGGERA, też się naucz.

0

W niewłaściwych miejscach używasz nawiasów.

Za dużo:

delta1:=((b*b)-(4*(a)*(c)));  { Tak masz }
delta1:= b*b - 4*a*c;         { Tak powinno być }

Po co nawias obejmujący całe działanie?

x0:=(-b/2*a);

Dlaczego x równa się 8, a nie 2, tak jakbyś tego chciał?

x:= 2*6/3*2

... bo brakuje... domyślasz się, czego i gdzie?

0

Szczerze mówiąc, nie wiem jak się używa debuggera, więc zaraz o tym poczytam i spróbuję zrozumieć.
@-123oho
czyli to:
d:=delta1(b,a,c);
powinno wyglądać tak?:
d:=delta1(a,b,c);

@simplex
Nie wiem po co tam nawaliłem tak dużo nawiasów.

Po co nawias obejmujący całe działanie?
x0:=(-b/2*a);

To ma być tak? Bo -b ma być podzielone przez 2*A:

x0:=-b/(2*a);

Według mnie brakuje tam tego, gdzie w niektórych miejscach dawałem to niepotrzebnie.

x:= (2*6)/(3*2)

Dobrze myślę?

0

Szczerze mówiąc, nie wiem jak się używa debuggera, więc zaraz o tym poczytam i spróbuję zrozumieć.

Jeżeli masz Delphi: Debugowanie
Jak masz coś innego to poszukaj dla siebie...

powinno wyglądać tak?:
d:=delta1(a,b,c);

To zależy co chcesz aby twój program robił... Jeżeli to ma liczyć deltę dla a,b,c to tak.

To ma być tak? Bo -b ma być podzielone przez 2*A:

Uczyłeś się w podstawówce kolejności operatorów? To jest tak samo. Najpierw nawiasy, potem mnożenie i dzielenie w kolejności potem dodawanie i odejmowanie...

Jak masz jeszcze jakieś problemy to wrzuć poprawiony kod.

0

Poprawione: http://pastebin.com/dSyvUPfN
Na gmatwałeś mi teraz z tą deltą. Wzór na deltę to d:=B^2 - 4AC. Więc myślałem, że podane zmienne w nawiasie za nazwą funkcji mają być w tej samej kolejności co we wzorze (tj. b,a,c)

Podałem zmienne:
A=2 B=4 i C=2, Delta specjalnie powinna wyjść 0, a wychodzi -28.
Co źle robię?

0

@-123oho rzeczywiście namieszał z deltą (z ortografią też trochę). Powinno być delta1(a,b,c).

0

@-123oho rzeczywiście namieszał z deltą

Możesz wyjaśnić? To że nie piszę bezpośrednio że chodzi o to że źle parametry podał nie znaczy chyba jeszcze że namieszałem, po prostu oczekiwałem myślenia. No ale ja mam wymagania...

z ortografią też trochę

???

Na gmatwałeś mi teraz z tą deltą. Wzór na deltę to d:=B^2 - 4AC

Chodzę do podstawówki go nie znam... (dla niekumatych, to ironia).

Więc myślałem, że podane zmienne w nawiasie za nazwą funkcji mają być w tej samej kolejności co we wzorze (tj. b,a,c)

Co ma wzór do funkcji?! W definicji funkcji masz function delta1(a,b,c:real):real; więc funkcja będzie korzystała z tych A,B,C, nie z tych które masz w mainie. A jeżeli je przekażesz delta1(b,a,c) to delta1.a=main.b i delta1.b=main.a... Czytałeś tutorial? No przecież że nie.

Co źle robię?

Nie umiesz czytać tutoriali ani porad które wymagają myślenia...

0

Dziękuję za rady, poradziłem już sobie :)

0

W oryginalnym kodzie dobrze podał parametry i zastosował poprawny wzór.

function delta1(a,b,c:real):real;
d:=delta1(b,a,c);
Śmiem mieć wątpliwości czy te parametry są 'dobrze' przekazane.
Sam napisałeś: Powinno być delta1(a,b,c). - Więc są dobrze czy źle.
Napisałem dokładnie to samo co ty, tylko innymi słowami. Nie widzę tego abym cokolwiek namieszał, napisałem: Nie prawda, Delta=A^2-4*b*c . Zobacz jak wykonujesz funkcję.. Delta=A^2-4bc bo tak przekazał parametry. Nawet umieściłem hint żeby zobaczył wykonanie funkcji. Czy to że nie napisałem co na co zmienić powoduje że mieszam? Może dla tych którzy nie mają TBrain...

W zdecydowanej większości przypadków słowo "naprawdę" piszę się razem.

Thx.

Dziękuję za rady, poradziłem już sobie

Nie ma problemu.

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