Ir para conteúdo

POWERED BY:

Arquivado

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

Edultra

Codigo para um trabalho

Recommended Posts

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

#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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.