Ir ao conteúdo
  • Cadastre-se
Otonashi Oliveira

VisualG Elabore um programa que receba 5 números e imprima somente os positivos.

Recommended Posts

Eu estou fazendo um curso gratis na internet e nao tenho ninguem para tirar minhas duvidas, por isso estou contando com você leitor para me ajudar a corrigir e chegar na resposta certa das questões que estou fazendo

 

Questão: Elabore um programa que receba 5 números e imprima somente os positivos.

 

Eu consegui fazer isso abaixo e pelo que parece, depois de eu apertar f9, surgiu algum resultado, mas nao sei se esta correto a forma que eu fiz. Por isso me diga se eu fiz certo ou nao

var
  valor, x :inteiro



inicio
  escreval ("digite um valor positivo")
  leia(valor)



  para x de 0 ate 5 faca
  escreva (valor + x)
  fimpara

 

Eu gostaria de saber tambem como seria caso ao invés de ele falar, ''imprima somente os positivos'' ele falasse ''imprima os negativos". Eu teria que mudar somente o sinal (+) para (-)?

 

Enfim, obrigado pela atenção e paciencia

Editado por DiF
Caro usuário, por gentileza use o botão CODE <> para postar seus códigos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde.

Você precisa de um condicional (SE) pra testar se o número digitado é maior do que 0. E somente imprimir se a condição for válida.

adicionado 0 minutos depois

Da forma que você fez ele vai pegar o número digitado e somar com o contador, o que não faz sentido.

Editado por Math.Pi
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

você já aprendeu listas?

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 minutos atrás, aerolipe disse:

você já aprendeu listas?

Ainda nao. O curso que estou fazendo é bem basico mesmo

adicionado 14 minutos depois
36 minutos atrás, Math.Pi disse:

Boa tarde.

Você precisa de um condicional (SE) pra testar se o número digitado é maior do que 0. E somente imprimir se a condição for válida.

adicionado 0 minutos depois

Da forma que você fez ele vai pegar o número digitado e somar com o contador, o que não faz sentido.

Eu fiz aqui só nao estou conseguindo fazer o que você disse ''E somente imprimir se a condição for válida''.

 

Qual é o comando que faz isso que você disse para eu tentar aqui?

Compartilhar este post


Link para o post
Compartilhar em outros sites

se (número > 0)

 mostra

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao, eu fiz assim:

 

var

 valor, x :inteiro



inicio
  escreval ("digite um valor positivo")
  leia(valor)

  se (valor > 0) entao
  escreval ("valor positivo")
  senao
  escreval ("valor negativo")
  fimse


  

Mas eu percebi que não é assim que a questão quer que você faça. Ele esta pedindo para que o programa receba 5 numeros, ou seja, quando eu apertar f9 eu tenho que informar cinco numeros e nao só um que nem ficou esse algoritmo acima. Por isso eu tentei desse jeito aqui 

var
  valor1: inteiro
  valor2: inteiro
  valor3: inteiro
  valor4: inteiro
  valor5: inteiro
  
inicio
  escreval ("digite primeiro valor")
  leia(valor1)
  
  escreval ("digite segundo valor")
  leia(valor2)
  
  escreval ("digite terceiro valor")
  leia(valor3)
  
  escreval ("digite quarto valor")
  leia(valor4)
  
  escreval ("digite quinto valor")
  leia(valor5)
  
  
  se (valor 1 ate 5 > 0) entao
  escreval ("valor positivo")
  senao

  escreval ("valor negativo")
  fimse

 

Mas alguma coisa nao esta dando certo

 

 

 

Editado por DiF
Caro usuário, por gentileza use o botão CODE <> para postar seus códigos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o enunciado pede primeiro para digitar os 5 números, você precisará usar um vetor para armazenar os dados. E depois percorrer esse vetor procurando os números positivos.

adicionado 1 minuto depois
Em 14/09/2018 às 16:45, Otonashi Oliveira disse:

 


var
  valor1: inteiro
  valor2: inteiro
  valor3: inteiro
  valor4: inteiro
  valor5: inteiro
  
inicio
  escreval ("digite primeiro valor")
  leia(valor1)
  
  escreval ("digite segundo valor")
  leia(valor2)
  
  escreval ("digite terceiro valor")
  leia(valor3)
  
  escreval ("digite quarto valor")
  leia(valor4)
  
  escreval ("digite quinto valor")
  leia(valor5)
  
  
  se (valor 1 ate 5 > 0) entao
  escreval ("valor positivo")
  senao
  fimse

 

Mas alguma coisa nao esta dando certo

 

 

 

Desse jeito aqui, você terá um trabalho multiplicado de ter que ler um por um e depois comparar um por um.

Editado por DiF
Editei apenas para colocar o código dentro da citação com o botão CODE <>
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao, o enunciado diz somente aquilo que pede na questão, eu nao sei exatamente se o que eu disse acima esta certo ou nao, principalmente por se tratar de um curso basico onde estou estudando o comando ''Para''. Eu vou estudar esses vetores que você disse, mas levando em questão que eu estou estudando o comando ''Para'', alem de ser somente um curso basico, você diria que essa resolução abaixo esta correta, baseando-se somente na questão? Pois acredito que essa questão seja bem simples, sem fugir muito do comando Para, pois se trata disso que eu estou estudando. Caso a resolução abaixo esteja no caminho certo, eu preciso entender como eu chego na resposta certa

var

 valor, x :inteiro



inicio
  escreval ("digite um valor positivo")
  leia(valor)

  se (valor > 0) entao
  escreval ("valor positivo")
  senao
  escreval ("valor negativo")
  fimse

 

Editado por DiF
Caro usuário, por gentileza use o botão CODE <> para postar seus códigos.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 14/09/2018 às 16:47, Math.Pi disse:

Se o enunciado pede primeiro para digitar os 5 números, você precisará usar um vetor para armazenar os dados. E depois percorrer esse vetor procurando os números positivos.

adicionado 1 minuto depois

Desse jeito aqui, você terá um trabalho multiplicado de ter que ler um por um e depois comparar um por um.

Eu pesquisei o que era vetores e tentei corrigir do meu jeito. Eu acredito que a parte do comando Para até Fimpara esteja correto, só nao estou conseguindo corrigir a partir do comando Se até Fimse


 

var
  v: vetor [1..5] de inteiro
  indice:inteiro
inicio

  para indice de 1 ate 5 faca
  escreva ("digite um valor ", indice, " :")
  leia(v[indice])
  fimpara
  
  se indice > 0 entao
  escreva ("valor positivo ")
  senao
  escreva ("valor negativo ")
  fimse

 

Editado por DiF
Caro usuário, por gentileza use o botão CODE <> para postar seus códigos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Vou tentar explicar um possível desenvolvimento..

 

 

Tomemos como base o problema proposto:

Em 14/09/2018 às 15:14, Otonashi Oliveira disse:

Questão: Elabore um programa que receba 5 números e imprima somente os positivos.

 

 

1#

De um modo geral, a primeira coisa se fazer é ENTENDER O PROGRAMA. Então, o que é um número positivo? como vamos resolver um problema que não sabemos do que se trata???

 

Segundo o Wikipedia:

Citação

Intuitivamente, um número real n é positivo se é maior que 0.

Às vezes diz-se que n é positivo quando é maior ou igual que 0, para introduzir o termo de "estritamente positivo", que excluiria o caso "n igual a 0".

Se considerar-se que n é positivo se é maior que 0, então inclui-se o caso "n igual a 0" dizendo que não é negativo. Ou seja, -5 < 0

 

Veja, ainda estamos numa etapa de entender o problema, correto? segundo essa definição, os positivos pode ser entendidos como começando do 0 em diante. Entende? se 0 for positivo, como sugerido pelo artigo, o algoritmo já começaria sendo implementado de modo errado, pois foi usado ">0", em vez de ">=0".

 

Para efeitos práticos, tomemos que de fato é apenas para o MAIORES QUE 0, ou seja, considerando que 0 não é positivo. Mas temos que ter em mente que existe outra possibilidade. Beleza? Apenas vamos usar o que achamos mais provável, ou seja, supostamente o que se deseja (como existe uma suposta dúvida, seria interessante consultar quem sugeriu esse problema... se for um livro, talvez apenas achar a forma mais provável.)

 

 

RESUMINDO:

No nosso contexto, números positivos são números reais que são maiores que 0. Creio que segue o senso comum.

 

 

 

2#

Sobre:

Em 14/09/2018 às 16:45, Otonashi Oliveira disse:

[...]

Mas eu percebi que não é assim que a questão quer que você faça. Ele esta pedindo para que o programa receba 5 numeros, ou seja, quando eu apertar f9 eu tenho que informar cinco numeros e nao só um que nem ficou esse algoritmo acima. Por isso eu tentei desse jeito aqui 


var
  valor1: inteiro
  valor2: inteiro
  valor3: inteiro
  valor4: inteiro
  valor5: inteiro
  
inicio
  escreval ("digite primeiro valor")
  leia(valor1)
  
  escreval ("digite segundo valor")
  leia(valor2)
  
  escreval ("digite terceiro valor")
  leia(valor3)
  
  escreval ("digite quarto valor")
  leia(valor4)
  
  escreval ("digite quinto valor")
  leia(valor5)
  
  
  se (valor 1 ate 5 > 0) entao
  escreval ("valor positivo")
  senao

  escreval ("valor negativo")
  fimse

 

Mas alguma coisa nao esta dando certo

 

O quê ou onde está dando errado? Enfim. Seria necessário tentar entender o que ocorre. Quando um código é implementando, ao executar é esperando um resultado... se não ocorre, tem que tentar identificar o que está divergente... tá dando erro (tranvando) ou está dando uma resposta incorreta?

 

Executando esse código, poderia dizer algo como: "Ao executar e inserir os números, está dando erro no se", ou seja, o erro está provavelmente na expressão lógica do se.

 

 

 

3#

Vamos lá:
Uma sugestão inicial é que sempre tentar deixar o código compilável. Ex.: supondo que estou começando a implementar esse código. Inicialmente poderia ficar com algo assim:

algoritmo "FCdH"
var
   numero :real

inicio


fimAlgoritmo //<-- se coloquei o "inicio" já coloco o seu respectivo "fim".

 

Outro ponto seria tentar dividir o programa em partes mais simples. Como assim? veja, como vou verificar algo em 5 números se nem sei como verificar com apenas 1? ou seja, é mais simples verificar apenas um número... entender a estrutura e só posteriormente tentar implementar para mais (números)...

 

Seria como tentar fazer:
Questão: Elabore um programa que receba 1 (UM) número e imprima se é positivo.

 

ex. hipotético:

algoritmo "FCdH"
var
   numero :real

inicio
escreval("Digite um número real")
leia(numero)
se (numero > 0) entao
   escreval(numero," é positivo")
senao
   escreval(numero," é negatio")
fimSe //<--aqui mesma coisa. A estrutura que estou construindo sempre deve ficar
      //completa, ou seja, se fiz um se, tenho que colocar o seu respectivo fimse
fimAlgoritmo

Aí fazemos alguns testes. É relativamente simples, pois só existem 3 possibilidades: maiores que zero, o zero em si e os menos que 0.

 

Vemos que já temos 2 problemas:
- Zero está dando como negativo. O 0 é negativo mesmo? (não mesmo. Por sinal, como citado, poderia ser considerado positivo...);

- Em que momento problema está solicitando para verificar se um número é negativo ou positivo? o programa apenas diz: «imprima somente os positivos.», ou seja, a implementação inicial do código não está seguindo o que foi pedido.  Ele pede para "ler número e imprimir aqueles que são positivos"...

 

Poderia ser algo como:

algoritmo "FCdH"
var
   numero :real

inicio
escreval("Digite um número real")
leia(numero)
se (numero > 0) entao
   escreval(numero)
fimSe
fimAlgoritmo

 

Agora sim. Se o número é positivo, eu imprimo. Se não for... não faço nada!!!

 

 

Já responde a sua dúvida:

Em 14/09/2018 às 16:58, Otonashi Oliveira disse:

você diria que essa resolução abaixo esta correta, baseando-se somente na questão?

 

Nessa caso: não está correta. Pois ele não pede para dizer se é positivo ou negativo, mas apenas imprimir os positivos. Além da questão que está considerando erroneamente o 0 como negativo, ou seja, está "respondendo uma pergunta que não foi feita" e ao mesmo "errando a resposta para essa pergunta".

 

 

 

3#

Supostamente já conseguimos responder para um número. Como fazer para N números? só replicar: ex.:

algoritmo "FCdH"
var
   numero1 :real
   numero2 :real

inicio
escreval("Digite o primeiro número real  ")
leia(numero1)
escreval("Digite o segundo número real ")
leia(numero2)

se (numero1 > 0) entao
   escreval(numero1)
fimSe
se (numero2 > 0) entao
   escreval(numero2)
fimSe
fimAlgoritmo

 

Ou seja, leio 2 números e verifico cada um depois.

E com 5?

algoritmo "FCdH"
var
   numero1 :real
   numero2 :real
   numero3 :real
   numero4 :real
   numero5 :real

inicio
escreval("Digite o primeiro número real  ")
leia(numero1)
escreval("Digite o segundo número real ")
leia(numero2)
escreval("Digite o terceiro número real ")
leia(numero3)
escreval("Digite o quarto número real ")
leia(numero4)
escreval("Digite o quinto número real ")
leia(numero5)

se (numero1 > 0) entao
   escreval(numero1)
fimSe
se (numero2 > 0) entao
   escreval(numero2)
fimSe
se (numero3 > 0) entao
   escreval(numero3)
fimSe
se (numero4 > 0) entao
   escreval(numero4)
fimSe
se (numero5 > 0) entao
   escreval(numero5)
fimSe

fimAlgoritmo

Alguma dúvida sobre a parte da "replicação"?

 

 

 

4#

Ah! eu estou usando 5 variáveis repetidas. No decorrer do curso veria que existe um conceito chamado vetores.

algoritmo "FCdH"
var
   numeros :vetor [1..5] de real
   
inicio
escreval("Digite o primeiro número real  ")
leia(numeros[1])
escreval("Digite o segundo número real ")
leia(numeros[2])
escreval("Digite o terceiro número real ")
leia(numeros[3])
escreval("Digite o quarto número real ")
leia(numeros[4])
escreval("Digite o quinto número real ")
leia(numeros[5])

se (numeros[1] > 0) entao
   escreval(numeros[1])
fimSe
se (numeros[2] > 0) entao
   escreval(numeros[2])
fimSe
se (numeros[3] > 0) entao
   escreval(numeros[3])
fimSe
se (numeros[4] > 0) entao
   escreval(numeros[4])
fimSe
se (numeros[5] > 0) entao
   escreval(numeros[5])
fimSe

fimAlgoritmo

 

Alguma dúvida sobre essa parte dos vetores?

 

 

 

5#

Outro conceito que existe é dos laços de repetições, ou seja, seria possível reorganizar para evitar essas repetições... perceba que de um número para outro só muda o número da variável.... logo:

algoritmo "FCdH"
var
   numeros :vetor [1..5] de real
   i       :inteiro
   
inicio

para i de 1 ate 5 faca
   escreval("Digite o",i,"º número real ")
   leia(numeros[i])
fimPara

escreval()
escreval("Número positivos:")
para i de 1 ate 5 faca
   se (numeros[i] > 0) entao
      escreval(numeros[i])
   fimSe
fimPara

fimAlgoritmo

 

 

Perceba que são 3 conceitos distintos:

- Estrutura de seleção;

- Vetores;

- Estrutura de repetição;

 

O interessante é que para implementar o laço de repetição (para) se faz necessário também implementar o conceito de vetores. São duas coisas complemente distintas..  apenas que podem se interagir.

 

 

***

 

No aguardo.

Editado por Simon Viegas
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agradeço muito a ajuda prestada, vou anota-las e estuda-las. Só fiquei com uma duvida:

Em 16/09/2018 às 12:33, Simon Viegas disse:

numeros :vetor [1..5] de real

Estaria certo tb se eu colocasse "inteira"?

Editado por Otonashi Oliveira

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre:

14 horas atrás, Otonashi Oliveira disse:

[...] Só fiquei com uma duvida:

Estaria certo tb se eu colocasse "inteira"?

 

Talvez sim. Mas como fala de "números", entendo que usar real seria mais próximo... Lembrando que o conjunto dos reais englobam os inteiros também. Se usar inteiro estará limitando o escopo/alcance do programa.

 

Já no caso do i, este sim "não poderia" ser real... pois o escopo dele é apenas de números inteiros*. O i vai de 1 até "a quantidade de números"... essa quantidade é apenas inteira (no caso natural), não haveria necessidade de definir como real.

 

obs.: fora que o para não aceita real. Mas mesmo que aceitasse, ficaria "estranho" definir o i como real. Costumo remeter a questão da "coerência".

 

 

 

  • 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

×