Edultra 13 Denunciar post Postado Abril 14, 2008 2) Escreva um programa que escreve por extenso qualquer numero entre 0 e 999 fornecido pelo usuário. • Se o número contiver mais de três dígitos componentes, ou seja, unidade, dezena e centena. Então só existem 10 possibilidades de impressão para cada caso (Sugestão: Use os operadores de divisão e de resto para separar o numero em seus algarismos isolados). • Exemplo: se a entrada for 182, o programa deverá imprimir “cento e oitenta e dois”. Eis o codigo que desenvolvemos (eu e um colega de equipe): #include <stdio.h> #include<iostream> #include <string> #include <conio.h> using namespace std; int main() { int a, b, c, num; string cent,dez,uni; printf("digite um numero :\n");//Escreve na tela a mensagem digite um numero scanf("%d",&num);//Recebe o numero digitado e o armazena na memoria com nome de num a=num/100;//diz que a variavel a e igual a variavel num dividido por 100 num=num%100;//diz que num e igual ao resto da divisao de num dividido por 100 b=num/10;// diz que b e igual a num dividido por 10 num=num%10;//diz que num e igual ao resto da divisao de num dividido por 10 c=num/1;//diz que c e igual a num dividido por 1 if(a>9)//se a maior que 9 printf("\n numero invalido\n");//escreve na tela numero invalido else //senao { if(a==1&&b==0&&c==0)//se a igual a 1 e b igual a 0 e c igual a 0 printf("\nCem\n");/*escreve na tela cem (\n aqui pede para pular pra proxima linha antes de escrever 100 e pede para pular uma linha depois*/ else if(a==0&&b==0&&c==0)//senao se a igual a 0 e b igual a 0 e c igual a 0 printf("\nZero\n");//escreve na tela zero else//senao { if(a>=1&&b==0&&c==0)//se a maior ou igual a 1 e b igual a 0 e c igual a 0 { switch (a)/*ira trabalhar com o a variavel a armazenando um valor para cent conforme cada caso*/ { case 1 : cent="Cento ";break;//caso 1 cent ganha a dado cento e assim por diante case 2 : cent="Duzentos ";break; case 3 : cent="Trezentos ";break; case 4 : cent="Quatrocentos ";break; case 5 : cent="Quinhentos ";break; case 6 : cent="Seiscentos ";break; case 7 : cent="Setecentos ";break; case 8 : cent="Oitocentos ";break; case 9 : cent="Novecentos ";break; } } else//senao { switch(a) { case 1 : cent="Cento e ";break; case 2 : cent="Duzentos e ";break; case 3 : cent="Trezentos e ";break; case 4 : cent="Quatrocentos e ";break; case 5 : cent="Quinhentos e ";break; case 6 : cent="Seiscentos e ";break; case 7 : cent="Setecentos e ";break; case 8 : cent="Oitocentos e ";break; case 9 : cent="Novecentos e ";break; } } if(b==1) { switch(c) { case 0 : dez="Dez ";break; case 1 : dez="Onze ";break; case 2 : dez="Doze ";break; case 3 : dez="Treze ";break; case 4 : dez="Quatorze ";break; case 5 : dez="Quinze ";break; case 6 : dez="Dezesseis ";break; case 7 : dez="Dezessete ";break; case 8 : dez="Dezoito ";break; case 9 : dez="Dezenove ";break; } } else if(b>1) { switch (b) { case 2 : dez="Vinte";break; case 3 : dez="Trinta";break; case 4 : dez="Quarenta";break; case 5 : dez="Cinquenta";break; case 6 : dez="Sessenta";break; case 7 : dez="Setenta";break; case 8 : dez="Oitenta";break; case 9 : dez="Noventa";break; } switch (c) { case 1 : uni=" e Um ";break; case 2 : uni=" e Dois ";break; case 3 : uni=" e Tres ";break; case 4 : uni=" e Quatro ";break; case 5 : uni=" e Cinco ";break; case 6 : uni=" e Seis ";break; case 7 : uni=" e Sete ";break; case 8 : uni=" e Oito ";break; case 9 : uni=" e Nove ";break; } } else { switch (c) { case 1 : uni="Um ";break; case 2 : uni="Dois ";break; case 3 : uni="Tres ";break; case 4 : uni="Quatro ";break; case 5 : uni="Cinco ";break; case 6 : uni="Seis ";break; case 7 : uni="Sete ";break; case 8 : uni="Oito ";break; case 9 : uni="Nove ";break; } } cout<<cent<< dez<< uni;//ira escrever na tela os dados armazenados de cent dez uni } } getch(); }Gostaria de opnioes para otimizar o codigo. Compartilhar este post Link para o post Compartilhar em outros sites
omar.pessoa 1 Denunciar post Postado Abril 14, 2008 #include <stdio.h> #include <string.h> #include <cstdlib> //system char* unidade[20] = { "","um","dois","três","quatro", "cinco","seis", "sete", "oito", "nove", "dez", "onze", "doze", "treze","quatorze","quinze","dezesseis","dezessete","dezoito","dezenove"}; char* dezena[10] = { "","","vinte","trinta","quarenta", "cincoenta","sessenta", "setenta", "oitenta", "noventa"}; char* centena[10] = {"cem", "cento", "duzentos", "trezentos" , "quatrocentos", "quinhentos", "seiscentos","setecentos","oitocentos","novecentos"}; char* PorExtenso(int iNumero) { char* cBufferRes = new char[256]; memset(cBufferRes,0,256); int iMilhar = iNumero/1000; int iCentena = iNumero%1000/100; int iDezena = iNumero%1000%100/10; int iUnidade = iNumero%1000%100%10; if(iMilhar) { char cTeste[200]={0}; strcat(cTeste, PorExtenso(iMilhar)); strcat(cBufferRes, cTeste); strcat(cBufferRes, " mil"); } if(iCentena) { if(iCentena == 1 && iDezena == 0 && iUnidade == 0) { if(iMilhar) strcat(cBufferRes, " e "); strcat(cBufferRes, "cem"); } else { if(iMilhar) strcat(cBufferRes, " "); strcat(cBufferRes, centena[iCentena]); } } if(iDezena) { if(iCentena || iMilhar) strcat(cBufferRes, " e "); if(iDezena < 2) { strcat(cBufferRes, unidade[iDezena*10+iUnidade]); return cBufferRes; } else strcat(cBufferRes, dezena[iDezena]); } if(iUnidade) { if(iCentena || iMilhar || iDezena) strcat(cBufferRes, " e "); strcat(cBufferRes, unidade[iUnidade]); } return cBufferRes; } Talvez se você der uma olhada neste código. Compartilhar este post Link para o post Compartilhar em outros sites
Edultra 13 Denunciar post Postado Abril 14, 2008 Hum legal, vou dar uma estudada neste codigo... bem compacto. valeu Compartilhar este post Link para o post Compartilhar em outros sites
*PeLuCiO* 0 Denunciar post Postado Maio 8, 2008 ae galera....eu tava precisando msm de um algoritmo desse ae pra eu dar uma olhada e ter uma noção de como fazer isso! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif pq eu to no 1º semestre de ciencia da computaçao e tenhu um trabalha para entregar sobre esse algoritmo!... :blink: soh q o meu eh pra fazer imprimir ate 1 bilhão !!!!!! e esse ae eh soh ate 999 <_< tem como alguem me dar uma luz ae....to precisando!...c naum eh DP...uahsduad :wacko: Compartilhar este post Link para o post Compartilhar em outros sites
omar.pessoa 1 Denunciar post Postado Maio 9, 2008 Amigo... Dê uma olhada no código. Você consegue! Compartilhar este post Link para o post Compartilhar em outros sites
omar.pessoa 1 Denunciar post Postado Maio 30, 2008 Bom, para quem não conseguiu... segue código (cuidado com o int, pode estourar, mudem para long) #include <stdio.h> #include <string.h> #include <cstdlib> //system char* unidade[20] = { "","um","dois","três","quatro", "cinco","seis", "sete", "oito", "nove", "dez", "onze", "doze", "treze","quatorze","quinze","dezesseis","dezessete","dezoito","dezenove"}; char* dezena[10] = { "","","vinte","trinta","quarenta", "cincoenta","sessenta", "setenta", "oitenta", "noventa"}; char* centena[10] = {"cem", "cento", "duzentos", "trezentos" , "quatrocentos", "quinhentos", "seiscentos","setecentos","oitocentos","novecentos"}; char* PorExtenso(int iNumero) { char* cBufferRes = new char[256]; memset(cBufferRes,0,256); int iBilhao = iNumero/1000000000; int iMilhao = iNumero%1000000000/1000000; int iMilhar = iNumero%1000000000%1000000/1000; int iCentena = iNumero%1000000000%1000000%1000/100; int iDezena = iNumero%1000000000%1000000%1000%100/10; int iUnidade = iNumero%1000000000%1000000%1000%100%10; if(iBilhao) { char cTeste[200]={0}; strcat(cTeste, PorExtenso(iBilhao)); strcat(cBufferRes, cTeste); if(iBilhao == 1) { strcat(cBufferRes, " bilhao"); } else { strcat(cBufferRes, " bilhoes"); } } if(iMilhao) { if(iBilhao) strcat(cBufferRes, " e "); char cTeste[200]={0}; strcat(cTeste, PorExtenso(iMilhao)); strcat(cBufferRes, cTeste); if(iMilhao == 1) { strcat(cBufferRes, " milhao"); } else { strcat(cBufferRes, " milhoes"); } } if(iMilhar) { if(iMilhao || iBilhao) strcat(cBufferRes, " e "); char cTeste[200]={0}; strcat(cTeste, PorExtenso(iMilhar)); strcat(cBufferRes, cTeste); strcat(cBufferRes, " mil"); } if(iCentena) { if(iCentena == 1 && iDezena == 0 && iUnidade == 0) { if(iMilhar || iMilhao || iBilhao) strcat(cBufferRes, " e "); strcat(cBufferRes, "cem"); } else { if(iMilhar || iMilhao || iBilhao) strcat(cBufferRes, " "); strcat(cBufferRes, centena[iCentena]); } } if(iDezena) { if(iCentena || iMilhar || iMilhao || iBilhao) strcat(cBufferRes, " e "); if(iDezena < 2) { strcat(cBufferRes, unidade[iDezena*10+iUnidade]); return cBufferRes; } else strcat(cBufferRes, dezena[iDezena]); } if(iUnidade) { if(iCentena || iMilhar || iDezena || iMilhao || iBilhao) strcat(cBufferRes, " e "); strcat(cBufferRes, unidade[iUnidade]); } return cBufferRes; } Compartilhar este post Link para o post Compartilhar em outros sites