Ir ao conteúdo
  • Cadastre-se
hrodwulf

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

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi @Simon Viegas

Eu não comecei nada ainda, fiquei perdido. 
Este é um exercício de um trabalho que a professora de algoritmo passou, mas ela não fez nada semelhante a isso.
Procurei em vários foruns e no google, achei alguns parecido, mas nada com vírgula e ponto.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×