natanielcz Napisano Październik 27, 2010 Zgłoś Share Napisano Październik 27, 2010 Napisałem program, który na podstawie długości boków, współrzędnych wierzchołków w 2D lub 3D będzie obliczał długości boków, miary poszczególnych kątów, i pole trójkąta. Co prawda na razie miary kątów podaje w radianach ale tym się zajmę w oczekiwaniu na odpowiedź tutaj. Na początku spytałem się wujak google ale on mi tylko cały czas mówi że to jest błąd dzielenia przez '0' i obowiązuje w Turbo Pascalu 7, a żeby się go pozbyć wystarczy doinstalować łatkę. Ale jak ja mam zainstalować łatkę i dlaczego skoro nie korzystam z TP tylko z Geany? Wszędzie jest że dotyczy to TP. Tutaj jest kod programu: http://pastebin.com/38269Rgy - nie wklejam go tutaj bo jest go trochę dużo a nie wiem, który fragment wyciąć, bo nie wiem gdzie jest błąd. Ponownie piszę w TP, bo za miesiąc mamy mieć w szkole jakąś olimpiadę programistyczną i tam jest pascal. to sobie przypominam :-) Niestety. Ten błąd mnie rozwalił. Kod programu dodatkowo jest jako załącznik. Przeglądajcie jak komu wygodniej. Eh.. Niestety nie można dodać załącznika. :-( ROZWIĄZANIE: Należy sprawdzić jeszcze raz wszystkie wzory, gdyż to w nich tkwi problem. W moim przypadku ten błąd został wywoływany przez zły wzór na obliczanie miar kątów. Mniejszy błąd ale jak dla mnie trudny do zidentyfikowania znajdował się w sortowaniu długości boków. Link do komentarza Udostępnij na innych stronach More sharing options...
Adam27 Napisano Październik 27, 2010 Zgłoś Share Napisano Październik 27, 2010 A więc tak: wywołujesz trzy razy funkcję sortującą długości boków i jednocześnie za każdym razem do a,b,c przypisujesz nową wartość. Jeżeli wpiszę np. 8,4,5 to po "posortowaniu" będę miał 4,4,5. Możesz zrobić tak: tab: tablica; //... tab:=sortuj_boki(a,b,c); a:=tab[2]; b:=tab[1]; c:=tab[0]; Wtedy raz wywołujesz funkcję sortującą, w tablicy trzymasz wartości, które zwróciła i z tej tablicy dopiero przypisujesz długości do a,b,c. Oprócz tego jest błąd przy sprawdzaniu warunku trójkąta, bo jeżeli ktoś wpisze boki np. 5,5,10, to nie będzie to trójkąt, a warunek będzie spełniony. Jak to pozmieniasz to błąd się nie powinien pojawiać, jeżeli jednak to napisz. Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link do komentarza Udostępnij na innych stronach More sharing options...
natanielcz Napisano Październik 27, 2010 Autor Zgłoś Share Napisano Październik 27, 2010 Adam: poprawiłem to co mi pokazałeś (dzięki za zgłoszenie błędu) ale niestety nie rozwiązało to problemu z tym błędem. Link do komentarza Udostępnij na innych stronach More sharing options...
Adam27 Napisano Październik 27, 2010 Zgłoś Share Napisano Październik 27, 2010 Problem jest jeszcze ze wzorami. Mi wyszły takie, możesz ich użyć (dodaj moduł Math i zadeklaruj zmienną P): p:=(a+b+c)/2; p:=sqrt(p*(p-a)*(p-b)*(p-c)); kat_alfa:=radtodeg(arcsin(p*2/a/b)); kat_beta:=radtodeg(arcsin(p*2/a/c)); kat_gamma:=180-(kat_alfa+kat_beta); pole_trojkata:=p; Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link do komentarza Udostępnij na innych stronach More sharing options...
natanielcz Napisano Październik 27, 2010 Autor Zgłoś Share Napisano Październik 27, 2010 co do wzorów to nie miałem pewności. Nie wiedziałem że w pascalu jest biblioteka math (dzięki ), a podstawa jest trochę malo funkcjonalna. podejrzewalem ze katy liczy mi w radianach ale to nawet bez biblioteki można zamienić na stopnie ale to przed chwila napisalem i chcialem zobaczyc w czym bedzie wypisywac. Ja na internecie znalazłem ten wzór co podałem (przy uzyciu sinusa) ale jeszcze nie sprawdziłem czy działa prawidłowo. swoją drogą zapomniałem o opcji uruchamiania krok po kroku. latwiej wykryć gdzie jest bład. jutro poprawię to co mi dziś napisałeś i zobaczymy. Ma mnadzieję, że pomoże :-) Link do komentarza Udostępnij na innych stronach More sharing options...
natanielcz Napisano Październik 29, 2010 Autor Zgłoś Share Napisano Październik 29, 2010 Dzięki Adam! Nie podejrzewałem, że błędy we wzorach mogą spowodować taki błąd następnym razem będę sprawdzał wszystkie wzory przed zgłoszeniem problemu Znasz może jeszcze jakieś dodatkowe biblioteki do pascala? Link do komentarza Udostępnij na innych stronach More sharing options...
Adam27 Napisano Październik 29, 2010 Zgłoś Share Napisano Październik 29, 2010 CYTATNie podejrzewałem, że błędy we wzorach mogą spowodować taki błąd Wystarczyło, że w którymś miejscu wykonywało się dzielenie przez 0 albo funkcja trygonometryczna przyjmowała nieprawidłowy argument i program leciał. Znasz może jeszcze jakieś dodatkowe biblioteki do pascala? Jest kilka bibliotek, zależy czego potrzebujesz, np. Graph pozwala na tworzenie prostej grafiki (chociaż nigdy z niego nie korzystałem). Ogólnie jeżeli chcesz zrobić coś więcej niż kalkulator, to Pascal nie jest raczej dobrym pomysłem, Delphi albo C++ da ci o wiele większe możliwości. Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link do komentarza Udostępnij na innych stronach More sharing options...
natanielcz Napisano Październik 29, 2010 Autor Zgłoś Share Napisano Październik 29, 2010 Z grapha kiedyś korzystałem ale faktycznie wielkich możliwości to on nie ma. Pascala przypominam sobie z okazji, że mamy w szkole olimpiadę programistyczną i są do wyboru c++, pascal i jeszcze cos. Pascala kiedyś się jakieś 8 m-cy uczyłem więc coś tam umiem. W c++ programowałem może z miesiąc, a aktualnie uczę się pythona. Może kiedyś powrócę do c++. Delphi na pewno odpada, bo pisałe mw tym może z dwa tygodnie ale to nie jest dla mnie. Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.