Ir ao conteúdo
  • Cadastre-se

Codigo Converter Quantias em Literais


caixadelixo

Posts recomendados

Boa Noite, já algum tempo precisei de ajuda para fazer um programa que convertia valores numéricos por extenso, pedi informações mas as respostas foram vagas e de pouco conteúdo didáctico. Por esse motivo resolvi disponibilizar meu código completo, para ajudar as pessoas que procuram ajuda. Caso alguém descida fazer um copy-paste recomendo que estudem o código primeiro, pois fica a vosso critério.


#include <cstdlib>
#include <iostream>
#include <windows.h>

using namespace std;
///Declarações iniciais
char* sufixo[]={"","Real","Libra","Dolar","Yen"};
char* sufixos[]={"","Reais","Libras","Dolares","Yens"};
char *unidades[] = {"","um","dois","tres","quatro","cinco","seis","sete","oito","nove","dez","onze","doze","treze","quatorze","quinze","dezesseis","dezessete","dezoito","dezenove","vinte"};
char *dezenas[] = {"","","vinte", "trinta","quarenta","cinquenta","sessenta","setenta","oitenta","noventa"};
char *centenas[] = {"","cento","duzentos","trezentos","quatrocentos","quinhentos","seiscentos","setecentos","oitocentos","novecentos"};
char ch_Total[14]; // Total da string inicial com lixo
char* e={"e"};
char* euros={"euros"};

int geraMenu(){// Menu inicial
HANDLE hConsole; //Mudar a cor das letras e fundo
int k=1;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
if (k=1){system("color 0b");
printf("ÉÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍ»\n");
printf("º º Programa Euro Converter º º\n");
printf("º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ º\n");
printf("º º\n");
printf("º -O programa converte, valores º\n");
printf("º numericos em valores escritos. º\n");
printf("º -E tambem converte Euros para º\n");
printf("º a moeda de um outro pais. º\n");
printf("ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹\n");
printf("º HELP: º\n");
printf("º º\n");
printf("ºEx: Converter Valores: º\n");
printf("º - Valor de entrada: 10000,00 º\n");
printf("º - Valor de saida: Dez mil Euros º\n");
printf("º - Uso da virgula nos centimos º\n");
printf("º º\n");
printf("ºEx: Converter Moeda: º\n");
printf("º - Valor em Euros: 30.00 º\n");
printf("º - Valor convertido: 46,30 Reais º\n");
printf("ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n");
}
printf("ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n");
printf("º º\n");
printf("º Converter Valores..[1] º\n");
printf("º Converter Moeda....[2] º\n");
printf("º Exit...............[3] º\n");
printf("º º\n");
printf("ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n");
printf("\n");
printf(" Selecione uma Opcao: ");
int oP;
scanf("%d",&oP);
system("cls");
return oP;
}
int geraMenu2(){//Menu converter divisas...
printf("ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n");
printf("º Conversoes Disponiveis º\n");
printf("º º\n");
printf("º BRL Brasil:.............[1] º\n");
printf("º GBP Reino Unido:........[2] º\n");
printf("º USD Estados Unidos:.....[3] º\n");
printf("º JPY Japao:..............[4] º\n");
printf("º Exit:...................[5] º\n");
printf("º º\n");
printf("ºEx: Converter Moeda: º\n");
printf("º - Valor em Euros: 30.00 º\n");
printf("º - Valor convertido: 46.30 Reais º\n");
printf("º º\n");
printf("º ATENCAO: Uso do ponto obrigatorio º\n");
printf("ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n");
printf("\n");
printf("Escolha a Conversao: ");
int oP2;
scanf("%d",&oP2);
return oP2;
}
void geraMenu3(){//Menu de ajuda para conversao de literais...
printf("ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n");
printf("º Conversoes para Literais º\n");
printf("º º\n");
printf("º HELP: º\n");
printf("º - Obrigatorio uso da virgula nas º\n");
printf("º casas decimais. º\n");
printf("º - Nao pode ultrapassar 999 milhoes.º\n");
printf("º - Tem que ter 2 casas decimais. º\n");
printf("º - Nao colocar zero a frente dos º\n");
printf("º algarismos º\n");
printf("º º\n");
printf("ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n");
printf("\n");
}
char * remover(char * a)// Tratamento da string inicial, remove possiveis char invalidos devolve string limpa.
{
char ponto='.', espaco=' '; // caracters a remover
char* ch_Inicio = ch_Total;
char* ch_Fim = ch_Total+sizeof(ch_Total)/sizeof(char);
ch_Fim = remove (ch_Inicio, ch_Fim, ponto); // comando para remover
ch_Fim = remove (ch_Inicio, ch_Fim, espaco);
for (char* p=ch_Inicio; p!=ch_Fim; ++p) // Loop para percorrer o array
return p;
}
void sub4(int vMMil)// Tratamento milhoes
{
int inteiro=vMMil/100;
int resto =vMMil%100;
int resto2 = resto/10;
char* milhoes={"milhoes"};
char* milhao={"milhao"};
char* sp;
if(vMMil == 1){//milhoes
sp=milhao; // caso seja singular
}else
if(vMMil >= 2){//milhoes
sp=milhoes; // caso seja plural
}
if(vMMil == 100){//milhoes
printf("cem milhoes e "); // caso especial
}
if(vMMil != 100){
if (resto2 == 0){
printf("%s ",*(centenas+ inteiro));
}else
if (inteiro!=0 ){
printf("%s %s ",*(centenas+ inteiro),e);
}
if (resto<=20 ){
printf("%s %s %s ",*(unidades+ resto),sp,e);
}else {
if(resto%10==0){// dezenas inteiro
printf("%s %s %s ",*(dezenas+ (resto/10)),sp,e);
}else
if (inteiro =(resto/10)){
resto = resto%10; //dezenas
printf("%s %s %s %s %s ",*(dezenas+ inteiro),e,*(unidades+resto),sp,e);
}
}
}
}
void sub3(int vMil)// Tratamento milhar
{
char* mil={"mil"};
int vVmil=vMil/1000;
int inteiro=vVmil/100;
int resto =vVmil%100;
int resto2 = resto/100;
int resto3= resto/10;

if(vMil == 1000) { // centena - condicao especial
printf("mil euros e ");
}else
if(vMil >= 1001 && vMil <=1999) { // centena - condicao especial
//printf("mil e ");
printf("mil ");
}else
if(vMil == 100000) { // centena - condicao especial
printf("cem mil euros e ");
}else
if(vVmil == 100) { // centena - condicao especial
//printf("cem mil e ");
printf("cem mil ");
}
if (vVmil!=1 && vVmil !=0 && vVmil !=100 && vVmil != 1000){ // assegurar que nao seja alguma condicao anteriro
if (resto2 == 0 && resto==0){ // caso centena inteiras
printf("%s ",*(centenas+ inteiro));
}else
if (inteiro!= 0 ){
printf("%s %s ",*(centenas+ inteiro),e); //centenas com dezenas e unidades
}
if (resto<=20 && vMil%1000!=0 ){ // para dezenas de centenas menores que 20 com centenas de euros 210.345,00
printf("%s %s %s ",*(unidades+ resto),mil,e);
}else
if(resto<=20 && vMil%1000==0){// para dezenas de centenas menores que 20 Inteiro 210.000,00
printf("%s %s %s %s ",*(unidades+ resto),mil,euros,e);
}else
if(resto%10==0 && vMil%1000!=0){// centena de dezenas inteiro com centenas de euros 240.345,00
printf("%s %s %s ",*(dezenas+ resto3),mil,e);
}else
if(resto%10==0 && vMil%1000==0){// centenas de dezenas inteiro 240.000,00
printf("%s %s %s %s ",*(dezenas+ resto3),mil,euros,e);
}else
if (vMil%1000!=0 ){// dezenas e unidades com centena de euros
inteiro=resto/10; //dezenas
resto = resto%10; //unidades
printf("%s %s %s %s %s ",*(dezenas+ inteiro),e,*(unidades+resto),mil,e);
}if(vMil%1000==0 && resto3!=0 && (resto%10)!=0){// dezenas e unidades Inteiro
inteiro=resto/10;
resto = resto%10;
printf("%s %s %s %s %s %s ",*(dezenas+ inteiro),e,*(unidades+resto),mil,euros,e);
}
}
}
void sub2(int vEur)// Tratamento euros
{
int inteiro=vEur/100;
int resto =vEur%100;
int resto2 = resto/10;
if(vEur == 1) { // singular - condicao especial
printf("um euro e ");
}
if(vEur == 100) { // singular - condicao especial
printf("cem euros e ");
}
if(vEur == 0) { // singular - condicao especial
printf("");
}
if (vEur!= 100 && vEur!=0 && vEur!=1){
if (resto2 == 0){
printf("%s ",*(centenas+ inteiro));
}else
if (inteiro!=0 ){
printf("%s %s ",*(centenas+ inteiro),e);
}
if (resto<=20 ){
printf("%s %s %s ",*(unidades+ resto),euros,e);
}else
if(resto%10==0){// dezenas inteiro
printf("%s %s %s ",*(dezenas+ (resto/10)),euros,e);
}else
if (inteiro =(resto/10)){
resto = resto%10; //dezenas
printf("%s %s %s %s %s ",*(dezenas+ inteiro),e,*(unidades+resto),euros,e);
}
}
}
void sub1(int num1 )// Tratamento centimos
{
char* centimos={"centimos"};
int inteiro=num1/10;
int resto =num1%10;
if(num1 == 1) { // singular - condicao especial
printf("um centimo\n");
}
if(num1 == 0) { // singular - condicao especial
printf("zero centimos\n");
}
if (num1 >=2 && num1 <=99 ){
if (num1<=20 ){
printf("%s %s\n",*(unidades+ num1),centimos);
}else
if(resto==0){// dezenas inteiro
printf("%s %s\n",*(dezenas+ inteiro),centimos);
}else
if (inteiro !=0){
printf("%s %s ", *(dezenas+ inteiro),e);
printf("%s %s",*(unidades+resto),centimos);
printf("\n");
}
}
}
int main(int argc, char *argv[])
{
int opções;
int opc2=0;
while(true){
system("cls");
opções=geraMenu();
switch(opções){
case 1:{// Ininicializa a tela de conversão para literal.
geraMenu3();
printf("Inserir quantia: ");
fflush(stdin);
gets(ch_Total);
int i,a=0,b=0;
int vEur,vMil,vMMil;
char *p = ch_Total;
char *eEur ;
char *eCent;
if(strlen(p)<=15 ){// Testar tamanho do vetor para que nao ultrapasse 15 casas...
for(i=0;i<strlen(p);i++){
remover(ch_Total); // envia a string nao tratada
}
eEur = strtok( ch_Total, "," ); // antes da virgual
eCent = strtok( NULL, "," ); // depois da virgula
int num2 = atoi(eEur); // converte para int
int num1 = atoi(eCent); // converte para int

if(strlen(eEur)>=7 && strlen(eEur)<=9){ // caso numero tiver algarismos entre....
vMMil = num2;
vMil=vMMil%1000000; // se tiver resto envia para milhar condicao abaixo
vMMil=vMMil/1000000;
sub4(vMMil);
b=1; // condicao que confirma resto para milhar
}
if(strlen(eEur)>=4 || vMil<=999999){
if(b==0){ // nao existe condicao dos milhoes, numero e so milhar
vMil= num2 ;
}
vEur=vMil%1000; // se tiver resto envia para euros
sub3(vMil);
a=1; // condicao que confirma resto para euros
}
if(strlen(eEur)<=3 || vEur<=999){
if(a==0){ // numero digitado so possui euros
vEur= num2;
}
sub2(vEur);
}
if(strlen(eCent)<=2){// envia e recebe centenas
sub1(num1);
printf("\n");
system("Color 0A");
printf("Conversao completada com sucesso...\n");
printf("\n");
}
}else
{
printf("\n\nErro: Quantidade de digitos ultrapassado\n\n");
system("pause");
break;
}
system("pause");
break;
}
case 2:{// Ininicializa a tela de conversão de divisas.
int opcoes2= geraMenu2();

if(opcoes2<=4){
float qtd, cot,result;
printf ("Digite a quantidade de Euros: ");
scanf ("%f", & qtd);
printf ("Digite a cotacao do %s: ",*(sufixo+opcoes2));
scanf ("%f", & cot);
result=qtd*cot;
printf ("\nEuros = %.2f | %s = %.2f \n",qtd,*(sufixos+opcoes2),result);
system("Color 0A");
printf ("\nConversao realizada com sucesso....\n");
system("pause");
break;
}else
if(opcoes2==5){
break;
}
system("Color 0C");
printf("\n\nOpcao Invalida, voltando ao menu principal...\n");
system("pause");
break;
}
case 3:
exit(0);
default:{
exit(0);
break;
}
}
}
system("PAUSE");
return EXIT_SUCCESS;
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!