Ir ao conteúdo

VisualG Censo habitacional


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

Estou tentando fazer essa questão aqui, que é a última questão, mas está dando problema nessa parte:

 

se ((sexo="feminino") e (idade>=18) e (idade<=35) e (corolhos="verdes")(corcabelos="louros")) então
    quantm <- quantm +1

 

Quando executa o código completo abaixo, não contabiliza direito as pessoas que têm essas características que a questão pede. Se puder ajudar a identificar o erro nessa parte.

 

Faça um algoritmo que determine e escreva:
- a maior idade dos habitantes
- a quantidade de indivíduos do sexo feminino cuja idade está entre 18 e 35
anos inclusive e que tenham olhos verdes e cabelos louros.
O final do conjunto de habitantes é reconhecido pelo valor -1 entrada como idade.

 

Var
   idade,maioridade:inteiro
   num,quantm:inteiro
   sexo,corolhos,corcabelos:caractere
Inicio
   enquanto idade <> -1 faca
      escreval ( "Informe o seu sexo")
      leia (sexo)
      escreval ( "Informe a cor de seus olhos")
      leia (corolhos)
      escreval ( "Informe a cor de seus cabelos")
      leia (corcabelos)
      escreval ( "Informe  a sua idade ou digite -1 para encerrar ")
      leia (idade)

      se idade > maioridade então
         maioridade <- idade
      fimse
      se ((sexo="feminino") e (idade>=18) e (idade<=35)e (corolhos="verdes") e (corcabelos="louros")) então
         quantm <- quantm +1
      fimse
   fimenquanto

   escreval ("A maior idade da população é : " ,maioridade)
   escreval ("A quantidade de indivíduos do sexo feminino cuja idade está entre 18 e 35 anos inclusive e que tenham olhos verdes e cabelos louros é :" ,quantm)

 

  • Curtir 2
  • Solução
Postado
12 horas atrás, Eli Almeidaa disse:

Quando executa o código completo abaixo, não contabiliza direito as pessoas

Não tem nenhum erro e está como pedido no enunciado.

 

Para as entradas coloque a idade primeiro para sair sem ter que entrar com todas as informações antes, p.ex,

Enquanto Idade <> -1 Faca
    Escreval("Informe  a sua idade ou digite -1 para encerrar")
    Leia(Idade)
    Se(Idade > -1) então
    ...
    FimSe
FimEnquanto

 

Assim só vai pedir as outras se a idade for maior que -1.

 

  • Curtir 3
  • Membro VIP
Postado

@Eli Almeidaa, reforçando as dicas importantes:

- use o camelCase para as nomenclaturas de variáveis;

- as virgulas devem seguir o padrão de escrita, ou seja, colado à esquerda, e um espaço à direita;

- ir já acostumando usar nomenclaturas de variáveis mais semânticas.

 

Veja um exemplo:

algoritmo "Censo habitacional"
//Faça um algoritmo que determine e escreva:
//- a maior idade dos habitantes
//- a quantidade de indivíduos do sexo feminino cuja idade está entre 18 e 35
//anos inclusive e que tenham olhos verdes e cabelos louros.
//O final do conjunto de habitantes é reconhecido pelo valor -1 entrada como
//idade.
var
   idade, maiorIdade : inteiro
   num, qtdFem18a35OlhosVerdesCabelosLoiros : inteiro
   sexo, corOlhos, corCabelos : caractere
inicio
   enquanto (idade <> -1) faca
      escrevaL("Informe a sua idade ou digite -1 para encerrar ")
      leia(idade)

      se (idade > -1) então
         escrevaL("Informe o seu sexo")
         leia(sexo)
         escrevaL("Informe a cor de seus olhos")
         leia(corOlhos)
         escrevaL("Informe a cor de seus cabelos")
         leia(corCabelos)

         se (idade > maiorIdade) então
            maiorIdade <- idade
         fimse

         se ((sexo="feminino") E (idade>=18) E (idade<=35) E (corOlhos="verdes") E (corCabelos="louros")) então
            qtdFem18a35OlhosVerdesCabelosLoiros <- qtdFem18a35OlhosVerdesCabelosLoiros +1
         fimSe
      fimSe
   fimEnquanto

   escrevaL("A maior idade da população é: ", maioridade:1)
   escreva ("A quantidade de indivíduos do sexo feminino cuja idade está entre")
   escreva (" 18 e 35 anos inclusive e que tenham olhos verdes e cabelos louros")
   escrevaL(" é: ", qtdFem18a35OlhosVerdesCabelosLoiros:1)
fimAlgoritmo

 

ADENDO:

"Pessoal, tentei usar ALATORIO nesse código, mas não deu muito certo para variáveis do tipo caractere. Ele sempre só gera 5 caracteres aleatórios. Como faria para gerar, por exemplo, o sexo?".

 

Temos duas* formas de contornar: utilizando o RandI() para gerar "códigos", e depois "traduzir para algum texto", exemplo: 0 para masculino e 1 para feminino. E uma utilizando LISTAS (uma espécie de aleatório).

 

Esse primeiro deixo para vocês, caso queiram tentar. Para lista, segue um exemplo abaixo:

 

Primeiramente precisa existir as listas cadastradas no VisualG. O recurso fica lá nas configurações.

 

image.png

 

Aí cria uma nova lista, definindo um nome e o seu conteúdo.

 

image.png

 

 

Segue uma relação:

SEXO
Masculino
Feminino

COR DOS OLHOS
Azuis
Azuis-Esverdeados
Cinzas
Castanhos
Verdes

COR DOS CABELOS
Loiros
Ruivos
Castanhos
Pretos
Grisalhos

 

Exemplo:

algoritmo "Censo habitacional"
//Faça um algoritmo que determine e escreva:
//- a maior idade dos habitantes
//- a quantidade de indivíduos do sexo feminino cuja idade está entre 18 e 35
//anos inclusive e que tenham olhos verdes e cabelos louros.
//O final do conjunto de habitantes é reconhecido pelo valor -1 entrada como
//idade.
const
   QTD_USUARIOS = 30
var
   idade, maiorIdade : inteiro
   num, qtdFem18a35OlhosVerdesCabelosLoiros : inteiro
   sexo, corOlhos, corCabelos : caractere
   cont : inteiro
inicio
   enquanto (idade <> -1) faca
      escrevaL()
      escrevaL("Informe a sua idade ou digite -1 para encerrar ")
      ALEATORIO 16, 40
      leia(idade)

      se (idade > -1) então
         escrevaL("Informe o seu sexo")
         ALEATORIO ON
         LISTA "SEXO"
         leia(sexo)
         escrevaL("Informe a cor de seus olhos")
         LISTA "COR DOS OLHOS"
         leia(corOlhos)
         escrevaL("Informe a cor de seus cabelos")
         LISTA "COR DOS CABELOS"
         leia(corCabelos)
         ALEATORIO OFF

         se (idade > maiorIdade) então
            maiorIdade <- idade
         fimse

         se ((sexo = "feminino") E (idade >= 18) E (idade <= 35) E (corOlhos = "verdes") E (corCabelos = "loiros")) então
            qtdFem18a35OlhosVerdesCabelosLoiros <- qtdFem18a35OlhosVerdesCabelosLoiros +1
         fimSe
      fimSe

      cont <- cont + 1

      se (cont > QTD_USUARIOS) então
         interrompa()
      fimSe
   fimEnquanto

   escrevaL("A maior idade da população é: ", maioridade:1)
   escreva ("A quantidade de indivíduos do sexo feminino cuja idade está entre")
   escreva (" 18 e 35 anos inclusive e que tenham olhos verdes e cabelos louros")
   escrevaL(" é: ", qtdFem18a35OlhosVerdesCabelosLoiros:1)
fimAlgoritmo

 

Ah! Como essa última condição seria algo muito específico, poderia deixar as cores com apenas dois itens cada, assim aumentando as chance de ocorrer.

 

COR DOS OLHOS
Verdes
Castanhos
  
COR DOS CABELOS
Loiros
Pretos

 

Exemplo de resultado:

 

image.png

 

As listas seriam análogos ao ALEATORIOS, só que em vez de sortear números, é sorteado um item da lista definida.

 

 

ADENDO 2:

Daria também para criar uma estrutura para incluir o número -1 como idade, dessa forma fazendo "finalizar numa quantidade aleatória" (automatizaria alguém podendo digitar o -1 para finalizar), e assim seguindo mais o enunciado. Mas, para exemplificar, utilizei uma quantidade fixa... ao mesmo tempo que já tem um contato com o conceito de constantes.. que nada mais são que "variáveis de valores fixos"... e "que têm valores definidos logos na sua declaração". Não tem mistério.

  • Obrigado 2
Postado

@Simon Viegas,  1°) usar esse camelCase é obrigatório?

 

2º) notei que você deixa um espaço entre as variáveis, exemplo:

Em 28/03/2023 às 21:50, Simon Viegas disse:
sexo, corOlhos, corCabelos : caractere

Tem que deixar esse espaço?

 

3) como fazer para aprender a indentar por conta própria sem utilizar o control+g?

Fiz esse código aqui no VisualG, e notei que se dê espaço três vezes para à direita o código fica indentado igual a se você tivesse utilizado control+g. Você acha que estaria correto dessa forma utilizando espaço três vezes para à direita?

 

Código: 

Var
   // Seção de Declarações das variáveis
   ano_atual,ano_nasc,anodenascimento:inteiro

Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...
   escreval (" Informe o ano atual ")
   leia(ano_atual)
   escreval (" Informe a sua data de nascimento ")
   leia(ano_nasc)
   anodenascimento <- ano_atual-ano_nasc
   escreval (" A sua idade é:",anodenascimento," anos")
Fimalgoritmo

 

 

  • Curtir 1
  • Obrigado 1
Postado
4 horas atrás, Eli Almeidaa disse:

acha que estaria

correto dessa forma utilizando espaço três vezes para à direita?

sim está correto ,  como o nome indica , identar ,  é fazer o bloco do código  ficar em forma de dente , tornando fácil identificar cada parte do código , e pode identar com quantos espaços você quiser ,  porém se houver muitas comparações e colocar muitos espaços os blocos irão muito para a direita ,  dois espaços seria o ideal ,  apesar de que no visualG não tem a opção de configurar a quantidade de espaços ,  mas fazendo manual  tem .

4 horas atrás, Eli Almeidaa disse:

usar esse camelCase é obrigatório?

 

    não é obrigatório , escrever dessa forma ou de outra qualquer , pois o compilador vai executar o código de qualquer forma ,  desde que a sintaxe esteja certa , mas esse modo de escrever torna o texto escrito mais fácil de entender o significado , e é o modo comum como se costuma fazer .

 

  • Curtir 1
  • Obrigado 1
  • Membro VIP
Postado

Vou comentar ponto a ponto:

 

Em 31/03/2023 às 16:00, Eli Almeidaa disse:

@Simon Viegas,  1°) usar esse camelCase é obrigatório?

 

 

Inicialmente respondo com outra pergunta: você pesquisou sobre "o que é cameCase"? (Isso foi um pergunta retórica. Seria apenas uma forma de tentar instigar ainda mais. Um dos pontos principais já acho interessante: "ter curiosidade". Faltaria apenas o "pesquisar mais a fundo sobre os temas" 😉.)

 

Vamos lá...

 

Depende o sentido de "obrigatório". Se for em relação à interpretação do algoritmo pelo VisualG, não. Não é obrigatório. Por sinal, o VisualG não diferencia maiúsculas de minúsculas para variáveis, ou seja, não é case-sensitive. (<--- sugiro ler e se aprofundar um pouco sobre.)

 

Já no Java as letras maiúsculas e minúsculas, para nomenclaturas de variáveis, seriam coisas distintas. Veja:

image.png

Fonte: https://pt.wikipedia.org/wiki/Case-sensitive

 

Exemplo: corOlhoscorolhos... qual das duas nomenclaturas está mais clara? Naturalmente a primeira aparenta que o maiúsculo "divide as palavras". O que alguém acharia que serviria uma variável que tem "cor olhos" no nome? Já na segunda, poderia vir: "que raios significa corolhos? Parece aquele palavrão... ah! não, deve ser cor e olhos juntos... eu acho". Saca?

 

RESUMINDO

Seria um padrão relativamente popular e bem funcional. Recomendo. No mínimo, para um mesmo código, tente seguir apenas um padrão interessante, como o que usou:

 

Em 31/03/2023 às 16:00, Eli Almeidaa disse:
ano_atual

 

Daí, meio que "todas as variáveis ficariam nesse mesmo padrão". Esse padrão seria snakecase ou underscorecase. Dá um google!! 


Sugiro dar uma pesquisa geral sobre "convenções de nomenclaturas variáveis".

 

 

 

 

 

Em 31/03/2023 às 16:00, Eli Almeidaa disse:

2º) notei que você deixa um espaço entre as variáveis, exemplo:

Em 28/03/2023 às 21:50, Simon Viegas disse:
sexo, corOlhos, corCabelos : caractere

Tem que deixar esse espaço?

 

Depende o sentido de "tem que deixar". Se for em relação à interpretação do algoritmo pelo VisualG, não. Mas acho que fica estranho. Não faz diferença para análise léxica lá na declaração de variáveis. Tratar-se-ia também apenas de outra boa prática. É assim ("vírgula colada à esquerda e com um espaço á direita") que normalmente escrevemos textos (pelas normas cultas)... E meio que seria assim que comumente são escritos os códigos.

 

Veja por exemplo esse artigo:

https://www.clubedoportugues.com.br/tem-espaco-antes-e-depois-da-virgula/

 

image.png

 

Outro exemplo: é comum ver sequer colocarem a vírgula antes do "mas"... É um crime? Não, mas não seria da "norma culta". É OK! E depender do contexto está tudo certo!!! (Numa redação já perderia alguns pontos. Aqui no Fórum ou em ambientes menos formais, sem problemas - tem o lance também do "o costume do cachimbo deixa a boca torta". Por aí vai.)

 

Só para frisar: não é obrigatório, entretanto entendo que seria no mínimo mais coerente e esteticamente mais atraente. Pode existir sim uma liberdade e "um toque pessoal". Seguir um padrão tende a facilitar as coisas... Acho muito mais fácil de ler quando está num padrão. Fica mais fluído.

 

PS: só para exemplificar outro padrão, observe que depois do ":" as palavras devem* iniciar em minúscula. Talvez não seja comum. Até onde sei seria assim mesmo...
 

RESUMINDO

Seguir uma "norma" de espaçamento seria um padrão popular e bem funcional. Fica mais fácil de ler.

 

 

 

 

 

Em 31/03/2023 às 16:00, Eli Almeidaa disse:

3) como fazer para aprender a indentar por conta própria sem utilizar o control+g?

 

Aqui entra o exercício da abstração... ao pressionar Ctrl+G, o que acontece no código? Na prática, o VisualG insere espaços à esquerda das linhas, meio que tentando deixar o código indentando... seguindo suas próprias regras..

 

Dá no mesmo indentar na mão, ou com auxílio do Ctrl+G... esse recurso funciona de modo instantâneo e pode ser utilizando quantas vezes quiser... serve como bom indicativo para ver se não tá faltando alguma coisa... tipo: se o código ficar "todo torto", pode ser que esqueceu de colocar um fimSe, por exemplo. Eu prefiro dar os espaçamentos sugeridos pelo VisualG... assim, posso utilizar o Ctrl+G quando eu quiser... 90% das vezes funciona muito bem! 

 

 

 

 

 

***

Adendo

Segue teu código com padrões que recomendaria:

algoritmo "Sua Idade"
var
   ano_atual, ano_nasc, idade : inteiro
inicio
   escreval(" Informe o ano atual")
   leia(ano_atual)
   escreval(" Informe o teu ano de nascimento")
   leia(ano_nasc)
   idade <- ano_atual-ano_nasc
   escreval(" A sua idade é ", idade:1, " anos")
fimAlgoritmo

 

Observe que você também pediu a "data de nascimento", que é diferente de "ano de nascimento". Fica "semanticamente errado". O usuário poderia digitar dia, mês e ano.

 

Em 31/03/2023 às 16:00, Eli Almeidaa disse:
escreval (" Informe a sua data de nascimento ")

 

RESUMINDO

Procure manter uma semântica boa no código. Pois assim, você tenderá a perder menos tempo em entender o próprio código, ajudando a evitar bugs e má interpretações... Entenda que isso é apenas por abstração. O computador não se importa com semântica, mas nós seres humanos sim. (Ou acho que deveríamos.) 

 

  • Curtir 1
  • Obrigado 1
Postado
11 horas atrás, Simon Viegas disse:

Vou comentar ponto a ponto:

 

 

 

Inicialmente respondo com outra pergunta: você pesquisou sobre "o que é cameCase"? (Isso foi um pergunta retórica. Seria apenas uma forma de tentar instigar ainda mais. Um dos pontos principais já acho interessante: "ter curiosidade". Faltaria apenas o "pesquisar mais a fundo sobre os temas" 😉.)

 

Vamos lá...

 

Depende o sentido de "obrigatório". Se for em relação à interpretação do algoritmo pelo VisualG, não. Não é obrigatório. Por sinal, o VisualG não diferencia maiúsculas de minúsculas para variáveis, ou seja, não é case-sensitive. (<--- sugiro ler e se aprofundar um pouco sobre.)

 

Já no Java as letras maiúsculas e minúsculas, para nomenclaturas de variáveis, seriam coisas distintas. Veja:

image.png

Fonte: https://pt.wikipedia.org/wiki/Case-sensitive

 

Exemplo: corOlhoscorolhos... qual das duas nomenclaturas está mais clara? Naturalmente a primeira aparenta que o maiúsculo "divide as palavras". O que alguém acharia que serviria uma variável que tem "cor olhos" no nome? Já na segunda, poderia vir: "que raios significa corolhos? Parece aquele palavrão... ah! não, deve ser cor e olhos juntos... eu acho". Saca?

 

RESUMINDO

Seria um padrão relativamente popular e bem funcional. Recomendo. No mínimo, para um mesmo código, tente seguir apenas um padrão interessante, como o que usou:

 

 

Daí, meio que "todas as variáveis ficariam nesse mesmo padrão". Esse padrão seria snakecase ou underscorecase. Dá um google!! 


Sugiro dar uma pesquisa geral sobre "convenções de nomenclaturas variáveis".

 

 

 

 

 

 

Depende o sentido de "tem que deixar". Se for em relação à interpretação do algoritmo pelo VisualG, não. Mas acho que fica estranho. Não faz diferença para análise léxica lá na declaração de variáveis. Tratar-se-ia também apenas de outra boa prática. É assim ("vírgula colada à esquerda e com um espaço á direita") que normalmente escrevemos textos (pelas normas cultas)... E meio que seria assim que comumente são escritos os códigos.

 

Veja por exemplo esse artigo:

https://www.clubedoportugues.com.br/tem-espaco-antes-e-depois-da-virgula/

 

image.png

 

Outro exemplo: é comum ver sequer colocarem a vírgula antes do "mas"... É um crime? Não, mas não seria da "norma culta". É OK! E depender do contexto está tudo certo!!! (Numa redação já perderia alguns pontos. Aqui no Fórum ou em ambientes menos formais, sem problemas - tem o lance também do "o costume do cachimbo deixa a boca torta". Por aí vai.)

 

Só para frisar: não é obrigatório, entretanto entendo que seria no mínimo mais coerente e esteticamente mais atraente. Pode existir sim uma liberdade e "um toque pessoal". Seguir um padrão tende a facilitar as coisas... Acho muito mais fácil de ler quando está num padrão. Fica mais fluído.

 

PS: só para exemplificar outro padrão, observe que depois do ":" as palavras devem* iniciar em minúscula. Talvez não seja comum. Até onde sei seria assim mesmo...
 

RESUMINDO

Seguir uma "norma" de espaçamento seria um padrão popular e bem funcional. Fica mais fácil de ler.

 

 

 

 

 

 

Aqui entra o exercício da abstração... ao pressionar Ctrl+G, o que acontece no código? Na prática, o VisualG insere espaços à esquerda das linhas, meio que tentando deixar o código indentando... seguindo suas próprias regras..

 

Dá no mesmo indentar na mão, ou com auxílio do Ctrl+G... esse recurso funciona de modo instantâneo e pode ser utilizando quantas vezes quiser... serve como bom indicativo para ver se não tá faltando alguma coisa... tipo: se o código ficar "todo torto", pode ser que esqueceu de colocar um fimSe, por exemplo. Eu prefiro dar os espaçamentos sugeridos pelo VisualG... assim, posso utilizar o Ctrl+G quando eu quiser... 90% das vezes funciona muito bem! 

 

 

 

 

 

***

Adendo

Segue teu código com padrões que recomendaria:

algoritmo "Sua Idade"
var
   ano_atual, ano_nasc, idade : inteiro
inicio
   escreval(" Informe o ano atual")
   leia(ano_atual)
   escreval(" Informe o teu ano de nascimento")
   leia(ano_nasc)
   idade <- ano_atual-ano_nasc
   escreval(" A sua idade é ", idade:1, " anos")
fimAlgoritmo

 

Observe que você também pediu a "data de nascimento", que é diferente de "ano de nascimento". Fica "semanticamente errado". O usuário poderia digitar dia, mês e ano.

 

 

RESUMINDO

Procure manter uma semântica boa no código. Pois assim, você tenderá a perder menos tempo em entender o próprio código, ajudando a evitar bugs e má interpretações... Entenda que isso é apenas por abstração. O computador não se importa com semântica, mas nós seres humanos sim. (Ou acho que deveríamos.) 

 

 

 

 

@Simon Viegas,  havia passado despercebido essa parte do "ano de nascimento" com a "data de nascimento", é verdade.Outra coisa,modifiquei seu código tirei o ":1" que estava colado com "idade" e para o espaço não

ficar muito grande, nessa parte, recuei as "aspas" para perto do "é". Será que estaria correto dessa forma também?

 

 


 

Var
   // Seção de Declarações das variáveis
   ano_atual, ano_nasc, idade : inteiro

Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...
   escreval(" Informe o ano atual")
   leia(ano_atual)
   escreval(" Informe o teu ano de nascimento")
   leia(ano_nasc)
   idade <- ano_atual-ano_nasc
   escreval(" A sua idade é", idade, " anos")



 

  • Curtir 2
  • Membro VIP
Postado
Em 03/04/2023 às 22:22, Eli Almeidaa disse:

Outra coisa,modifiquei seu código tirei o ":1" que estava colado com "idade" e para o espaço não

ficar muito grande, nessa parte, recuei as "aspas" para perto do "é". Será que estaria correto dessa forma também?

 

Sim. É a mesma coisa.

 

Em 03/04/2023 às 22:22, Eli Almeidaa disse:
escreval(" A sua idade é", idade, " anos")

 

e

Em 03/04/2023 às 22:22, Eli Almeidaa disse:
   escreval(" A sua idade é ", idade:1, " anos")

 

 

Após o "é" tecnicamente precisa de um espaço. Acho mais coerente deixá-lo entre as aspas do que utilizar do espaço que o VisualG insere nos números. É por uma questão de coerência, por exemplo, se fosse uma variável do tipo caractere, o espaço ficaria dentro das aspas... daí, apenas sugiro o mesmo princípio... 

 

 

RESUMINDO

Tanto faz. Use da forma que achar mais agradável. Apenas recomendo utilizar "com espaço dentro das aspas e remover o espaço que não deveria existir do número", utilizando a formatação com o :x. 

 

  • Obrigado 1
  • Amei 1
Postado

@Simon Viegas , se você puder tirar uma dúvida, estou tentando aprender a forma

que o control+g indenta o código no visualg, será que estaria certo dessa forma? 

Vi um professor falando que indentava usando a tecla tab ,porém eu testei e vi que ela deixa ás vezes,

mais espaço do que a indentação feita automática  pelo control+g no visualg.

Será que aprendendo a forma que o control+g indenta o código e usando 

a tecla "espaço" ao invés da tab, estaria certo assim? E depois poderia utilizar esse aprendizado

da indentação do visualg para indentar um código de uma linguagem de programação verdadeira?

  • Curtir 1
  • 3 semanas depois...

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