karlangadas

TIRdeMRD

Nov 4th, 2015
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.73 KB | None | 0 0
  1. program pregunta1;
  2. type TArrReal = array [1..110] of Real;
  3.  
  4. procedure ObtenerArregloFlujo(var flujo: TArrReal;var archIn: Text;var cantFluj: Integer);
  5. var i:Integer;
  6.     aux:Real;
  7. begin
  8.   for i:=1 to 110 do flujo[i]:=0;
  9.   cantFluj:=0;
  10.   while not eoln(archIn) do begin
  11.     inc(cantFluj);
  12.     read(archIn,aux);
  13.     flujo[cantFluj]:=aux;
  14.   end;
  15.   readln(archIn);
  16. end;
  17. function CalcularDerivada(var flujo: TArrReal;cantFluj: Integer;x: Real):Real;
  18. var i,j:Integer;
  19.     factor,suma:Real;
  20. begin
  21.   suma:=0;
  22.   for i:=1 to cantFluj do begin
  23.     factor:=1;
  24.     for j:=(cantFluj-i+2) to cantFluj do begin
  25.       factor:=factor*x;
  26.     end;
  27.     suma:=suma+flujo[i]*factor*i;
  28.   end;
  29.   CalcularDerivada:=suma;
  30. end;
  31.  
  32. function HallarUnaRaiz(var flujo: TArrReal;montoIni:Real;cantFluj:Integer;x:Real):Real;
  33. var i,j:Integer;
  34.     factor,suma:Real;
  35. begin
  36.   suma:=0;
  37.   for i:=1 to cantFluj do begin
  38.     factor:=1;
  39.     for j:=(cantFluj-i+1) to cantFluj do begin
  40.       factor:=factor*x;
  41.     end;
  42.     suma:=suma+flujo[i]*factor;
  43.   end;
  44.   suma:=suma-montoIni;
  45.   HallarUnaRaiz:=suma;
  46. end;
  47.  
  48. function CalcularTir(var flujo: TArrReal;montoIni: Real;cantFluj: Integer): Real;
  49. var x1,x2,m,fx1,fx2:Real;
  50. begin
  51.   randomize;
  52.   x1:=1000*(random*2-1);
  53.   fx1:=HallarUnaRaiz(flujo,montoIni,cantFluj,x1);
  54.   while abs(fx1)>0.0001 do begin
  55.     m:=CalcularDerivada(flujo,cantFluj,x1);
  56.     x2:=x1-fx1/m;
  57.     fx2:=HallarUnaRaiz(flujo,montoIni,cantFluj,x2);
  58.     fx1:=fx2;x1:=x2;
  59.   end;
  60.   CalcularTir:=(1/x1-1)*100;
  61. end;
  62.  
  63. function HallarSiEsAprovODesaprov(tir,tasaCorte:Real):String;
  64. begin
  65.   if tasaCorte>tir then HallarSiEsAprovODesaprov:='RECHAZADO'
  66.   else HallarSiEsAprovODesaprov:='APROBADO';
  67. end;
  68.  
  69. procedure prepararArchivos(var archIn,ArchOut: Text);
  70. var nomArchIn,nomArchOut: String;
  71. begin
  72.   writeln('Ingrese el nombre del archivo a analizar: ');
  73.   readln(nomArchIn);
  74.   assign(archIn,nomArchIn);
  75.   writeln('Ingrese el nombre con el que desea guardar el reporte: ');
  76.   readln(nomArchOut);
  77.   assign(archOut,nomArchOut);
  78.  
  79. end;
  80. var archIn,archOut: Text;
  81.     flujo: TArrReal;
  82.     tasaCorte,montoIni,tir: Real;
  83.     cantFluj: Integer;
  84.     comentario,nomProyecto: String;
  85. begin
  86.   prepararArchivos(archIn,ArchOut);
  87.   reset(archIn);
  88.   rewrite(archOut);
  89.   readln(archIn,tasaCorte);
  90.   writeln(archOut,'Tasa de corte: ',tasaCorte:4:1,'%');
  91.   writeln(archOut,'PROYECTO','TIR':30,'COMENTARIOS':20);
  92.   while not eof(archIn) do begin
  93.     readln(archIn,nomProyecto);readln(archIn,montoIni);
  94.     ObtenerArregloFlujo(flujo,archIn,cantFluj);
  95.     tir:=CalcularTir(flujo,montoIni,cantFluj);
  96.     comentario:=HallarSiEsAprovODesaprov(tir,tasaCorte);
  97.     writeln(archOut,nomProyecto:24,tir:13:2,'%',comentario:20);
  98.   end;
  99.   close(archIn);close(archOut);
  100. end.
Advertisement
Add Comment
Please, Sign In to add comment