Ir ao conteúdo
  • Cadastre-se

VisualG Estudo de Caso - Faça a Leitura de 60 Idades e Agrupe em três faixas etárias


Ir à solução Resolvido por Simon Viegas,

Posts recomendados

Boas, estou tentando resolver este problema mas estou tendo problemas para listar as idades nas respetivas faixas etárias, vou passar o Código que já tenho feito. Tentei obter numa questão similar que está num outro tópico mas estou esbarrando no mesmo problema. 

 

O problema pede 60 entradas de idades mas para testar estou colocando apenas 5 entradas de Idades.

var
   idades: vetor [1..5] de Inteiro
   menores: vetor [1..5] de Inteiro
   adulto: vetor [1..5] de Inteiro
   idoso: vetor [1..5] de Inteiro
   Cont, CI, CM, CA, CID: Inteiro
Procedimento Topo()

Inicio
      Escreval("=========================================")
      Escreval("|        E S T U D O  DE C A S O        |")
      Escreval("=========================================")
      Escreval("|          LÓGICA DE PROGRAMAÇÃO        |")
      Escreval("=========================================")
FimProcedimento
inicio
// Seção de Comandos 
   Para Cont <- 1 ate 5 faca // Entrada e contagem de Idades por Faixa etária
        Topo()
        Escreva("Digite a Idade do ", Cont,"º Aluno: ")
        Leia(idades[Cont])
        CI <- CI + 1 // Contagem Integral
        Se (idades[Cont] >= 0) e (idades[Cont] <= 18) entao
           menores[Cont] <- idades[Cont]  // Armazena os menores de idade no Vetor menores
           CM <- CM + 1
        FimSE
        Se (idades[Cont] > 18) e (idades[cont] <= 60) entao
           adulto[Cont] <- idades[Cont]
           CA <- CA + 1
        FimSE
        Se (idades[Cont] > 60) entao
           idoso[Cont] <- idades[Cont]
           CID <- CID + 1
        FimSe
        LimpaTela
   FimPara
   
   Topo()
   Escreva("Menores: ")
   Para Cont <- 1 ate CM faca
          escreva(menores[Cont],", ")
   FimPara
   Escreval(" ")
   Escreva("Adultos: ")
   Para Cont <- 1 ate CA faca
          escreva(adulto[Cont], ", ")
   FimPara
   Escreval(" ")
   Escreva("Idosos: ")
   Para Cont <- 1 ate CID faca
        Escreva(idoso[Cont], ", ")
   FimPara

fimalgoritmo

 


Essencialmente tenho um grande problema, se introduzir todas as idades numa faixa etária, o programa retorna os valores corretamente na respectiva faixa etária. Caso introduza idades de diferentes faixas etárias, ele já bagunça tudo, retorna entradas vazias e omite as entradas corretas. Olhando o Escopo, as informações estão sendo armazenadas nos locais corretos e os contadores acumulam os valores devidos, então não sei onde esteja o erro. A Versão que estou a usar o VisalG é a 2.0.

Tentei sem sucesso usar Se <> 0 e repetir o Se por idade nos ciclos (Para) das faixas etárias mas o problema repete-se. 

Tem ainda a questão da virgula final que gostaria de substituir por um Ponto final que também não encontrei solução. 

Quem poder ajudar desde já agradeço.

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

1 hora atrás, Bruno Condado disse:

Boas, estou tentando resolver este problema mas estou tendo problemas para listar as idades nas respetivas faixas etárias, vou passar o Código que já tenho feito. Tentei obter numa questão similar que está num outro tópico mas estou esbarrando no mesmo problema. 

 

O problema pede 60 entradas de idades mas para testar estou colocando apenas 5 entradas de Idades.


var
   idades: vetor [1..5] de Inteiro
   menores: vetor [1..5] de Inteiro
   adulto: vetor [1..5] de Inteiro
   idoso: vetor [1..5] de Inteiro
   Cont, CI, CM, CA, CID: Inteiro
Procedimento Topo()

Inicio
      Escreval("=========================================")
      Escreval("|        E S T U D O  DE C A S O        |")
      Escreval("=========================================")
      Escreval("|          LÓGICA DE PROGRAMAÇÃO        |")
      Escreval("=========================================")
FimProcedimento
inicio
// Seção de Comandos 
   Para Cont <- 1 ate 5 faca // Entrada e contagem de Idades por Faixa etária
        Topo()
        Escreva("Digite a Idade do ", Cont,"º Aluno: ")
        Leia(idades[Cont])
        CI <- CI + 1 // Contagem Integral
        Se (idades[Cont] >= 0) e (idades[Cont] <= 18) entao
           menores[Cont] <- idades[Cont]  // Armazena os menores de idade no Vetor menores
           CM <- CM + 1
        FimSE
        Se (idades[Cont] > 18) e (idades[cont] <= 60) entao
           adulto[Cont] <- idades[Cont]
           CA <- CA + 1
        FimSE
        Se (idades[Cont] > 60) entao
           idoso[Cont] <- idades[Cont]
           CID <- CID + 1
        FimSe
        LimpaTela
   FimPara
   
   Topo()
   Escreva("Menores: ")
   Para Cont <- 1 ate CM faca
          escreva(menores[Cont],", ")
   FimPara
   Escreval(" ")
   Escreva("Adultos: ")
   Para Cont <- 1 ate CA faca
          escreva(adulto[Cont], ", ")
   FimPara
   Escreval(" ")
   Escreva("Idosos: ")
   Para Cont <- 1 ate CID faca
        Escreva(idoso[Cont], ", ")
   FimPara

fimalgoritmo

 


Essencialmente tenho um grande problema, se introduzir todas as idades numa faixa etária, o programa retorna os valores corretamente na respectiva faixa etária. Caso introduza idades de diferentes faixas etárias, ele já bagunça tudo, retorna entradas vazias e omite as entradas corretas. Olhando o Escopo, as informações estão sendo armazenadas nos locais corretos e os contadores acumulam os valores devidos, então não sei onde esteja o erro. A Versão que estou a usar o VisalG é a 2.0.

Tentei sem sucesso usar Se <> 0 e repetir o Se por idade nos ciclos (Para) das faixas etárias mas o problema repete-se. 

Tem ainda a questão da virgula final que gostaria de substituir por um Ponto final que também não encontrei solução. 

Quem poder ajudar desde já agradeço.

Ao Fazer o Passo a Passo reparei que ele Cita as primeiras idades da respectiva faixa, imaginando que eu introduzo, 2, 23, 67, 25 e 7 -  Ele armazena CM: 2, 0, 0, 0, 7 / CA: 0, 23, 0, 25, 0/ CID: 0, 0, 67, 0, 0. Acumulando CM: 2/ CA: 2/ CID: 1 - aí ele em vez de passar os valores preenchidos passa, Menores: 2, 0, / Adulto: 0, 23, / Idoso: 0, . Acabei fazendo uma alteração Tirando os acumuladores específicos (CM, CA, CID) e usando o acumulador Geral (CI) com essa alteração ele retorna todos os valores, mas tenho o problema das casas vazias. Vou tentar inserir <> de zero, mas vai me levantar um problema na primeira faixa etária. Deixa ver se resulta!!!

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

Consegui resolver o problema por um caminho:

A Solução Passou por atribuir a todos os valores Vazios o valor de -1 na Faixa de menores (única que aceita o Zero como Idade) Dessa Forma no ciclo de repetição da Faixa de Menores consigo usar o Se para separa a idade Zero dos Espaços Vazios. Nas outras Faixas Só vai validar as opções <> de 0.

var
   idades: vetor [1..5] de Inteiro
   menores: vetor [1..5] de Inteiro
   adulto: vetor [1..5] de Inteiro
   idoso: vetor [1..5] de Inteiro
   Cont, CI, CM, CA, CID: Inteiro
Procedimento Topo()

Inicio
      Escreval("=========================================")
      Escreval("|      F A I X A S  E T Á R I A S       |")
      Escreval("=========================================")
      Escreval("|          LÓGICA DE PROGRAMAÇÃO        |")
      Escreval("=========================================")
FimProcedimento
inicio
// Seção de Comandos 
   CI <- 0
   CM <- 0
   CA <- 0
   CID <- 0
   Para Cont <- 1 ate 5 faca // Entrada e contagem de Idades por Faixa etária
        Topo()
        Escreva("Digite a Idade do ", Cont,"º Aluno: ")
        Leia(idades[Cont])
        CI <- CI + 1 // Contagem Integral
        Se (idades[Cont] >= 0) e (idades[Cont] <= 18) entao
           menores[Cont] <- idades[Cont]  // Armazena os menores de idade no Vetor menores
           CM <- CM + 1
        Senao
             menores[Cont] <- -1
        FimSE
        Se (idades[Cont] > 18) e (idades[cont] <= 60) entao
           adulto[Cont] <- idades[Cont]
           CA <- CA + 1
        FimSE
        Se (idades[Cont] > 60) entao
           idoso[Cont] <- idades[Cont]
           CID <- CID + 1
        FimSe
        LimpaTela
   FimPara
   
   Topo()
   Escreva("Menores: ")
   Para Cont <- 1 ate CI faca
        Se (menores[Cont] <> -1) entao
          escreva(menores[Cont],", ")
        FimSe
   FimPara
   Escreval(" ")
   Escreva("Adultos: ")
   Para Cont <- 1 ate CI faca
        Se (adulto[Cont] <> 0) entao
          escreva(adulto[Cont], ", ")
        FimSE
   FimPara
   Escreval(" ")
   Escreva("Idosos: ")
   Para Cont <- 1 ate CI faca
        Se (idoso [Cont] <> 0) entao
          Escreva(idoso[Cont], ", ")
        FimSE
   FimPara

fimalgoritmo

Para ficar perfeito, só falta a virgula final ser substituída por Ponto. Exemplo: no meu código vai aparecer

Menores: 2, 4, 6, e eu gostaria que retorna-se Menores: 2, 4, 6. Se alguém poder ajudar fico grato. Se encontrarem outro caminho de resolução fiquem á vontade para Postar.

Depois irei colocar o Código Final com o Exercício Completo. 

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

Para Cont <- 1 ate 5 faca // Entrada e contagem de Idades por Faixa etária
        Topo()
        Escreva("Digite a Idade do ", Cont,"º Aluno: ")
        Leia(idades[Cont])
        CI <- CI + 1 // Contagem Integral
        Se (idades[Cont] >= 0) e (idades[Cont] <= 18) entao
           menores[Cont] <- idades[Cont]  // Armazena os menores de idade no Vetor menores
           CM <- CM + 1
        FimSE

Essa é parte do código que tentei fazer, seria após a condição se fazer um clico de repetição, criando aí menores[CM]?

 

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

  • Membro VIP
  • Solução

 

Olá.

 

Cada vetor tem o seu próprio "contador". Bastaria utilizar. Algo como:

 

        se (idades[cont] >= 0) e (idades[cont] < 18) entao
          CM <- CM + 1 
          menores[CM] <- idades[cont]     
        fimSe

 

 

   escreva ("Menores: ")
   para cont <- 1 ate CM faca
        escreva (menores[cont],", ")
        fimSe
   fimPara

 

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

43 minutos atrás, Simon Viegas disse:

 

Olá.

 

Cada vetor tem o seu próprio "contador". Bastaria utilizar. Algo como:

 


        se (idades[cont] >= 0) e (idades[cont] < 18) entao
          CM <- CM + 1 
          menores[CM] <- idades[cont]     
        fimSe

 

 


   escreva ("Menores: ")
   para cont <- 1 ate CM faca
        escreva (menores[cont],", ")
        fimSe
   fimPara

 

Boas Amigo, 

Deu certo, estava no caminho certo, eu até tinha tentado fazer assim, mas deu um erro e assumi que seria por conta de Menores[CM].

Assim acabei achando o caminho pelas duas Soluções.

Em relação á Virgula no Final, não tem como tirar ela?

O algoritmo retorna/ Menores: 2, 4, 6, - E Gostaria que ele retorna-se / Menores: 2, 4, 6.

Vou estudar aqui para ver se consigo fazer essa troca. se souberes como fazer dá uma dica aí. 

Muito Obrigado pela ajuda

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
23 minutos atrás, Bruno Condado disse:

Em relação á Virgula no Final, não tem como tirar ela?

O algoritmo retorna/ Menores: 2, 4, 6, - E Gostaria que ele retorna-se / Menores: 2, 4, 6.

 

Sim tem. Tente entende como você quer imprimir o resultado e crie um algoritmo para imprimir dessa forma desejada... Vá tentando e testando...

 

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

Em 06/04/2021 às 15:35, Simon Viegas disse:

 

Sim tem. Tente entende como você quer imprimir o resultado e crie um algoritmo para imprimir dessa forma desejada... Vá tentando e testando...

 

Boas achei um caminho para Retirar a Virgula Final e terminar com Ponto Final.

Para Fins práticos vou colocar só o código respeitante a uma categoria no Ponto onde é feita a separação. Mas a Solução que arrumei para o caso de a faixa etária estar vazia acabou de criar um problema para o caso de a idade ser zero.

Escreval(" ")
   Escreva("Menores: ") // Escreve a Faixa Menores: 
   Para Cont de 1 ate CM - 1 faca // Ciclo de repetição menos o termo Final
        Escreva(Menores[Cont],", ")
   FimPara
   Se (Menores[Cont] = 0) entao // Para o Caso de a faixa etária estar vazia
      Escreva(" ")
   Senao
        Escreva(Menores[CM],".")// Vai Escrever o último termo Terminando com Ponto Final
   FimSe

Uma ajuda para resolver a Situação em que a idade é igual a zero. Criei ela para no caso de a faixa etária estar vazia não dar erro. Mas aí ele não vai aceitar a idade Zero

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

1 hora atrás, Bruno Condado disse:

Boas achei um caminho para Retirar a Virgula Final e terminar com Ponto Final.

Para Fins práticos vou colocar só o código respeitante a uma categoria no Ponto onde é feita a separação. Mas a Solução que arrumei para o caso de a faixa etária estar vazia acabou de criar um problema para o caso de a idade ser zero.


Escreval(" ")
   Escreva("Menores: ") // Escreve a Faixa Menores: 
   Para Cont de 1 ate CM - 1 faca // Ciclo de repetição menos o termo Final
        Escreva(Menores[Cont],", ")
   FimPara
   Se (Menores[Cont] = 0) entao // Para o Caso de a faixa etária estar vazia
      Escreva(" ")
   Senao
        Escreva(Menores[CM],".")// Vai Escrever o último termo Terminando com Ponto Final
   FimSe

Uma ajuda para resolver a Situação em que a idade é igual a zero. Criei ela para no caso de a faixa etária estar vazia não dar erro. Mas aí ele não vai aceitar a idade Zero

O Problema foi Fácil de resolver, pois se uma Faixa etária retorna vazia então o contador Específico vai estar zerado, e é a partir daí que deve partir SE. Então a solução para o ponto e virgula sem dar erro é: 

Escreval(" ")
   Escreva("Menores: ")
   Se (CM = 0) entao
      Escreva(" ")
   Senao
        Para Cont de 1 ate CM - 1 faca
             Escreva(Menores[Cont],", ")
        FimPara
        Escreva(Menores[CM],". ")
   FimSe

 

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

9 horas atrás, Simon Viegas disse:

Essa é ideia... vai alterando e testado até ficar de uma forma interessante. :)

 

Quando tiver com um problema semelhante já terá uma base melhor e "perderá" menos tempo achando uma solução.

 

Tem outra forma de resolver? Se tiver compartilha aí.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Bruno Condado, acho que ficou muito bom.

 

Se surgir para você outras ideias, tente implementar... Tente imaginar um resultado desejado primeiro, ou seja: primeiro idealize o problema, para a partir daí tentar idealizar uma solução para ele.

 

Para o problema que atual, a sua solução me parece boa!

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

  • 2 anos depois...

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!