A ver si puedo ayudarte, porque Pseint apenas lo conozco. Cuando yo estudié programación, hace ya siglos, esto no existía y el pseudocódigo lo escribíamos con papel y lápiz. Lo compilábamos en nuestro cerebro xD, y nunca lo veíamos ejecutarse realmente.
Para intentar detectar qué está ocurriendo, puedes añadir líneas de código que te ayuden a saber por donde está discurriendo realmente la ejecución del programa.
En Pseint tienes un modo ejecución paso a paso que puede ayudar a depurar el programa, pero muchas veces es más rápido e intuitivo añadir temporalmente una línea de código con algún mensaje en pantalla que te indique por donde está fluyendo el código.
Por ejemplo, se supone que si introduces 4 cifras, el programa debería fluir por la "alternativa" que hay después del primer SiNo, ¿verdad?
Pues vamos a comprobar si realmente eso está ocurriendo, añadiendo un mensaje en pantalla cuando el código discurra por esa alternativa
Si (N >= 1 y n <= 99999) Entonces
N4 <- N MOD 10
N <- trunc(N/10)
N3 <- N MOD 10
N <- trunc(N/10)
N2 <- N MOD 10
N <- trunc(N/10)
N1 <- N MOD 10
N <- trunc(N/10)
N0 <- N MOD 10
N <- trunc(N/10)
Si (N1 > 0) y (N2 > 0) y (N3 > 0) y (N4 > 0) Entonces
NC <- N4 * 10000 + N3 * 1000 + N2 * 100 + N1 * 10 + N0
SiNo
Si (N2 > 0) y (N3 > 0) y (N4 > 0) Entonces
Escribir "4 cifras introducidas"
NC <- N4 * 1000 + N3 * 100 + N2 * 10 + N1
SiNo
Si (N3 > 0) y (N4 > 0) Entonces
NC <- N4 * 100 + N3 * 10 + N2
SiNo
Si (N4 > 0) Entonces
NC <- N4 * 10 + N3
SiNo
NC <- N4
FinSi
FinSi
FinSi
FinSi
Si lo ejecutamos, oh sorpresa, ese mensaje no aparece en pantalla. El programa no está discurriendo por donde esperábamos.
A ver, pongamos mensajes similares en todas las alternativas posibles.
Si (N1 > 0) y (N2 > 0) y (N3 > 0) y (N4 > 0) Entonces
Escribir "5 cifras introducidas"
NC <- N4 * 10000 + N3 * 1000 + N2 * 100 + N1 * 10 + N0
SiNo
Si (N2 > 0) y (N3 > 0) y (N4 > 0) Entonces
Escribir "4 cifras introducidas"
NC <- N4 * 1000 + N3 * 100 + N2 * 10 + N1
SiNo
Si (N3 > 0) y (N4 > 0) Entonces
Escribir "3 cifras introducidas"
NC <- N4 * 100 + N3 * 10 + N2
SiNo
Si (N4 > 0) Entonces
Escribir "2 cifras introducidas"
NC <- N4 * 10 + N3
SiNo
Escribir "1 cifra introducida"
NC <- N4
FinSi
FinSi
FinSi
FinSi
Si probamos distintas longitudes de cifra, vemos algo curiosos.
Si el números es de 5 o de 4 cifras, el código va por el mismo sitio.
Si es de 3 cifras, lo identifica como si fueran 4 cifras.
Si es 2 cifras, lo identifica como si fuera 3
Si es de 1, para el programa son 2...
Algo ocurre que hace que no se evalúe correctamente la longitud de cifras.
Y seguramente es que no estamos haciendo las preguntas correctas.
Llama un poco la atención el que para preguntar si es un número de 5 cifras, solo estamos evaluando 4 variables (N1,N2,N3,N4).
Y para preguntar si es de 4 cifras, solo evaluamos 3 (N2,N3,N4)
Para preguntar si es de 3 cifras, solo se evalúan 2 (N3,N4)
Y para saber si es de 2, solo se evalúa N4.
Quizás deberíamos preguntar por el mismo número de variables que las cifras que nos interesan.
Para preguntar por 5 cifras, vamos a incluir a N0 -> (
N0,N1,N2,N3,N4).
Para preguntar por 4 cifras, incluyamos a N1 -> (
N1,N2,N3,N4).
Y así sucesivamente...
Si (N0 > 0) y (N1 > 0) y (N2 > 0) y (N3 > 0) y (N4 > 0) Entonces
Escribir "5 cifras introducidas"
NC <- N4 * 10000 + N3 * 1000 + N2 * 100 + N1 * 10 + N0
SiNo
Si (N1 > 0) y (N2 > 0) y (N3 > 0) y (N4 > 0) Entonces
Escribir "4 cifras introducidas"
NC <- N4 * 1000 + N3 * 100 + N2 * 10 + N1
SiNo
Si (N2 > 0) y (N3 > 0) y (N4 > 0) Entonces
Escribir "3 cifras introducidas"
NC <- N4 * 100 + N3 * 10 + N2
SiNo
Si (N3 > 0) y (N4 > 0) Entonces
Escribir "2 cifras introducidas"
NC <- N4 * 10 + N3
SiNo
Escribir "1 cifra introducida"
NC <- N4
FinSi
FinSi
FinSi
FinSi
Si lo ejecutamos, veremos que
ahora sí identifica correctamente la longitud de cifras

Así que este era el problema, ya puedes quitar los mensajes en pantalla que hemos introducido, o también puedes dejarlos si quieres.
Por cierto, para preguntar si es de 1 cifra, se podría preguntar por N4 para continuar con la misma lógica que se ha aplicado con las otras alternativas, pero no es necesario.
Al principio de todo ya se ha preguntado si N es mayor que 0. Y si esto se cumple, ya está garantizado que N4 también será mayor que 0. Así que no hace falta preguntarlo, sería redundante.
Se podría quitar de también N4 de las otras preguntas alternativas y funcionaría igual.
Sin embargo, el programa no es perfecto, hay problemas con la cifra 0
Si yo introduzco 01234, dice que son 4 cifras y publica 4321.
Esto es totalmente correcto, sin problema aquí.
Pero, si introducimos por ejemplo 12340, aquí vienen los problemas.
Ese es un número de 5 cifras, no hay duda, pero ese 0 confunde al programa y la cosa no va bien
*** Ejecución Iniciada. ***
ESCRIBE LOS NUMEROS QUE QUIERES INVERTIR
> 12340
1 cifra introducida
EL NUMERO EN INVERSO ES 0
*** Ejecución Finalizada. ***
Si quitamos (N4 >0) de las preguntas de los
Si Entonces, mejora un poco el resultado, pero sigue sin ser correcto
*** Ejecución Iniciada. ***
ESCRIBE LOS NUMEROS QUE QUIERES INVERTIR
> 12340
5 cifras introducidas
EL NUMERO EN INVERSO ES 4321
*** Ejecución Finalizada. ***
Y de todos modos, si el 0 estuviera en medio, la cosa va a peor
*** Ejecución Iniciada. ***
ESCRIBE LOS NUMEROS QUE QUIERES INVERTIR
> 12034
2 cifras introducidas
EL NUMERO EN INVERSO ES 43
*** Ejecución Finalizada. ***
Bien, este problema creo que no tiene solución, si seguimos intentando solucionarlo creando un nuevo valor entero con todas las cifras de forma invertida, que es lo que estamos haciendo en la variable
NC.
He probado varias formas de hacerlo y ninguna termina de funcionar bien del todo.
Y es porque no hay forma de insertar un 0 en mitad de un valor entero de forma sencilla.
Es una limitación por la forma en que funcionan los valores enteros.
Podría hacerse tal vez de alguna forma supercomplicada, con montones de
Si Entonces anidados, para decidir si una cifra conviene multiplicarla por 10, o por 100, o por 1000.... para añadir un cero extra en el valor entero.
Si cambiamos el enfoque y no intentamos crear un nuevo valor entero, encontraremos formas más sencillas de resolverlo.
Una sería tratar las cifras como caracteres y concatenarlas en una cadena con la función CONCATENAR()
Pero posiblemente aún no la conozcas ni te dejen usarla.
Otra posibilidad es ir escribiendo en pantalla directamente cada cifra que conseguimos al hacer la operación
N MOD 10Para que salgan juntas en la misma línea, podemos usar la instrucción
Escribir Sin Saltar (que supongo si podrás usarla...)
Cada vez que escribimos una cifra, hacemos el truncado y comprobamos
si N sigue siendo mayor que 0.Si esto es cierto, es que todavía podemos obtener cifras, por lo que de nuevo haremos MOD 10, Escribir sin Saltar y el truncado.
Si no fuese cierto, es decir, si N ha alcanzado el valor 0, significa que ya no quedan cifras por obtener del valor introducido, así que no haremos nada y el programa terminará.
Este sería el código.
Fíjate que de esta manera, solo necesitamos dos valores enteros para resolverlo.
Algoritmo NUMEROS_EN_INVERSOS
//INGRESE UN NUMERO DE CINCO CIFRAS DE TALK FORMA QUE SE
//REPORTE EN FORMA INVERTIDA
//EJEMPLO: 12345 REPORTE: 54321
Definir N, cifra Como Entero
ESCRIBIR "ESCRIBE LOS NUMEROS QUE QUIERES INVERTIR"
LEER N
Si (N >= 1 y N <= 99999) Entonces
cifra <- N MOD 10
Escribir Sin Saltar cifra
N <- trunc(N/10)
Si (N > 0)
cifra <- N MOD 10
Escribir Sin Saltar cifra
N <- trunc(N/10)
FinSi
Si (N > 0)
cifra <- N MOD 10
Escribir Sin Saltar cifra
N <- trunc(N/10)
FinSi
Si (N > 0)
cifra <- N MOD 10
Escribir Sin Saltar cifra
N <- trunc(N/10)
FinSi
Si (N > 0)
cifra <- N MOD 10
Escribir Sin Saltar cifra
FinSi
SiNO
Escribir "NO SE PUEDE INVERTIR ESE NUMERO "
FinSi
Escribir " "
FinAlgoritmo
Esta vez si lo ejecutamos, veremos que podemos invertir sin problema valores que tengan alguna cifra 0 al final o en medio.
Incluso si tienen varias cifras 0
*** Ejecución Iniciada. ***
ESCRIBE LOS NUMEROS QUE QUIERES INVERTIR
> 10203
30201
*** Ejecución Finalizada. ***
De todos modos, tu solución una vez corregida, está muy bien.
Solo tendría el problema de las cifras 0, pero como he dicho, es inevitable si intentamos solucionarlo construyendo un nuevo entero.
Un saludo.