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

Ayuda! Como convertir un numero a letras!

Estas en el tema de Ayuda! Como convertir un numero a letras! en el foro de C/C++ en Foros del Web. Si alguien me puede ayudar en esto de antemano le agradecere muchisimo! Debo hacer un programa en C++ que permita llenar los espacios en blancos ...
  #1 (permalink)  
Antiguo 12/05/2008, 09:52
 
Fecha de Ingreso: abril-2008
Mensajes: 31
Antigüedad: 16 años
Puntos: 1
Exclamación Ayuda! Como convertir un numero a letras!

Si alguien me puede ayudar en esto de antemano le agradecere muchisimo! Debo hacer un programa en C++ que permita llenar los espacios en blancos de un cheque, nombre,cantidad y fecha (formato mm/dd/aaaa). Debo pedir un número entero cualquiera en el rango entre 1 y 999999 (sin importar los centavos). Esto pues es facil hacerlo y de hecho se hacerlo pero esa cantidad que se entra debo imprimirla tambien en letras. Por ejemplo:

$ 5490
Pay to the order of: Pedro Pérez
The amount of : Cinco mil cuatrocientos noventa dolares

La verdad es que no se como hacer esto se que es con la libreria string y con muchos if pero no tengo idea. Por favor cualquier ayuda gracias!
  #2 (permalink)  
Antiguo 12/05/2008, 11:55
Avatar de Mephisto  
Fecha de Ingreso: enero-2006
Ubicación: Mexico DF
Mensajes: 184
Antigüedad: 18 años, 3 meses
Puntos: 3
Re: Ayuda! Como convertir un numero a letras!

Para alamcenar un numero en una cadena emplea sprintf

http://c.conclase.net/librerias/funcion.php?fun=sprintf

Para extraer de una cadena y guardarla en una variable numerica emplea sscanf

http://c.conclase.net/librerias/funcion.php?fun=sscanf

Ambas funciones sirven para los diferentes tipos de variables hacia y desde una cadena...
__________________
Saludos...

Todos somos sabios, solo que en diferentes disciplinas...
  #3 (permalink)  
Antiguo 12/05/2008, 22:35
 
Fecha de Ingreso: enero-2008
Mensajes: 5
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Ayuda! Como convertir un numero a letras!

Cita:
Iniciado por juarod Ver Mensaje
Si alguien me puede ayudar en esto de antemano le agradecere muchisimo! Debo hacer un programa en C++ que permita llenar los espacios en blancos de un cheque, nombre,cantidad y fecha (formato mm/dd/aaaa). Debo pedir un número entero cualquiera en el rango entre 1 y 999999 (sin importar los centavos). Esto pues es facil hacerlo y de hecho se hacerlo pero esa cantidad que se entra debo imprimirla tambien en letras. Por ejemplo:

$ 5490
Pay to the order of: Pedro Pérez
The amount of : Cinco mil cuatrocientos noventa dolares

La verdad es que no se como hacer esto se que es con la libreria string y con muchos if pero no tengo idea. Por favor cualquier ayuda gracias!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void convierte_trescifras(int N, char *cad)
{
int co,re1,re2,re3;
div_t d;
char uni[8],dec[19],cen[13];
d = div(N,10);
co = d.quot;
re1 = d.rem;
switch(re1)
{
case 0:uni[0] = 0;break;
case 1:strcpy(uni,"uno");break;
case 2:strcpy(uni,"dos");break;
case 3:strcpy(uni,"tres");break;
case 4:strcpy(uni,"cuatro");break;
case 5:strcpy(uni,"cinco");break;
case 6:strcpy(uni,"seis");break;
case 7:strcpy(uni,"siete");break;
case 8:strcpy(uni,"ocho");break;
case 9:strcpy(uni,"nueve");break;
}
d = div(co,10);
co = d.quot;
re2 = d.rem;
switch(re2)
{
case 1:strcpy(dec,"diez");break;
case 2:if(re1) strcpy(dec,"veinti");else strcpy(dec,"veinte");break;
case 3:strcpy(dec,"treinta");break;
case 4:strcpy(dec,"cuarenta");break;
case 5:strcpy(dec,"cincuenta");break;
case 6:strcpy(dec,"sesenta");break;
case 7:strcpy(dec,"setenta");break;
case 8:strcpy(dec,"ochenta");break;
case 9:strcpy(dec,"nuventa");
}
d = div(co,10);
co = d.quot;
re3 = d.rem;
switch(re3)
{
case 0:cen[0] = 0;break;
case 1:if (re1 || re2 ) strcpy(cen,"ciento");else strcpy(cen,"cien");break;
case 2:strcpy(cen,"doscientos");break;
case 3:strcpy(cen,"trescientos");break;
case 4:strcpy(cen,"cuarocientos");break;
case 5:strcpy(cen,"quinientos");break;
case 6:strcpy(cen,"seiscientos");break;
case 7:strcpy(cen,"setecientos");break;
case 8:strcpy(cen,"ochocientos");break;
case 9:strcpy(cen,"nuvecientos");
}
cad = strcat(cad,cen);
// si hay decenas las escribimos
if(re2)
{ //si hay centenas ponemos un espacio para separar
if(re3) cad = strcat(cad," ");
cad = strcat(cad, dec);
}
if(re1)
{
//si hay unidades miramos las decenas. Ejem.
// 635 = "seiscientos treinta y cinco" lleva una "y", o el siguiente
// 625 = "seiscientos veinticinco" no tiene "y"
if( re2 )
{
if( re2 != 2 ) cad = strcat(cad," y ");
}
else
{
//si no hay decenas, pero si centenas ponemos un espacio
if(re3 ) cad = strcat(cad," ");
}
cad = strcat(cad,uni);
}
}

void convierte(long N, char *cad)
{
char res[4][30], cal[4][9];
int i = 0, j;
ldiv_t d;
cal[0][0]=0;
strcpy(cal[1],"mil");
strcpy(cal[2],"millones");
strcpy(cal[3],"mil");
char trescifras[30];
trescifras[0] = 0;
// dividimos en grupos de tres cifras y convertimos
do
{
d = ldiv(N,1000);
convierte_trescifras((int)d.rem,trescifras);
strcpy(res[i++],trescifras);
trescifras[0] = 0;
N = d.quot;
}while(d.quot);
// unimos los resultados de las conversiones parciales poniendo mil, millones etc...
//he probado con varios numeros como 2.132.647.345 y creo que funciona perfectamente.
// el codigo se puede hacer mas fino y elegante, pero menos entendible
for(j = i - 1; j > -1; j--)
{
if( strcmp(res[j],""))
{
cad = strcat(cad,res[j]);
cad = strcat(cad," ");
cad = strcat(cad,cal[j]);
cad = strcat(cad," ");
}
}
}

int main(int argc,char *argv[])
{
char numero[300];
numero[0] = 0;

convierte(atoi(argv[1]), numero);
printf("%s\n",numero);
return (0);
}
  #4 (permalink)  
Antiguo 14/05/2008, 11:06
 
Fecha de Ingreso: abril-2008
Mensajes: 31
Antigüedad: 16 años
Puntos: 1
Re: Ayuda! Como convertir un numero a letras!

Muchiiiisimas GRACIAS a los dos GRACIAS GRACIAS!
  #5 (permalink)  
Antiguo 18/05/2008, 17:43
 
Fecha de Ingreso: abril-2008
Mensajes: 31
Antigüedad: 16 años
Puntos: 1
Respuesta: Ayuda! Como convertir un numero a letras!

Riquei muchas gracias! Pero compile el programa y me da muchos warnings y no me corre. Trate de solucionar el problema pero es que soy muy novato en esto y la verdad es que no se mucho. Yo se que eres muy inteligente y como la mayoria aqui lo son, yo solo busco pasar una clase de la universidad y seguir adelante a lo mejor aprendere en un cercano futuro. Gracias como quiera que sea y si me pueden ayudar GRACIAS nuevamente!
  #6 (permalink)  
Antiguo 21/05/2008, 19:20
 
Fecha de Ingreso: enero-2008
Mensajes: 5
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Ayuda! Como convertir un numero a letras!

Acabo de revisar el script. En la funcion main.c deberia decir "atol" en vez de "atoi" para que funcione con numeros grandes. Por lo demas he vuelto a compilar y ejecutar perfectamente, sin warnigs. Informame de tus warnigs por si te puedo ayudar.
Si me das tu correo te mando el ejecutable.
Saludos
  #7 (permalink)  
Antiguo 08/04/2009, 10:45
 
Fecha de Ingreso: abril-2009
Mensajes: 4
Antigüedad: 15 años
Puntos: 0
Respuesta: Ayuda! Como convertir un numero a letras!

que tal riquei...lei el ultimo mensaje tuyo y lei sobre el atol que sirve para que funcione con numeros grandes... yo tengo un pequeño error de semanti, corre bien my programa y todo pero al momento de darle valores grandes como multiplicar 1988*1988 me da 19984 cosa que deberia de ser 3952144. supongo que debe de utilizar esa funcion.. o no espero me puedas ayudar. he tenido ese pequeño error en todos los programas que he echo..

esperare respuesta de alguien y gracias por la atencion....
  #8 (permalink)  
Antiguo 08/04/2009, 10:49
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Ayuda! Como convertir un numero a letras!

Bienvenido al foro, skiforosdelweb.

Este tema es de hace 1 año.

Es más conveniente que abras un tema nuevo para explicar tu problema, y, si crees conveniente, dejar un enlace a este tema.

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 06:15.