Ir ao conteúdo
  • Cadastre-se

VisualG Estrutura de Controle com Repetição lendo o mesmo dado


Ir à solução Resolvido por Simon Viegas,

Posts recomendados

Nessa Estrutura se eu tirar a condição enquanto a minha operação segue

corretamente, porém, a partir do momento que coloco a condição enquanto

para a idade ele segue fazendo a leitura, mas quando ela encerra ela volta

a leitura no sexo ainda da 1 pessoa.

 

Estou ficando frustrado, pois não estou conseguindo resolver essa única situação.

//Foi feita uma pesquisa entre os habitantes de uma região. Foram coletados
// os dados de idade,
//sexo (M/F) e salário. Faça um algoritmo que informe:
//a) a média de salário do grupo;
//b) a maior e a menor idade do grupo;
//c) a quantidade de mulheres com salário até R$100,00.
//Encerre a entrada de dados quando for digitada uma idade negativa.
Var
i, idade, maior_idade, menor_idade, contador, contadorFem, contadorMasc: inteiro
sexo, m, f, masculino: caracter
salario, soma_salario: real
Inicio
      menor_idade<- 999
    para i de 1 ate 4 faca
           escreval ("Idade da ", i, "a pessoa:")
           leia(idade)
           enquanto idade > 0 faca
           escreval ("Sexo M para masculino ou F para feminino:", i, "a pessoa")
           leia(sexo)
           escreval ("Salario: ")
           leia(salario)
                  soma_salario<- soma_salario + salario
                  se (sexo = "f") e (salario<=100) entao
                  contador <- contador + 1
                  fimse
                           se (idade > maior_idade)entao
                           maior_idade <- idade
                           fimse
                           se (idade < menor_idade)entao
                           menor_idade <- idade
                           fimse
           fimenquanto
    fimpara
soma_salario<- soma_salario/i
escreval ("A média do salário do grupo:", soma_salario)
escreval ("Maior idade:", maior_idade)
escreval ("Menor idade:", menor_idade)
escreval ("Quanditade de mulheres com salario menor que R$ 100,00:", contador)
Fimalgoritmo

 

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

@jonas steindorff gomes      porque você colocou esse simbolo de menorquê  <  e esse de maiorquê  >  ? ,  

                                           seria  melhor você usar o botão  <>

                              653306490_barradeferramentas.JPG.d076d5555f868d475201c358b1d0d04e.JPG

 que está desenhado lá na barra de ferramentas da janela de postar ,  para que seu código não fique faltando nenhum caractere ,  e por quê você colocou esse para alí ? ,  dessa forma você está limitando a pesquisa a  4 pessoas apenas ,  então use somente o enquanto , que vai poder pesquisar quantas pessoas quiser ,  e na média ficou faltando dividir pelo número de pessoas pesquisadas ,  então creio que seu código com algumas modificações poderia ser assim    :

algoritmo "enquanto"
//Foi feita uma pesquisa entre os habitantes de uma região. Foram coletados
// os dados de idade,
//sexo (M/F) e salário. Faça um algoritmo que informe:
//a) a média de salário do grupo;
//b) a maior e a menor idade do grupo;
//c) a quantidade de mulheres com salário até R$100,00.
//Encerre a entrada de dados quando for digitada uma idade negativa.
Var
  i,idade,maior_idade,menor_idade   : inteiro
  contador,contadorFem,contadorMasc : inteiro
  contadorf                         : inteiro
  sexo,masculino                    : caracter
  salario,soma_salario              : real
Inicio
  enquanto idade >= 0 faca
    escreval ("Idade da ",contador+1,"ª pessoa ou negativa para Sair : ")
    leia(idade)
    se contador = 0 entao
      menor_idade := idade
      maior_idade := idade
    fimse
    se idade >= 0 entao
      contador := contador + 1
      escreval("Sexo",contador,"ª pessoa")
      escreval(" M para masculino")
      escreval(" F para feminino : ")
      leia(sexo)
      escreval("Salario : ")
      leia(salario)
      soma_salario <- soma_salario + salario
      se (maiusc(sexo)="F") e (salario<=100) entao
        contadorf <- contadorf + 1
      fimse
      se idade > maior_idade entao
        maior_idade <- idade
      fimse
      se idade < menor_idade entao
        menor_idade <- idade
      fimse
    fimse
  fimenquanto
  escreval("A média do salário do grupo : ",soma_salario / contador)
  escreval("Maior idade:", maior_idade)
  escreval("Menor idade:", menor_idade)
  escreva ("Quanditade de mulheres com salario menor ou igual a")
  escreval(" R$ 100,00:",contadorf)
Fimalgoritmo

 

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

  • Membro VIP
  • Solução

Olá a todos.

 

Vou aproveitar para tentar explicar como ir desenvolvendo...

 

Sobre:

12 horas atrás, jonas steindorff gomes disse:

[...] a partir do momento que coloco a condição enquanto para a idade ele segue fazendo a leitura, mas quando ela encerra ela volta a leitura no sexo ainda da 1 pessoa.

 

@jonas steindorff gomes, inicialmente seria meio que uma interpretação do que seria esse "enquanto", veja:

 

12 horas atrás, jonas steindorff gomes disse:

//Encerre a entrada de dados quando for digitada uma idade negativa.

 

O trecho do enunciado está se referindo a "toda" entrada de dados... ou seja: vai continuar lendo (os dados de novos entrevistados) até que seja inserido uma idade negativa. Uma "idade negativa" será uma "referência" para indicar que não quer mais inserir novos dados (o programa tem que parar de coletar)!. Observe que apesar de ser última linha do enunciado, ela é uma base do problema.

 

Outro ponto é que você não precisa fazer todo o programa para começar a testar... uma técnica que pode ser útil é se basear no que quer como resposta final, veja:

//a) a média de salário do grupo;
//b) a maior e a menor idade do grupo;
//c) a quantidade de mulheres com salário até R$100,00.

Perceba que são 3 itens isolados... é fácil imaginar que poderia fazer um programa separado para cada uma dessas alíneas, concorda?

 

Como a referência de parada é a idade, vamos começar pela segunda. Poriam-se começar com algo assim:

algoritmo "FCdH"
//Foi feita uma pesquisa entre os habitantes de uma região. Foram coletados
//os dados de idade, sexo (M/F) e salário. Faça um algoritmo que informe:
//a) a média de salário do grupo;
//b) a maior e a menor idade do grupo;
//c) a quantidade de mulheres com salário até R$100,00.
//Encerre a entrada de dados quando for digitada uma idade negativa.
var
   idade :inteiro
   
inicio
   repita
     escreva ("Idade  : ")
     leia(idade)
   ate idade < 0
fimAlgoritmo

Ou seja: apenas testando essa "leitura de dados até que a idade seja negativa".

 

tela01.PNG

 

Parece que está funcionando... agora implementa e testa o que está sendo pedido:

 

12 horas atrás, jonas steindorff gomes disse:

b) a maior e a menor idade do grupo;

 

Ainda separando por partes, testando só com o maior.

var
   idade :inteiro
   maior :inteiro
inicio
   repita
      escreva ("Idade  : ")
      leia(idade)
      se idade > maior entao
         maior <- idade
      fimSe
   ate idade < 0
   escreval("Maior idade : ", maior:1)
fimAlgoritmo

Parece que ficou bom... Depois com o menor também:

var
   idade :inteiro
   maior, menor :inteiro

inicio
   menor <- 999
   repita
      escreva ("Idade  : ")
      leia(idade)
      se idade > maior entao
         maior <- idade
      fimSe
      se idade < menor entao
         menor <- idade
      fimSe
   ate idade < 0
   escreval("Maior idade : ", maior:1)
   escreval("Menor idade : ", menor:1)
fimAlgoritmo

Opa! aqui já apareceu um problema:

tela02.PNG

 

Para qualquer sequência que coloco, o menor sempre está ficando com "valor negativo que inseri". 🤔, ou seja: tem algo errado nessa lógica aí...

 

Após reinterpretar o contexto do problema, é observável que esse "valor negativo" NÃO deveria fazer parte da conta, ou seja: esse valor negativo foi usado apenas como uma flag para indicar que não quer mais ler dados, logo de fato não devendo entrar na conta... ;). Poderia ficar algo assim:

   repita
      escreva ("Idade  : ")
      leia(idade)
      se nao (idade < 0) entao
         se idade > maior entao
            maior <- idade
         fimSe
         se idade < menor entao
            menor <- idade
         fimSe
      fimSe
   ate idade < 0

Pronto. Agora só vai "analisar" as idades que "não são negativas".

 

Vamos inserir outro ponto:

12 horas atrás, jonas steindorff gomes disse:

//a) a média de salário do grupo;

 

Algo assim:

var
   idade :inteiro
   maior, menor :inteiro
   salario, somaSalario, mediaSalario :real

inicio
   menor <- 999
   repita
      escreva ("Idade  : ")
      leia(idade)
      escreva ("Salario: ")
      leia(salario)
      se nao (idade < 0) entao
         se idade > maior entao
            maior <- idade
         fimSe
         se idade < menor entao
            menor <- idade
         fimSe
      fimSe
   ate idade < 0

 

Mas testando, já vi após inserir uma idade negativa, o programa ainda está perguntando o salário... 😒. Basta deixar dentro do se também.

 

Outros pontos surgem, como a necessidade de verificar se pelo menos um registro foi lido lá antes de calcular a média.. para evitar divisão por zero.

 

algoritmo "FCdH"
//Foi feita uma pesquisa entre os habitantes de uma região. Foram coletados
//os dados de idade, sexo (M/F) e salário. Faça um algoritmo que informe:
//a) a média de salário do grupo;
//b) a maior e a menor idade do grupo;
//c) a quantidade de mulheres com salário até R$100,00.
//Encerre a entrada de dados quando for digitada uma idade negativa.
var
   idade :inteiro
   maior, menor :inteiro
   salario, somaSalario, mediaSalario :real
   cont :inteiro

inicio
   menor <- 999
   repita
      escreva ("Idade  : ")
      leia(idade)
      se nao (idade < 0) entao
         cont <- cont + 1
         escreva ("Salario: ")
         leia(salario)
         se idade > maior entao
            maior <- idade
         fimSe
         se idade < menor entao
            menor <- idade
         fimSe
         somaSalario <- somaSalario + salario
      fimSe
   ate idade < 0
   se cont > 0 entao
      mediaSalario <- somaSalario / cont
   fimSe
   escreval("Maior idade  : ", maior:1)
   escreval("Menor idade  : ", menor:1)
   escreval("Média salário: R$", mediaSalario:1:2)
fimAlgoritmo

 

Faz uns testes para ver se está calculando certo. Vê se dá para simplificar ou melhorar alguma coisa. Por aí vai..

 

Após inserir o item c)...

 

 

ADENDO:

Para os programas em geral, o VisualG tem um recurso bem interessante para ajudar nos testes. Basta inserir alguns leia() entre um estrutura aleatorio. Ex.:

algoritmo "FCdH"
//Foi feita uma pesquisa entre os habitantes de uma região. Foram coletados
//os dados de idade, sexo (M/F) e salário. Faça um algoritmo que informe:
//a) a média de salário do grupo;
//b) a maior e a menor idade do grupo;
//c) a quantidade de mulheres com salário até R$100,00.
//Encerre a entrada de dados quando for digitada uma idade negativa.
var
   idade :inteiro
   maior, menor :inteiro
   salario, somaSalario, mediaSalario :real
   cont :inteiro

inicio
   menor <- 999
   repita
      escreva ("Idade  : ")
      aleatorio -5, 60
      leia(idade)
      aleatorio off
      se nao (idade < 0) entao
         cont <- cont + 1
         escreva ("Salario: ")
         aleatorio 980, 3000
         leia(salario)
         aleatorio off
         se idade > maior entao
            maior <- idade
         fimSe
         se idade < menor entao
            menor <- idade
         fimSe
         somaSalario <- somaSalario + salario
      fimSe
   ate idade < 0
   se cont > 0 entao
      mediaSalario <- somaSalario / cont
   fimSe
   escreval("Maior idade  : ", maior:1)
   escreval("Menor idade  : ", menor:1)
   escreval("Média salário: R$", mediaSalario:1:2)
fimAlgoritmo

Desta forma, o próprio computado vai escrevendo respostas sozinho...

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