×
Ir ao conteúdo
  • Cadastre-se

VisualG Como relacionar dados de variáveis?


Posts recomendados

Olá! 

 

Sou mega iniciante e gostaria de saber como posso relacionar um dado de entrada a outro numa espécie de lista. Por exemplo: ao executar esse algoritmo, o município que se relaciona ao maior número aparece como sendo o mesmo do menor número. Como soluciono? Criando outra variável? Segue:

 

Algoritmo "IBGE: Acidentes de trânsito no estado do Paraná"
Var

   mun: Caractere
   codmun, veic, acid, contador, maior, menor: Inteiro
   soma, media: Real

Inicio
   contador <- 0
   soma <- 0
   enquanto (contador <= 1) faca
      escrevaL ("Insira o nome do município: ")
      leia (mun)
      escrevaL ("Insira o código do município: ")
      leia (codmun)
      escrevaL ("Insira o número de veículos de passeio de ", mun, ":")
      leia (veic)
      escrevaL ("Insira o número de acidentes de trânsito com vítimas de ", mun, ":")
      leia (acid)
      se (acid > maior) entao
         maior <- acid
      senao (acid < menor) entao
         menor <- acid
      fimse
      soma <- soma + veic
      contador <- contador + 1
      media <- soma/contador
   fimenquanto
   escrevaL ("O maior número de acidentes de trânsito com vítimas é: ", maior,", referente à cidade de ", mun, ".")
   escrevaL ("O menor número de acidentes de trânsito com vítimas é: ", menor,", referente à cidade de ", mun, ".")
   escrevaL ("A média de veículos de passeio de todas as cidades juntas é: ", media)
Fimalgoritmo

 

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

  • Moderador
14 horas atrás, BiancaV. disse:

[...] ao executar esse algoritmo, o município que se relaciona ao maior número aparece como sendo o mesmo do menor número. Como soluciono? Criando outra variável? Segue:

 

Vejamos o código:

14 horas atrás, BiancaV. disse:
   escrevaL ("O maior número de acidentes de trânsito com vítimas é: ", maior,", referente à cidade de ", mun, ".")
   escrevaL ("O menor número de acidentes de trânsito com vítimas é: ", menor,", referente à cidade de ", mun, ".")
   escrevaL ("A média de veículos de passeio de todas as cidades juntas é: ", media)

 

Então, na primeira linha, está sendo exibido o conteúdo da memória correspondente ao identificador mun. Lá tem, por exemplo, "Salvador". Logo em seguida está sendo utilizando a mesma variável... o esperado é que saia o mesmo valor mesmo, entende? O computador só vai lá no endereço de memória e tenta exibir o que está lá...

 

Dica: no VisualG vá pressionando F8. No lado direito do problema tem uma "tabela com os valores das variáveis"... a medida que vai alterando uma variável, os valores vão atualizando lá.

 

Resumidamente: uma sugestão seria utilizar outras variáveis mesmo.. ex.: munMaior e munMenor. Assim como maior recebe o "valor atual de acidentes", essas duas variáveis receberia o nome do município quando necessário. Algo como:

 

      se (acid > maior) entao
         maior <- acid
         munMaior <- mun
      senao (acid < menor) entao
         menor <- acid
         munMenor <- num
      fimse

 

E utiliza as variáveis lá na hora de exibir.

Adendo: depois faça alguns teste para confirmar se o cálculo do menor e maior está funcionando bem. 
 

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

Maravilha! Consegui entender bem a lógica com a explicação, muito obrigada! Fiz alguns testes e agora o problema parece ter sido solucionado: 

 

Inicio
  contador <- 0
  soma <- 0
  menosVeiculos <- 2000
           enquanto (contador <= 2) faca
                    escreval ("Insira o nome do município: ")
                    leia (mun)
                    escreval ("Insira o código do município: ")
                    leia (codmun)
                    escreval ("Insira o número de veículos de passeio de ", mun, ":")
                    leia (veic)
                    escreval ("Insira o número de acidentes de trânsito com vítimas de ", mun, ":")
                    leia (acid)
                         se (acid > maior) entao
                         maior <- acid
                         munMaior <- mun
                         senao (acid < menor) entao
                         menor <- acid
                         munMenor <- mun
                         fimse
                    soma <- soma + veic
                    contador <- contador + 1
                    media <- soma/contador
           fimenquanto
           mediaAcid <- acid/contador
           menosVeiculos <- 2000
           se (veic < menosVeiculos) entao
              menormediaAcid <- mediaAcid
           fimse
           escreval ("O maior número de acidentes de trânsito com vítimas é: ", maior,", referente à cidade de ", munMaior, ".")
           escreval ("O menor número de acidentes de trânsito com vítimas é: ", menor,", referente à cidade de ", munMenor, ".")
           escreval ("A média de veículos de passeio de todas as cidades juntas é: ", media, ".")
           se (veic < menosVeiculos) entao
              escreval ("Não há cidades com menos de 2000 veículos.")
           senao
                escreval ("A média de acidentes de trânsito nas cidades com menos de 2000 veículos de passeio é :", menormediaAcid, ".")
           fimse
Fimalgoritmo

Ainda, estou com um problema no último bloco: algumas vezes, o senao é acusado como estando errado, e outras roda normal. De resto, tudo como esperado. 

Link para o comentário
Compartilhar em outros sites

  • Moderador

Sempre mantenha o código indentado. No VisuaLG, para ajudar, pressiona Ctrl+G.

 

 

Eu nem reparei. A sintaxe está errada:
 

Em 22/11/2021 às 23:40, BiancaV. disse:
      se (acid > maior) entao
         maior <- acid
      senao (acid < menor) entao
         menor <- acid
      fimse

 

Seria algo assim:

      se (acid > maior) entao
         maior <- acid
      senao
         se (acid < menor) entao
            menor <- acid
         fimSe
      fimSe


Ou, como para o primeiro município precisa atualizar ambos, poderia ficar assim:

      se (acid > maior) entao
         maior <- acid
         munMaior <- mun
      fimSe
      
      se (acid < menor) entao
         menor <- acid
         munMenor <- mun
      fimSe

 

 

 

@BiancaV., qual o enunciado completo da questão?

Link para o comentário
Compartilhar em outros sites

O enunciado diz:

 

Citação

(...)

qual o maior e o menor índice de acidentes e a que cidades pertencem;

qual a média de veículos nas cidades juntas;

qual a média de acidentes de trânsito nas cidades com menos de 2000 veículos de passeio.

 

E minha solução: 

 

Inicio
   contador <- 0
   soma <- 0
   enquanto (contador <= 1) faca
      escreval ("Insira o nome do município: ")
      leia (mun)
      escreval ("Insira o código do município: ")
      leia (codmun)
      escreval ("Insira o número de veículos de passeio de ", mun, ":")
      leia (veic)
      escreval ("Insira o número de acidentes de trânsito com vítimas de ", mun, ":")
      leia (acid)
      se (acid > maior) entao
         maior <- acid
         munMaior <- mun
      fimSe
      se (acid < menor) entao
         menor <- acid
         munMenor <- mun
      fimSe
      soma <- soma + veic
      contador <- contador + 1
      mediaVeic <- soma/contador
   fimenquanto
   veicMenor <- 2000
   somaAcid <- soma + acid
   somaAcidMenor <- somaAcid - somaAcidMaior
   contadorMenor <- contador - contadorMaior
   se (veic < veicMenor) entao
      contadorMenor <- contador
      somaAcidMenor <- somaAcid
      mediaAcid <- somaAcidMenor/contadorMenor
   fimse
   escreval ("O maior número de acidentes de trânsito com vítimas é: ", maior,", referente à cidade de ", munMaior, ".")
   escreval ("O menor número de acidentes de trânsito com vítimas é: ", menor,", referente à cidade de ", munMenor, ".")
   escreval ("A média de veículos de passeio de todas as cidades juntas é: ", mediaVeic, ".")
   se (veic > veicMenor) entao
      escreval ("Não há cidades com menos de 2000 veículos.")
   senao
      se (veic < veicMenor) entao
         escreval ("A média de acidentes de trânsito nas cidades com menos de 2000 veículos de passeio é :", mediaAcid, ".")
      fimse
   fimse
Fimalgoritmo

 

Mas sigo errando: o menor número de acidentes acusa sempre como 0 e com a média de acidentes para cidades com menos de 2000 veículos estou com problemas em "isolar" o contador.

Link para o comentário
Compartilhar em outros sites

  • Moderador
8 horas atrás, BiancaV. disse:

O enunciado diz:

 

Citação

(...)

qual o maior e o menor índice de acidentes e a que cidades pertencem;

qual a média de veículos nas cidades juntas;

qual a média de acidentes de trânsito nas cidades com menos de 2000 veículos de passeio.

 

 

Poste o enunciado completo.

Além disso faltou a declaração das variáveis lá no código... poste ele completo também.

 

 

 

 

8 horas atrás, BiancaV. disse:

o menor número de acidentes acusa sempre como 0

 

Inicialize o menor com valor bem alto. Algo como:

menor <- 9999999
enquanto (contador <= 1) faca


Uma outra forma é inicializar o menor (e o maior) com o valor primeiro valor.

 

 

 

8 horas atrás, BiancaV. disse:

com a média de acidentes para cidades com menos de 2000 veículos estou com problemas em "isolar" o contador.


Você precisa primeiro "contar a quantidade de cidades" e "calcular a soma dos acidentes dessas cidades". O cálculo da média é feito apenas uma vez... após ter esses dois dados.


 

   se (veic > veicMenor) entao
      escreval ("Não há cidades com menos de 2000 veículos.")
   senao
      se (veic < veicMenor) entao
         escreval ("A média de acidentes de trânsito nas cidades com menos de 2000 veículos de passeio é :", mediaAcid, ".")
      fimse
   fimse

 

Na condição da primeira linha, você precisa verificar se existem cidades com esse critério ou não. Algo como:

 

se (qtdCidadesMenos2000VeiculosPasseio = 0) entao

ou

se (não (qtdCidadesMenos2000VeiculosPasseio > 0)) entao

 

Link para o comentário
Compartilhar em outros sites

O enunciado completo:

 

Citação

O IBGE (Instituto Brasileiro de Geografia e Estatística) desejou realizar uma estatística nas cidades pertencentes ao estado do Paraná, verificando dados sobre acidentes de trânsito. Neste estudo, precisava-se obter alguns dados, que podemos verificar abaixo:

código da cidade;

número de veículos de passeio;

número de acidentes de trânsito com vítimas.

Desejava-se saber ainda:

qual o maior e o menor índice de acidentes de trânsito e a que cidades pertencem;

qual a média de veículos nas cidades juntas;

qual a média de acidentes de trânsito nas cidades com menos de 2000 veículos de passeio.

 

Estou errando ainda a contagem das cidades com menos de 2000 veículos:

 

Algoritmo "IBGE: Acidentes de trânsito no estado do Paraná"
// Disciplina   : Lógica de Programação
Var
   mun, munMaior, munMenor: Caractere
   codmun, veic, acid, acid2000, contador, maior, menor, cidadesMenos2000Veic: Inteiro
   soma, somaAcid2000, mediaVeic, mediaAcid: Real

Inicio
   contador <- 0
   soma <- 0
   menor <- 9999999
   enquanto (contador <= 1) faca
      escreval ("Insira o nome do município: ")
      leia (mun)
      escreval ("Insira o código do município: ")
      leia (codmun)
      escreval ("Insira o número de veículos de passeio de ", mun, ":")
      leia (veic)
      escreval ("Insira o número de acidentes de trânsito com vítimas de ", mun, ":")
      leia (acid)
      se (acid > maior) entao
         maior <- acid
         munMaior <- mun
      fimse
      se (acid < menor) entao
         menor <- acid
         munMenor <- mun
      fimse
      soma <- soma + veic
      contador <- contador + 1
      mediaVeic <- soma/contador
   fimenquanto
   escreval ("O maior número de acidentes de trânsito com vítimas é: ", maior,", referente à cidade de ", munMaior, ".")
   escreval ("O menor número de acidentes de trânsito com vítimas é: ", menor,", referente à cidade de ", munMenor, ".")
   escreval ("A média de veículos de passeio de todas as cidades juntas é: ", mediaVeic, ".")
   se (cidadesMenos2000Veic = 0) entao
      escreval ("Não há cidades com menos de 2000 veículos.")
   senao
      se (cidadesMenos2000Veic > 0) entao
         acid2000 <- acid
         soma <- soma + acid2000
         mediaAcid <- soma/cidadesMenos2000Veic
         escreval ("A média de acidentes de trânsito nas cidades com menos de 2000 veículos de passeio é :", mediaAcid, ".")
      fimse
   fimse
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...

Aprenda a ler resistores e capacitores

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!