Ir ao conteúdo
  • Cadastre-se

VisualG Pesquisa sobre habitantes de uma região


Posts recomendados

 

Se alguém puder ajudar aí, é a penúltima questão. Comecei fazendo, porém quando chega na parte de verificar a menor idade dá erro, não sei o motivo.

 

// Descrição : Foi feita uma pesquisa entre os habitantes de uma região e coletados os dados de altura
e sexo (0=masc, 1=fem) das pessoas. faça um programa que leia 50 dados diferentes e informe:

- a maior e a menor alturas encontradas;

- a média de altura das mulheres;

- o percentual de homens na população;



Var
   // Seção de Declarações das variáveis

   i,num,sexofeminino,sexomasculino:inteiro
   altura,alturamaior,alturamenor:real
Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...

   sexofeminino <- 0
   para i de 1 ate 4 faca // 
      escreval (" Informe 0 para sexo masculino ou 1 para sexo feminino")
      leia (num)
      escreval (" Informe a altura")
      leia (altura)

    se (num = 1) então
            sexofeminino <- sexofeminino+1
         senao
            se (num =0) então
               sexomasculino <- sexomasculino+1

            fimse
         fimse

      se (altura > alturamaior) então
         alturamaior <- altura
      fimse
         se (altura < alturamenor) então
            alturamenor <- altura
         fimse
        fimpara

      escreval ("A maior altura encontrada é :", alturamaior)
      escreval ("A menor altura encontrada é :", alturamenor)
      fimalgoritmo
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
15 horas atrás, Eli Almeidaa disse:

Comecei fazendo, porém quando chega na parte de verificar a menor idade dá erro, não sei o motivo.

 

Qual erro está dando?

@Eli Almeidaa, alguns pontos:

 

- se acostume a utilizar o camelCase (lowCamelCase) para as nomenclaturas de variáveis. Um padrão geral;

- para ajudar nos testes, insira o conceito para gerar os dados automaticamente;

- depois das ",", tem um espaço.

- evite deixar comentários desnecessários no código. Só faz poluir. (Aqueles que aparecem no início do VisualG seria apenas uma apresentação inicial.)

 

Abaixo um esboço.

 

algoritmo "Pesquisar sobre habitantes"
// Descrição : Foi feita uma pesquisa entre os habitantes de uma região e
// coletados os dados de altura e sexo (0=masc,  1=fem) das pessoas. Faça um
// programa que leia 50 dados diferentes e informe:
//
// - a maior e a menor alturas encontradas;
// - a média de altura das mulheres;
// - o percentual de homens na população;
var
   i, num, sexoFeminino, sexoMasculino : inteiro
   altura, alturaMaior, alturaMenor : real
inicio
   para i de 1 ate 4 faca
      escrevaL(" Informe 0 para sexo masculino ou 1 para sexo feminino")
      ALEATORIO 0, 1
      leia(num)
      ALEATORIO OFF
      escrevaL(" Informe a altura")
      ALEATORIO 150, 190
      leia(altura)
      altura <- altura/100
      ALEATORIO OFF

      se (num = 1) então
         sexoFeminino <- sexoFeminino+1
      senao
         se (num =0) então
            sexoMasculino <- sexoMasculino+1
         fimse
      fimSe

      se (altura > alturaMaior) então
         alturaMaior <- altura
      fimSe
      
      se (altura < alturaMenor) então
         alturaMenor <- altura
      fimSe
   fimPara

   escrevaL("A maior altura encontrada é :",  alturaMaior:1:2)
   escrevaL("A menor altura encontrada é :",  alturaMenor:1:2)
fimAlgoritmo

 

É o mesmo código, apenas com alguns ajustes que citei mais acima... daí, teste e identifique qual erro está ocorrendo e tente corrigir. Caso não, informe qual o problema que identificou e qual a dificuldade.

 

Adendo: para a variável do sexo, utilize uma nomenclatura mais semântica. Exemplo:

codSexo : inteiro

 

Só substituir o num por codSexo.

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

19 horas atrás, Simon Viegas disse:

 

Qual erro está dando?

@Eli Almeidaa, alguns pontos:

 

- se acostume a utilizar o camelCase (lowCamelCase) para as nomenclaturas de variáveis. Um padrão geral;

- para ajudar nos testes, insira o conceito para gerar os dados automaticamente;

- depois das ",", tem um espaço.

- evite deixar comentários desnecessários no código. Só faz poluir. (Aqueles que aparecem no início do VisualG seria apenas uma apresentação inicial.)

 

Abaixo um esboço.

 

algoritmo "Pesquisar sobre habitantes"
// Descrição : Foi feita uma pesquisa entre os habitantes de uma região e
// coletados os dados de altura e sexo (0=masc,  1=fem) das pessoas. Faça um
// programa que leia 50 dados diferentes e informe:
//
// - a maior e a menor alturas encontradas;
// - a média de altura das mulheres;
// - o percentual de homens na população;
var
   i, num, sexoFeminino, sexoMasculino : inteiro
   altura, alturaMaior, alturaMenor : real
inicio
   para i de 1 ate 4 faca
      escrevaL(" Informe 0 para sexo masculino ou 1 para sexo feminino")
      ALEATORIO 0, 1
      leia(num)
      ALEATORIO OFF
      escrevaL(" Informe a altura")
      ALEATORIO 150, 190
      leia(altura)
      altura <- altura/100
      ALEATORIO OFF

      se (num = 1) então
         sexoFeminino <- sexoFeminino+1
      senao
         se (num =0) então
            sexoMasculino <- sexoMasculino+1
         fimse
      fimSe

      se (altura > alturaMaior) então
         alturaMaior <- altura
      fimSe
      
      se (altura < alturaMenor) então
         alturaMenor <- altura
      fimSe
   fimPara

   escrevaL("A maior altura encontrada é :",  alturaMaior:1:2)
   escrevaL("A menor altura encontrada é :",  alturaMenor:1:2)
fimAlgoritmo

 

É o mesmo código, apenas com alguns ajustes que citei mais acima... daí, teste e identifique qual erro está ocorrendo e tente corrigir. Caso não, informe qual o problema que identificou e qual a dificuldade.

 

Adendo: para a variável do sexo, utilize uma nomenclatura mais semântica. Exemplo:

codSexo : inteiro

 

Só substituir o num por codSexo.

 

 

@Simon Viegas, fiz o que você disse troquei num por codSexo, porém parece que não está funcionando essa parte de ver a altura menor. A altura menor sempre aparece sendo 0. Aí abaixo captura de tela:

 

image.png.e40b777a3e866eb182d3027961248a4b.png

 

 

Código completo :

Var
   // Seção de Declarações das variáveis
   i, codSexo, sexoFeminino, sexoMasculino : inteiro
   altura, alturaMaior, alturaMenor : real

Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...
   para i de 1 ate 4 faca
      escrevaL(" Informe 0 para sexo masculino ou 1 para sexo feminino")
      ALEATORIO 0, 1
      leia(codSexo)
      ALEATORIO OFF
      escrevaL(" Informe a altura")
      ALEATORIO 150, 190
      leia(altura)
      altura <- altura/100
      ALEATORIO OFF

      se (codSexo = 1) então
         sexoFeminino <- sexoFeminino+1
      senao
         se (codSexo=0) então
            sexoMasculino <- sexoMasculino+1
         fimse
      fimSe

      se (altura > alturaMaior) então
         alturaMaior <- altura
      fimSe

      se (altura < alturaMenor) então
         alturaMenor <- altura
      fimSe
   fimPara

   escrevaL("A maior altura encontrada é :",  alturaMaior:1:2)
   escrevaL("A menor altura encontrada é :",  alturaMenor:1:2)

Fimalgoritmo

 

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

@Eli Almeidaa     a menor altura está tendo o resultado "zero" por que normalmente   não existe altura menor  que zero , pois , não sei se alguém já lhe disse que no visualG 3.0.6.5 as variáveis são Globais e são inicializadas com o valor zero ao serem criadas pelo compílador , lá no início do programa , e assim se não houver uma altura menor que zero  então a sua variáveL  "alturaMenor" sempre permanecerá com aquele mesmo valor do início , que é "0" ,  e assim no final ao escrever o valor dessa variável , aparece realmente o valor zero . e uma forma de fazer a inicialização de uma variável pode ser com uma condicional ,  "se" ,  que vai inicializar a variável  alturaMenor ,apenas ,  com o primeiro valor inserido para a altura , e no final se não houver nenhuma altura menor que ela , o programa vai escrever o valor dela que é o menor mesmo ,  e seu código usando essa comparação :

Algoritmo "maior e menor"
Var
  i , sexoFeminino       : inteiro
  codSexo, sexoMasculino : inteiro
  altura, alturaMaior    : real
  alturaMenor            : real
Inicio
  para i de 1 ate 50 faca
    escrevaL(" Informe 0 para sexo masculino ou 1 para sexo feminino")
    ALEATORIO 0, 1
    leia(codSexo)
    ALEATORIO OFF
    escrevaL(" Informe a altura")
    ALEATORIO 150, 190
    leia(altura)
    altura <- altura/100
    ALEATORIO OFF

    se i = 1 então    // faz esse apenas quando i Eh igual a 1
      alturaMaior <- altura 
      alturaMenor <- altura // inicializa com o primeiro valor da altura
    fimse
    se codSexo = 1 então
      sexoFeminino    <- sexoFeminino  + 1
    senao
      se codSexo = 0 então
        sexoMasculino <- sexoMasculino + 1
      fimse
    fimSe

    se altura > alturaMaior então
      alturaMaior <- altura
    fimSe

    se altura < alturaMenor então
      alturaMenor <- altura
    fimSe
  fimPara
 
   escreval("")
   escrevaL("A maior altura encontrada é : " ,  alturaMaior:1:2)
   escrevaL("A menor altura encontrada é : " ,  alturaMenor:1:2)
   escreval("")

Fimalgoritmo

 

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

  • Membro VIP

@Eli Almeidaa, se atente que a definição de uma nova nomenclatura para uma variável não tem nada a ver com a lógica do algoritmo. Só para deixar claro a importância dos contextos!! 😉

 

As variáveis podem ter qualquer nome válido (por exemplo, não começando com números já é um bom caminho). Se você chamar de banana ou igog7fayug35ae, vão funcionar exatamente da mesma forma. Escolher um boa nomenclatura está relacionada à organização e padrões de projetos. Quanto "mais semânticos" (dando uma indicação para que a variável serve) melhor. Um outro padrão é utilizar o tal do camelCase, que basicamente serve para deixar a leitura do código mais agradável. O camelCase também ajuda na semântica, pois fica claro a divisão das palavras.

 

 

 

 

18 horas atrás, Eli Almeidaa disse:

A altura menor sempre aparece sendo 0.

 

Veja:

20 horas atrás, Simon Viegas disse:

É o mesmo código, apenas com alguns ajustes que citei mais acima... daí, teste e identifique qual erro está ocorrendo e tente corrigir. Caso não, informe qual o problema que identificou e qual a dificuldade.

 

Ou seja: basicamente o código que postei foi o mesmo que o teu... É você que, primeiramente, precisa identificar o problema. Uma boa referência foi o "a altura menor sempre aparece sendo 0". Daí, você precisaria parar para tentar descobrir o que está ocorrendo... É normal!!! É justamente esse processo de tentar identificar e corrigir que está sendo desenvolvendo!

 

Tente me entender:

- Eu peguei teu código original e adicionei uma melhoria para automatizar os testes, ou seja, não precisar ficar digitando valores para cada testes;

- Daí, você alterou a nomenclatura de uma variável (que eu tinha também sugerido), testou, identificou um problema, e depois? Não teria feito nada:chicote:. (Pelo menos não indicou muito bem o que fez. Não tem problema em errar ou "faz algo na da ver"... mas tem que tentar e tentar.)

 

 

Vou tentar exemplificar um modo de pensar...

 

Antes:

20 horas atrás, Simon Viegas disse:

- evite deixar comentários desnecessários no código. Só faz poluir. (Aqueles que aparecem no início do VisualG seriam apenas uma apresentação inicial.)

 

Remova esse bagulhos:

   // Seção de Declarações das variáveis
 
   // Seção de Comandos, procedimento, funções, operadores, etc...

 

Não tem serventia alguma... Além de poluir o código...É óbvio que esses seções são isso... Sempre são isso!. Só remover! 😄

 

Um código NÃO deve precisar ter comentários. Veja por exemplo o código do @devair1010, está tudo bem claro lá!!! Ele só deixou esses comentários para você e outros visitantes assimilarem mais rápido, mas se for implementar no código, eles não devem vir, pois o próprio código já está dizendo isso que está no comentário, saca? Por exemplo: o quê o i estaria representando? "Um controlador de quantidade de loops. Oras! Se i = 1, logo é o primeiro loop. É desnecessário um comentário. "Hum! Quando for a primeira verificação, vai atribuir um valor inicial para as duas variáveis". Os comentários estão ali apenas para serem ainda mais didáticos.

 

PS: é para ir acostumando. Na prática, comentários podem tender a atrapalhar, ou seja, a explicação pode está errada/pouco precisa ou confusa. 

 

 

Vamos lá:

 

Execute esse código mentalmente... pede um código do sexo, informa 1. Ler a altura, informa 1.80.. verifica qual o sexo informado (o que não importa para a menor idade), verifica a idade (o que tb não importa), e chegamos onde importa:

 

image.png

 

Tá..., o quê significa essa expressão aí no se? Foi você que implementou... Já conseguiu assimilar o que está aí?

 

OK... qual o valor de altura e alturaMenor nesse ponto? A primeira vai está com o valor que digitei mentalmente: 1.80. E qual valor está em alturaMenor? "Vixe! Não sei".

 

Pronto! É só arrumar um jeito de descobrir! Simples, não?. (Já citamos algumas vez qual valor fica ao iniciar, mas supondo que não sabemos.)

 

Como o resultado está dando zero... posso inicialmente imaginar que tem 0 ali em alturaMenor. Algo como:

 

se (1.80 < 0) então

 

Ué? A altura tem um valor natural (não é menor que 0). Então, como qualquer valor que eu digitar vai ser menor que 0? Vixe!! 

 

Já tá mei caminho andado.

 

 

Caso identifique a necessidade de verificar o valor de uma variáveis, vamos parar pensar em algo..:

 

Exemplo 1:

image.png

 

Ou seja: exibi o valor da variável antes, e o valor depois. No antes já consigo meio que concluir que ele já estava com 0. Mas veja: em nenhum momento anterior do código foi dado esse valor!! "Oh!!! Então já descobri que o VisualG já faz isso por mim". 

 

 

Exemplo 2:

image.png

 

 Aqui só declarei as variáveis e rodei. Ó, lá os valores das variáveis.

 

 

Próximo passo:

Já imagino que o problema é que "o valor inicial da variável alturaMenor nunca está sendo maior que os valores que digito. O que posso fazer?" 😱 (lá ele)

 

Já sei.. vou inicializar com o primeiro valor! Do segundo em diante, vai sendo comparado e atualizado, caso necessário. Aqui seria o que o @devair1010 já deu a dica.

ou

Pensei em outra forma: inicializo a variável alturaMenor com um valor maior que o maior valor possível. Segue abaixo:

 

Um ser humano não chega de 3, certo?.

 

Jogar logo um valor exagerado:

 

inicio
   alturaMenor <- 999
   
   para i de 1 ate 4 faca

 

ou

Penso em outra forma.... 

 

Pronto! Refazendo o exercício mental de execução do código, vai haver atualizações e aparentemente funcionar corretamente.

 

 

Adendo: claro que cada abordagem por ter suas vantagens e seus problemas, cabe a nós, programadores, identificar os pontos. Por exemplo: se em algum contexto não for informado altura alguma, a menor altura pode ser exibida como sendo 999. Para o caso de inicializar no primeiro loop, isso está fazendo que, a cada loop, esteja verificando se é o primeiro, deixando o cálculo da menor altura mais trabalhosa*. (Seria uma passo a mais para cada loop extra... mais trabalho pro computador...)

 

 

 

RESUMINDO:

Você sempre primeiro precisaria tentar descobrir sozinho(a)... Após não conseguir, tenta mais um pouco... depois, dá um google... tenta assimilar bem o que achar... em caso de insucesso, depois, parte pros fóruns 😉.

 

Porque isso? Pois ao ter de cara uma suposta boa resposta pronta (que eu sei que ninguém quer isso), perderá a oportunidade de ter se desenvolvido mais a habilidade de se virar ou até mesmo "trazer algo mais interessante ou inédito" para resolver um problema.

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

@Simon Viegas @devair1010 , Obrigada.Terminei essa questão desse jeito.

será que estaria correto a forma de percentagem de homens na população?

Algoritmo "Maior e menor"

Var

   i ,sexoFeminino:inteiro
   codSexo, sexoMasculino:inteiro
   altura, alturaMaior:real
   alturaMenor: real

Inicio

   para i de 1 ate 50 faca
      escrevaL(" Informe 0 para sexo masculino ou 1 para sexo feminino")
      leia (codSexo)
      escrevaL(" Informe a altura")
      leia(altura)
      se i = 1 então
         alturaMaior <- altura
         alturaMenor <- altura
      fimse
      se codSexo = 1 então
         sexoFeminino    <- sexoFeminino  + 1
      senao
         se codSexo = 0 então
            sexoMasculino <- sexoMasculino + 1
         fimse
      fimSe

      se altura > alturaMaior então
         alturaMaior <- altura
      fimSe

      se altura < alturaMenor então
         alturaMenor <- altura
      fimSe
   fimPara

   escreval("")
   escrevaL("A maior altura encontrada é : " ,  alturaMaior:1:2)
   escrevaL("A menor altura encontrada é : " ,  alturaMenor:1:2)
   escreval("")
   escreval (" O percentual de homens na população é :",(sexoMasculino/50)*100,"%")

Fimalgoritmo

 

  • Curtir 1
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...

 

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!