Ir ao conteúdo
  • Cadastre-se

Visualg "entrada em número e gerar o seu valor correspondente por extenso."


Posts recomendados

Bom dia pessoal, estou aprendendo a programar e me deparei com um exercício que começou a bugar minha cabeça. Gostaria que vocês pudessem me ajudar. Eu só aprendi a usar (se, senão, enquanto, repita) - Visualg

 

O exercício é o seguinte: 

A tarefa consiste em receber um número como entrada e gerar o seu valor correspondente por extenso. O número n, fornecido na entrada, deverá ser tal que 0 < n < 1.000,00. Valores fora deste intervalo devem ser recusados, através de uma mensagem de erro. Como se trata de valores monetários, após a vírgula deverão existir exatamente 2 dígitos. Caso isto não ocorra, o sistema deve mostrar uma mensagem de erro. Ao escrever o valor por extenso deverão ser respeitadas as regras relacionadas a singular e plural. Na entrada do número é obrigatório o uso do ponto como marcador de milhagens. Os centavos devem ser separados por vírgula.

Exemplo 1:
Entrada: 1,32
Saída: Um real e trinta e dois centavos


Não estou conseguindo faze-lo, alguém poderia clarear minha mente?
Desde já agradeço a atenção de todos.
 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @hrodwulf.

 

Por favor, poste o que já conseguiu fazer e onde está com dúvidas.

 

Caso ainda não tenha feito muita coisa, tente fazer inicialmente um programa mais simples. Por exemplo, que que escreva apenas em relação de 0 a 10. (Zero, Um, Dois, Três... etc)

 

No aguardo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Tente fazer algo...

 

A proposta que passei não tem mistério.

53 minutos atrás, Simon Viegas disse:

Por exemplo, que que escreva apenas em relação de 0 a 10. (Zero, Um, Dois, Três... etc)

Você vai "ler o número do usuário" (comando leia) e verificar se o valor é um determinado número (estrutura se). Algo como: "Se" número igual a 0, "escreva" 'zero', "se" o número igual a 1, escreva 'um' (para escrever usar o  comando escreva ou escreval)...

 

 

Ex. de estrutura base:

Algoritmo "NumeroPorExtenso"
Var
  numero :inteiro


Inicio
escreval("PROGRAMA QUE ESCREVE UM NUMERO POR EXTENSO")





fimAlgoritmo

 

No aguardo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

algoritmo "Preenche Cheque"
// Data : 04/10/2016
var
   num: inteiro
inicio
   repita
   escreval("Preenche Cheque Automático.")
   escreval(" ")
   escreval("Digite o valor desejado: ")
   leia(num)
   escreval(" ")
      se (num < 0) ou (num > 10) então
      escreval("Valor inválido")
      fimse
   ate (num > 0) ou (num <= 10)
   
   se (num = 0) então
   escreval("Zero")
   fimse
   se (num = 1) então
   escreval("Um")
   fimse
   se (num = 2) então
   escreval("Dois")
   fimse
   se (num = 3) então
   escreval("Três")
   fimse
   se (num = 4) então
   escreval("Quatro")
   fimse
   se (num = 5) então
   escreval("Cinco")
   fimse
   se (num = 6) então
   escreval("Seis")
   fimse
   se (num = 7) então
   escreval("Sete")
   fimse
   se (num = 8) então
   escreval("Oito")
   fimse
   se (num = 9) então
   escreval("Nove")
   fimse
   se (num = 10) então
   escreval("Dez")
   fimse
 
fimalgoritmo

 

Assim @Simon Viegas ? Travei por aqui.

adicionado 19 minutos depois

Valeu @dif, não errarei mais.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Certo...

 

Agora, em relação a esse código, você precisa ajustar o "tipo de seleção", ou seja, a forma que o "se" deve se comportar. Como são condições mutualmente exclusivas entre si (se é uma coisa, não vai ser outra), logo devem-se utilizar o "se\senão" (e não só se puro). Pois do jeito que está, o programa sempre irá verificar TODAS as condições, onde deveria "parar de verificar" assim que uma condição seja verdadeira (pois os outros não tem como ser mais, entende?).

 

Resumindo:

Mude esses "se" para "se/senão"

 

Após isso, tente agora fazer outro programa: Por exemplo, que que escreva por extenso os número que vão de 20 a 99 (incluindo-os).

 

Veja que agora não será tão prático fazer um monte de se/não... esse programa deverá separar de alguma forma as casas decimais, ou seja, dezena e unidade. Ficando "vinte", "trinta", "quarenta" etc, e depois o o "e um", "e dois", "e três", "e quatro" etc...

 

Resumindo:

Precisa verificar alguma forma de separar as dezenas das unidades. (o restante acho que é mais fácil, já que é a mesma base do que você já fez)

 

Obs.: Sugiro que primeiro faça a alteração para o se/senão e poste aqui no fórum.... e após, tentar imaginar como fazer o novo código que vai de 20 a 99.

 

No aguardo.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Simon Viegas Dessa forma que eu devo fazer o se/senão?

 

algoritmo "Preenche Cheque"
// Função : Preenche cheque
// Data : 04/10/2016

var
   num: inteiro
inicio

   repita
   escreval("Preenche Cheque Automático.")
   escreval(" ")
   escreva("Digite o valor desejado: ")
   leia(num)
   escreval(" ")
      se (num < 0) ou (num > 10) então
      escreval("Valor inválido")
      fimse
   ate (num > 0) ou (num <= 10)
   
   se (num = 0) então
   escreval("Zero")
   fimse

   se (num = 1) então
   escreval("Um")
   senao
        se (num = 2) então
        escreval("Dois")
        senao
           se (num = 3) então
           escreval("Três")
           senao
              se (num = 4) então
              escreval("Quatro")
              senao
                 se (num = 5) então
                 escreval("Cinco")
                 senao
                    se (num = 6) então
                    escreval("Seis")
                    senao
                       se (num = 7) então
                       escreval("Sete")
                       senao
                          se (num = 8) então
                          escreval("Oito")
                          senao
                             se (num = 9) então
                             escreval("Nove")
                             senao
                                se (num = 10) então
                                escreval("Dez")
                                fimse
                             fimse
                          fimse
                       fimse
                    fimse
                 fimse
              fimse
           fimse
        fimse
   fimse
 
fimalgoritmo

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Isso..

 

Obs.: precisa corrigir a condição do ate. Experimente digitar um valor maior que 10 ou menor ou igual a 0...

 

Para adiantar:

36 minutos atrás, hrodwulf disse:

ate (num > 0) ou (num <= 10)

Esqueceu de incluir o 0, teria que utilizar o "="... e está utilizando ou, mas deveria ser e.  (no "ou", se uma condição for verdadeira, a expressão é verdadeira, mas o que você precisa que "ambas sejam verdadeiras" - "o número tem que ser maior ou igual a 0 E menor ou igual a 10)

 

Lá nos se, qual o preconceito com o "0"??? :D. É necessário um senão lá também. (veja, se for "0", não poderá ser "1", ou "2" etc)

 

Antes de ajustar o código, experimente utilizar o recurso do "F8" lá no VisuaAlg... cada vez que vai pressionando, o programa vai andando uma linha (a linha fica em azul)... Faça alguns testes... informe um valor como "5", e veja como vai ser o fluxo (verás que depois do 5 pula pro final). Após insira o "0" e veja como ocorre (e outros valores diferentes também).

 

Próximo passo é ir para:

58 minutos atrás, Simon Viegas disse:

...tente agora fazer outro programa: Por exemplo, que que escreva por extenso os número que vão de 20 a 99 (incluindo-os).

Mas antes!!! Veja que para seu contexto existe uma outra estrutura mais organizada de seleção: o escolha. Em vez de "um monte de se/senão", altere para escolha.

 

Resumindo:

- Experimente alguns testes utilizando o F8;

- Altere os se/senão para escolha; (só ai, você já dá uma "revisada" em se, se/senão e escolha)

- Tente implementar um novo código que vai de 20 a 99. (pode usar como base esse atual).

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Bom dia @Simon Viegas, ontem não deu pra eu continuar, mas agora de manhã eu já alterei para o escolha.

 

algoritmo "Preenche Cheque"
// Função : Preenche cheque
// Data : 04/10/2016

var
   num: inteiro
inicio

   repita
   escreval("Preenche Cheque Automático.")
   escreval(" ")
   escreva("Digite o valor desejado: ")
   leia(num)
   escreval(" ")
      se (num < 0) ou (num > 10) então
      escreval("Valor inválido")

      fimse
   ate (num >= 0) e (num <= 10)

escolha(num)
caso 0
escreval("Zero")
caso 1
escreval("Um")
caso 2
escreval("Dois")
caso 3
escreval("Três")
caso 4
escreval("Quatro")
caso 5
escreval("Cinco")
caso 6
escreval("Seis")
caso 7
escreval("Sete")
caso 8
escreval("Oito")
caso 9
escreval("Nove")
caso 10
escreval("Dez")
fimescolha

fimalgoritmo

Eu estou com dificuldades de como fazer para separar dezenas de unidades nesta parte do programa de 20 a 99, não estou conseguindo uma ideia de como fazer isso.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @hrodwulf,

 

Vamos lá:

 

1) Identação

Sempre mantenha seu código identando (ia dizer "bem identado", mas é  redundância! ou tá ou não tá, rs)

 

Abaixo um exemplo:

Spoiler

algoritmo "Preenche Cheque"
// Função : Preenche cheque
// Data : 04/10/2016
var
  num: inteiro
inicio
repita
  escreval("Preenche Cheque Automático.")
  escreval //eu parcularmente prefiso pular a linha assim!
  escreva("Digite o valor desejado: ")
  leia(num)
  escreval("") //ou deixe sem em espaço dentro
  se (num < 0) ou (num > 10) então
    escreval("Valor inválido")
  fimse
ate (num >= 0) e (num <= 10)
escolha(num)
  caso 0
    escreval("Zero")
  caso 1
    escreval("Um")
  caso 2
    escreval("Dois")
  caso 3
    escreval("Três")
  caso 4
    escreval("Quatro")
  caso 5
    escreval("Cinco")
  caso 6
    escreval("Seis")
  caso 7
    escreval("Sete")
  caso 8
    escreval("Oito")
  caso 9
    escreval("Nove")
  caso 10
    escreval("Dez")
  fimEscolha
fimAlgoritmo

 

Nesse caso, utilizado 2 espaços como "dentes".

 

2) Separar casas decimais

Temos pelo menos duas formas:

 

a - Utilizando utilizando "números" (inteiro ou real) mesmo e utilizando recursos de divisões e de "pegar o resto"... Nesse processo dá para ir separando e coletando os valores;

 

b - Utilizando caracter, existem funções prontas que conseguem "pegar" o caractere em determinada posição, logo na última posição teremos as "unidades", na segunda as "dezenas" etc. Acho que seria mais prático por aqui...

Vou deixar você tentar analisar e implementar.. vide "Funções para manipulação de cadeias de caracteres" em VisuaAlg

 

***

 

Então, a primeira etapa seria "conseguir separar". Tendo isso, basta "selecionar os textos correspondentes".

 

No aguardo.

 

No aguardo.

 

 

 

 

 

 

adicionado 3 minutos depois

PS: adianto que utilizando caracter, os se podem não funcionar corretamente (no Pascal por exemplo, > e < funcionam com caracter (char), acho que no VisuAlg não). Para tanto, é também possível converter o número de "caracter" para "inteiro", daí usar nos se normalemnte). Como converter? dê seus pulos!

 

No aguardo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...