Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Pasar de 1 a "uno"

Estas en el tema de Pasar de 1 a "uno" en el foro de C/C++ en Foros del Web. Hola gente como podria hacer para que mi programa lea un numero y devuelva su expresion por numero, por ejemplo que lea 15 y devuelva ...
  #1 (permalink)  
Antiguo 27/03/2014, 18:00
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 2 meses
Puntos: 0
Pasar de 1 a "uno"

Hola gente como podria hacer para que mi programa lea un numero y devuelva su expresion por numero, por ejemplo que lea 15 y devuelva "uno cinco" con funciones de c. Yo lo logre hacer asi nomas pero no tengo idea de las funciones de c :/
  #2 (permalink)  
Antiguo 28/03/2014, 06:09
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Pasar de 1 a "uno"

Hay un 'algoritmo' para calcular cada posicion (unidad, decena, centena, etc), es este:

Código C:
Ver original
  1. unidad = (numero % 10);
  2. decena = ((numero % 100) - (numero % 10)) / 10;
  3. centena = ((numero % 1000) - (numero % 100)) / 100;
  4. etc...

Ahora ya sabes como recuperar cada posicion. Ademas tambien sabes que los guarismos de cada posicion solo van del 0 al 9, entonces te creas una lista de textos ordenados segun los valores de los numeros:

Código C:
Ver original
  1. static char *TEXTOS[6] = {
  2.     "cero", "uno", "dos", "tres", "cuatro", "cinco"
  3. };

Pongo solo 6, tienes que completarlo hastra el nueve que seran los 10 textos. Ahora serializas el 'algoritmo' que te comente arriba y recuperas cada parte:

Código C:
Ver original
  1. int numero = 15423;
  2. int q, ciclo, cpow, ppow;
  3.  
  4. ciclo = 0;
  5. while(1) {
  6.  
  7.     //calculas las potencias para el algoritmo
  8.     cpow = (int)ceil(pow(10, ciclo+1));
  9.     if((ppow = (int)ceil(pow(10, ciclo))) < 10) {
  10.         ppow = 0;
  11.     }
  12.  
  13.     //unidades
  14.     q = numero % cpow;
  15.  
  16.     //decenas, centenas, etc
  17.     if(ppow > 0) {
  18.         q -= numero % ppow;
  19.         q /= ppow;
  20.     }
  21.  
  22.     //final del numero
  23.     if(!q) break;
  24.  
  25.     //recuperas el numero de la lista de textos
  26.     printf("%s, ", TEXTOS[q]);
  27.  
  28.     ciclo++;
  29. }

A ver si te sirve de ayuda
Saludos
vosk
  #3 (permalink)  
Antiguo 29/03/2014, 19:10
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Pasar de 1 a "uno"

No entiendo muy bien el codigo, pero voy a probarlo :P, gracias!
  #4 (permalink)  
Antiguo 30/03/2014, 03:34
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Pasar de 1 a "uno"

Ok, que es lo que no entiendes? No puedes simplemente copiar y pegar, tienes que entender como y porque funciona.

Si te sirve de consuelo hay otro modelo: consiste en volcar el numero a textual y recorrer por caracteres, para cada caracter transformar otra vez a entero y buscar su posicion en la lista de numeros que definí en el otro ejemplo:

Código C:
Ver original
  1. char texto[100] = '\0';
  2. int q, w, numero = 1234;
  3.  
  4. sprintf(texto, "%d", numero);
  5. for(q = 0; q < strlen(texto); q++) {
  6.     w = atol(texto[q]);
  7.     printf("%s, ", TEXTOS[w]);
  8. }

En el primer ciclo cuando q = 0 el texto[q] es '1', entonces conviertes a entero y guardas en w, ahora w vale 1, buscas en la lista TEXTOS[1] y printas "uno", y asi sucesivamente.

Saludos
vosk

Etiquetas: funcion, numero, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:25.