Pascal/Turbo Pascal - funciones y procedimientos

   
Vista:

funciones y procedimientos

Publicado por abel (2 intervenciones) el 21/01/2011 16:09:07
Estimados programadores .
solicito su ayuda sobre un ejercicio de archivo el cual me tiene a mal traer .
tengo ya todo el programa realizado pero no me funcionan dos procedimientos en los cuales llamo a una funcion que muestra el maximo valor , que hay en un registro cargado .
solicito su ayuda devido a que creo tener problemas con los parametros por valor y referencia .Intente ya varias modificaciones pero no funciona espero su ayuda
muchas gracias
program planta_de_tratamiento_biologico;
uses crt;
type
lodos = record
num_fil: integer;
are_fil : integer;
tie_cic : integer;
kg_lodo : real;
presion : real;
activo : boolean;
end;
archivo = file of lodos;
var arch: archivo; (*variable global*)
(************************Procedimientos y Funciones ************************************)

Procedure Existe_o_Crea(var archi:archivo ; var res:boolean);
var error:word; (*variable local*)
begin
res:=false;
{$I-} (*Apaga los errores*)
reset(archi);
{$I+} (*enciende los errores *)
if IOresult<>0 then begin (*IOresult funcion std que devuelve el estado de la
última operacion de E/S*)
rewrite(archi);
res:=true;
end
else writeln('Existe un archivo con ese nombre!!');
close(archi);
end;


Procedure Carga_datos(var archi:archivo);
var reg1: lodos;
op: char;
begin
reset(archi);
writeln;
writeln('Ingreso de datos: Para finalizar ingrese n o N ');
writeln;
repeat
with reg1 do
begin
write ('ingrese el numero de filtro: ');
readln (num_fil);
writeln;
writeln ('ingrese el area del filtro');
readln (are_fil);
writeln;
writeln ('Ingrese el tiempo de ciclo : ');
readln (tie_cic);
writeln;
write ('Ingrese los kilogramos de lodos : ');
readln (kg_lodo);
writeln;
write ('Ingrese la presion del sistema : ');
readln (presion);
activo:=true;
write (archi,reg1);
end;
writeln ('Desea ingresar mas datos s/n?');
readln(op);
until (op = 'n') or (op = 'N');
close(archi);
end;

Procedure Listar_archivo(var archi:archivo);
var vacio:boolean ;
reg1:lodos;
begin
vacio:=true;
reset(archi);
while (not eof(archi)) do
begin
writeln;
read(archi,reg1);
if reg1.activo then
begin
{writeln (reg1.num_fil:15,' ',reg1.are_fil:15,');}
{writeln (reg1.tie_cic:15,' ',reg1.kg_lodo:15:2,' ',reg1.presion:15:2,');}
vacio:=false;
end;
end;
if vacio then
begin
writeln;
write('Archivo vacio');
end;
close(archi);
end;

Function maximo (var archi:archivo) : real ;
Var reg1:lodos;
aux ,I :real;
Begin
reset(archi);
read(archi,reg1);
aux:=(reg1.kg_lodo);
while (not eof(archi)) do
begin
read(archi,reg1);
I:=(reg1.kg_lodo);
if (I<aux) then aux:=I;
maximo:=aux;
close(archi);
end;
end;

Procedure muestramax (var archi:archivo);
Var reg1: lodos;
begin
reset(archi);
write('La maxima capacidad de produccion es :', maximo (archi) );
close(archi);
end;

Function minimo (var archi:archivo) : integer ;
Var reg1:lodos;
aux ,I :integer;
Begin
reset(archi);
read(archi,reg1);
aux:=(reg1.tie_cic);
while (not eof(archi)) do
begin
read(archi,reg1);
I:=(reg1.tie_cic);
if (I>aux) then aux:=I;
minimo:=aux;
close(archi);
end;
end;

Procedure muestramin (var archi:archivo);
Var reg1: lodos;
begin
reset(archi);
write('el tiempo minimo de ciclo es :', minimo (archi) );
Close(archi);
end;

Procedure Salir;
begin
clrscr;
gotoxy(25,12);
writeln('Fin de la ejecucion del programa!');
gotoxy(25,14);
writeln('Presione una tecla para salir');
repeat until keypressed;
end;

Procedure Menu_Opciones (var archi:archivo);
var resp:char;
opcion:byte;
nombre: string[8];
resultado:boolean;
begin {comienzo del Procedimiento Menu_opciones}
clrscr;
writeln('ARCHIVOS EN TURBO PASCAL');

writeln (1,' - Crear un Archivo................');
writeln (2,' - muestrar la maxima capacidad de un filtro en kg ');
writeln (3,' - muestrar el tiempo minimo de todos los ciclos de trabajo' );
writeln (4,' - Listar el Archivo.................');
writeln (5,' - Salir del Programa.............');
writeln ('¨Que opcion desea realizar?:... ');
readln (Opcion);
clrscr;
Case Opcion of
1: begin
writeln ('Precaucion...');
writeln;
writeln ('Usted ha seleccionado la opcion : "Crear un Archivo" ...');
writeln;
write('Ingrese el nombre de archivo, maximo 8 caracteres: ');
readln(nombre);
writeln;
assign(archi, 'C:\' + nombre + '.dat' );
Existe_o_Crea(archi,resultado);
if resultado then
begin
repeat
writeln;
write('Desea cargar datos en el archivo?: s/n ');
readln(Resp);
until (resp ='S') or (resp ='s') or (resp ='N') or (resp ='n');
if (resp ='S') or (resp='s') then
Carga_datos(archi); (*Invocamos al Procedimiento Carga*)
end;

end; (*Fin de Opcion 1*)

2: begin (*Comienzo de Opcion 2*)
writeln('Usted eligio la maxima capacidad de un filtro ');
writeln;
write('el resultado es: ');
muestramax(archi);
writeln;
end; (*Fin de Opcion 2*)

3: begin (*Comienzo de Opcion 3*)
writeln('Usted eligio el tiempo minimo de ciclo ');
writeln;
write('el resultado es: ');
muestramin(archi);
writeln;
end; (*Fin de Opcion 2*)

4: begin (*Comienzo de Opcion 4*)
write('Ingrese el nombre de archivo a listar (sin extensión) : ');
readln(nombre);
writeln;
assign(archi, 'C:\' + nombre + '.dat' );
Listar_archivo(archi); (*Invocamos al Procedimiento Listar*)
writeln;
writeln;

end; (*Fin de Opcion 4*)

5: begin
repeat
GotoXY(22,10);
writeln ('===================================');
GotoXY(22,12);
writeln ('¨Esta seguro que desea salir? S/N: ');
GotoXY(22,14);
writeln('===================================');
GotoXY(58,12);
readln (Resp)
until (resp ='S') or (resp ='s') or (resp ='N') or (resp ='n');
if (resp ='N') or (resp='n') then Menu_opciones(archi)
else Salir;
end; (*Fin de Opción 6*)
else
begin
writeln ('Ingreso una opcion invalida! ');
end;
end; (*Fin del Case of*)
end; (*Fin del procedimiento Menu_opciones*)
(************************Cuerpo Principal Programa**********************************)
begin
clrscr;
Menu_opciones(arch);(*arch es la única variable global*)
readkey
end.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:funciones y procedimientos

Publicado por ramon (2072 intervenciones) el 19/02/2011 14:02:05
Espero sea loquee querías fíjate en los dos programas y veras las diferencias,
no todos los archivos se tratan como texto estos son registros.

program planta_de_tratamiento_biologico;
uses
crt;
type
lodos = record
num_fil: integer;
are_fil : integer;
tie_cic : integer;
kg_lodo : real;
presion : real;
activo : boolean;
end;
archivo = file of lodos;
var
arch: archivo; (*variable global*)
nombre : string[18];

(************************Procedimientos y Funciones ************************************)

Procedure Existe_o_Crea(var archi:archivo ; var res:boolean);
var
error : word; (*variable local*)
begin
res := false;
assign(archi,nombre);
{$I-} (*Apaga los errores*)
reset(archi);
{$I+} (*enciende los errores *)
if IOresult<>0 then begin (*IOresult funcion std que devuelve el estado de la
última operacion de E/S*)
rewrite(archi);
res := true;
end
else
writeln('Existe un archivo con ese nombre!!');
close(archi);
end;

Procedure Carga_datos(var archi:archivo);
var
reg1 : lodos;
op : char;
begin
assign(archi,nombre);
{$i-} reset(archi); {$i+}

writeln('Ingreso de datos: Para finalizar ingrese n o N ');

repeat
clrscr;
gotoxy(2,1);write('Ingreso de datos: Para finalizar ingrese n o N ');
with reg1 do
begin
gotoxy(4,3);write('ingrese el numero de filtro: ');
gotoxy(34,3);readln(num_fil);
gotoxy(4,4);write('ingrese el area del filtro: ');
gotoxy(33,4);readln(are_fil);
gotoxy(4,5);write('Ingrese el tiempo de ciclo: ');
gotoxy(33,5);readln(tie_cic);
gotoxy(4,6);write('Ingrese los kilogramos de lodos: ');
gotoxy(38,6);readln(kg_lodo);
gotoxy(4,7);write('Ingrese la presion del sistema: ');
gotoxy(37,7);readln(presion);
activo := true;
seek(archi,filesize(archi));
write(archi,reg1);
end;
gotoxy(10,10);write('Desea ingresar mas datos s/n?');
readln(op);
until (op = 'n') or (op = 'N');
close(archi);
end;

Procedure Listar_archivo(var archi:archivo);
var
vacio : boolean ;
reg1 : lodos;
tecla : char;
ki : integer;
begin
vacio := true;
assign(archi,nombre);
{$i-} reset(archi); {$i+}
if ioresult <> 0 then {comprovamos error y salimos si hay}
halt(1);
ki := 0;
repeat
seek(archi,ki);
read(archi,reg1);
if reg1.activo then
begin
clrscr;
gotoxy(1,4);write('numero de filtro : ');
gotoxy(24,4);write(reg1.num_fil:15);
gotoxy(1,5);write('area del filtro : ');
gotoxy(24,5);write(reg1.are_fil:15);
gotoxy(1,6);write('tiempo de ciclo : ');
gotoxy(24,6);write(reg1.tie_cic:15);
gotoxy(1,7);write('kilogramos de lodos : ');
gotoxy(24,7);write(reg1.kg_lodo:15:2);
gotoxy(1,8);write('presion del sistema : ');
gotoxy(24,8);write(reg1.presion:15:2);
{writeln (reg1.num_fil:15,' ',reg1.are_fil:15,');}
{writeln (reg1.tie_cic:15,' ',reg1.kg_lodo:15:2,' ',reg1.presion:15:2,');}
vacio := false;
end;
if vacio then
begin
writeln;
write('Archivo vacio');
end;
gotoxy(10,10);write('Tiene : ',filesize(archi),' Ver mas ** teclas = FLECHAS ** Salir = ESC');
tecla := readkey;
if tecla = #72 then
begin
ki := ki - 1;
if ki < 0 then
ki := 0;
end;
if tecla = #80 then
begin
ki := ki + 1;
if ki > filesize(archi) then
ki := filesize(archi);
end;
until tecla = #27;
close(archi);
end;

Function maximo (var archi:archivo) : real ;
Var
reg1 : lodos;
aux ,I : real;
ki : integer;
Begin
assign(archi,nombre);
{$i-} reset(archi); {$i+}
if ioresult <> 0 then {comprovamos error y salimos si hay}
halt(1);
seek(archi,0);
read(archi,reg1);
aux := (reg1.kg_lodo);
ki := 1;
repeat
seek(archi,ki);
read(archi,reg1);
I := reg1.kg_lodo;
if I < aux then
i := 0
else
aux := I;
ki := ki + 1;
until ki > filesize(archi) - 1;
maximo := aux;
close(archi);
end;

Procedure muestramax (var archi:archivo);
Var reg1: lodos;
begin
write('La maxima capacidad de produccion es : ', maximo (archi):15:2);
end;

Function minimo (var archi:archivo) : integer ;
Var
reg1 : lodos;
aux ,I : integer;
ki : integer;
Begin
assign(archi,nombre);
{$i-} reset(archi); {$i+}
if ioresult <> 0 then {comprovamos error y salimos si hay}
halt(1);
seek(archi,0);
read(archi,reg1);
aux := reg1.tie_cic;
ki := 1;
repeat
seek(archi,ki);
read(archi,reg1);
I := reg1.tie_cic;
if I > aux then
i := 0
else
aux := I;
ki := ki + 1;
until ki > filesize(archi) - 1;
minimo := aux;
close(archi);
end;

Procedure muestramin (var archi:archivo);
begin
write('el tiempo minimo de ciclo es : ', minimo (archi));
end;

Procedure Salir;
begin
clrscr;
gotoxy(25,12);
writeln('Fin de la ejecucion del programa!');
gotoxy(25,14);
writeln('Presione una tecla para salir');
repeat until keypressed;
end;

Procedure Menu_Opciones (var archi:archivo);
var
resp : char;
opcion : byte;
resultado:boolean;
begin {comienzo del Procedimiento Menu_opciones}
clrscr;
repeat
writeln('ARCHIVOS EN TURBO PASCAL');

writeln (1,' - Crear un Archivo................');
writeln (2,' - muestrar la maxima capacidad de un filtro en kg ');
writeln (3,' - muestrar el tiempo minimo de todos los ciclos de trabajo' );
writeln (4,' - Listar el Archivo.................');
writeln (5,' - Salir del Programa.............');
writeln ('¨Que opcion desea realizar?:... ');
readln (Opcion);
clrscr;
Case Opcion of
1: begin
writeln ('Precaucion...');
writeln;
writeln ('Usted ha seleccionado la opcion : "Crear un Archivo" ...');
writeln;
write('Ingrese el nombre de archivo, maximo 8 caracteres: ');
readln(nombre);
writeln;
nombre := 'C:\' + nombre + '.dat';
assign(archi, nombre);
Existe_o_Crea(archi,resultado);
if resultado then
begin
repeat
writeln;
write('Desea cargar datos en el archivo?: s/n ');
readln(Resp);
until (resp ='S') or (resp ='s') or (resp ='N') or (resp ='n');
if (resp ='S') or (resp='s') then
Carga_datos(archi); (*Invocamos al Procedimiento Carga*)
end;
end; (*Fin de Opcion 1*)

2: begin (*Comienzo de Opcion 2*)
clrscr;
gotoxy(10,3);write('Entre Nombre Archivo : ');
gotoxy(34,3);readln(nombre);
nombre := 'c:\' + nombre + '.dat';
clrscr;
writeln('Usted eligio la maxima capacidad de un filtro ');
writeln;
write('el resultado es: ');
muestramax(archi);
writeln;
end; (*Fin de Opcion 2*)

3: begin (*Comienzo de Opcion 3*)
clrscr;
gotoxy(10,3);write('Entre Nombre Archivo : ');
gotoxy(34,3);readln(nombre);
nombre := 'c:\' + nombre + '.dat';
clrscr;
writeln('Usted eligio el tiempo minimo de ciclo ');
writeln;
write('el resultado es: ');
muestramin(archi);
writeln;
end; (*Fin de Opcion 2*)

4: begin (*Comienzo de Opcion 4*)
write('Ingrese el nombre de archivo a listar (sin extensión) : ');
readln(nombre);
nombre := 'c:\' + nombre + '.dat';
writeln;
assign(archi, nombre);
Listar_archivo(archi); (*Invocamos al Procedimiento Listar*)
writeln;
writeln;
end; (*Fin de Opcion 4*)

5: begin
GotoXY(22,10);
writeln ('===================================');
GotoXY(22,12);
writeln ('¨Esta seguro que desea salir? S/N: ');
GotoXY(22,14);
writeln('===================================');
GotoXY(58,12);
readln (Resp);
clrscr;
end;
end;
until resp in ['s','S'];
end; (*Fin del procedimiento Menu_opciones*)

(************************Cuerpo Principal Programa**********************************)
begin
clrscr;
Menu_opciones(arch);(*arch es la única variable global*)
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar