Ir ao conteúdo

Posts recomendados

Postado

Olá pessoal, boa tarde!

Estou com dificuldade neste exercício na linguagem Portugol.

 

Algoritmo "Exercicio 19"

Faça um Programa que leia um número inteiro menor que 1000 e imprima a
quantidade de centenas, dezenas e unidades do mesmo.
Observando os termos no plural a colocação do "e", da vírgula entre outros.

Exemplo:
326 = 3 centenas, 2 dezenas e 6 unidades
12 = 1 dezena e 2 unidades Testar com: 326, 300, 100, 320, 310,305, 301, 101,
311, 111, 25, 20, 10, 21, 11, 1, 7 e 16

 

Var
   numero: inteiro
   d,c,u : real

Inicio
   escreva("Digite um numero menor ou igual a 1000: ")
   leia(numero)

   se numero <= 1000 então
      c <- numero / 100
      d <- (( numero- ( c* 100 )) / 10)
      u <- ( numero-( c * 100 + d * 10))
      escreval(c, " centenas.")
      escreval(d, " dezenas.")
      escreval(u, " unidades.")
   senao
      escreva("Valor invalido")
   fimse
Fimalgoritmo

 

Eu fiz dessa forma a linhagem de código. Pensei que era desta forma e o programa só está lendo a Centena e o restante não.

Alguém pode me passar, onde está o erro e se for possível EXPLICAR A possível SOLUÇÃO? Desde já agradeço muito!

  • Obrigado 1
  • Membro VIP
Postado

@Drelius, a base da lógica estaria certa. Aqui entraria basicamente a sintaxe. Segue:

1. para o c você precisa do resto da divisão, logo o operador seria "\" (em detrimento do "/");

2. para o d, há uma espécie de bug que não consegue calcular muito bem utilizando o tipo real, daí, mude para inteiro mesmo;

 

Segue código até o momento:

 

algoritmo "Separador de dígitos"
var
   numero : inteiro
   d, c, u : inteiro

Inicio
   escreva ("Digite um numero menor que 1000: ")
   leia(numero)

   se ((numero >= 0) E (numero < 1000)) então
      c <- numero \ 100
      d <- (numero - (c*100)) \ 10
      u <- numero - (c*100 + d*10)
      escreva (c, " centenas,")
      escreva (d, " dezenas e")
      escreval(u, " unidades.")
   senao
      escreva("Valor invalido")
   fimSe
fimAlgoritmo

 

Pequeno ajuste na formatação:

algoritmo "Separador de dígitos"
var
   numero : inteiro
   d, c, u : inteiro

Inicio
   escreva ("Digite um numero menor que 1000: ")
   leia(numero)

   se ((numero >= 0) E (numero < 1000)) então
      c <- numero \ 100
      d <- (numero - (c*100)) \ 10
      u <- numero - (c*100 + d*10)
      escreva (c:1, " centenas, ")
      escreva (d:1, " dezenas e ")
      escreval(u:1, " unidades.")
   senao
      escreva("Valor invalido")
   fimSe
fimAlgoritmo


Resultado:

image.png

Daí só inserir o restante da lógica.

- singular ou plural;

- não exibir quando for igual a 0;

- ajuste para uso correto de "," ou "e".

etc

 

Dica: vá sempre ajustando aos poucos... não tente fazer tudo de uma vez.

 

 

 

 

Adendo: 

Resolvendo o problema se fosse de fato necessário utilizar real:
 

algoritmo "Separador de dígitos"
var
   numero : inteiro
   d, c, u : real

Inicio
   escreva ("Digite um numero menor que 1000: ")
   leia(numero)

   se ((numero >= 0) E (numero < 1000)) então
      c <- numero \ 100
      d <- Int((numero - (c*100))) \ 10
      u <- numero - (c*100 + d*10)
      escreva (c:1, " centenas, ")
      escreva (d:1, " dezenas e ")
      escreval(u:1, " unidades.")
   senao
      escreva("Valor invalido")
   fimSe
fimAlgoritmo

 


Adendo 2: mas já adianto! Um mais correto seria utilizar inteiro mesmo, já que cada dígito é apenas inteiro...

No aguardo.

 

Adendo 3: "como cheguei a essa conclusão sobre o bug na divisão de reais". Fui testando... a lógica parecia certa. Inseri um valor inteiro (ex.: 23 \ 10) e deu certo, ou seja, o problema era que c era real.. Poderia fazer assim:
 

d <- (numero - (Int(c)*100)) \ 10


Por sinal, ficaria até mais elegante...

 

Daí, se poderia inferir que o operador \ foi projetado para trabalhar apenas com inteiros... (não tenho certeza).

  • Obrigado 1
  • Amei 1
Postado
1 hora atrás, Simon Viegas disse:

@Drelius, a base da lógica estaria certa. Aqui entraria basicamente a sintaxe. Segue:

1. para o c você precisa do resto da divisão, logo o operador seria "\" (em detrimento do "/");

2. para o d, há uma espécie de bug que não consegue calcular muito bem utilizando o tipo real, daí, mude para inteiro mesmo;

 

Segue código até o momento:

 

algoritmo "Separador de dígitos"
var
   numero : inteiro
   d, c, u : inteiro

Inicio
   escreva ("Digite um numero menor que 1000: ")
   leia(numero)

   se ((numero >= 0) E (numero < 1000)) então
      c <- numero \ 100
      d <- (numero - (c*100)) \ 10
      u <- numero - (c*100 + d*10)
      escreva (c, " centenas,")
      escreva (d, " dezenas e")
      escreval(u, " unidades.")
   senao
      escreva("Valor invalido")
   fimSe
fimAlgoritmo

 

Pequeno ajuste na formatação:

algoritmo "Separador de dígitos"
var
   numero : inteiro
   d, c, u : inteiro

Inicio
   escreva ("Digite um numero menor que 1000: ")
   leia(numero)

   se ((numero >= 0) E (numero < 1000)) então
      c <- numero \ 100
      d <- (numero - (c*100)) \ 10
      u <- numero - (c*100 + d*10)
      escreva (c:1, " centenas, ")
      escreva (d:1, " dezenas e ")
      escreval(u:1, " unidades.")
   senao
      escreva("Valor invalido")
   fimSe
fimAlgoritmo


Resultado:

image.png

Daí só inserir o restante da lógica.

- singular ou plural;

- não exibir quando for igual a 0;

- ajuste para uso correto de "," ou "e".

etc

 

Dica: vá sempre ajustando aos poucos... não tente fazer tudo de uma vez.

 

 

 

 

Adendo: 

Resolvendo o problema se fosse de fato necessário utilizar real:
 

algoritmo "Separador de dígitos"
var
   numero : inteiro
   d, c, u : real

Inicio
   escreva ("Digite um numero menor que 1000: ")
   leia(numero)

   se ((numero >= 0) E (numero < 1000)) então
      c <- numero \ 100
      d <- Int((numero - (c*100))) \ 10
      u <- numero - (c*100 + d*10)
      escreva (c:1, " centenas, ")
      escreva (d:1, " dezenas e ")
      escreval(u:1, " unidades.")
   senao
      escreva("Valor invalido")
   fimSe
fimAlgoritmo

 


Adendo 2: mas já adianto! Um mais correto seria utilizar inteiro mesmo, já que cada dígito é apenas inteiro...

No aguardo.

 

Adendo 3: "como cheguei a essa conclusão sobre o bug na divisão de reais". Fui testando... a lógica parecia certa. Inseri um valor inteiro (ex.: 23 \ 10) e deu certo, ou seja, o problema era que c era real.. Poderia fazer assim:
 

d <- (numero - (Int(c)*100)) \ 10


Por sinal, ficaria até mais elegante...

 

Daí, se poderia inferir que o operador \ foi projetado para trabalhar apenas com inteiros... (não tenho certeza).

Simplesmente obrigado demais demais meu caro amigo!!!!

Eu agradeço demais tanta pela ajuda da resolução quanto a belíssima explicação. Obrigado mesmo!!!

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!