Você está na página 1de 2

Algoritmos y Estructuras de Datos

Problema: Se supone que desde el men de barras de Pascal fue creado el archivo
c : \ archi04.dat y que est vaco. Leer de teclado los datos de un cierto nmero de alumnos
(nombre:string[6], nota:entero), no se sabe cuantos alumnos son, e ir guardndolos en dicho
archivo. A medida que se van leyendo los alumnos, ir asignndole nmeros enteros consecutivos
a partir de 1.
Listarlos e informar cuantos alumnos fueron grabados en el archivo.

program file01(input, output);


type alumno=record nro: integer;
nombre: string[6];
nota: integer
end;
curso=file of alumno;
var com22: curso; aux: alumno; canti: integer; brenom: string[6];
begin assign(com22, 'c:\archi04.dat'); reset(com22)(*);
canti:=0; readln(brenom);
while brenom<>'******' do begin canti:=canti+1;
aux.nro:=canti;
aux.nombre:=brenom;
readln(aux.nota);
write(com22,aux);
read(brenom)
end;
reset(com22);
writeln(Nro. Nombre Nota);
writeln(---- ------ ----);
while not eof(com22) do
begin read(com22, aux);
write(aux.nro:4, , aux.nombre, aux.nota:7)
end;
close(com22);
writeln('Fin de la grabacion, se grabaron ',canti,' alumnos')
end.
Si el archivo no hubiese existido, en vez de (*) hubiramos tenido que poner rewrite(com22)

Supongamos que nos piden que, ingresando un Nro. de alumno informemos Nombre y Nota

program file02(input, output);


type alumno=record nro: integer;
nombre: string[6];
nota: integer
end;
curso=file of alumno;
var com22: curso; aux: alumno; n, t: integer;
begin assign(com22,'c:\archi04.dat'); reset(com22); t:= filesize(com22);
write(Ingrese Nro. alumno a buscar sus datos); readln(n);
while n<1 or n>t do begin write(Incorrecto, ingrese de nuevo);
readln(n)
end;
seek(com22,n-1); read(com22,aux); write(aux.nombre, aux.nota);
close(com22)
end.

58
Algoritmos y Estructuras de Datos
Mas de una vez tendremos que trabajar con algn archivo que no sabemos si existe o no, pero si
existiera, no queremos perder los datos que contiene. No podemos usar rewrite.
Si usamos reset, en el momento de la ejecucin, el Sistema Operativo me informar de un error
de entrada/salida si no existiera. Para evitar esto, debo desactivar esta posibilidad a travs de la
instruccin {I-}. De esta manera podr seguir con el programa. Despus de una instruccin de
E/S, el Sist. Operat. devuelve un parmetro IORESULT que indica el tipo de error que encontr, si
vale cero es que no hubo error, si hubo error, entre otros valores, si devuelve 2, significa que el
archivo no fue encontrado. Es peligroso seguir con la verificacin desactivada, debo poner
enseguida {I+}.
Supongamos que se da esta situacin (de no saber si existe o no) con un archivo c:\opera.dat.
Mi programa debera comenzar mas o menos as:

program file00(input, output);


type alumno=record nro: integer;
nombre: string[6];
nota: integer
end;
curso=file of alumno;
var comis: curso; . . . .
begin assign(comis, 'c:\opera.dat'); {I-}; reset(comis);
if ioresult=2 then rewrite(comis); {I+}; . . . .

Sigamos practicando con archivos

Problema: Se supone que el archivo c : \ ejem.dat tiene una cierta cantidad (no se sabe
cuantos) de registros cargados. Se supone adems que el archivo c : \ alrreves.dat fue creado
desde el men de barras de Pascal y que est vaco. Se pide:
1) Listar el archivo ejem.dat
2) Grabar en alrreves.dat los registros de ejem.dat pero en el orden inverso
3) Listar alrreves.dat

program davuelta(input,output);
type libro=record nroint,codi,stock:integer;
titulo,autor:string[20];
precio:real
end;
negocio=file of libro;
var libros, dadovue : negocio ; aux:libro ; rta:char ;
n , i , k : integer ; (*) si en vez de tener alrreves.dat ya
begin assign(libros,'c:\ejem.dat'); creado, quisiramos crearlo en este
assign(dadovue,'c:\alrreves.dat'); programa, deberamos cambiar
reset(libros); reset(dadovue)(*); reset(dadovue) por rewrite(dadovue)
writeln('Nro Codigo Titulo Stock');
writeln('--- ------ -------------------- -----');
while not eof(libros) do
begin read(libros,aux) ;
writeln(aux.nroint:3,aux.codi:8,' ',aux.titulo,aux.stock:5)
end;
writeln('Fin del primer listado');
n:=filesize(libros);
for i:=1 to n do
begin k:= n-i;

60

Você também pode gostar