none
Programa números por extenso

    Question

  • Galera, estava pensando em fazer um programa que escrevesse de 1 até 999 por extenso. A primeira coisa que me passou na cabeça seria criar uma condicional if para cada número, porém o programa ficaria gigante, ou seja, estou tentando arrumar um modo de encurtar esse processo.

    Sou usuário Básico em C#, alguém poderia me dar uma luz de como agilizar esse processo de maneira eficiente?

    PS: Os valores terão que ser declarados como decimais?

    Sunday, September 26, 2010 1:22 AM

Answers

  • Fiz umas alterações nesses lugares:

      int valor = 0; int.Parse(txt_Valor.Text);     Muda para     int valor = int.Parse(txt_Valor.Text);

     

    e tira esse if

          if (a < 9)
          {
            txt_Extenso.Text = ("Número inválido");
          }

          else
          {


    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    Monday, September 27, 2010 1:30 AM

All replies

  • Segue links de exemplo.

    http://vbtuga.blogspot.com/2008/05/vbnet-converter-nmeros-para-extenso.html

    http://www.macoratti.net/09/01/vbn_ext1.htm


    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    Sunday, September 26, 2010 1:31 AM
  • Dei uma olhada em alguns tutoriais na internet porém tive grande dificuldade para entender o que estava rolando nos códigos, alguns tutoriais eram em linguagem VB, outros em C#, porém a falta de comentários nos códigos dificulta pra quem está começando.

    Vou postar o início do código, como tentei iniciar para dar mais clareza e entendimento a quem estiver lendo o post.

    Essa é parte gráfica do projeto:

    http://yfrog.com/2cimageklp 

    Criei um evento para o botão "Extenso" e pretendo colocar a lógica dentro dele.

    A ideia é construir um programa que fale por extenso os valores de 0 a 999 em reais.

    Exemplo:  dois reais e sessenta centavos

                   duzentos e cinquenta reais e vinte centavos

    Como disse acima, sei alguns conceitos (if, else, while, do, for, switch), porém percebo que ainda me falta aprender algumas coisas para desenvolver um programa desse tipo, e estou disposto a aprender e se possível fazer.

    O início do meu código ficou assim:

    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Projeto
    {
      public partial class Form1 : Form
      {                      
    
       public Form1()
       {
         InitializeComponent();
       }
    
       private void btn_Extenso_Click(object sender, EventArgs e)
       {
         int valor; int.Parse(txt_Valor.Text);
         string ligacao = "e";
         string[] aUnid = { string.Empty, "Um", "Dois", "Três", "Quatro", "Cinco", "Seis", "Sete", "Oito", "Nove" };
         string[] aVint = { string.Empty, "Onze", "Doze", "Treze", "Quatorze", "Quinze", "Dezesseis", "Dezessete", "Dezoito", "Dezenove" };
         string[] aDez = { " ", "Dez", "Vinte", "Trinta", "Quarenta", "Cinquenta", "Sessenta", "Setenta", "Oitenta", "Noventa" };
         string[] aCent = { " ", "Cem", "Duzentos", "Trezentos", "Quatrocentos", "Quinhentos", "Seiscentos", "Setecentos", "Oitocentos", "Novecentos" };
    
       }
      
      }
    
    }
    

    Porém não sei ao certo em como proceder com o programa, tentei declarar as varáveis e os valores para serem escritos. Porém ainda faltaria inserir o "real", "reais", "centavo" e "centavos" e fazer o programa reconhecer isso quando o número é digitado.

    Se alguém puder me dar umas dicas, ficarei grato.

     

    Sunday, September 26, 2010 2:32 PM
  • é só até 999?


    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    Sunday, September 26, 2010 3:25 PM
  • Sim, a princípio seria.

     

    O intuito é entender como funciona a lógica desse programa, sabendo como fazer até 999 fica fácil implementar o resto depois.

    Sunday, September 26, 2010 3:28 PM
  • Vou fazer um exemplo aqui e já te passo.
    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    Sunday, September 26, 2010 3:29 PM
  • Tenta não deixar muito mastigado bruno, afinal quero pensar em como resolvê-lo também =D

    Minhas dúvidas são com relação aos códigos a serem usados, afinal não sei todos os comandos do C# e qual o melhor deles a se aplicar (nesse caso)

     

    Obrigado pela ajuda

    Sunday, September 26, 2010 4:02 PM
  • using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Projeto
    {
      public partial class Form1 : Form
      {
    
       public Form1()
       {
         InitializeComponent();
       }
    
       private void btn_Extenso_Click(object sender, EventArgs e)
       {
         int a, b, c;
         int valor; int.Parse(txt_Valor.Text);
         string cent, dez, uni;
    
         a = valor / 100;
         valor = valor % 100;
    
         b = valor / 10;
         valor = valor % 10;
    
         c = valor / 1;
    
         if (a > 9)
         {
          txt_Extenso.Text = ("Número inválido");
         }
    
         else
         {
          if (a == 1 && b == 0 && c == 0)
    
            txt_Extenso.Text = ("Cem");
    
          else if (a == 0 && b == 0 && c == 0)
    
            txt_Extenso.Text = ("Zero");
    
          else
          {
    
            if (a >= 1 && b == 0 && c == 0)
            {
    
             switch (a)
             {
               case 1: cent = "Cento "; break;
               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
            {
             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;
             }
            }
            
             txt_Extenso.Text = cent << dez << uni;
            
            }
            
          }
    
         }
    
       }
      
      }
    
    }
    

    Estou tendo um erro no final do programa, alguém sabe como faço pra atribuir a essa linha 

    txt_Extenso.Text = cent << dez << uni; 

    Para que o C# a leia da esquerda pra direita e a imprima no textbox?

    Ta dando algum erro ai....

    Obrigado

    Sunday, September 26, 2010 8:22 PM
  • coloca o sinal +

    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    Sunday, September 26, 2010 9:04 PM
  • Coloquei, ficou assim:

    txt_Extenso.Text = cent + dez + uni;

    Deu certo, acabaram-se os bugs, porém na hora que inicio o programa ele só lê valores de 1 a 10, ou seja, ele não consegue ler a variável b e c.

    vou postar o código, se achar algo errado....

    Ta quase pronto =]

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Projeto
    {
      public partial class Form1 : Form
      {
    
       public Form1()
       {
         InitializeComponent();
       }
    
       private void btn_Extenso_Click(object sender, EventArgs e)
       {
         int a, b, c;
         int valor = 0; int.Parse(txt_Valor.Text);
         string cent = "";
         string dez = "";
         string uni = "";
         
    
         a = valor / 100;
         valor = valor % 100;
    
         b = valor / 10;
         valor = valor % 10;
    
         c = valor / 1;
    
         if (a < 9)
         {
          txt_Extenso.Text = ("Número inválido");
         }
    
         else
         {
          if (a == 1 && b == 0 && c == 0)
    
            txt_Extenso.Text = ("Cem");
    
          else if (a == 0 && b == 0 && c == 0)
    
            txt_Extenso.Text = ("Zero");
    
          else
          {
    
            if (a >= 1 && b == 0 && c == 0)
            {
    
             switch (a)
             {
               case 1: cent = "Cento "; break;
               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
            {
             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;
             }
            }
    
            txt_Extenso.Text = (cent + dez + uni);
            
            }
    
          }
    
         }
       
       }
      
      }
    
    }
    
    

    Sunday, September 26, 2010 9:48 PM
  • Fiz umas alterações nesses lugares:

      int valor = 0; int.Parse(txt_Valor.Text);     Muda para     int valor = int.Parse(txt_Valor.Text);

     

    e tira esse if

          if (a < 9)
          {
            txt_Extenso.Text = ("Número inválido");
          }

          else
          {


    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    Monday, September 27, 2010 1:30 AM
  • valeu bruno, agora deu certo.

    Obrigado

    Monday, September 27, 2010 4:16 AM