Qué significa
Error de escritura en la línea 5
Encontré 'FinAlgoritmo', pero antes falta 'FinSi' para cerrar el 'Si' de la línea 3. Cierra primero el 'Si' con 'FinSi'. Después va 'FinAlgoritmo'.
Los bloques del pseudocódigo se abren y se cierran en orden, como cajas una dentro de otra: la última que abres es la primera que cierras. Si abres un Si dentro del Algoritmo, primero va el FinSi y después el FinAlgoritmo.
Jaguar lee tu programa de arriba hacia abajo. Cuando encuentra un cierre (por ejemplo FinAlgoritmo) mientras todavía hay un bloque abierto adentro (el Si), te avisa: encontré esto, pero antes falta aquello. El mensaje te dice tres cosas: qué cierre encontró, qué cierre falta y en qué línea se abrió el bloque que quedó abierto.
Ejemplos y cómo arreglarlos
Falta el FinSi
El caso más común: un Si que nunca se cerró.
Algoritmo positivo
Leer n
Si n > 0 Entonces
Escribir "Es positivo"
FinAlgoritmoError de escritura en la línea 5
Encontré 'FinAlgoritmo', pero antes falta 'FinSi' para cerrar el 'Si' de la línea 3. Cierra primero el 'Si' con 'FinSi'. Después va 'FinAlgoritmo'.
Se arregla agregando el FinSi donde termina lo que va dentro del Si, antes del FinAlgoritmo:
Algoritmo positivo
Leer n
Si n > 0 Entonces
Escribir "Es positivo"
FinSi
FinAlgoritmo
Un Si dentro de un Para
Con bloques anidados, el error dice qué cierre llegó antes de tiempo. Aquí el FinPara llegó cuando el Si de adentro seguía abierto:
Algoritmo pares
Para i <- 1 Hasta 6 Hacer
Si i MOD 2 = 0 Entonces
Escribir i
FinPara
FinAlgoritmoError de escritura en la línea 5
Encontré 'FinPara', pero antes falta 'FinSi' para cerrar el 'Si' de la línea 3. Cierra primero el 'Si' con 'FinSi'. Después va 'FinPara'.
El FinSi va antes del FinPara, porque el Si se abrió después:
Algoritmo pares
Para i <- 1 Hasta 6 Hacer
Si i MOD 2 = 0 Entonces
Escribir i
FinSi
FinPara
FinAlgoritmo
Repetir sin Hasta Que
El Repetir no se cierra con una palabra «Fin», sino con Hasta Que y una condición:
Algoritmo contrasena
Repetir
Leer clave
FinAlgoritmoError de escritura en la línea 4
Encontré 'FinAlgoritmo', pero antes falta 'Hasta Que' para cerrar el 'Repetir' de la línea 2. Cierra primero el 'Repetir' con 'Hasta Que'. Después va 'FinAlgoritmo'.
Así queda arreglado:
Algoritmo contrasena
Repetir
Leer clave
Hasta Que clave = "jaguar"
Escribir "Correcta"
FinAlgoritmo
Por qué aparece
- Olvidaste escribir el cierre (
FinSi,FinPara,FinMientras,FinSegunoHasta Que). - Escribiste los cierres en el orden equivocado: cerraste primero el bloque de afuera.
- Borraste una línea y con ella se fue un cierre.
- Copiaste un fragmento de otro programa sin su cierre.
Cómo evitarlo
Escribe el cierre en cuanto abras el bloque, y luego rellena lo de adentro: primero Si … Entonces y FinSi, después lo que va en medio. Y cuida la sangría: si cada cierre queda a la misma altura que su apertura, un cierre que falta se nota a simple vista.
En Jaguar, la vista de diagrama o de bloques también ayuda: mientras falta un cierre, no se puede dibujar el programa, y en cuanto lo pones aparece completo.
Preguntas frecuentes
¿Por qué dice que falta FinSi si el error está en la línea del FinAlgoritmo?
Porque ahí es donde Jaguar se da cuenta. Al llegar a FinAlgoritmo, el Si todavía estaba abierto. El mensaje te dice en qué línea empezó el Si, para que sepas cuál quedó sin cerrar.
¿Se puede escribir Fin Si con espacio?
Sí. Jaguar acepta FinSi y Fin Si, igual que FinPara y Fin Para. Lo que no puede faltar es el cierre.
¿Este error sale también en PSeInt?
PSeInt avisa de este problema con otro mensaje, pero la causa es la misma: un bloque sin cerrar. El código arreglado de esta página funciona igual en PSeInt.