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