Scusate tanto... ma ho un problema in pascal
Il mio livello è basso... ho trovato qualche guida su internet ed un po' me lo hanno insegnato a scuola e così sono giunto a questo programma... l'unico problema che a quanto pare al computer non piacciono le funzioni goniometriche: quando arriva al punto di disegnare la curva il computer si blocca e non posso fare altro che riavviarlo .
Qualcuno sa il perchè e mi può aiutare a risolverlo?? Grazie mille ^^
Queso è il programma
Codice:
  program sinussoide;
  uses crt,graph;
  type vettore=array[1..1000] of real;
  var scheda,modulo,f,a,b,c,d,cx,cy:integer;
      ics,ips:vettore;
   
  function lenvettore(arrei:vettore):integer; (*per non dovre passare tutte le volte il numero di dati, mi dice la lunghezza di un array*)

           var i,num:integer;
   
           begin
                num:=0;
                for i:=1 to 1000 do
                    begin
                         if not(arrei[i]=0) then
                         num:=i;
                    end;
                lenvettore:=num;
           end;
   
  function max(numeri:vettore):real;
           var i,n:integer;
               macs:real;
           begin
                n:=lenvettore(numeri);
                macs:=numeri[1];
                for i:=1 to n do
                    begin
                         if numeri[i]>macs then
                            macs:=numeri[i];
                    end;
                max:=macs;
           end;
   
  function rad(gradi:real):real;
           begin
                rad:=(pi*gradi)/180;
           end;
   
  function tg(angolo:real):real;
           begin
                if not(cos(angolo)=0) then
                   tg:=sin(angolo)/cos(angolo)
                else tg:=0;
           end;
   
  procedure  assi(tipologia:integer;var xc,yc:integer);
             begin
                  if tipologia=1 then
                     begin
                          xc:=0;
                          yc:=getmaxy;
                     end
                  else
                      begin
                           xc:=round(getmaxx/2);
                           yc:=round(getmaxy/2);
                      end;
                  line(xc,0,xc,getmaxy);
                  line(0,yc,getmaxx,yc);
             end;
   
  procedure goniometrica(tipo:integer;aa,bi,ci,di:real;var lex,ley:vettore);
            var i:integer;
   
            begin
                 for i:=round(-(getmaxx/2)) to round(getmaxx/2) do
                     begin
                          lex[i+round(getmaxx/2)]:=rad(i);
                          case tipo of
                               1:ley[i]:=(aa*(sin((bi*lex[i])+ci)))+di;
                               2:ley[i]:=(aa*(cos((bi*lex[i])+ci)))+di;
                               3:ley[i]:=(aa*(tg((bi*lex[i])+ci)))+di;
                          end;
                     end;
            end;
   
  procedure disegnacurva(curvax,curvay:vettore;xc,yc,disegno:integer);
            var i,nx,ny,x,y:integer;
                ux,uy,xf,yf:real;
   
            begin
                 ux:=(getmaxx-xc)/max(curvax);
                 uy:=yc/max(curvay);
                 nx:=lenvettore(curvax);
                 ny:=lenvettore(curvay);
                 while ny<nx do
                       ny:=ny+1;
                 if nx=ny then
                      begin
                           for i:=1 to nx do
                               begin
                                    xf:=(curvax[i]*ux)+xc;
                                    yf:=-(curvay[i]*uy)+yc;
                                    if ((xf<32000) and (yf<32000)) then
                                       begin
                                            x:=round(xf);
                                            y:=round(yf);
                                            if (not(x<0) and not(y<0)) then
                                               begin
                                                    putpixel(x,y,white);
                                                    if not(disegno=0) then
                                                       delay(20);
                                               end;
                                       end;
                               end;
                      end;
            end;
   
  begin
       clrscr;
       write('Cosa vuoi disegnare? Digita 1 per una sinusoide, 2 per una cosinusoide e 3 per una tangentoide: ');
       readln(f);
       writeln('Inserisci i coefficenti della funzione del tipo: y=a*fn(bx+c)+d');
       write('Inserisci a: ');
       readln(a);
       write('Inserisci b: ');
       readln(b);
       write('Inserisci c: ');
       readln(c);
       write('Inserisci d: ');
       readln(d);
       scheda:=detect;
       initgraph(scheda,modulo,'C:\TP\BGI\');
       assi(2,cx,cy);
       goniometrica(f,a,b,c,d,ics,ips);
       disegnacurva(ics,ips,cx,cy,0);
       readln;
       closegraph;
  end.
la procedura che non va è 'disegnacurva' le altre servono solo per arrivare a quel risultato