Ir ao conteúdo

Posts recomendados

Postado

Boa tarde,

Tenho que fazer um programa que cadastre os moradores de uma cidade (não tem uma quantidade definida), o programa deve pedir idade e nome. E o no final devo informar a quantidade de moradores que são eleitores obrigatório, a quantidade de moradores que são eleitores facultativos e quantos moradores não são eleitores de acordo com a tabela:

>= 18 e <= 69: eleitor Obrigatório

= 16 ou = 17 ou >= 70: eleitor Facultativo

< 16: Não é eleitor


Tentei fazer algo, porém quando tenho que imprimir na tela as pessoas que foram cadastradas, não vai. Também gostaria de saber de que formar eu faço um cadastro sem definir quantidade (porque no vetor eu ainda coloquei um limite).

Procedimento menu
Inicio

   Escreval ("Cadastro eleitor")
   Escreval ("*****************************************")
   Escreval ("Selecione uma das opções: ")
   escreval ("1- Cadastrar")
   escreval ("2 - total cadastrado")
   escreval ("3- Sair")
   leia (opcao)
Fimprocedimento


procedimento filtro
Inicio
// Seção de Comandos, procedimento, funções, operadores, etc...

se (cliente .idade >= 18) e (cliente .idade <=69) entao
escreval ("Obrigatório")

senao
se (cliente .idade = 16) ou (cliente .idade =17) ou (cliente .idade  >= 70) entao
escreval ("Facultativo")

senao
se (cliente .idade < 16) entao
escreval ("Não é eleitor")
senao

fimse
     fimse
          fimse
fimprocedimento

 

tipo
ficha = registro
nome: caractere
idade: inteiro
fimregistro

 

Var
// Seção de Declarações das variáveis
cliente: vetor [0..9999] de ficha
i: inteiro  //
opcao: inteiro


Inicio


menu
escolha opcao
caso 1
para i de 0 ate 0 faca
Escreval ("Vamos iniciar o cadastro eleitoral")
Escreval ("Digite seu nome")
leia (cliente.nome)
Escreval ("Digite sua idade")
leia (cliente.idade)
fimpara


menu

caso 2

se i (cliente.nome, cliente.idade <> 0) então
escreval (cliente.nome, cliente.idade)
senao
se i (cliente.nome, cliente.idade = 0) entao
interrompa
senao
fimse
     fimse


filtro

caso 3
fimescolha
Fimalgoritmo 

 

  • Obrigado 1
  • Confuso 1
  • Membro VIP
Postado

@Lucas R., olá. Seu programa tem diversos pequenos probleminhas...


Entretanto, o que me chamou mais a atenção é que você está utilizando de funções, vetor, registro etc, mas está se confundindo com algo mais básico: montar sentenças para um se/entao. Isso não faz muito sentido 🙇‍♂️. Talvez esteja avançando nos conteúdos rápido de mais ou aprendendo fora de uma ordem lógica...

 

Mais em fim... minha sugestão é tentar refazer a estrutura do algoritmo aos poucos...

 

 

Abaixo segue um esboço feito a parte do teu código inicial:

algoritmo "FCdH"

procedimento menu()
inicio
   escreval("CASDASTRO ELEITORAL")
   escreval("*****************************************")
   escreval("Selecione uma das opções: ")
   escreval("1 - Cadastrar")
   escreval("2 - Listar cadastros")
   escreval("3 - Sair")
   leia(opcao)
fimProcedimento

tipo
   ficha = registro
      nome :caractere
      idade :inteiro
   fimRegistro

var
   clientes :vetor [1..10] de ficha
   opcao :inteiro
   contClientes :inteiro
   i :inteiro

Inicio
   contClientes <- 0
   repita
      menu()
      escolha opcao
      caso 1
         contClientes <- contClientes + 1
         escreval("CASDASTRO ELEITORAL")
         escreval("")
         escreva ("Nome : ")
         leia(clientes[contClientes].nome)
         escreva ("Idade: ")
         leia(clientes[contClientes].idade)
      caso 2
         //falta implementar
      fimEscolha
   ate opcao = 3
fimAlgoritmo


Nesse código apenas foi feito um modo de ir cadastrando eleitores... um a um mesmo. Tente comparar as diferenças com o seu código... veja o que faz ou não faz sentido para você... caso tenha dúvidas, é só perguntar...

 

Após, a sugestão é implementar o item 2, que vai servir para testar se está cadastrando corretamente (não adianta tentar analisar os dados se eles não estiverem armazenados, e armazenados corretamente). Lá, apenas coloque para imprimir na tela todos os eleitores já cadastrados (utilize um para/faca).

 

Aí, aos poucos vamos te ajudando a ir ajustando o código e ir adicionando novas funcionalidades.

 

 

No aguardo.

  • Curtir 1
  • Obrigado 1
Postado

@Lucas R.   seu código com algumas modificações poderia ser assim  :

Algoritmo "registro"
Procedimento menu
Inicio
   Escreval("Cadastro eleitor")
   Escreval("*****************************************")
   Escreval("Selecione uma das opções: ")
   escreval("1 - Cadastrar")
   escreval("2 - Mostrar total cadastrado")
   escreval("3 - filtro")
   escreval("4- Sair")
   leia (opcao)
Fimprocedimento
procedimento filtro( i : inteiro )
Inicio
  //escreval("está no filtro - valor de i = ",i)
  se (cliente[i].idade >= 18) e (cliente[i].idade < 70) entao
    escreval(cliente[i].nome," É Eleitor Obrigatório a votar")
  senao
    se cliente[i].idade > 15 entao
      se (cliente[i].idade < 18)ou(cliente[i].idade >= 70) entao
        escreval(cliente[i].nome," É Eleitor Facultativo a votar")
      fimse
    senao
      se (cliente[i].idade < 16) entao
        escreval(cliente[i].nome," Não é eleitor")
      fimse
    fimse
  fimse
fimprocedimento
tipo
  ficha = registro
  nome  : caractere
  idade : inteiro
fimregistro

Var
  cliente : vetor [1..99] de ficha
  i,cont  : inteiro  // contar o total de cadastros
  opcao,j : inteiro
  sair    : caractere
Inicio
  repita
    menu
    escolha opcao
    caso 1
      escreval("Cadastrando . . . !")
      repita
        cont := cont + 1
        Escreval("Vamos iniciar o cadastro eleitoral")
        Escreval("Digite seu nome")
        leia(cliente[cont].nome)
        Escreval("Digite sua idade")
        leia(cliente[cont].idade)
        escreva("cadastrar outro S/N ")
        leia(sair)
      ate maiusc(sair) = "N"
    caso 2
      escreval("Listando . . . !")
      para i de 1 ate cont faca
        //se i (cliente.nome, cliente.idade <> 0) então
        escreval("cliente ",i," nome --> ",cliente[i].nome )
        escreval("cliente ",i," idade -> ",cliente[i].idade)
        escreval
      fimpara
      escreval
//      senao
//        se i (cliente.nome, cliente.idade = 0) entao
//          interrompa
//        senao
//        fimse
//      fimse
//    filtro
    caso 3
      escreval("filtrando . . . !")
      para j de 1 ate cont faca
        filtro( j )
      fimpara
      // outras coisa a fazer
    fimescolha
  ate opcao = 4// sai do programa digitando 4
Fimalgoritmo

 

 

  • Curtir 1
  • Membro VIP
Postado

@devair1010, acho que você inverteu um item do registro, com um item do vetor..

 

Ex.:

17 horas atrás, devair1010 disse:

        escreval("cliente ",i," nome --> ",cliente.nome[i ])
        escreval("cliente ",i," idade -> ",cliente.idade[i])


O vetor não seria o cliente? logo, o "[]" fica nele. São vários clientes, e cada um deles tem um nome e uma idade. Da forma que está, ficou como se existisse apenas um cliente, e este teria vários nomes e várias idades...

 

Adendo: para vetores é recomendável (sugestão de boa prática) colocar a nomenclatura no plural... isso reforça que a estrutura é um "coletivo". Ficaria algo como:

        escreval("Cliente ", i:1, " nome --> ", clientes[i].nome)
        escreval("Cliente ", i:1, " idade -> ", clientes[i].idade)

 

No caso, se "nome" (ou "idade") fosse também um vetor, ficaria "nomes" (ou "idades"), ou seja: ao chegar nessa parte... só o fato de ter um "s" ou não já indicaria o que é um vetor, e o que não é... No exemplo acima, apenas "clientes" é um vetor.

 

 

 

  • Obrigado 2
Postado
Em 20/10/2019 às 16:23, devair1010 disse:

@Lucas R.   seu código com algumas modificações poderia ser assim  :


Algoritmo "registro"
Procedimento menu
Inicio
   Escreval("Cadastro eleitor")
   Escreval("*****************************************")
   Escreval("Selecione uma das opções: ")
   escreval("1 - Cadastrar")
   escreval("2 - Mostrar total cadastrado")
   escreval("3 - filtro")
   escreval("4- Sair")
   leia (opcao)
Fimprocedimento
procedimento filtro(i : inteiro)
Inicio
  escreval("está no filtro - valor de i = ",i)
  se (cliente.idade[i] >= 18) e (cliente.idade[i] <=69) entao
    escreval ("Obrigatório")
  senao
    se (cliente.idade[i] = 16) ou (cliente.idade[i] =17) ou (cliente.idade[i]  >= 70) entao
      escreval ("Facultativo")
    senao
      se (cliente.idade[i] < 16) entao
        escreval ("Não é eleitor")
      senao
      fimse
    fimse
  fimse
fimprocedimento
tipo
  ficha = registro
  nome  : caractere
  idade : inteiro
fimregistro

Var
  cliente : vetor [1..99] de ficha
  i,cont  : inteiro  // contar o total de cadastros
  opcao   : inteiro
  sair    : caractere
Inicio
  repita
    menu
    escolha opcao
    caso 1
      escreval("Cadastrando . . . !")
      repita
        cont := cont + 1
        Escreval("Vamos iniciar o cadastro eleitoral")
        Escreval("Digite seu nome")
        leia(cliente.nome[cont])
        Escreval("Digite sua idade")
        leia(cliente.idade[cont])
        escreva("cadastrar outro S/N ")
        leia(sair)
      ate sair <> "N"
    caso 2
      escreval("Listando . . . !")
      para i de 1 ate cont faca
        //se i (cliente.nome, cliente.idade <> 0) então
        escreval("cliente ",i," nome --> ",cliente.nome[i ])
        escreval("cliente ",i," idade -> ",cliente.idade[i])
      fimpara
      escreval
//      senao
//        se i (cliente.nome, cliente.idade = 0) entao
//          interrompa
//        senao
//        fimse
//      fimse
//    filtro
    caso 3
      escreval("filtrando . . . !")
      filtro( 1 )
      // outras coisa a fazer
    fimescolha
  ate opcao = 4// sai do programa digitando 3
Fimalgoritmo

 

Na parte do filtro, gostaria que aparecesse o nome, idade e se ele é eleitor obrigatório, facultativo ou não eleitor, nesse caso como faço?

 

  • Obrigado 1
Postado
1 hora atrás, Lucas R. disse:

 

Seria como no "Caso 2", mas além do nome e idade também informasse se é eleitor obrigatório, facultativo ou não eleitor.

  • Curtir 1
Postado

@Lucas R.    sim , para mostrar o nome e idade é como no caso 2 mesmo pois as variáveis do registro são do tipo global , e por isso podem ser acessadas de qualquer parte do programa ,  e lá na função filtro você usa o comando se , para saber a situação do eleitor ,  então você precisa ver quais são os critérios ,  se for pela idade , já tem a idade só comparar e imprimir de acordo .

@Simon Viegas    obrigado , pela correção   , editei o código acima  .

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

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!