Błąd uruchomienia programu

0

Witam, mam problem z programem(napisany w Pascalu) który nie chce się uruchomić, a nie wiem co źle napisałem podejrzewam że może być coś źle z funkcją gamma. Proszę o pomoc

program zuk;
uses crt, graph;
var karta,tryb:integer;

function gamma(x,y:real):real;
var r,f:real;
begin
r:=sqrt(x*x+y*y);
f:=50*exp(-r);

end;
procedure pokaz;
var
    bok,krok,x,y,a,b,max_gamma,min_gamma:real;
    max_kolor,min_kolor,i,j,il_krok:integer;
    kolor:real;

begin
bok:=1000;
  max_kolor:=0;
  min_kolor:=15;
  il_krok:=100;
  krok:=bok/il_krok;
  min_gamma:=10000;
  max_gamma:=-10000;

  for i:=1 to il_krok do
  begin
      x:=i*krok;

      for j:=1 to il_krok do
      begin
        y:=j*krok;

         if (gamma(x,y) < min_gamma) then
         begin
         min_gamma:=gamma(x,y);
         end;

         if(gamma(x,y) > max_gamma) then
         begin
         max_gamma:=gamma(x,y);
         end;

       end;
  end;

       a:=(max_kolor-min_kolor)/(max_gamma-min_gamma);
       b:=min_kolor-a*min_gamma;

        for i:=1 to il_krok do
        begin
          x:=i*krok;
            for j:=1 to il_krok do
            begin
             y:=j*krok;
             kolor:=a*gamma(x,y)+b;
             putpixel(i,j,round(kolor));
            end;
        end;

end;
BEGIN

    detectgraph(karta,tryb);
    initgraph(karta, tryb,'');

    pokaz;


    readln;
END.

 
0

Tak powinna wyglądać funkcja? Nie! Funkcja powinna zwracać jakąś wartość

function gamma(x,y:real):real;
var r,f:real;
begin
  r:=sqrt(x*x+y*y);
  f:=50*exp(-r);
  gamma:= ...  { takiej instrukcji brakuje}
end;

Uzupełnij definicję funkcji i jeżeli dalej będzie coś nie tak, to podaj jaki błąd wyskakuje (numer błędu, jego treść oraz w której linijce kodu - kompilator to wszystko podaje)

0

Niestety nie udało się i nadal wyświetla się błąd jak na obrazku ale to nie jest chyba błąd kompilacji tylko błąd który powstaje po uruchomieniu programu.
user image

0

To chyba Turbo (Borland) Pascal a więc: http://www.pascal.eu.org/error200.htm

2

Runtime error 200 to dzielenie przez zero. prawdopodobnie występuje tutaj:

a:=(max_kolor-min_kolor)/(max_gamma-min_gamma);

gdy max_gamma zrówna się z min_gamma.

0

Bardzo dziękuje za odpowiedzi, wystarczyło dodać instrukcję if

 if (max_gamma-min_gamma)<>0 then
       begin
       a:=(max_kolor-min_kolor)/(max_gamma-min_gamma);
       end; 

A poza tym wyszło że efektu jaki chciałem otrzymać w pascalu tak łatwo się zrobić nie da.

0

Efekt miał być jak na obrazku jednak bez okręgu. Równania wzięte są z treści zadania, a tak poza tym to program jest niekompletny, drugiej części nie pisałem bo pierwsza nie działała.
user image

1 użytkowników online, w tym zalogowanych: 0, gości: 1