sábado, 14 de septiembre de 2013

Ejemplos de C/C++ sencillos: Transcribir números a letras.


Hola a todos,

Un buen ejercicio para ir practicando nuestras aptitudes de programación es hacer un programa que nos "lea" un número que le pasemos. Es decir, si introducimos el número 99999,99 nos diga: "noventa y nueve mil novecientos noventa y nueve con noventa y nueve céntimos." (Este sería el número más grande a transcribir, tampoco hace falta pasarse :D)

El código os lo dejo a continuación, ya veréis que no es complicado. Si hay algo que no entendáis , decidlo.


#include <iostream>
#include <stdlib.h>
 
 
int main(int argc, char** argv) 
{
//Es un double y no un float para que no la lie con la precisión de los decimales con segun que valores
double valor;
int miles,cientos,unidades,decimales;
char numeros[100][20] = 
{
{""},{"un"},{"dos"},{"tres"},{"cuatro"},{"cinco"},{"seis"},{"siete"},{"ocho"},{"nueve"},
{"diez"},{"once"},{"doce"},{"trece"},{"catorce"},{"quince"},{"dieciseis"},{"dieceisiete"},{"dieciocho"},{"diecinueve"},
{"veinte"},{"veintun"},{"veintidos"},{"veintitres"},{"veinticuatro"},{"veinticinco"},{"veintiseis"},{"veintisiete"},{"veintiocho"},{"veintinueve"},
{"treinta"},{"treinta y uno"},{"treinta y dos"},{"treinta y tres"},{"treinta y cuatro"},{"treinta y cinco"},{"treinta y seis"},{"treinta y siete"},{"treinta y ocho"},{"treinta y nueve"},
{"cuarenta"},{"cuarenta y uno"},{"cuarenta y dos"},{"cuarenta y tres"},{"cuarenta y cuatro"},{"cuarenta y cinco"},{"cuarenta y seis"},{"cuarenta y siete"},{"cuarenta y ocho"},{"cuarenta y nueve"},
{"cincuenta"},{"cincuenta y uno"},{"cincuenta y dos"},{"cincuenta y tres"},{"cincuenta y cuatro"},{"cincuenta y cinco"},{"cincuenta y seis"},{"cincuenta y siete"},{"cincuenta y ocho"},{"cincuenta y nueve"},
{"sesenta"},{"sesenta y uno"},{"sesenta y dos"},{"sesenta y tres"},{"sesenta y cuatro"},{"sesenta y cinco"},{"sesenta y seis"},{"sesenta y siete"},{"sesenta y ocho"},{"sesenta y nueve"},
{"setenta"},{"setenta y uno"},{"setenta y dos"},{"setenta y tres"},{"setenta y cuatro"},{"setenta y cinco"},{"setenta y seis"},{"setenta y siete"},{"setenta y ocho"},{"setenta y nueve"},
{"ochenta"},{"ochenta y uno"},{"ochenta y dos"},{"ochenta y tres"},{"ochenta y cuatro"},{"ochenta y cinco"},{"ochenta y seis"},{"ochenta y siete"},{"ochenta y ocho"},{"ochenta y nueve"},
{"noventa"},{"noventa y uno"},{"noventa y dos"},{"noventa y tres"},{"noventa y cuatro"},{"noventa y cinco"},{"noventa y seis"},{"noventa y siete"},{"noventa y ocho"},{"noventa y nueve"},
};
char centenas[10][20] = 
{
{""},{"ciento"},{"doscientos"},{"trescientos"},{"cuatrocientos"},{"quinientos"},{"seiscientos"},{"sietecientos"},{"ochocientos"},{"novecientos"},
};
std::cout << "Introduzca numero a transcribir: ";
std::cin >> valor;
miles = ((int)valor)/1000;
cientos = (((int)valor)%1000)/100;
unidades = ((int)valor)%100;
decimales = ((int) (valor*100.0))%100 ;
if (miles)
std::cout << numeros[miles] << " mil ";
if (cientos)
std::cout << centenas[cientos] << " ";
if (unidades) 
std::cout << numeros[unidades];
if (decimales)
{
if(miles || cientos || unidades)
{
std::cout << " con ";
}
std::cout << numeros[decimales] << " centimos.";
}
std::cout << std::endl;
system("pause");
return 0;
}




LordPakusBlog

8 comentarios :

  1. hey GRACIAS! me ayudaste mucho, pregunta que funcion tiene esto std:: perdon pero soy principiant, igua y char numeros[100][20] imagino que 100 es la cantidad de palabras por llamarle asi que has escrito, pero y el 20???

    ResponderEliminar
  2. Buenas Dianix (si realmente sientes agradecimiento ya sabes lo que has de hacer... subscribirte al grupo y compartirlo en redes sociales :D :D :D)

    Respecto a tu pregunta...
    std:: . Es complicado de explicar así de golpe y porrazo. Es un tema de C++ en que ciertas funciones de las librerias estan dentro de "paquetes". Todo lo que es entrada y salida de datos está dentro del paquete standar (std). Así lo que hacemos es que use el paquete estandar para salida (std::cout) o para entrada (std::cin)Podríamos ahorrarnos de usarlo poniendo al principio del código un using namespace std; .

    char numeros[100][20]: Es una matriz de caracteres. A efectos prácticos lo puedes entender como un vector de strings de texto. Este vector tendría 100 strings y cada string podría contener hasta 20 letras (igualmente hay maneras mucho mejores de hacer esto en C++ lo que no he querido liar el ejercicio)

    Espero que te haya gustado. Recuerda compartir el blog :D

    ResponderEliminar
    Respuestas
    1. Gracias por la respuesta, y ya tienes mas 1 en google, :D , una pregunta mas.. para continuar con la numeración. Que debo de hacer? o con este código solo puedo llegar a este 99,999.99??

      Eliminar
    2. Está hecho para que funcione solo hasta el 99.999,99. Se puede hacer que funcione hasta el número que quieras, solo se ha de implementar :D.

      Te lo dejo como ejercicio. Si no lo sacas en una semana lo cuelgo yo.

      te hace?

      Eliminar
    3. Disculpa si quiero usar este código con printf cómo sería?
      de antemano muchas gracias

      Eliminar
    4. Es sencillo, aqui te dejo un ejemplo
      ANTES: std::cout << numeros[miles] << " mil ";
      DESPUES: printf("%s mil",numeros[miles]);

      Te atreves tu con el resto?

      Eliminar
  3. Hay un error cada que pongo 10.09 0 100.11 no me lo lee bien

    ResponderEliminar
    Respuestas
    1. Buenas,

      A mi 10.09 me lo lee bien : "diez con nueve centimos"

      Es cierto que 100.11 lo lee mal: "ciento con once centimos"

      Lo arreglaré con la siguiente versión.

      Gracias por la observación.

      Eliminar

Entradas populares