Złe obliczanie delty w funkcji kwadratowej. :: 4programmers.net (2025)

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:

Kopiuj

Podam a=-2, b=0 i c=0. DELTA=B^2-4*a*cczyli DELTA=0^2-4*(-2)*0DELTA = 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.

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

Za dużo:

Kopiuj

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?

Kopiuj

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

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

Kopiuj

x:= 2*6/3*2

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

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:

Kopiuj

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

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

Kopiuj

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

Dobrze myślę?

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.

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ę?

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

@-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...

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

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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.

Utwórz konto

Złe obliczanie delty w funkcji kwadratowej. :: 4programmers.net (2025)

References

Top Articles
Latest Posts
Recommended Articles
Article information

Author: Corie Satterfield

Last Updated:

Views: 5867

Rating: 4.1 / 5 (62 voted)

Reviews: 93% of readers found this page helpful

Author information

Name: Corie Satterfield

Birthday: 1992-08-19

Address: 850 Benjamin Bridge, Dickinsonchester, CO 68572-0542

Phone: +26813599986666

Job: Sales Manager

Hobby: Table tennis, Soapmaking, Flower arranging, amateur radio, Rock climbing, scrapbook, Horseback riding

Introduction: My name is Corie Satterfield, I am a fancy, perfect, spotless, quaint, fantastic, funny, lucky person who loves writing and wants to share my knowledge and understanding with you.