Jump to content

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


natanielcz

Recommended Posts

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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

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 to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

Guest
This topic is now closed to further replies.
×
×
  • Create New...