Anda di halaman 1dari 2

Algoritmos y Estructuras de Datos

seek(libros,k);
read(libros,aux);
write(dadovue,aux);
end;
reset(dadovue);
writeln('Nro Codigo Titulo Stock');
writeln('--- ------ -------------------- -----');
while not eof(dadovue) do
begin read(dadovue,aux) ;
writeln(aux.nroint:3,aux.codi:8,' ',aux.titulo,aux.stock:5)
end;
writeln('Fin del segundo listado');
close(libros); close(dadovue);
writeln('Fin del programa, ingrese cualquier letra');
readln(rta)
end.

Varias veces ponemos al final del programa la instruccin readln(rta) nada mas que para que
la pantalla desaparezca recin despus de pulsar una tecla (para poder verificar los resultados).
A veces, en vez de leer un char haremos leer un entero. Tambin podemos poner readln.

Problema: Se supone que desde el men de barras de Pascal fue creado el archivo
c : \ libreria.dat y que est vaco. Leer de teclado los datos de una cierta cantidad de libros
(cdigo, ttulo, autor, precio, cantidad en stock) . A medida que se van leyendo los libros, ir
agregndolos al archivo asignndole nmeros enteros consecutivos a partir de 1. Luego de
cargados listar todos los libros.
Se desea luego realizar la venta de cierta cantidad de ejemplares de un libro, para lo cual deber
verificarse que haya suficiente cantidad en stock. El programa deber indicar si se puede o no
efectuar la venta, informar el precio y actualizar el stock.
Finalmente se repetir el listado.

program libreria(input,output);
type libro=record nroint,codi,stock:integer;
titulo,autor:string[20];
precio:real
end;
negocio=file of libro;
var
libros:negocio;aux:libro;unprecio:real;n,uncodi,unnro,unacanti:integer;
begin assign(libros , 'c:\libreria.dat');
reset(libros); n:=0;
write('Ingrese codigo(cero termina):');readln(uncodi);
while uncodi>0 do
begin n:=n+1 ; aux.nroint:=n ; aux.codi:=uncodi;
write('Ingrese titulo:');readln(aux.titulo);
write('Ingrese autor :');readln(aux.autor);
write('Ingrese precio:');readln(aux.precio);
write('Ingrese stock :');readln(aux.stock);
write(libros,aux);
write('Ingrese codigo (cero termina):');readln(uncodi)
end;
reset(libros);
writeln('Nro Codigo Titulo Stock');
writeln('--- ------ -------------------- -----');
61
Algoritmos y Estructuras de Datos
Modificaciones: Consiste en modificar algunos campos de un registro (si se desea modificar
varios registros, se pone todo dentro de un while). Tambin ac hay que ubicar el registro dentro
del archivo, cambiar los campos, y volver a grabarlo. Si no se encontr, hay que avisar.

Algunos comentarios sobre BAJAS en un archivo:

Cuando se intenta dar de baja a un registro de un archivo, hay dos maneras de hacerlo:

Baja fsica: consiste en hacer desaparecer el registro, corriendo todos los que estn a su
derecha un registro a la izquierda, con lo cual el registro borrado desaparece y el archivo
quedar con un tamao un registro menor al que tena. Los datos del registro dado de baja se
perdieron.

Baja lgica: consiste en incorporar a los registros un campo (booleano en los ejemplos, tambin
podra ser char, integer, etc.) que indique si el registro est dado de baja o no.
En el ejemplo, al campo en cuestin lo hemos llamado debaja.

Supongamos que queremos dar de baja al registro con nroint = 3 (el registro 2)

EOF
Baja lgica
antes.de la baja
0 false 1 false 2 false 3 false 4 false 5 false 6 false
a .reg 0 reg 1 reg 2 reg 3 reg 4 reg 5 reg 6.
despus.de la baja
0 false 1 false 2 true 3 false 4 false 5 false 6 false
a .reg 0 reg 1 reg 2 reg 3 reg 4 reg 5 reg 6

En rojo se idican los valores del nmero de registro


y en azul el valor de debaja (el campo que usamos para indicar si est dado de baja o no)
3 true sombreado indica que el registro tiene baja lgica

EOF
Baja fsica (no es necesario utilizar el campo debaja)
.

a .reg 0 reg 1 reg 2 reg 3 reg 4 reg 5 reg 6.

kjkkl EOF

a .reg 0 reg 1 reg 2 reg 3 reg 4 reg 5

Este tipo de baja tiene varios inconvenientes:


- Se perdieron los datos del registro dado de baja mientras que con la baja lgica, mediante
un simple mdulo muy similar al de modificaciones, se puede recuperar.
- Si hubiera un campo clave para ubicarlo directamente, ste deja de servir, por lo que
habra que redefinir los campos clave y listarlos (imaginar archivos con miles de registros) y
an as correramos el riesgo de cometer errores.

63

Anda mungkin juga menyukai