Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Felipe_Henriquez en 17 Agosto 2011, 00:40 am



Título: Tengo una duda de como determinar los digitos de un número
Publicado por: Felipe_Henriquez en 17 Agosto 2011, 00:40 am
Buenas a los que leen este post, y como dice el asunto del post. Tengo una duda con respecto a como determinar una cantidad x de dígitos de cualquier numero, no sé como hacer un programa que lea los dígitos de cualquier número.
 
 Ejemplo supongamos que escribo en el programa el numero 11231415 y que me diga cuantos dígitos tiene, pasa que estudiando el libro de programación (C/C++ Java Deitel y Deitel) , salen muchos ejercicios de esa forma. Sin ir mas allá tengo un problema de transformar números binarios a decimales, lo podría hacer perfectamente, si el enunciado del problema digiera un número de 6 dígitos o un número de dígitos estándar, pero pasa que el enunciado del problema es para un número de cualquier longitud, no sé si me explico bien.

 Voy en el capítulo 3 y hasta el momento tengo las siguientes herramientas, o lo visto en el libro hasta ahora, if else, y bucle while, sólo puedo usar esas dos herramientas. Sí me pudieran explicar como contar los dígitos de un número cualquiera introducido, estaría muy agradecido.

 PD: He buscado en google pero no aparece como determinar los dígitos de un número cualquiera solo con estas dos herramientas  y es lo qué se me pide en el libro y no sé como hacerlo.

 Un cordial Saludo Gracias.
 


Título: Re: Tengo una duda de como determinar los digitos de un número
Publicado por: тαптяα en 17 Agosto 2011, 00:51 am
http://www.cplusplus.com/reference/clibrary/cstring/strlen/


Título: Re: Tengo una duda de como determinar los digitos de un número
Publicado por: Alien-Z en 17 Agosto 2011, 00:59 am
Me interesa bastante el problema que has planteado para practicar, intentaré resolverlo y si lo consigo lo posteo; asi que si no lo he entendido mal quieres leer la cantidad de números que introduce el usuario usando solo "if else" y "while".

Saludos.


Título: Re: Tengo una duda de como determinar los digitos de un número
Publicado por: Felipe_Henriquez en 17 Agosto 2011, 01:10 am
ハセヲ Muchas gracias por darme el link satisface en cierta manera el problema, pero aun no llegaba a funciones oficialmente en el libro si que ni idea tenia de esta función.

 Allen-Z quería saber como saber los dígitos longitud de caracteres de un número cualquiera solo con if else, while, por ejemplo si introduzco 40.000 me diga 5 dígitos, o introducir 12.000.000 y me diga 8 dígitos y nada de arreglos ni punteros ni funciones extras solo con <stdio.h> . Sólo con esas cosas, pero  if else, while, <stdio.h> por lo que me parece es muy difícil.
 Gracias Allen-Z por darte la molestia de contestar e intentar realizar el ejercicio.
Un Abrazo! Saludos!


Título: Re: Tengo una duda de como determinar los digitos de un número
Publicado por: тαптяα en 17 Agosto 2011, 01:18 am
ハセヲ Muchas gracias por darme el link satisface en cierta manera el problema, pero aun no llegaba a funciones oficialmente en el libro si que ni idea tenia de esta función.

 Allen-Z quería saber como saber los dígitos longitud de caracteres de un número cualquiera solo con if else, while, por ejemplo si introduzco 40.000 me diga 5 dígitos, o introducir 12.000.000 y me diga 8 dígitos y nada de arreglos ni punteros ni funciones extras solo con <stdio.h> . Sólo con esas cosas, pero  if else, while, <stdio.h> por lo que me parece es muy difícil.
 Gracias Allen-Z por darte la molestia de contestar e intentar realizar el ejercicio.
Un Abrazo! Saludos!
De nada.


Título: Re: Tengo una duda de como determinar los digitos de un número
Publicado por: Alien-Z en 17 Agosto 2011, 01:23 am
Citar
No creo que con solo ciclos sin nada de funciones, puedas determinar la longitud de la cadena.

Por lo que ha comentado es un problema que le plantea un libro, asi que lo más seguro es que tenga solución.

Citar
Allen-Z quería saber como saber los dígitos longitud de caracteres de un número cualquiera solo con if else, while, por ejemplo si introduzco 40.000 me diga 5 dígitos, o introducir 12.000.000 y me diga 8 dígitos y nada de arreglos ni punteros ni funciones extras solo con <stdio.h> . Sólo con esas cosas, pero  if else, while, <stdio.h> por lo que me parece es muy difícil.
 Gracias Allen-Z por darte la molestia de contestar e intentar realizar el ejercicio.
Un Abrazo! Saludos!

No es molestia para nada, yo también entré en el mundo de la programación hace poco y me interesa bastante intentar resolverlo para poner en práctica lo que he aprendido (aunque yo voy terminando con las clases y los objetos). Lo que hace complicado el problema es que no hay una cifra máxima, igual puede tener un dígito que 20, y tan solo puedes usar "if else" y "while", asi que si consigo darle solución lo comento.

Saludos!


Título: Re: Tengo una duda de como determinar los digitos de un número
Publicado por: Felipe_Henriquez en 17 Agosto 2011, 01:38 am
Gracias por responder Allen :D si fuera un numero determinado de dígitos no tengo problemas en hacerlo pero con no se sabe de cuantos dígitos introduce el usuario ahí esta el pero Gracias por el esfuerzo

Saludo!


Título: Re: Tengo una duda de como determinar los digitos de un número
Publicado por: criskapunk en 17 Agosto 2011, 01:43 am
Si lo que querés es convertir un número de decimal a binario no hace falta saber la cantidad de dígitos, porque el mecanismo es siempre el mismo :P

Por ejemplo, tomamos el número 133.
Hay que ir haciendo divisiones enteras sucesivas por 2 y guardar el resto. Entonces:

133/2 = 66 Resto 1
66/2   = 33 Resto 0
33/2   = 16 Resto 1
16/2   = 8 Resto 0
8/2     = 4 Resto 0
4/2     = 2 Resto 0
2/2     = 1 Resto 0
1/2     = 0 Resto 1

Fijate el último caso. Tenés que ir haciendo la división hasta que la división entre un número y 2 sea cero. Ese va a ser el último resto que tenés que guardar (Esa sería la condición de corte de un bucle while, por ejemplo).

Ahora sólo queda leer el número de abajo hacia arriba, quedando 10000101 = 133.

Te toca traducirlo a C.

Igualmente estoy tratando de resolver lo de obtener la cantidad de dígitos de un número sin usar funciones. Esta bueno el problema ;D

Un saludo.

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

 :¬¬


Título: Re: Tengo una duda de como determinar los digitos de un número
Publicado por: bigfu en 17 Agosto 2011, 01:46 am
Si lo que quieres es saber el número de dígitos que tiene un número cualquiera, lo único que tienes que hacer es ir dividiendo por 10 y contar las divisiones hasta que el cociente de 0.

Ejemplo: Num = 121, contador = 0

121/10 = 12 --> contador = 1
12/10 = 1 --> contador = 2
1/10 = 0 --> contador = 3
y ahi finaliza el bucle


Título: Re: Tengo una duda de como determinar los digitos de un número
Publicado por: Valkyr en 17 Agosto 2011, 02:00 am
También podrías hacer algo así:

Código
  1. #include<stdio.h>
  2. #include<ctype.h>
  3.  
  4. int main(void){
  5. int a, digitos;
  6. digitos = 0;
  7. a = getchar();
  8. while(isdigit((char)a)){
  9. digitos++;
  10. a = getchar();
  11. }
  12. printf("%d", digitos);
  13. return 0;
  14. }

aunque como dices que no puedes hacer uso de funciones pues podrías hacer también algo así:

Código
  1. #include<stdio.h>
  2.  
  3. int main(void){
  4. int a, digitos;
  5. digitos = 0;
  6. a = getchar();
  7. while((char)a != '\n'){
  8. digitos++;
  9. a = getchar();
  10. }
  11. printf("%d digitos", digitos);
  12. }

pero tendrías que comprobar dentro del bucle While que lo que has leido es un número, si no se colaría xD.

Saludos.


Título: Re: Tengo una duda de como determinar los digitos de un número
Publicado por: тαптяα en 17 Agosto 2011, 02:04 am
Código:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num,contador=1;
    printf("Introduce un numero: ");
scanf("%i",&num);
while(num/10 !=0){
    num=num/10;
    contador++;
}
printf("Longitud: %i",contador);
return 0;

}


Título: Re: Tengo una duda de como determinar los digitos de un número
Publicado por: Alien-Z en 17 Agosto 2011, 02:11 am
Buah, yo calentándome la cabeza y bastaba con una simple división  :xD

Saludos.


Título: Re: Tengo una duda de como determinar los digitos de un número
Publicado por: Felipe_Henriquez en 17 Agosto 2011, 03:44 am
:D Gracias a todos los grosos que contestaron Gracias!!!! de verdad.... :D estos pives de Deitel tienen buenisimos ejercicios por sección, un abrazo a todos los que contestaron y me ayudaron... no encontraba como dar con la solución. Y si alguien pilla la solución contar el número de dígitos sin funciones ni arreglos, que lo pueda postear. Un abrazo a todos!!!.


Título: Re: Tengo una duda de como determinar los digitos de un número
Publicado por: rir3760 en 19 Agosto 2011, 04:22 am
La solucion exacta depende, principalmente, de los requisitos de validacion del algoritmo.

Por ejemplo si se espera, de facto, que la entrada sea valida consistiendo de un numero sin signo y posiblemente con decimales basta con:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main (void)
  5. {
  6.   int ch;
  7.   int num_digitos;
  8.  
  9.   num_digitos = 0;
  10.   while ((ch = getchar()) >= '0' && ch <= '9' || ch == '.')
  11.      num_digitos++;
  12.  
  13.   printf("Numero de digitos: %d\n", num_digitos);
  14.  
  15.   return EXIT_SUCCESS;
  16. }

Pero si se requiere de una validacion mas solida lo mejor es crear una pequeña maquina de estado.

Un saludo