Ir ao conteúdo

Posts recomendados

Postado

 

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
  • Membro VIP
Postado
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
Postado
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
Postado

@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
  • Membro VIP
Postado

@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
Postado

@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

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