Newsgroup: it.comp.lang.c
Titolo: aiuto !!!

ho bisogno di trasformare un programma da pascal in "C"
questo programma calcola le tangenti...
ecco il programma scritto in pascal:
program tangente;
uses
   crt,printer;
type
   estremi=array[1..20] of real;
const
  step=1;
  deltax=0.001;
  volte=20;
var
  fs,fd,ds,dd:estremi;
  {sono gli estremi sinistri e destri della funzione e della derivata
  corrispondenti a cambiamento di segno}
  r,scelta:char;
  kfu,kde,k,s:integer;
  a1,b1,destro,sinistro,ascissa,p1:real;
  basta:boolean;
function f(x:real):real;
begin
  f:=exp(x)+sqr(x)-2;
end;
function f1(x:real):real;
begin
  f1:=(f(x+deltax)-f(x))/deltax;
end;
begin
  clrscr;
  writeln('   Il calcolatore andr. a cercare intervalli nei quali la
funzione e la sua');
  writeln('    derivata avessero a cambiare segno incrementando ogni volta
dello step');
  writeln('        previsto nelle costanti (per maggior precisione puoi
cambiarlo');
  write('   Immetti l''ascissa minima da cui iniziare la ricerca ');
  readln(sinistro);
  write('   Immetti l''ascissa massima cui concludere la ricerca ');
  readln(destro);
  writeln('FUNZIONE');
  kfu:=0;
  a1:=sinistro;
  b1:=sinistro+step;
  while b1<=destro do begin
     if f(a1)*f(b1)=0 then if f(a1)=0 then writeln('Zero funzione', a1:15:7)
                           else writeln('Zero funzione', b1:15:7)
     else
        if f(a1)*f(b1)<0 then begin
          kfu:=kfu+1;
          fs[kfu]:=a1;
          fd[kfu]:=b1;
          writeln(kfu:3,' - Individuato l''intervallo
[',a1:15:8,',',b1:15:8,']');
        end;
     a1:=b1;
     b1:=b1+step;
  end;
  writeln('DERIVATA');
  kde:=0;
  a1:=sinistro;
  b1:=sinistro+step;
  while b1<=destro do begin
     if f1(a1)*f1(b1)=0 then if f1(a1)=0 then writeln('Zero derivata ',
a1:15:7)
                           else writeln('Zero derivata ', b1:15:7)
     else
        if f1(a1)*f1(b1)<0 then begin
          kde:=kde+1;
          Ds[kde]:=a1;
          Dd[kde]:=b1;
          writeln(kfu:3,' - Individuato l''intervallo
[',a1:15:8,',',b1:15:8,']');
        end;
     a1:=b1;
     b1:=b1+step;
  end;
  gotoxy(40,23);writeln('Un tasto per cominciare');
  r:=readkey;
  for k:=1 to kfu do begin
        clrscr;
        writeln(K:3,' FUNZIONE');
        a1:=fs[k];
        b1:=fd[k];
        s:=1;
        write(s:3,' - Intervallo[',a1:12:7,',',b1:12:7,'] con p =');
        basta:=false;
        scelta:='s';
        while (s<=volte) and (basta=false) do begin
           if scelta='s' then begin
               p1:=a1;
               repeat
                  if f1(p1)<>0 then
                      ascissa:=p1-f(p1)/f1(p1);
                  if (ascissa<a1) or (ascissa>b1) or (f1(a1)=0) then
p1:=p1+step/100;
               until (ascissa>=a1) and (ascissa<=b1) and (f1(a1)<>0);
           end;
           if scelta='d' then begin
               p1:=b1;
               repeat
                  if f1(p1)<>0 then
                      ascissa:=b1-f(p1)/f1(p1);
                  if (ascissa<a1) or (ascissa>b1) or (f1(b1)=0) then
p1:=p1-step/100;
               until (ascissa>=a1) and (ascissa<=b1) and (f1(b1)<>0);
           end;
           writeln(ascissa:18:9);
           if f(ascissa)=0 then begin
             writeln(ascissa:18:9,' S zero della funzione');
             basta:=true;
           end
           else begin
             if (f(a1)>0) and (f(ascissa)>0) then begin
                a1:=ascissa;
                scelta:='s';
             end;
             if (f(a1)>0) and (f(ascissa)<0) then begin
                b1:=ascissa;
                scelta:='d';
             end;
             if (f(a1)<0) and (f(ascissa)<0) then begin
                a1:=ascissa;
                scelta:='s';
             end;
             if (f(a1)<0) and (f(ascissa)>0) then begin
                b1:=ascissa;
                scelta:='d';
             end;
             s:=s+1;
             if s<(volte+1) then
                write(s:3,' - Intervallo[',a1:12:7,',',b1:12:7,'] con p =');
           end;
        end;
     gotoxy(40,23);writeln('Un tasto per continuare');
     r:=readkey;
   end;
   for k:=1 to Kde do begin
           clrscr;
           writeln(k:3,' DERIVATA');
           a1:=ds[k];
           b1:=dd[k];
           s:=1;
           write(s:3,' - Intervallo[',a1:12:7,',',b1:12:7,'] con p =');
           basta:=false;
           scelta:='s';
           while (s<=volte) and (basta=false) do begin
              if scelta='s' then begin
               p1:=a1;
               repeat
                  if f1(f1(p1))<>0 then
                      ascissa:=p1-f1(p1)/f1(f1(p1));
                  if (ascissa<a1) or (ascissa>b1) or (f1(a1)=0) then
p1:=p1+step/100;
               until (ascissa>=a1) and (ascissa<=b1) and (f1(f1(a1))<>0);
              end;
              if scelta='d' then begin
               p1:=b1;
               repeat
                  if f1(f1(p1))<>0 then
                      ascissa:=b1-f1(p1)/f1(f1(p1));
                  if (ascissa<a1) or (ascissa>b1) or (f1(f1(b1))=0) then
p1:=p1-step/100;
               until (ascissa>=a1) and (ascissa<=b1) and (f1(f1(b1))<>0);
              end;
              writeln(ascissa:18:9);
              if f1(ascissa)=0 then begin
                  writeln(ascissa:18:9,' S soluzione della derivata');
                  basta:=true;
              end
             else begin
               if (f1(a1)>0) and (f1(ascissa)>0) then begin
                  a1:=ascissa;
                  scelta:='s';
               end;
               if (f1(a1)>0) and (f1(ascissa)<0) then begin
                  b1:=ascissa;
                  scelta:='d';
               end;
               if (f1(a1)<0) and (f1(ascissa)<0) then begin
                  a1:=ascissa;
                  scelta:='s';
               end;
               if (f1(a1)<0) and (f1(ascissa)>0) then begin
                  b1:=ascissa;
                  scelta:='d';
               end;
               s:=s+1;
               if s<(volte+1) then
                    write(s:3,' - Intervallo[',a1:12:7,',',b1:12:7,'] con p
=');
           end;
            end;
    r:=readkey;
    end;
end.
c'e' qualcuno che mi puo' fare il piacere di trasformarlo in codice "C",
gliene sarei molto grato...
grazie mille 

Il pascal non e' molto diverso dal C... quindi armati di molta pazienza
e comincia a tradurlo da solo. Se non conosci il C allora e' una buona
occasione per impararlo. Se lo conosci gia' allora... ti conviene
iniziare. Ho visto che non e' cosi' difficile da fare.
Buon lavoro! :)
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG