viernes, 25 de mayo de 2012

Impresión de un Cheque en C

El problema principal en este programa consiste en recibir un número entero e imprimir su valor en palabras. Por ejemplo, si el monto por el cual ha de pagarse el cheque es de 567, se debe de escribir el número y aparte, entre paréntesis, escribir (Quinientos Sesenta y Siete). Tal vez lo más interesante, en cuanto a la sintaxis, sea el uso de la función strcpy, la cual toma como argumentos un par de cadenas y asigna el contenido de la segunda en la primera. En el archivo aparece el algoritmo en seudocódigo como comentario, este es fácil de entender y escribir en cualquier otro lenguaje de programación. Este programa sólo funciona con números menores o iguales a 10000, pero es relativamente fácil modificarlo para poder trabajar con cifras más grandes.
Éste problema aparece en el libro de Deitel, pero fue uno de los lectores de este blog quien me pidió por correo el programa, enviándome un código bastante confuso, el cual yo corregí y modifiqué; sin embargo, la idea de usar la función strcopy es de él. Le agradezco desde aquí.
Una ejecución del programa da la siguiente salida:

Este programa imprime un cheque.

Introduzca el dia (numero): 
Introduzca el mes (nombre): 
Introduzca el anio:

Por favor introduzca el nombre del beneficiario: 
Por favor introduzca el apellido paterno del beneficiario: 
Por favor introduzca el apellido materno del beneficiario: 
Por favor introduzca el monto.

=====================================================================================

      BANCO CENTRAL DE MEXICO
  
  Sucursal Plaza Revolucion, Mexico, D.F.         22/Febrero/1986

   

  Paguese este cheque a: Elisa Hernandez Hernandez 
  Por la cantidad de: 5671 (Cinco Milseiscientos  setenta y un pesos.)



        ____________________________
         Firma

=====================================================================================




/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *                                                                                          +
 * ESTE PROGRAMA IMPRIME UN CHEQUE. PARA ESTO RECIBE EL NOMBRE DEL BENEFICIARIO, LA FECHA   +
 * Y EL MONTO DEL CHEQUE.                                                                   +
 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *                                                                                          +
 *                                    ALGORITMO:                                            +
 * Recibir el nombre de usuario                                                             +
 * Recibir la fecha                                                                         +
 * Recibir el monto                                                                         +
 *                                                                                          +
 * Imprimir los datos generales del cheque                                                  +
 * Imprimir el nombre del beneficiario                                                      +
 * Imprimir la el monto en numeros                                                          +
 * Llamar a una funcion que imprima en palabras el monto se envia el numero, se recibe el   +
 * control                                                                                  +
 *                                                                                          +
 * Funcion Imprimir ( recibe numero )                                                       +
 *                                                                                          +
 * Definir los arreglos:                                                                    +
 * Unidades { "Cero", "Uno", "Dos",....."Diez"}                                             +
 * Especiales {"", "", "", "",......"once", "doce", "trece", "catorce", "quince"}           + 
 * Decenas {"", "diez", "veinte", "treinta", ..........., "noventa", "cien"}                +
 * Decenascomp {"", "dieci", "veinti", "treinta y", "cuarenta y", ......., "noventa y "}    +
 * Centenas {"", "cientos", "doscientos", "trescientos", ............, "novecientos" }      +
 * Millares {"". "Mil", "Dos mil", "Tres mil",.....,"Diez Mil"}                             +
 * letras {"   "}                                                                           +
 *                                                                                          +
 * Si el numero < 10                                                                        +
 *                                                                                          +
 *   Imprimr la correspondiente entrada del arreglo Unidades                                +
 *                                                                                          +
 * De lo contrario                                                                          +
 *                                                                                          +
 *   Si el numero esta entre 11 y 15                                                        +
 *   Imprimir la correspondiente entrada del arreglo Especiales                             +
 *                                                                                          +
 *   De lo contrario                                                                        +
 *   millar = numero/1000;                                                                  +
 *   centena = (numero - 1000*millar)/100;                                                  +
 *   decena = (numero - 1000*millar - 100*centena)/10;                                      +
 *   unidad = numero%10;                                                                    +
 *                                                                                          +
 *   Imprimir la correspondiente entrada del arreglo Millares                               +
 *   Imprimir la correspondiente entrada del arreglo Centenas                               +
 *   Imprimir la correspondiente entrada del arreglo Decenas                                +
 *   (Si hay unidades, debe imprimirse la entrada de Decenascomp)                           +
 *   Imprimir la correspondiente entrada del arreglo Unidades                               +
 *                                                                                          +
 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

#include <stdio.h>
#include <string.h>

void Imprimir(int );

/*////////////////////////////////////////////////////////////////////////////
// MAIN
////////////////////////////////////////////////////////////////////////////*/

int main()
{     /*Abre main*/
char Nombre[20];
char Paterno[20];
char Materno[20];
int monto;
int dia, anio;
char Mes[15];

printf("\nEste programa imprime un cheque.\n");
printf("\nIntroduzca el dia (numero): ");
scanf("%d", &dia); 
printf("\nIntroduzca el mes (nombre): ");
scanf("%s", Mes);
printf("\nIntroduzca el anio:\n");
scanf("%d", &anio);

printf("\nPor favor introduzca el nombre del beneficiario: ");
scanf("%s", Nombre);
printf("\nPor favor introduzca el apellido paterno del beneficiario: ");
scanf("%s", Paterno);
printf("\nPor favor introduzca el apellido materno del beneficiario: ");
scanf("%s", Materno);
printf("\nPor favor introduzca el monto.\n");
scanf("%d", &monto);

printf("\n=====================================================================================\n");
printf("\n  \t\t\t\tBANCO CENTRAL DE MEXICO\n  ");
printf("\n  Sucursal Plaza Revolucion, Mexico, D.F.\t\t\t\t %d/%s/%d\n", dia, Mes, anio);
printf("\n   \n\n\t\tPaguese este cheque a: %s %s %s ", Nombre, Paterno, Materno);
printf("\n  Por la cantidad de: %d (", monto);
Imprimir(monto);
printf(" pesos.)\n");
printf("\n\n\n\t\t\t\t\t\t\t ____________________________\n");
printf("\t\t\t\t\t\t\t\t\tFirma\n");
printf("\n=====================================================================================\n");
return 0;
}     /*Cierra main */


/*//////////////////////////////////////////////////////////////////////////////////
// FUNCION IMPRIMIR
//////////////////////////////////////////////////////////////////////////////////*/

void Imprimir(int numero)
{

char unidades[][10]={"cero","un","dos","tres","cuatro","cinco","seis","siete","ocho","nueve"};
char especiales[][10]={"","","","","","","","","","","","once","doce","trece","catorce","quince"};
char decenas[][10]={"","diez","veinte","treinta","cuarenta","cincuenta","sesenta","setenta","ochenta","noventa","cien"};
char decenascomp [][13]={"","dieci","veinti","treinta y ","cuarenta y ","cincuenta y ","sesenta y ","setenta y ","ochenta y ","noventa y "};
char centenas[][15]={"","Ciento","doscientos", "trescientos", "cuatrocientos", "quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos"};
char millares[][15] = {"", "Mil", "Dos Mils", "Tres Mil", "Cuatro Mil", "Cinco Mil", "Seis Mil", "Siete Mil", "Ocho Mil", "Nueve Mil", "Diez Mil"};
char letras[16];
int unidad,decena, centena, millar;

if(numero<10)
{
strcpy(letras,unidades[numero]);
printf("%s",letras);
}

else
   
switch(numero)
 
{      /* Abre switch */
case 11:
case 12:
case 13:
case 14:
case 15:

strcpy(letras,especiales[numero]);
printf("%s",letras);
break;

default:
millar = numero/1000;
centena = (numero - 1000*millar)/100;
decena = (numero - 1000*millar - 100*centena)/10;
unidad = numero%10;

strcpy(letras, millares[millar]);
printf("%s",letras);
 
strcpy(letras,centenas[centena]);
printf("%s ", letras);
if( 0 == unidad )
{  /* Abre if */
strcpy(letras,decenas[decena]);
printf(" %s", letras);
} /* Cierra if*/
  
else /*si hay unidades*/
{  /* Abre else */

if ( ((10*decena + unidad) >= 11) && ((10*decena + unidad) <= 15) )
{    /*Abre if*/
strcpy(letras, especiales[10 + unidad]);
printf("%s ", letras);
} /*Cierra if*/
else
{  /*Abre else anidado */
strcpy(letras,decenascomp[decena]);
printf(" %s", letras);
strcpy(letras, unidades[unidad]);
printf("%s", letras);
} /*Cierra else anidado*/
} /*Cierra else */
break;
 
}  /* Cierra switch */
 
return;
}

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...