Skocz do zawartości

[Pascal - ROZW] Runtime Error 200 at $080492E8


natanielcz

Polecane posty

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

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

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

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

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

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

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Gość
Temat jest zablokowany i nie można w nim pisać.
×
×
  • Utwórz nowe...