Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program pregunta1;
- type TArrReal = array [1..110] of Real;
- procedure ObtenerArregloFlujo(var flujo: TArrReal;var archIn: Text;var cantFluj: Integer);
- var i:Integer;
- aux:Real;
- begin
- for i:=1 to 110 do flujo[i]:=0;
- cantFluj:=0;
- while not eoln(archIn) do begin
- inc(cantFluj);
- read(archIn,aux);
- flujo[cantFluj]:=aux;
- end;
- readln(archIn);
- end;
- function CalcularDerivada(var flujo: TArrReal;cantFluj: Integer;x: Real):Real;
- var i,j:Integer;
- factor,suma:Real;
- begin
- suma:=0;
- for i:=1 to cantFluj do begin
- factor:=1;
- for j:=(cantFluj-i+2) to cantFluj do begin
- factor:=factor*x;
- end;
- suma:=suma+flujo[i]*factor*i;
- end;
- CalcularDerivada:=suma;
- end;
- function HallarUnaRaiz(var flujo: TArrReal;montoIni:Real;cantFluj:Integer;x:Real):Real;
- var i,j:Integer;
- factor,suma:Real;
- begin
- suma:=0;
- for i:=1 to cantFluj do begin
- factor:=1;
- for j:=(cantFluj-i+1) to cantFluj do begin
- factor:=factor*x;
- end;
- suma:=suma+flujo[i]*factor;
- end;
- suma:=suma-montoIni;
- HallarUnaRaiz:=suma;
- end;
- function CalcularTir(var flujo: TArrReal;montoIni: Real;cantFluj: Integer): Real;
- var x1,x2,m,fx1,fx2:Real;
- begin
- randomize;
- x1:=1000*(random*2-1);
- fx1:=HallarUnaRaiz(flujo,montoIni,cantFluj,x1);
- while abs(fx1)>0.0001 do begin
- m:=CalcularDerivada(flujo,cantFluj,x1);
- x2:=x1-fx1/m;
- fx2:=HallarUnaRaiz(flujo,montoIni,cantFluj,x2);
- fx1:=fx2;x1:=x2;
- end;
- CalcularTir:=(1/x1-1)*100;
- end;
- function HallarSiEsAprovODesaprov(tir,tasaCorte:Real):String;
- begin
- if tasaCorte>tir then HallarSiEsAprovODesaprov:='RECHAZADO'
- else HallarSiEsAprovODesaprov:='APROBADO';
- end;
- procedure prepararArchivos(var archIn,ArchOut: Text);
- var nomArchIn,nomArchOut: String;
- begin
- writeln('Ingrese el nombre del archivo a analizar: ');
- readln(nomArchIn);
- assign(archIn,nomArchIn);
- writeln('Ingrese el nombre con el que desea guardar el reporte: ');
- readln(nomArchOut);
- assign(archOut,nomArchOut);
- end;
- var archIn,archOut: Text;
- flujo: TArrReal;
- tasaCorte,montoIni,tir: Real;
- cantFluj: Integer;
- comentario,nomProyecto: String;
- begin
- prepararArchivos(archIn,ArchOut);
- reset(archIn);
- rewrite(archOut);
- readln(archIn,tasaCorte);
- writeln(archOut,'Tasa de corte: ',tasaCorte:4:1,'%');
- writeln(archOut,'PROYECTO','TIR':30,'COMENTARIOS':20);
- while not eof(archIn) do begin
- readln(archIn,nomProyecto);readln(archIn,montoIni);
- ObtenerArregloFlujo(flujo,archIn,cantFluj);
- tir:=CalcularTir(flujo,montoIni,cantFluj);
- comentario:=HallarSiEsAprovODesaprov(tir,tasaCorte);
- writeln(archOut,nomProyecto:24,tir:13:2,'%',comentario:20);
- end;
- close(archIn);close(archOut);
- end.
Advertisement
Add Comment
Please, Sign In to add comment