Hola, paso a comentar las cuestiones que habría que tener en cuenta.
- Unload Form no es una forma sintáctica válida en pseudocódigo, en su lugar podrías escribir Finalizar.
- Si se elige la opción 1, habrá que pedir al usuario que introduzca el nombre que él propone, por tanto ten en cuenta la necesidad de dos líneas: una para mostrar un mensaje al usuario y otra para pedir que el usuario introduzca la respuesta y se almacene en una variable, por ejemplo:
Mostrar "Intente averiguar el nombre secreto. Introduzca el nombre: "
Pedir Clave
- Si el usuario acierta el programa debe terminar. Esto debes controlarlo a través del bucle principal mejor que con una instrucción Finalizar.
- Cada instrucción Mientras tiene que tener un cierre (en otra línea del código) con Repetir, de la misma forma que cada Si ... debe llevar su cierre FinSi. Esto independientemente de que exista un SalirMientras, aunque es preferible que no existan SalirMientras porque es una forma de salida anómala de un bucle. Recuerda que el formato es:
Mientras [Condición] Hacer
Instrucción 1
Instrucción 2
.
.
.
Instrucción n
Repetir
- Tienes que probar el pseudocódigo mentalmente. Por ejemplo con tu pseudocódigo voy a probar a entrar al programa y entrar la respuesta correcta. El proceso sería el siguiente: El programa se inicia. Entramos en el bucle Mientras E<>3 ya que E valdrá cero (no establecido). En el bucle se muestra el menú. Se pide al usuario la elección y se almacena en la variable E. Supongamos que elijo la opción 1. Se cumple E=1, ahora Clave = "Albert Einstein". En la siguiente línea comprueba si la clave es Albert Einstein, y como es así, muestra "Has acertado" --- PROCESO ERRÓNEO ¿Por qué muestra has acertado si el usuario no ha introducido una respuesta? --- Con la revisión mental de lo que hace el algoritmo somos capaces de comprobar si funcionará o no, en este caso hemos comprobado que no funcionará bien.
Te doy una estructura de programa para que tú la completes.
1. Inicio
2. RespuestaAcertada = falso;
3. Clave = “Albert Einstein”
4. Mientras (E <> 3 y RespuestaAcertada=falso) Hacer [El bucle se repetirá siempre que E sea distinto de 3 y RespuestaAcertada sea igual a falso. En el caso de que E valga 3 ó de que RespuestaAcertada sea verdadero, el bucle no se repetirá)
Mostrar “Menú: 1. Intentar averiguar nombre secreto - 2. Ver pista - 3. Salir”
Si E = 1 Entonces
[ // Complétalo tú: ¿qué debería ocurrir cuando el usuario elige la opción 1 ]
Si E=2 Entonces
[ // Complétalo tú: ¿qué debería ocurrir cuando el usuario elige la opción 2 ]
FinSi
[Si E valiera 3 ¿hacemos algo o simplemente dejamos que el bucle vaya al comienzo a comprobar si se cumple la condición para repetirse?]
Repetir
[El bucle ha terminado: hay dos posibles motivos para que haya terminado. O bien que el usuario haya acertado la clave, o bien que haya escogido salir. ¿Cómo sabemos qué ha ocurrido? Porque en el bucle tenemos una variable que controla si el usuario ha acertado, la variable RespuestaAcertada. Después de la ejecución del bucle esta variable tendrá un valor según qué haya ocurrido. Ahora tenemos que comprobar qué ha pasado]
Si RespuestaAcertada = verdadero Entonces
[ //Mostrar un mensaje de felicitación]
SiNO
[ // Mostrar un mensaje de despedida, en este caso estamos en la opción de que el usuario eligió la opción 3 para salir del programa ]
FinSi
Fin
Importante: fijarse cómo lo que ha ocurrido en el bucle lo comprobamos después de salir del bucle, no dentro y forzando su finalización de forma no natural.
Inténtalo y responde aquí mismo con la solución que plantees para volver a revisarla, o si no puedes completarlo, comenta dónde están las dudas para irlas resolviendo.
Saludos