piszę program w ADA95 ktory ma pobrac 3 punkty sprawdzic czy trojkat o wierzcholkach w tych punktach jest niezdegenerowany (jego wszystkie wysokosci sa dodatnie = te punkty wszystkie 3 nie sa wspołliniowe) - dalej nie wazne co ma robi bo sobie porawdze problem polega na tym że niestety jak podam wszystkie 3 punkty z pierwsza wspolrzedna rowna 0 to on w IF zwraca FALSE i przechodzi do ELSE'a co jest dla mnie dziwne bo leza na tej samej prostej,
prosze o pomoc
with ada.text_io, ada.integer_text_io, ada.float_text_io;
use ada.text_io, ada.integer_text_io, ada.float_text_io;
procedure program_ada is
-- typ punkt o wspolrzednych zmiennoprzecinkowych x i y
type punkt is record
x,y:float;
end record;
-- typ tablica_punktow to niezawezona tablica zmiennych typu punkt
type tablica_punktow is array (integer range <>) of punkt;
-- p to podtyp tablica_punktow, o sprecyzowanym rozmiarze
p:tablica_punktow(1..4);
a,b:float;
begin
-- petla pobiera dane 3 punktow (stad 1..3 a nie p'range)
for i in 1..3 loop
put("Prosze podac wspolrzedna x punktu nr "); put(i); put(": ");
get(p(i).x);
put("Prosze podac wspolrzedna y punktu nr "); put(i); put(": ");
get(p(i).y);
new_line(1);
end loop;
-- funkcja sprawdzajaca czy jest to trojkat niezdegenerowany
a:=(p(2).y - p(1).y)/(p(2).x - p(1).x);
b:=p(1).y - a*p(1).x;
if p(3).y = ( a*p(3).x + b ) then
-- program nic nie robi jezeli 3 punkty leza na tej samej prostej
null;
else
put("Podaj wspolrzedna x punktu w celu sprawdzenia czy lezy w trojkacie: ");
get(p(4).x);
put("A teraz wspolrzedna y: ");
get(p(4).y);
-- funkcja sprawdzajaca czy punkt p4 lezy wewnatrz trojkata
end if;
end program_ada;