Ir ao conteúdo
  • Cadastre-se

VisualG Erro em algoritmo de vetor no VisualG


Posts recomendados

Há alguma possibilidade de informar por que no VisualAG está dando erro de falta de "entao", neste algoritmo abaixo.

Esse algoritmo lê a entrada de 3 idades e armazena as idades em cada faixa etária.

algoritmo "vetor"

var
    idade: vetor[1..3] de inteiro
    menor: vetor[1..3] de inteiro
    adulto: vetor[1..3] de inteiro
    idoso: vetor[1..3] de inteiro
    i: inteiro

inicio

escreval("Digite 3 idades:")

para i de 1 ate 3 faca
  leia(idade[i])
         se (idade[i] >= 0) e (idade[i] <= 18) entao   <===== erro aqui, diz que falta o então e não passa
         menor[i] <- idade[i]
         fimse

         se (idade[i] >= 19) e (idade[i] <=60) entao
            adulto[i] <- idade[i]
         fimse
   
         se idade[i] > 61 entao
            idoso[i] <- idade[i]
         fimse
fimpara

fimalgoritmo

 

Fiz de um outro jeito,mais ocorre o mesmo erro :

 

algoritmo "vetor"

var
    idade: vetor[1..3] de inteiro
    menor: vetor[1..3] de inteiro
    adulto: vetor[1..3] de inteiro
    idoso: vetor[1..3] de inteiro
    i, a: inteiro

inicio

   escreval("Digite 3 idades:")

para i de 1 ate 3 faca
     leia(a)
     idade[i] <- a
              se a < 19 entao
                 menor[i] <- a
              fimse

              se a > 19 e a <= 60 entao  <==== o erro aqui
                 adulto[i] <- a
              fimse

              se a > 61 entao
                 idoso[i] <- a
              fimse
fimpara

fimalgoritmo

 

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

@Wicos    creio que seja o seu compilador que esteja bugado ,  aqui no visualG 3.0.7.0  está funcionando normal , não apresentou nenhum erro .

visualg.thumb.JPG.05323e88a5bce9000f7d2454a74f9ab5.JPG

 

algoritmo "vetor"
var
  idade  : vetor[1..3] de inteiro
  menor  : vetor[1..3] de inteiro
  adulto : vetor[1..3] de inteiro
  idoso  : vetor[1..3] de inteiro
  i      : inteiro
inicio
  escreval("Digite 3 idades:")
  para i de 1 ate 3 faca
    leia(idade[i])
    se (idade[i] >= 0) e (idade[i] <= 18) entao
      menor[i] <- idade[i]
    fimse
    se (idade[i] >= 19) e (idade[i] <=60) entao
      adulto[i] <- idade[i]
    fimse
    se idade[i] > 61 entao
      idoso[i] <- idade[i]
    fimse
  fimpara
fimalgoritmo

 

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

9 horas atrás, devair1010 disse:

@Wicos    creio que seja o seu compilador que esteja bugado ,  aqui no visualG 3.0.7.0  está funcionando normal , não apresentou nenhum erro .

visualg.thumb.JPG.05323e88a5bce9000f7d2454a74f9ab5.JPG

 

Agradeço devair1010 de coração pela presteza em responder.

Realmente está "bugado", baixei novamente e instalei no "C:", como recomenda o autor. Funcionando perfeitamente.

 Quanto ao segundo algoritmo, ele está errado.

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

  • Membro VIP

Citando:

3 horas atrás, Wicos disse:

Realmente está "bugado", baixei novamente e instalei no "C:", como recomenda o autor. Funcionando perfeitamente.

 

Em relação à versão do VisuAlg, eu recomendo utilizar a versão 3.0.6.5. Exemplo de link para download:

https://baixe.net/visualg. Essa versão 3.0.7.0 tem uns bugs chatos também. Caso a 3.0.7.0 seja, por exemplo, a versão padrão do curso, nesse caso poderia continuar nela mesmo... :)

 

 

 

3 horas atrás, Wicos disse:

Quanto ao segundo algoritmo, ele está errado.

Creio que seria bom revisar o primeiro código também... por exemplo: quem tem 18 anos é "adulto", mas no seu código está dizendo que é "menor". Idem para idoso! quem tem 60 já é idoso. Outra coisa: após atualizar os vetores, o que é feito com eles depois? já conseguiu implementar?

 

Caso deseje, poste o enunciado completo da questão, o seu código mais atual e onde está com dúvidas. Se já finalizou, poderíamos também analisar para ver se tem algo errado ou se poderia melhorar em alguma coisa.

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

10 minutos atrás, Simon Viegas disse:

Citando:

 

Em relação à versão do VisuAlg, eu recomendo utilizar a versão 3.0.6.5. Exemplo de link para download:

https://baixe.net/visualg. Essa versão 3.0.7.0 tem uns bugs chatos também. Caso a 3.0.7.0 seja, por exemplo, a versão padrão do curso, nesse caso poderia continuar nela mesmo... :)

 

 

 

Creio que seria bom revisar o primeiro código também... por exemplo: quem tem 18 anos é "adulto", mas no seu código está dizendo que é "menor". Idem para idoso! quem tem 60 já é idoso. Outra coisa: após atualizar os vetores, o que é feito com eles depois? já conseguiu implementar?

 

Caso deseje, poste o enunciado completo da questão, o seu código mais atual e onde está com dúvidas. Se já finalizou, poderíamos também analisar para ver se tem algo errado ou se poderia melhorar em alguma coisa.

Caro Simom Viegas, realmente falta ainda muita, mais muita prática e codificar um enunciado para mim.

adicionado 33 minutos depois

Exponho aqui o enunciado da questão:

Spoiler

 

Desenvolva um algoritmo que:

a) faça a leitura de 60 idades;

b) agrupe as idades em três vetores conforme a faixa etária abaixo.

Lembrando que existem cenários possíveis em que o usuário pode informar apenas 60 idades da faixa menores, por exemplo.

       Faixa        /       Intervalo

       Menores   /      0-18 anos

       Adultos     /      19-60 anos

       Idosos      /      Maiores de 60 anos

c) imprimir todas as idades separadas por faixa, como por exemplo:

        Menores: 2, 4, 5, 13, 18.

        Adultos: 20, 20, 45, 55, 60.

        Idosos: 67, 68, 72, 78, 79, 80.

d) imprimir a quantidade de pessoas por faixa, como por exemplo:

        Menores: 5.

        Adultos: 5.

        Idosos: 6.

e) imprimir a média de idade por faixa, como por exemplo:

        Menores: 8,4.

        Adultos: 40.

        Idosos: 74.

f) imprimir a média geral, como por exemplo:

Média geral: 42,875.

 

 

Levando em conta a sua recomendação,baixei a versão indicada e estou utilizando.

Aqui o algoritmo que desenvolvi, com o que aprendi até o momento, reduzi para apenas 3 idades, com o intuito de testá-lo facilmente.

algoritmo "vetorContSomaMedia1Impressao"
// Ler 3 idades e armazena nos vetores correspondente
// conta quantas idades foi inseridas em cada vetores
// faz as medias das faixa etárias e a geral
// imprime as idades por faixa etária

var
    idade: vetor[1..3] de inteiro
    menor: vetor[1..3] de inteiro
    adulto: vetor[1..3] de inteiro
    idoso: vetor[1..3] de inteiro
    i: inteiro
    ci, cm, ca, cid: real
    si, sm, sa, sid: real
    mi, mm, ma, mid: real

inicio

escreval("Digite 3 idades:")

para i de 1 ate 3 faca
  leia(idade[i])
  ci := ci + 1
  si := si + idade[i]
  mi <- si / ci

         se (idade[i] >= 0) e (idade[i] <= 18) entao
            menor[i] <- idade[i]
            cm := cm + 1                 // contador
             sm := sm + idade[i]         // soma das idades
             mm <- sm / cm               // média das idades
         fimse

         se (idade[i] >= 19) e (idade[i] <=60) entao
            adulto[i] <- idade[i]
             ca := ca + 1
             sa := sa + idade[i]
             ma <- sa / ca
         fimse

         se idade[i] > 61 entao
            idoso[i] <- idade[i]
            cid := cid + 1
            sid := sid + idade[i]
            mid <- sid / cid
         fimse
fimpara

limpatela

// Impressão das idades por faixas etárias

escreval("Lista da idades de pessoas por faixa etária dos Menores: ", menor[i])
escreval("Lista da idades de pessoas por faixa etária dos Adultos: ", adulto[i])
escreval("Lista da idades de pessoas por faixa etária dos Idosos : ", idoso[i])

escreval("-------------------------------------------------------------------")

// Impressão de quantidades de pessoas por faixa etária e geral
escreval("Quantidade de pessoas da faixa etária dos Menores: ", cm)
escreval("Quantidade de pessoas da faixa etária dos Adultos: ", ca)
escreval("Quantidade de pessoas da faixa etária dos Idosos : ", cid)

escreval("-------------------------------------------------------------------")

// Média das idades por faixas etárias e geral
escreval("Média da faixa etária dos Menores: ", mm)
escreval("Média da faixa etária dos Adultos: ", ma)
escreval("Média da faixa etária dos Idosos : ", mid)

escreval("-------------------------------------------------------------------")

// Média geral de todas as idades
escreva("Média geral de todas idades: ", mi)

fimalgoritmo

A parte que estou encontrando dificuldade é na impressão das quantidades de pessoas por faixa-etária, ao digitar as três idades 10, 40 e 70 respectivamente, e observar no VisualAG, Na aba "Áreas das variáveis de memórias (Globais e Locais), os vetores estão com suas idades adquiridas (preenchidas) pelas condições, mas pelo que observei é só impresso a ultima idade digitada, ou seja o 70.

Uma outra dúvida nessa mesma aba é que os índices dos vetores, não são preenchidos na sequencia, ele pula, se digitar o 10 primeiro, ele vai alocar no vetor menor no índice 0, mais se digitar 40 primeiro e em seguida digitar o 10, ele o 10 aloca no índice 1 do vetor menor e não no 0.

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

  • Membro VIP

Sobre:

17 horas atrás, Simon Viegas disse:

[...] quem tem 18 anos é "adulto", mas no seu código está dizendo que é "menor". Idem para idoso! quem tem 60 já é idoso.

 

Apesar de discordar, se for seguir o enunciado, o seu código está correto:

 

17 horas atrás, Wicos disse:

       Faixa        /       Intervalo

       Menores   /      0-18 anos

       Adultos     /      19-60 anos

       Idosos      /      Maiores de 60 anos

 

Ou seja: para o enunciado, quem tem 18 é menor e quem tem 60 é adulto, mesmo.

 

 

 

Sobre:

17 horas atrás, Wicos disse:

[...] reduzi para apenas 3 idades, com o intuito de testá-lo facilmente.

 

Perfeito. A ideia é essa mesmo. Depois de já avançado, muda para 60... mas a lógica com 2 ou 1000 é a mesma!!! logo, é melhor testar com uma quantidade menor.

 

 

 

Sobre:

17 horas atrás, Wicos disse:

[...] Na aba "Áreas das variáveis de memórias (Globais e Locais), os vetores estão com suas idades adquiridas (preenchidas) pelas condições, mas pelo que observei é só impresso a ultima idade digitada, ou seja o 70.

 

Está imprimindo a última idade, pois está imprimindo apenas a última posição de cada vetor. Como a última idade só vai para um dos vetores, 2 vão ficar com 0, e um vai ficar com a última idade...

 

Para "imprimir os dados vetor", você precisa "imprimir os dados do vetor". Como citado, no seu código, você só está imprimindo apenas a última posição:

 

17 horas atrás, Wicos disse:

// Impressão das idades por faixas etárias

escreval("Lista da idades de pessoas por faixa etária dos Menores: ", menor[i])
escreval("Lista da idades de pessoas por faixa etária dos Adultos: ", adulto[i])
escreval("Lista da idades de pessoas por faixa etária dos Idosos : ", idoso[i])

 

O i está com o valor da última posição, logo vai exibir essa posição dos vetores.

 

Você poderia usar um laço de repetição para acessar cada uma das posições de cada vetor. Ex.:

   // Impressão das idades por faixas etárias
   escreval("IDADES SEPARAS POR FAIXAS ETÁRIAS")
   escreva ("Menores: ")
   para i de 1 ate ci faca
      escreva (menor[i], ",")
   fimPara
   escreval("")
   escreva ("Adultos: ")
   para i de 1 ate ci faca
      escreva (adulto[i], ",")
   fimPara
   escreval("")
      escreva ("Idosos : ")
   para i de 1 ate ci faca
      escreva (idoso[i], ",")
   fimPara
   escreval("")
   escreval("")

Obs.: o ci tem quer alterado de real para inteiro.

 

Vai sair algo assim:

IDADES SEPARAS POR FAIXAS ETÁRIAS
Menores:  10, 0, 0,
Adultos:  0, 40, 0,
Idosos :  0, 0, 70,

 

Perceba que está imprimindo cada um das posições de cada um dos vetores, mas deveria imprimir "apenas o que foram cadastrados". Para resolver, uma forma seria verificar o que está "preenchido com uma idade" ou não, ou seja: dentro de cada para, colocaria uma se verificando se o valor é diferente de 0. Se for, imprimir o valor. Desta forma, só vai imprimir os valores diferentes de 0, ou seja: com idades. Entende? mas... o 0 também é uma idade. Logo, essa solução não serve. Uma forma de contornar seria inicializar os vetores com idades "inválidas", por exemplo inserindo um -1 cada posição. Aí mudaria os se para verificar se é diferente de -1... Aí vai funcionar!

 

Outra forma mais elegante, seria... em vez de cadastrar a idade na posição i, iria cadastrar na posição que é igual a quantidade dessa faixa de idade. Como assim? ao encontrar uma idade de uma faixa, por exemplo, adulto, atualizaria a "quantidade de adultos" (a variável ca) e armazenaria essa idade na posição ca do vetor. Algo como:

 

         adulto[ca] <- idade[i]

 

Pronto! Aí cada vetor será preenchido em sequência própria. Na hora de exibir os dados desse vetor, faria algo assim:

   escreva ("Adultos: ")
   para i de 1 ate ca faca
      escreva (adulto[i], ",")
   fimPara
   escreval("")

Da posição 1 até o total de idades dessa faixa :). O mesmo para as outras faixas.

 

Tenta ajustar aí...

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

15 horas atrás, Simon Viegas disse:

Outra forma mais elegante, seria... em vez de cadastrar a idade na posição i, iria cadastrar na posição que é igual a quantidade dessa faixa de idade. Como assim? ao encontrar uma idade de uma faixa, por exemplo, adulto, atualizaria a "quantidade de adultos" (a variável ca) e armazenaria essa idade na posição ca do vetor. Algo como:

 


         adulto[ca] <- idade[i]

Passado para informar que estou tentado viabilizar dessa maneira.

Obrigado pelas dicas e correções.

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

  • 1 ano depois...
Em 20/09/2019 às 08:53, Simon Viegas disse:

Sobre:

 

Apesar de discordar, se for seguir o enunciado, o seu código está correto:

 

 

Ou seja: para o enunciado, quem tem 18 é menor e quem tem 60 é adulto, mesmo.

 

 

 

Sobre:

 

Perfeito. A ideia é essa mesmo. Depois de já avançado, muda para 60... mas a lógica com 2 ou 1000 é a mesma!!! logo, é melhor testar com uma quantidade menor.

 

 

 

Sobre:

 

Está imprimindo a última idade, pois está imprimindo apenas a última posição de cada vetor. Como a última idade só vai para um dos vetores, 2 vão ficar com 0, e um vai ficar com a última idade...

 

Para "imprimir os dados vetor", você precisa "imprimir os dados do vetor". Como citado, no seu código, você só está imprimindo apenas a última posição:

 

 

O i está com o valor da última posição, logo vai exibir essa posição dos vetores.

 

Você poderia usar um laço de repetição para acessar cada uma das posições de cada vetor. Ex.:



   // Impressão das idades por faixas etárias
   escreval("IDADES SEPARAS POR FAIXAS ETÁRIAS")
   escreva ("Menores: ")
   para i de 1 ate ci faca
      escreva (menor[i], ",")
   fimPara
   escreval("")
   escreva ("Adultos: ")
   para i de 1 ate ci faca
      escreva (adulto[i], ",")
   fimPara
   escreval("")
      escreva ("Idosos : ")
   para i de 1 ate ci faca
      escreva (idoso[i], ",")
   fimPara
   escreval("")
   escreval("")

Obs.: o ci tem quer alterado de real para inteiro.

 

Vai sair algo assim:



IDADES SEPARAS POR FAIXAS ETÁRIAS
Menores:  10, 0, 0,
Adultos:  0, 40, 0,
Idosos :  0, 0, 70,

 

Perceba que está imprimindo cada um das posições de cada um dos vetores, mas deveria imprimir "apenas o que foram cadastrados". Para resolver, uma forma seria verificar o que está "preenchido com uma idade" ou não, ou seja: dentro de cada para, colocaria uma se verificando se o valor é diferente de 0. Se for, imprimir o valor. Desta forma, só vai imprimir os valores diferentes de 0, ou seja: com idades. Entende? mas... o 0 também é uma idade. Logo, essa solução não serve. Uma forma de contornar seria inicializar os vetores com idades "inválidas", por exemplo inserindo um -1 cada posição. Aí mudaria os se para verificar se é diferente de -1... Aí vai funcionar!

 

Outra forma mais elegante, seria... em vez de cadastrar a idade na posição i, iria cadastrar na posição que é igual a quantidade dessa faixa de idade. Como assim? ao encontrar uma idade de uma faixa, por exemplo, adulto, atualizaria a "quantidade de adultos" (a variável ca) e armazenaria essa idade na posição ca do vetor. Algo como:

 



         adulto[ca] <- idade[i]

 

Pronto! Aí cada vetor será preenchido em sequência própria. Na hora de exibir os dados desse vetor, faria algo assim:



   escreva ("Adultos: ")
   para i de 1 ate ca faca
      escreva (adulto[i], ",")
   fimPara
   escreval("")

Da posição 1 até o total de idades dessa faixa :). O mesmo para as outras faixas.

 

Tenta ajustar aí...

Boas,

Estou tentando Resolver o mesmo Problema e acabei esbarrando no problema de na hora de apresentar os Resultados das Faixas aparecer posições zeradas, o meu código até se assemelha com a solução apresentada. Vejam como está:

algoritmo "Estudo de Caso"
// Função :
// Autor :
// Data : 03/04/2021
// Seção de Declarações 
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
inicio
   // Seção de Comandos 
   Para Cont <- 1 ate 5 faca
      Escreval("===========================")
      Escreval("|  E S T U D O  DE C A S O   |")
      Escreval("===========================")
      Escreval("|LÓGICA DE PROGRAMAÇÃO|")
      Escreval("===========================")
      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

   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 ("Idoso: ")

   Para Cont <- 1 ate CID faca

      Escreva(idoso[Cont], ", ")

   FimPara

fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!