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

[Ayuda]Monto Escrito

Estas en el tema de [Ayuda]Monto Escrito en el foro de C/C++ en Foros del Web. Saludos chic@s, no suelo crear este tipo de topics pero me vi en la necesidad de buscar ayuda mas avanzada ya que es algo importante ...
  #1 (permalink)  
Antiguo 02/12/2012, 23:27
 
Fecha de Ingreso: diciembre-2012
Ubicación: Costeelation
Mensajes: 2
Antigüedad: 11 años, 4 meses
Puntos: 0
Información [Ayuda]Monto Escrito

Saludos chic@s, no suelo crear este tipo de topics pero me vi en la necesidad de buscar ayuda mas avanzada ya que es algo importante para mi este trabajo. La cuestion es que debo realizar un programa muy conocido por algunos, llamado «Monto Escrito», lo llevo casi terminado, solo tengo un problema, el limite, actualmente lo tengo en mil millones,(1.000'000.000) pero tengo un problema, y es que cuando ingreso esa cantidad el programa muere :( , es decir solo llega hasta, 999999999, pero quisiera tambien poder ingresar el numero limite, alguien tiene idea de que puede ser? les adjunto mi codigo
Código:
#include <stdio.h>
#include<iostream>

using namespace std;

int main()
{
	int num[10];
	int i,j=1,p;
	cout<<"Introduce un numero \n"<<endl;
	for(i=0;(num[i]=getchar()) != '\n';i++);

		if(i>6&&i<=9) 
			p=6;
		else 
			if(i>3&&i<=6)
			  {
			  p=3; 
			  j++; 
			  }
			else 
				if(i>0&&i<=3)
				{ 
				p=0; 
				j+=2; 
				}
	for(j=j;j<=3;j++)
	{
	/*centenas*/
	if((i==3 || i==6)||(num[0]!='\0' || num[3]!='\0' || num[6]!='\0') )
	switch(num[i-(3+p)])
	{
	case'1':if((num[(i-(3+p))+1]!='0') || (num[(i-(3+p))+2]!='0'))
	cout<<"ciento "<<endl;
	else
	cout<<"cien "<<endl;
	break;
	case'2':cout<<"doscientos "<<endl;break;
	case'3':cout<<"trescientos "<<endl;break;
	case'4':cout<<"cuatrocientos "<<endl;break;
	case'5':cout<<"quinientos "<<endl;break;
	case'6':cout<<"seiscientos "<<endl;break;
	case'7':cout<<"setecientos "<<endl;break;
	case'8':cout<<"ochocientos "<<endl;break;
	case'9':cout<<"novecientos "<<endl;break;
	}
	/*decenas*/
	
	switch(num[i-(p+2)])
	{
	case'1':switch(num[(i-(p+2))+1])
	{
	case'0':cout<<"diez "<<endl;break;
	case'1':cout<<"once "<<endl;break;
	case'2':cout<<"doce "<<endl;break;
	case'3':cout<<"trece "<<endl;break;
	case'4':cout<<"catorce "<<endl;break;
	case'5':cout<<"quince "<<endl;break;
	case'6':cout<<"diesciseis "<<endl;break;
	case'7':cout<<"diescisiete "<<endl;break;
	case'8':cout<<"diesciocho "<<endl;break;
	case'9':cout<<"diescinueve "<<endl;break;
	}break;
	case'2':if(num[(i-(p+2))+1]=='0') cout<<"veinte "<<endl;
	else cout<<"veinti"<<endl; break;
	case'3':cout<<"treinta "<<endl; if(num[(i-1)-p]!='0') cout<<"y "<<endl; break;
	case'4':cout<<"cuarenta "<<endl; if(num[(i-1)-p]!='0') cout<<"y "<<endl; break;
	case'5':cout<<"cincuenta "<<endl; if(num[(i-1)-p]!='0') cout<<"y "<<endl; break;
	case'6':cout<<"secenta "<<endl; if(num[(i-1)-p]!='0') cout<<"y "<<endl; break;
	case'7':cout<<"setenta "<<endl; if(num[(i-1)-p]!='0') cout<<"y "<<endl; break;
	case'8':cout<<"ochenta "<<endl; if(num[(i-1)-p]!='0') cout<<"y "<<endl; break;
	case'9':cout<<"noventa "<<endl; if(num[(i-1)-p]!='0') cout<<"y "<<endl; break;
	}
/*unidades*/
	if(num[i-(p+2)]!='1')
	switch(num[(i-1)-p])
	{
	case'1':if(p>=3) cout<<"un "<<endl;
	else cout<<"uno"<<endl;
	break;
	case'2':cout<<"dos "<<endl;break;
	case'3':cout<<"tres "<<endl;break;
	case'4':cout<<"cuatro "<<endl;break;
	case'5':cout<<"cinco "<<endl;break;
	case'6':cout<<"seis "<<endl;break;
	case'7':cout<<"siete "<<endl;break;
	case'8':cout<<"ocho "<<endl;break;
	case'9':cout<<"nueve "<<endl;break;
	}
	if(p==6 && num[0]=='0' && p==6 && num[1]=='0' && p==6 && num[2]=='0');
	else if(p==6 && num[0]=='1' && i==7) cout<<"millon "<<endl;
	else if(p==6) cout<<"millones "<<endl;
	if(p==3 && num[p]!='0'|| p==3 && num[p+1]!='0' || p==3 && num[p+2]!='0')cout<<"mil "<<endl;
	p-=3;
	}
	getchar();
	return 0;
	}
Muchisimas gracias a todos.
  #2 (permalink)  
Antiguo 03/12/2012, 03:11
 
Fecha de Ingreso: abril-2011
Mensajes: 224
Antigüedad: 13 años
Puntos: 8
Respuesta: [Ayuda]Monto Escrito

Un consejo, no mezcles C++ con C, y si lo hicieras, no incluyas <stdio.h> sino <cstdio>, que esla forma correcta.

Luego, como otro consejo, podrías aceptar la entrada completa del número (sin usar getchar), usando sólo cin de iostream, y luego dividir el número en sus dígitos en variables independientes, así sería más fácil poner las condiciones para imprimir mil millones.

Espero haberme explicado bien, saludos!
  #3 (permalink)  
Antiguo 03/12/2012, 23:38
 
Fecha de Ingreso: diciembre-2012
Ubicación: Costeelation
Mensajes: 2
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: [Ayuda]Monto Escrito

Gracias por la observacion de la libreria, lo otro no te entendi muy bien, quieres decir que lo quite del ciclo y hacer una salida estandar, podiras mostrarme esa parte del codigo como tu lo dices? muchas gracias

Etiquetas: escrito, int, 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 10:25.