hola de nuevo y gracias por leer este mensaje y por la ayuda que me podais dar.
Tengo que hacer un procedimiento para dar de alta libros, sobre una tabla de 50 libros o más. Las altas se tienen que hacer de una en una. NO todas de golpe.
Con esto el algoritmo sería:
Todas las posiciones de la tabla en las que el campo ALTA sea TRUE, es que estan ocupadas.
Todas en las que ALTA sea FALSE estan libre.
buscar una posición libre.
ALGORITMO:
encontrado=false (cuando sea true es que he encontrado la posicion)
posicionlibre=1 (empiezo a buscar por la uno)
indice=1 (para ir recorriendo la tabla)
fin=false (he llegado al final de la tabla)
mientras encontrado sea false y fin sea false hacer (salgo del bucle si
encuentro una posición libre o llego al final de la tabla)
si tabla[indice].alta es false
en caso de que la posicion indice esté libre (el campo alta es false)
encontrado=true y posicionlibre=indice
else
if(indice es distinto de tamcoleccion) es decir si todavía no he
llegado al final
indice=indice+1
else
fin=true (he llegado al final y lo indico con fin)
fin mientras
salgo del bucle si he llegado al final sin encontrar posicion libre, en
ese caso fin vale true o si he encontrado una posicion libre, en ese caso
encontrado vale true
entonces ya se lo que tengo que hacer en cada caso:
si fin=true
mostrar mensaje "No hay sitio en la tabla para más libros"
si encontrado=true
leer datos del libro y meterlos en la posición posicionlibre
hasta dónde yo comprendo he realizado el siguiente código:
Necesito saber si el código esta bien interpretado y cual me falta es lo último que me queda y la primera vez que hago un procedimiento igual.
un saludo y muchísimas gracias en lo que me podais ayudar.
Tengo que hacer un procedimiento para dar de alta libros, sobre una tabla de 50 libros o más. Las altas se tienen que hacer de una en una. NO todas de golpe.
Con esto el algoritmo sería:
Todas las posiciones de la tabla en las que el campo ALTA sea TRUE, es que estan ocupadas.
Todas en las que ALTA sea FALSE estan libre.
buscar una posición libre.
ALGORITMO:
encontrado=false (cuando sea true es que he encontrado la posicion)
posicionlibre=1 (empiezo a buscar por la uno)
indice=1 (para ir recorriendo la tabla)
fin=false (he llegado al final de la tabla)
mientras encontrado sea false y fin sea false hacer (salgo del bucle si
encuentro una posición libre o llego al final de la tabla)
si tabla[indice].alta es false
en caso de que la posicion indice esté libre (el campo alta es false)
encontrado=true y posicionlibre=indice
else
if(indice es distinto de tamcoleccion) es decir si todavía no he
llegado al final
indice=indice+1
else
fin=true (he llegado al final y lo indico con fin)
fin mientras
salgo del bucle si he llegado al final sin encontrar posicion libre, en
ese caso fin vale true o si he encontrado una posicion libre, en ese caso
encontrado vale true
entonces ya se lo que tengo que hacer en cada caso:
si fin=true
mostrar mensaje "No hay sitio en la tabla para más libros"
si encontrado=true
leer datos del libro y meterlos en la posición posicionlibre
hasta dónde yo comprendo he realizado el siguiente código:
Código (pascal) [Seleccionar]
Procedure alta_libro(biblioteca: Tbiblioteca; longitud: integer);
var
i : integer;
encontrado: boolean;
posicionlibre : real;
indice: real;
fin : boolean;
begin
While(encontrado = false ) AND (fin = false) do
Begin
while (encontrado = false) and (fin = false) do
begin
if bilbioteca[i].alta = false then
encontrado = true;
posicionlibre = indice;
else
if indice <> TAMBIBLIOTECA THEN
indice = indice +1;
else
fin = true;
end;
end;
begin
if fin = true then
writel('No hay sitio en la tabla para los libros');
if encontrado = true then
leer datos del libro y meterlos en la posición libre.
Necesito saber si el código esta bien interpretado y cual me falta es lo último que me queda y la primera vez que hago un procedimiento igual.
un saludo y muchísimas gracias en lo que me podais ayudar.