/*Este programa imprime um cheque.
 
	 
 
	Insira o dia (número):   
	Digite o mês (nome):   
	Digite o ano:
 
	Por favor, digite o nome do destinatário:   
	Digite o nome de solteira do beneficiário: 
	Por favor, indique o nome de solteira da mãe do beneficiário: 
	Por favor, indique o valor.
 
	=====================================================================================
 
	     BANCO CENTRAL DO BRASIL 
	  
	  Belo Horizonte, MINAS GERAIS,  MG        29 / setembro / 2011
 
	 
	   
 
	  Pagar esse cheque para:    
	  Para a quantidade de:  3.030.212,20 (três milhões, trinta mil e duzentos e doze reais.)
 
	 
 
	        ____________________________ 
	        CIA MINERADORA MINAS GERAIS
 
	===================================================================================== */
 
	 
 
	 
	/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
	 *                                                                                          + 
	 * Este programa imprime um cheque .Para este recebe o nome BENEFICIÁRIO, Data              + 
	 * e o valor do cheque.                                                                     + 
	 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
 
	/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
	 *                                                                                          + 
	 *                                    Algoritmo:                                            + 
	 * Receber nome de usuário                                                                  + 
	 * Receber data                                                                             + 
	 * Receber o valor                                                                          + 
	 *                                                                                          + 
	 * Imprime a verificação de dados gerais do cheque                                          + 
	 * Imprime o nome do beneficiario                                                           + 
	 * Imprime a quantidade em números                                                          + 
	 * Chamar uma função que imprime o valor por extenso o número é enviado, recebeu o          + 
	 * controle                                                                                 + 
	 *                                                                                          + 
	 * função de impressão (recebe o número )                                                   + 
	 *                                                                                          + 
	 * Definir  os conjunto:                                                                    + 
	 * Unidades { "Zero", "Um", "Dois",....."Dez"}                                              + 
	 * Especial {"", "", "", "",......"onze", "doze", "treze", "quatorze", "quinze"}            + 
	 * Dezenas {"", "dez", "vinte", "trinta", ..........., "noventa", "cem"}                    + 
	 * Dezenascomp {"", "dezessete", "vinte", "trinta", "quarenta", ......., "noventa"}         + 
	 * Centenas {"", "cem", "duzentas", "trezentos", ............, "novecentos" }               + 
	 * Milhares {"". "Mil", "Dois mil", "Três mil",.....,"Dez Mil"}                             + 
	 * letras {"   "}                                                                           + 
	 *                                                                                          + 
	 * Se o número  < 10                                                                        + 
	 *                                                                                          + 
	 *   Imprime a entrada correspondente em unidades de acordo                                 + 
	 *                                                                                          + 
	 * Caso contrário                                                                           + 
	 *                                                                                          + 
	 *   Se o número for entre 11 e 15                                                          + 
	 *   Imprima a entrada de conjunto especial                                                 + 
	 *                                                                                          + 
	 *   Caso contrário                                                                         + 
	 *   Milhares = número/1000;                                                                + 
	 *   Centenas = (número - 1000*milhares)/100;                                               + 
	 *   Dezenas = (número - 1000*milhares - 100*centenas)/10;                                  + 
	 *   Unidades = número%10;                                                                  + 
	 *                                                                                          + 
	 *   Imprimir a entrada correspondente, em conformidade Milhares                            + 
	 *   Imprimir a entrada correspondente na Centenas acordo                                   + 
	 *   Imprimir a entrada correspondente na Dezenas acordo                                    + 
	 *   (Se houver unidades a serem impressas de entrada Decenascomp)                          + 
	 *   Imprima a entrada correspondente em Unidades de acordo                                 + 
	 *                                                                                          + 
	 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
 
	#include <stdio.h> 
	#include <string.h>
 
	void Imprimir(int );
 
	/*//////////////////////////////////////////////////////////////////////////// 
	// MAIN 
	////////////////////////////////////////////////////////////////////////////*/
 
	int main() 
	{     /*Abrir main*/ 
	char Nome[20]; 
	char Paternal[20]; 
	char Maternal[20]; 
	int valor; 
	int dia, ano; 
	char mes[15];
 
	printf("\nEste programa imprime um cheque.\n"); 
	printf("\nInsira o dia (numero): "); 
	scanf("%d", &dia); 
	printf("\nDigite o mes (nome): "); 
	scanf("%s", mes); 
	printf("\nDigite o ano:\n"); 
	scanf("%d", &ano);
 
	printf("\nPor favor, indique o nome do destinatário: "); 
	scanf("%s", Nome); 
	printf("\nPor favor, indique o nome de solteiro do destinatário: "); 
	scanf("%s", Paternal); 
	printf("\nPor favor, indique o nome de solteira da mãe do beneficiário: "); 
	scanf("%s", Maternal); 
	printf("\nPor favor, indique o valor.\n"); 
	scanf("%d", &valor);
 
	printf("\n=====================================================================================\n"); 
	printf("\n  \t\t\t\t BANCO CENTRAL DO BRASIL\n  "); 
	printf("\n  Belo Horizonte, MINAS GERAIS,  MG  \t\t\t\t %d/%s/%d\n", dia, mes, ano); 
	printf("\n   \n\n\t\tPague este cheque a: %s %s %s ", Nome, Paternal, Maternal); 
	printf("\n  A quantidade de: %d (", valor); 
	Imprimir(valor); 
	printf(" reais.)\n"); 
	printf("\n\n\n\t\t\t\t\t\t\t ____________________________\n"); 
	printf("\t\t\t\t\t\t\t\t\tassinatura\n"); 
	printf("\n=====================================================================================\n"); 
	return 0; 
	}     /*Fechar main */
 
	 
	/*////////////////////////////////////////////////////////////////////////////////// 
	// Função print 
	//////////////////////////////////////////////////////////////////////////////////*/
 
	void Imprimir(int numero) 
	{
 
	char unidades[][10]={"zero","um","dois","três","quatro","cinco","seis","sete","oito","nove"}; 
	char especial[][10]={"","","","","","","","","","","","onze","doze","treze","quatorze","quinze"}; 
	char dezenas[][10]={"","dez","vinte","trinta","quarenta","cinquenta","sessenta","setenta","oitenta","noventa","cem"}; 
	char dezenascomp [][13]={"","dez","vinte","trinta","quarenta","cinquenta","sessenta","setenta","oitenta","noventa"}; 
	char centenas[][15]={"","Cem","duzentos", "trezentos", "quatrocentos", "quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos"}; 
	char milhares[][15] = {"", "Mil", "Dois Mil", "Três Mil", "Quatro Mil", "Cinco Mil", "Seis Mil", "Sete Mil", "Oito Mil", "Nove Mil", "Dez Mil"}; 
	char letras[16]; 
	int unid,deze, cente, milha;
 
	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,especial[numero]); 
	printf("%s",letras); 
	break;
 
	default: 
	milha = numero/1000; 
	cente = (numero - 1000*milha)/100; 
	deze = (numero - 1000*milha - 100*cente)/10; 
	unid = numero%10;
 
	strcpy(letras, milhares[milha]); 
	printf("%s",letras); 
	  
	strcpy(letras,centenas[cente]); 
	printf("%s ", letras); 
	if( 0 == unidades ) 
	{  /* Abre if */ 
	strcpy(letras,dezenas[deze]); 
	printf(" %s", letras); 
	} /* Fechar if*/ 
	  
	else /*se há unidades*/ 
	{  /* Abre else */
 
	if ( ((10*deze + unid) >= 11) && ((10*deze + unid) <= 15) ) 
	{    /*Abre if*/ 
	strcpy(letras, especial[10 + unid]); 
	printf("%s ", letras); 
	} /*Fechar if*/ 
	else 
	{  /*Abre else recolheu-se */ 
	strcpy(letras,dezenascomp[deze]); 
	printf(" %s", letras); 
	strcpy(letras, unidades[unid]); 
	printf("%s", letras); 
	} /*Fechar else recolheu-se*/ 
	} /*Fechar else */ 
	break; 
	  
	}  /* Fechar switch */ 
	  
	return; 
	}