[ Foro de Pseudocódigo ]

Dígitos en un numero

15-Jun-2018 00:17
Invitado (Danilo)
3 Respuestas

Hola, estoy empezando a conocer acerca del uso del PSeINT y he intentado escribir el siguiente algoritmo, pero desconozco el motivo por el cual a la pregunta: "Tiene un numero de dígitos igual a ".

El valor que me arroja (indistinto del numero que escriba), es; "Tiene un numero de dígitos igual a 12"

Alguna sugerencia?.

Saludos.

PS: El algoritmo...

 
var
entero: n1, cd
real: n
inicio
leer (n)
n1 <- n
cd <-0
mientras (n1 > 0) hacer
n1 <-n1 / 10
cd <-cd + 1
fin_mientras
escribir ("El número ingresado es", n)
escribir ("Tiene un número de dígitos igual a", cd)
fin
 



17-Jun-2018 00:45
Nacho Cabanes (+37)

La lógica es correcta, pero si n es un número real, tardará en llegar a ser 0, porque si vale 10 pasará a ser 1, luego 0.1, luego 0.01, luego 0.001 y así sucesivamente hasta que la precisión de PseInt haga que se considere como 0.

Usas una sintaxis que no es (para mí) la habitual, pero siempre puedes forzar a que se trate como entero si lo redondeas, por ejemplo así:

 
Algoritmo Digitos
 
	leer n
	n1 <- n
	cd <-0
	mientras (redon(n1) > 0) hacer
		escribir n1
		n1 <- n1 / 10
		cd <- cd + 1
	finmientras
 
	escribir "El número ingresado es ", n
	escribir "Tiene un número de dígitos igual a ", cd
 
FinAlgoritmo
 


 
(Como verás, muchas veces, el simple hecho de añadir un "Escribir" adicional ayuda mucho a rastrear los errores).


18-Jun-2018 21:50
Invitado (Danilo)

Hola Nacho, muchas gracias por la ayuda.

Claramente el ejercicio tiene mala sintaxis. De hecho con lo poco que se, no me salia desde PSeINT, ya que para la división de un numero entero se necesita (en el programa) del comando trunc.

 
Definir n, c, n1 Como Entero;
Escribir "Digite su número";
Leer n;
c<- 0;
n1<- n;
 
Mientras n1>0 Hacer
n1<- trunc (n1/10);
c<- c+1
FinMientras
 
escribir "el numero ingresado es ", n;
escribir "la cantidad de digitos que posee es ",c;
 
 



Como veras, un compañero del curso lo hizo como sale mas arriba, aunque no entiendo el porque se tuvo que definir también el n1 como entero, siendo que ya el n tenia esa definición.

Tampoco entiendo el porque desde esa premisa, no se trabaja solo con n como entero y se utiliza dentro del comando "mientras"...

Un saludo.


28-Jun-2018 23:53
Nacho Cabanes (+37)

Guarda el valor inicial de n para poderlo mostrar al final de la ejecución. Por eso emplea una variable auxiliar n1.

La operación de ir dividiendo para contar cifras es destructiva.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)