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.
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


0