Exercicio – 54 estrutura de repetição validadando dados.

Home Fóruns Programação Básica Exercicio – 54 estrutura de repetição validadando dados.

Marcado: 

Visualizando 16 respostas da discussão
  • Autor
    Posts
    • #91574
      Alex oliveira
      Participante

      Poderiam copiar o codigo e veja se ele esta funfando no seu portugal .
      o meu está dando erro de compilação no meu caso variável não inicializada . coloquei aspas e nada.

      programa
      {/* validando dados 
      
      contabilize a quantidade de dados cadastrados no sistema;
      mostre quem é a pessoa mais nova e a mais velha. com suas idade;
      idade validada entre 0 e 130.
      nome validado. com pelo menos 3 letras. 
             	 
             	 Autor: Alex oliveira abreu batista
      		 Midias sociais: @alexoab
      		 Empresa:OABTECK-IOT
      		*/
      	inclua biblioteca Texto--> text
      	inclua biblioteca Tipos--> t
      	funcao inicio()
      	{
      		inteiro cont=1,maisvelho=0,maisnovo=0 ,idade=0
      		cadeia nome="",teclado, novo ="", velho=""
      		caracter resp
      		escreva("CADASTRO VALI: \n\n\n")
      		faca{
      			escreva("======================\n")
      			escreva("DIGITE A ", cont ," ° Pessoa:\n \n ")
      			escreva("======================\n")
      			enquanto (verdadeiro){
      				escreva("Digite um nome : ")
      				leia(teclado)
      				se(text.numero_caracteres(teclado)<=3){
      					nome = teclado
      					pare
      				}senao{
      					escreva("<<ERRO!>> O nome dever ter mais de 3 caracteres : \n")
      				}
      				
      			}
      			
      			enquanto(verdadeiro){
      			escreva("Idade : ")
      			leia(teclado)
      			se (t.cadeia_e_inteiro(teclado, 10 )) {
      				idade=t.cadeia_para_inteiro(teclado, 10)
      				se(idade >=1 e idade <=130){
      					pare 
      				}senao{
      					escreva("<<ERRO!>> Idade inválida\n")
      				}
      				
      			}senao{
      				escreva(" <<ERRO!>> Idade invalida  deve ser um numero inteiro \n")
      			}
      			
                   }
      			cont++ 
      			se(cont==1){
      				maisvelho=idade
      				maisnovo=idade
      				velho=nome
      				novo=nome
      			}senao{
      				se(idade<maisnovo){
      					idade=maisnovo
      					novo=nome
      				}
      				se(idade>maisvelho){
      					idade=maisvelho
      					velho=nome
      				}
      			}
      			enquanto (verdadeiro){
      				escreva("Deseja continuar[S/N] :?")
      				leia(teclado)
      				se(t.cadeia_e_caracter(teclado)){
      					resp=t.cadeia_para_caracter(teclado)
      					pare
      				}senao{
      					escreva("<<ERRO>> Resposta Inválida! Digite apenas S ou N ")
      				}
      			}
      			
      			
      			
      		}enquanto(resp=='S' ou resp=='s')
      		escreva("=================================================")
                escreva("\nVocê cadastrou : " , cont ," Pessoas ")
                escreva("\n A pessoa mais nova é ", novo ," com idade de ", maisnovo)
      	     escreva("\n A pesso mais velha é ", velho , " com idade de ", maisvelho)
      		
      	}
      }

    • #91609
      IcaroFilho
      Moderador

      Para resolver o problema de inicialização basta inicializa-la com valor nulo, lembrando que se tratando de um tipo caracter, tem que se utilizar de aspas simples com um espaço entre elas:
      caracter resp = ' '

      1. Sua condição de tratamento para numero de caracteres esta invertida… ou seja, so esta aceitando nomes com menos de três caracteres. Para corrigir basta inverter o sinal de menor que para maior que:
      se(text.numero_caracteres(teclado)>=3)

      2. Seu programa esta tendo mais dois problemas:
      2.1 Contador de pessoas cadastradas com erro de contagem
      2.2 Nomes e idades incorretos
      isto ocorre pois o seu contador esta inicializando em 1, logo após a etapa de checagem de nomes recebe um acréscimo de 1 e tem seu valor alterado para 2, sendo assim ele não contemplará a primeira condição de cont == 1 e irá pular as atribuições de nomes e idades ao inicializar.
      A correção é simplesmente altera para valor 0 na declaração e para exibir a chamada, usar o método cont + 1 dentro do escreva:
      inteiro cont=0

      escreva("DIGITE A ", cont + 1 ," ° Pessoa:\n \n ")
      2.3 Ainda sim dará erro de valores nas idades. acredito que tenha se perdido nas atribuições de valores e nomes. isto ocorreu pois tentou usar uma variável intermediadora (teclado) quando poderia simplesmente fazer atribuições diretas (sem precisar converter valores).
      Para não ter que refatorar o código, basta que inverta as atribuições

      se(idade<maisnovo){
          idade=maisnovo // o correto é : maisnovo = idade
          novo=nome
      }
      se(idade>maisvelho){
          idade=maisvelho // o correto é : maisvelho = idade
          velho=nome
      }

      3.Dica de boas práticas:
      procure utilizar mais “espaços” … isso deixara seu código mais legível:
      se(text.numero_caracteres(teclado)>=3) -> se( text.numero_caracteres( teclado ) >= 3)
      idade=t.cadeia_para_inteiro(teclado, 10) -> idade = t.cadeia_para_inteiro( teclado , 10 )
      se(idade>maisvelho) -> se( idade > maisvelho)

      Pode parecer bobeira, mas em códigos maiores irá ajudar a ler.

    • #97377
      ROSANGELA MENDES
      Participante

      Boa tarde!
      Iniciei a construção do código, mas aparecem as seguintes mensagens:
      1) linha 9 – A expressão “”” (eu não inseri aspas duplas, mas ”) não era esperada neste local, remova a expressão para corrigir o problema.
      E na linha 11 – A expressão não foi iniciada corretamente. Insira o caracter ‘(‘

      2) Se removo as aspas simples aparece:
      erro de compilação.
      A variável resposta não pode ser inicializada.

      Vou colar o código que estou construindo:

      cadeia nome = “”, nome_maisVelha = “”, nome_maisNova = “”
      inteiro idade = 0, idade_maisVelha = 0, idade_maisNova = 0, cont = 0
      caracter resposta = ”

      faca{

      enquanto(verdadeiro){
      escreva(“——————————\n”)
      escreva(“->”,cont, “ª PESSOA CADASTRADA\n”)
      escreva(“——————————\n”)

      escreva(“NOME: “)
      leia(nome)

      escreva(“IDADE: “)
      leia(idade)

      }enquanto (verdadeiro){
      escreva(“Quer continuar? [S/N] “)
      leia(resposta)
      se (resposta == ‘N’ ou resposta == ‘n’){
      pare
      }
      }
      cont++
      }enquanto(resposta == ‘S’ ou resposta == ‘s’)
      escreva(“==========RESULTADO============”)
      escreva(“Ao todo, você cadastrou “, cont, ” pessoas \n”)

    • #97378
      Tutora Jessica
      Moderador

      Olá Rosangela, então, como meu amigo Icaro falou acima :
      Para resolver o problema de inicialização basta inicializa-la com valor nulo, lembrando que se tratando de um tipo caracter, tem que se utilizar de aspas simples com um espaço entre elas, dessa forma:
      caracter resposta = ' '

      Se puder nos envie um feedback se foi resolvido ou não..
      Caso fique alguma dúvida só retornar ao fórum, beleza?
      Bons estudos 🖖

    • #97383
      ROSANGELA MENDES
      Participante

      Jéssica!! Eu não acredito!!! Só isso!! 🤦🏻‍♀️

      Muito obrigada pela atenção!

      Vou continuar construindo! 😀

    • #97940
      Felipe Barbour
      Participante

      Boa tarde!!

      Realizei a ativade 054, porém gostaria de opiniões sobre o meu código, e se da para melhora-lo

      Segue abaixo o Código:

      programa
      {

      inclua biblioteca Texto –> txt
      inclua biblioteca Tipos –> t
      funcao inicio()
      {
      inteiro c = 0, idade = 0, maioridade = 0, menoridade = 0
      cadeia teclado1, teclado2, nome = ” “, nomeM = ” “, nomeME = ” ”
      caracter resp = ‘ ‘

      escreva (“{ EXERCÍCIO 054 – Pessoas Validadas }”)
      faca{
      enquanto (verdadeiro){
      escreva (“\n”, (c+1), “° Pessoa “)
      escreva (“\n\nNome: “)
      leia (nome)

      se (txt.numero_caracteres(nome) >= 3){
      enquanto (verdadeiro){
      escreva (“\nIdade: “)
      leia (teclado2)
      se (t.cadeia_e_inteiro(teclado2, 10)){
      idade = t.cadeia_para_inteiro(teclado2, 10)
      se (idade > 0 e idade < 130){
      c++
      se (c == 1){
      maioridade = idade
      menoridade = idade
      nomeM = nome
      nomeME= nome
      } senao {
      se (idade > maioridade){
      maioridade = idade
      nomeM = nome
      pare
      } senao {
      se (idade < menoridade){
      menoridade = idade
      nomeME = nome
      pare
      }
      }
      }

      pare
      } senao {
      escreva (“<<ERROR>> IDADE INVÁLIDA, A idade deve estar entre 1 e 130, tente novamente\n”)

      }
      } senao {
      escreva (“<<ERROR>> IDADE INVÁLIDA, A idade deve ser um número inteiro, tente novamente\n”)

      }
      }
      }senao {
      escreva (“<<ERROR>> O nome, deve ter pelo menos 3 caracteres!! Tente novamente\n”)

      }
      se (txt.numero_caracteres(nome) >= 3){
      pare
      }

      }
      escreva (“\nQuer continuar? [S/N] “)
      leia (resp)

      }enquanto (resp == ‘s’ ou resp == ‘S’)
      escreva (“\n-=-=-=-=-=-=-= Resultados -=-=-=-=-=-=-=”)
      escreva (“\nAo todo, você cadastrou “, c, ” pessoas.”)
      escreva (“\n”, nomeM, ” é a pessoa mais velha, com “, maioridade, ” anos.”)
      escreva (“\n”, nomeME, ” é a pessoa mais jovem, com “, menoridade, ” anos.”)
      }
      }

    • #97996
      Tutora Jessica
      Moderador

      Olá Felipe,

      Existem sim maneiras de simplificar seu código, porém necessita de conhecimentos que serão adquiridos a partir do módulo 4.
      Continue seus estudos 🖖

    • #108330
      Marlei GS
      Participante

      Boa tarde pessoal!!! Tudo bem????

      Segue abaixo meu código. Tem dois problemas que não sei como resolver e já li tudo referente a este Ex 54 (M03) aqui no fórum (Há outras dois tópicos).
      1. Ao digitar o nome, se digitarmos números, por exemplo: “Nome: 1974”, o meu código aceita como nome válido. Gostaria de saber como fazer para aceitar somente NOMES com 3 carecter ou mais.
      2. Se digitarmos 3 espaço vazio, ele aceita também.

      Vi outros códigos aqui no Fórum referente ao ex 54, e todos eles aceitam números e espaços vazios como nome. Ainda não assisti a aula de correção deste ex.

      Muito obrigado pela ajuda!!!!

      MarleiGS

      programa
      {
      	inclua biblioteca Util --> u
      	inclua biblioteca Texto --> t
      	inclua biblioteca Tipos --> ti
      	funcao inicio()
      	{
      		escreva("M03A15: Validação de Dados com Laços\n")
      		escreva("Ex 054: Pessoas Validadas\n")
      
      		inteiro p, idade, idade_maior, idade_menor
      		p = 0
      		idade = 0
      		idade_maior = 0
      		idade_menor = 0
      
      		cadeia nome, resp, age, nome_velho, nome_novo
      		nome = " "
      		nome_velho = " "
      		nome_novo = " "
      				
      		faca {
      			p++
      			escreva("\n", p, "ª PESSOA\n")
      
      			// Nome
      			enquanto(verdadeiro) {
      				escreva("Nome: ")
      				leia(nome)
      				
      				se(t.numero_caracteres(nome) >= 3) {
      					pare
      				} senao {
      					escreva("<<Erro>> O nome deve conter no mínimo 3 letras!\n")
      				}
      			}
      
      			// Idade
      			enquanto(verdadeiro) {
      				escreva("Idade: ")
      				leia(age)
      				
      				se(ti.cadeia_e_inteiro(age, 10)) {
      					idade = ti.cadeia_para_inteiro(age, 10)
      					
      					se(idade > 0 e idade < 130) {
      						pare
      					} senao {
      						escreva("<<ERRO>> Idade INVÁLIDA!\n")
      					}
      										
      				} senao {
      					escreva("<<Erro>> A idade dever ser um número INTEIRO!\n")
      				}
      			}
      
      			se(p == 1) {
      				idade_maior = idade
      				idade_menor = idade
      				nome_velho = nome
      				nome_novo = nome
      			} senao {
      				se (idade > idade_maior) {
      					idade_maior = idade
      					nome_velho = nome
      				}
      				se (idade < idade_menor) {
      					idade_menor = idade
      					nome_novo = nome	
      				}
      			}
      			escreva("Quer continuar [S/N]? ")
      			leia(resp)
      			resp = t.caixa_alta(resp)
      				enquanto(resp != "S" e resp != "N") {
      					escreva("<<ERRO>> Resposta Inválida. Tente novamente!\n")
      					escreva("Digite apenas 'S' para continuar ou 'N' para encerrar. Deseja continuar? ")
      					leia(resp)
      					resp = t.caixa_alta(resp)
      				}
      			
      		} enquanto(resp == "S")
      
      		escreva("\n***** PROGRAMA INTERROMPIDO PELO USUÁRIO *****")
      		u.aguarde(750)
      		escreva("\n\n========== RESULTADOS ==========\n")
      
      		se(p == 1) {
      			escreva("1. Ao todo você cadastrou ", p, " pessoa.")
      		} senao {
      			escreva("1. Ao todo você cadastrou ", p, " pessoas.")
      		}
      
      		escreva("\n2. A pessoa mais velha é ", nome_velho, " com ", idade_maior, " anos.")
      		escreva("\n3. A Pessoa mais nova é ", nome_novo, " com ", idade_menor, " anos.")
      
      		escreva("\n\n=*=*=*=*=*=> PROGRAMA ENCERRADO <=*=*=*=*=*=\n")
      	}
      }
      
    • #108333
      Tutora Jessica
      Moderador

      Ola Marlei, é aceito pois a sua declaração primitiva da variável nome foi cadeia (caracter), número também é caracter.
      Em diversas aulas o professor Guanabara fala sobre.
      Te sugiro assistir a resolução desse exercício.
      Para que seja nomes de 3 ou mais caracteres você precisa de uma validação para que seja feito somente dessa forma.

    • #115637

      Oi, Jéssica! Pode me ajudar?
      Não está lendo o nome do mais velho, jovem e a idade.

      inclua biblioteca Texto –> txt
      inclua biblioteca Tipos –> t
      funcao inicio()
      {
      inteiro idade=0, c=0, cad=0, anos_jovem=0, anos_velho=0
      cadeia nome=” “, resp, teclado= ” “, nome_jovem= ” “, nome_velho=” ”

      enquanto(verdadeiro){
      c++

      escreva(“\n————————–“)
      escreva(“\n\tPESSOA ” + c)
      escreva(“\n————————–“)
      escreva(“\nNOME: “)
      leia(nome)
      se(txt.numero_caracteres(nome)>=3){
      cad++
      escreva(“Idade: “)
      leia(teclado)

      se(t.cadeia_e_inteiro(teclado,10)){
      idade=t.cadeia_para_inteiro(teclado,10)
      se(idade>=0 e idade<=120){
      escreva(“Quer continuar? [S/N] “)
      leia(resp)
      se(resp==”n” ou resp==”N”){
      pare

      }

      }senao{
      escreva(“[ERRO] Idade inválida\n”)

      }

      }senao{
      escreva(“[ERRO] A idade deve ser um número inteiro!\n”)

      }

      }senao{

      escreva(“[ERRO] O nome deve ter pelo menos 3 letras!”)
      }

      se(c==1){
      idade=anos_jovem
      idade=anos_velho
      nome=nome_jovem
      nome=nome_velho
      }senao{

      se(idade < anos_jovem){
      nome_jovem= nome
      anos_jovem = idade
      }

      se(idade>anos_velho){
      nome_velho=nome
      anos_velho=idade
      }

      }

      }
      escreva(“\n”)
      escreva(“================ RESULTADO ====================”)
      escreva(“\nAo todo, você cadastrou ” + cad + ” pessoas.”)
      escreva(“\n” + nome_velho + ” é a pessoa mais velha, com ” + anos_velho + ” anos.”)
      escreva(“\n” + nome_jovem + ” é a pessoa mais jovem, com ” + anos_jovem + ” anos.”)
      escreva(“\n”)

      }

      }

    • #115686
      Tutora Jessica
      Moderador

      Ola Miguel, seu código esta muito confuso. Quando for nos enviar aqui no fórum, selecione ele por completo e clique no botão CODE na caixinha acima.
      Novamente você precisa se atentar aos fechamentos das chaves no seu código. Coloque o senao logo abaixo do se correspondente para ficar mais organizado .
      Seu código precisa de um faça antes do enquanto.. esse é um dos propósitos desse exercício.
      Por fim, dê uma olhadinha também na explicação acima do Ícaro, irá lhe ajudar bastante.
      Bons estudos 🖖

    • #130170
      Filipe Mamud Oliveira
      Participante

      Ola Tutora,
      Espero que tudo esteja ocorrendo bem para você.
      Eu fiz meu codigo e apareceram dois erros na hora que eu integrei as condições de atribuição para o nome e idades para as pessoas mais velha e nova.
      “Erro na compilação”
      “Existem trechos do codigo onde a variavel idade pode não ter sido inicializada”
      Você poderia me ajudar por favor?

      programa
      {

      inclua biblioteca Tipos –> ti
      inclua biblioteca Texto –> txt
      funcao inicio()
      {
      escreva(” { EXERCICIO 054 – PESSOAS VALIDADAS } “)
      escreva(“\n”)

      inteiro c=0, idade, soma = 0, pessoa =0, anosv =0, anosn =0
      cadeia teclado, velha, nova, nome
      caracter resposta = ‘ ‘
      faca {
      enquanto (verdadeiro) {
      escreva(“—————————————–\n”)
      escreva(“\t\tPESSOA “, c+1, “\n”)
      escreva(“—————————————–\n”)
      escreva(“NOME: “)
      leia(teclado)
      se (txt.numero_caracteres(teclado) >3) {
      nome = teclado
      pare
      } senao {
      escreva(“<<ERRO>> O nome deveter pelo menos 3 letras!\n”)
      }
      }
      enquanto (verdadeiro) {
      escreva(“IDADE: “)
      leia(teclado)
      se (ti.cadeia_e_inteiro(teclado, 10)) {
      idade = ti.cadeia_para_inteiro(teclado, 10)
      se (idade>0 e idade <=120) {
      pare
      } senao {
      escreva(“<<ERRO>> Idade invalida!\n”)
      }
      } senao {
      escreva(“<<ERRO>> A idade deve ser um numero inteiro!\n”)
      }
      }
      enquanto (verdadeiro) {
      escreva(“Quer continuar? [S/N] “)
      leia(teclado)
      se (ti.cadeia_e_caracter(teclado)) {
      resposta = ti.cadeia_para_caracter(teclado)
      se (resposta == ‘S’ ou resposta == ‘s’ ou resposta == ‘N’ ou resposta == ‘n’) {
      pare
      } senao {
      escreva(“<<ERRO>> A resposta deve ser S ou N!\n”)
      }
      } senao {
      escreva(“<<ERRO>> A resposta deve ser uma letra!\n”)
      }
      }
      c++
      soma+=pessoa
      se ( c==1) {
      anosv = idade
      velha = nome
      anosn = idade
      nova = nome
      } senao {
      se (idade > anosv) {
      anosv = idade
      velha = nome
      }
      se (idade < anosn) {
      anosn = idade
      nova = nome
      }
      }
      } enquanto (resposta == ‘S’ ou resposta == ‘s’)

      escreva(“\n—————————————–\n”)
      escreva(“Ao todo você cadastrou: “, pessoa, ” pessoas.\n”)
      escreva(velha, ” é a pessoa mais velha, com “, anosv, ” anos.\n”)
      escreva(nova, ” é a pessoa mais nova, com “, anosn, ” anos.\n”)
      }
      }

      • #130199
        Tutora Jessica
        Moderador

        Ola Filipe, esse erro quer dizer que a variável precisa ser inicializada, nesse caso é só você colocar ela =0 igual fez com as outras variáveis.

    • #139268

      Olá! É a primeira vez que tento tirar dúvidas no fórum. Como não estou encontrando o erro no meu código, conto com a ajuda de vocês para sanar essa questão.
      Quando vou executar o programa no portugol eu posso colocar um número, por exemplo 12, para a idade e ele não está reconhecendo. Diz que está vazia. Vou mandar o código.

      programa {/*Ex054 - Pessoas Validadas 
      Leitura de nome e idade de várias pessoas. 
      No resultado final mostre a pessoa mais velha e a mais nova.
      O programa deverá ter a validação dos dados de enttrada:
      - nome com pelo menos 3 letras;
      - idade entre 0 e 130 anos;
      - pergunta se quer continuar aceitando somente as respostas S ou N.*/
        inclua biblioteca Texto --> tx
        inclua biblioteca Tipos --> tp
        funcao inicio() 
        {
          cadeia teclado, nome, jovem = "", velho = ""
          inteiro idade, cont = 0, maior = 0, menor = 0
          caracter resp
      
          faca {
            escreva ("\n      PESSOA ",(cont + 1)," \n")
      
            enquanto (verdadeiro) {
              escreva ("NOME: ")
              leia (teclado)
              se (\tx.numero_caracteres(teclado) >= 3) {
                nome = teclado
                pare
              } senao {
                escreva ("<<ERRO>> O nome deve ter pelo menos 3 letras.")
              }
            }
            enquanto (verdadeiro) {
              escreva ("IDADE: ")
              leia (teclado)
              se (\tp.cadeia_e_inteiro(teclado)) {
                idade = \tp.cadeia_para_inteiro(teclado,10)
                se (idade >= 1 e idade <= 130) {
                  pare
                } senao {
                  escreva ("<<ERRO>> A idade deve ser um número entre 0 e 130")
                }
              } senao {
                escreva ("<<ERRO>> A idade deve ser um número inteiro.")
              }
            }
            
            cont ++
            se (cont == 1) {
              maior = idade
              menor = idade
              jovem = nome
              velho = nome
            } senao {
                se (idade > maior) {
                  maior = idade
                  velho = nome
                }
                se (idade < menor) {
                  menor = idade
                  jovem = nome
                }
            }
            enquanto (verdadeiro) {
              escreva ("Quer continuar? [S/N] ")
              leia (teclado)
              se (\tp.cadeia_e_caracter(teclado)) {
                resp = \tp.cadeia_para_caracter(teclado)
                se (resp == "S" ou resp == "s" ou resp == "N" ou resp == "n"){
                  pare
                } senao {
                  escreva ("<<RESPOSTA INVÁLIDA>> Responda apenas S ou N.\n")
                }
              }
            }
          } enquanto (resp == "S" ou resp == "s")
          escreva ("\nVocê cadastrou ",cont," pessoas")
          escreva ("\n",jovem," é a pessoa mais nova, com ",menor," anos")
          escreva ("\n",velho," é a pessoa mais velha, com ",maior," anos")
        }
      }
      • #139274
        Tutora Jessica
        Moderador

        Olá Simão, para que seu programa funcione você precisa passar um parâmetro base para a função cadeia_e_inteiro, para isso é só você colocar uma quantidade que deseja nessa função, exemplo:

        se (\tp.cadeia_e_inteiro(teclado,10)) {
                  idade = \tp.cadeia_para_inteiro(teclado,10)
                  se (idade >= 1 e idade <= 130) {
      • #139275

        Agora deu certo. Programa rodando perfeitamente. Muito obrigado.

    • #139269

      Está aparecendo o seguinte:
      “Tipos incompatíveis! O parâmetro ‘base’ dada função ‘cadeia_e_inteiro’ espera Uma expressão do tipo ‘inteiro’ com valor, mas foi passada uma expressão do tipo ‘vazio’ vazia.

    • #139299
      Daniel C. Cunha
      Participante

      Saudações a todos! Escrevo aqui, pois assim como muita gente bati muito a cabeça!
      Retornei os estudos após 6 meses… mas não estou olhando meus exercícios já feitos, em vez disso estou refazendo tudo…e só agora no exercício 54 é que a mente está começaaaaaando a clarear…

      Percebi que muita gente tem os mesmos erros que eu, então assim:

      1 – Toda vez que tiver uma variável dentro de um loop, há obrigatoriedade de dar-lhe um valor, inicializando a variável, la onde se declara.
      – Caso não tenha variáveis dentro de um looping, podem perceber que não aparece erro algum desse tipo!

      2 – O contador e seu inicio em 0 ou em 1 é uma verdadeira pegadiha do malandro.
      No meu caso o código estava passando direto na primeira leitura então funcionava errado.
      (aí depois de ler a resposta do Icaro me dei conta de que o programa nunca passava naquela condição – OBRIGADO ÍCARO!)
      Temos que ter atenção de: ‘Onde coloquei meu contador’ pois as vezes colocando antes ou após os comandos, ele vai agir de forma diferente do que pensamos.
      E se realmente temos a necessidade de inicia-lo com o valor 1, ou se é melhor iniciar com o próprio 0.

      3 – Criar erros propositais para ver como reagem as críticas dos programas também é um ótimo jeito de perceber erros futuros.

      Eu ainda estou batendo cabeça com algumas coisas…
      por exemplo :
      No meu código, na hora de fazer a condição (se) da idade… supostamente era para ter dado certo a seguinte condição:
      –> se(nao(idade >= 0 ou idade <= 130)) { –> onde coloquei a condição verdadeira (idade >= 0 ou idade <= 130) e depois fazemos o uso do NÃO por fora (nao( …

      Mas por nada no mundo funcionava…

      Colocando já uma condição sem ter que utilizar o NAO funcionou:
      –> se(idade < 0 ou idade > 130) –> Funcionou, mas supostamente era para os dois casos funcionarem iguais não ???
      Em alguma parte me perdi nisso, pois outros exercícios que tenho essa primeira condição com o NAO funciona sem problemas…

      Alguém saberia explicar o porque do não funcionamento da condição com o ‘não’ neste caso??
      Vou colocar aqui meu código mas ainda não terminei…

      programa
      {/*Programa para validar dados
      Aluno Daniel C.
      */
      	
      	inclua biblioteca Tipos --> t
      	inclua biblioteca Texto --> txt
      	funcao inicio()
      	{
      		// Variáveis utilizadas dentro dos laços tem de ser inicializadas com um valor 
      		// a não ser que sejam valorizadas pelo entrada de valores do usuário	
      		logico hit = verdadeiro
      		cadeia teclado, nome = "", nomeMvelho = "", nomeMnovo = "", nomeFvelho = "", nomeFnovo = ""
      		inteiro idade = 0, idadeMvelho = 0,idadeMnovo = 0, idadeFvelho = 0, idadeFnovo = 0,num
      		inteiro contaP = 0, contaM = 0, contaF = 0
      		caracter opcao = ' ', sexo = ' '
      
      		escreva("{ EXERCICIO 054 - Pessoas validadas }")
      		enquanto(verdadeiro)// Loop central que abrange todo o progama
      		{
      			faca // Loop C/ TESTE LOGICO NO FINAL para a validacao do CONTINUA? [S/N]
      			{
      				se(hit == verdadeiro) { //gatilho para o programa voltar ao lugar certo apos validacao do CONTINUA? [S/N]
      					escreva("\n-----------------------------------------")
      					escreva("\n\t", contaP + 1,"° PESSOA ")
      					escreva("\n-----------------------------------------\n")
      //================================================================================================================================
      					enquanto (verdadeiro) 
      					{
      					//	escreva("\n=-=-=-= COMEÇO DO ENQUANTO =-=-=-=\n")//FLAG TEMPORARIA
      //----------------------------VALIDACAO DO NOME----------------------------------------------------------------------------------------------------
      						enquanto(verdadeiro) 
      						{
      							escreva("Nome: ")
      							leia(nome)
      							num = txt.numero_caracteres(nome)
      							se(nao(num >= 3)) {
      								escreva(" < < < ERRO [1] O NOME DE TER TRES LETRAS OU MAIS! > > > \n")
      							} senao {
      								contaP++
      								pare
      							}
      						}
      //----------------------------VALIDACAO DA IDADE----------------------------------------------------------------------------------------------------
      						enquanto(verdadeiro) 
      						{
      							escreva("Idade: ")
      							leia(teclado)
      							se(nao(t.cadeia_e_inteiro(teclado, 10))) {
      								escreva(" < < < ERRO [2] VALOR INVALIDO > > > \n")
      							} senao {
      								idade = t.cadeia_para_inteiro(teclado, 10)
      								se(idade > 130 ou idade < 0) {
      									escreva(" < < < ERRO [3] IDADE INVALIDA > > > \n")
      								} senao {
      									pare
      								}
      								
      							}
      							// pare PARANDO AQUI VOLTA-SE PRO começo enquanto FLAG - junto com a mensagem de erro!!!
      						}
      						
      //----------------------------VALIDACAO DO SEXO----------------------------------------------------------------------------------------------------						
      						enquanto(verdadeiro) 
      						{
      							escreva("Sexo: ")	
      							leia(sexo)
      							se(nao(sexo == 'M' ou sexo == 'm' ou sexo == 'F' ou sexo == 'f')) {
      								escreva(" < < < ERRO [4] OPCAO INVALIDA! > > > \n")
      							} senao {
      								
      							hit = falso
      							pare	
      							}
      						}
      						//pare	
      //---------------------------SEPARAÇÃO DOS SEXOS E INICIO DAS CONTAGENS-----------------------------------------------------------------------------------
      						se(sexo == 'M' ou sexo == 'm') {
      							se(contaM == 0) {
      								idadeMnovo = idade
      								idadeMvelho = idade
      								nomeMnovo = nome
      								nomeMvelho = nome
      							} senao {
      								se(idade > idadeMvelho){
      									idadeMvelho = idade
      									nomeMvelho = nome
      								}
      								se(idade < idadeMnovo) {
      									idadeMnovo = idade
      									nomeMnovo = nome
      								}
      							}
      							contaM++
      						} senao se(sexo == 'F' ou sexo == 'f') {
      							se(contaF == 0) {
      								idadeFvelho = idade
      								idadeFnovo = idade
      								nomeFvelho = nome
      								nomeFnovo = nome
      							} senao {
      								se(idade > idadeFvelho) {
      									idadeFvelho = idade
      									nomeFvelho = nome
      								}
      								se(idade < idadeFnovo) {
      									idadeFnovo = idade
      									nomeFnovo = nome
      								}
      							}
      							contaF++
      						}
      					pare
      //--------------------------------------------------------------------------------------------------------------------------------						
      					}
      //================================================================================================================================					
      				} senao {
      					escreva("CONTINUA? [S/N]: ")
      					leia(opcao)
      					se(nao(opcao == 'S' ou opcao == 's' ou opcao == 'N' ou opcao == 'n')) {
      						escreva(" < < < ERRO [0] OPCAO INVALIDA > > > \n")
      					} senao {
      						hit = verdadeiro
      					}	
      				}
      			} enquanto(nao(opcao == 'N' ou opcao == 'n')) 
      			escreva("\n=-=-=-=-=-=-=-=-=-= RESULTADOS =-=-=-=-=-=-=-=-=-=-=-=")
      			escreva("\nAo todo foram cadastradas ", contaP, " pessoas.")
      			se(contaM != 0) {
      				escreva("\nDos ", contaM, " homens, ", nomeMvelho, " é o mais velho com ", idadeMvelho, " e ", nomeMnovo, " é o mais novo com ", idadeMnovo, ".")
      			}
      			se(contaF != 0) {
      				escreva("\nDas ", contaF, " mulheres, ", nomeFvelho, " é a mais velha com ", idadeFvelho, " e ", nomeFnovo, " é a mais nova com ", idadeFnovo, ".")
      			}
      			pare
      		}
      		
      	}
      }
    • #139363
      Tutora Jessica
      Moderador

      Olá Daniel, o se/senao é usado na condição de verdadeiro ou falso, se (condição verdadeira) e senao (condição falsa).
      O funcionamento é simples: com base no resultado de uma expressão booleana (VERDADEIRO ou FALSO), o fluxo do algoritmo segue para um bloco de instruções ou não.
      O bloco de código SENÃO é opcional. É comum encontrar instruções de decisão apenas com SE sem o bloco SENÃO.
      Observe o esquema da estrutura SE/SENÃO:

      SE <expressão booleana> 
      
      <instruções a serem executadas caso a expressão booleana resulte em VERDADEIRO>
      
      SENÃO
      
      <instruções a serem executadas caso a expressão booleana resulte em FALSO>
      
      FIM-SE
    • #139388
      Daniel C. Cunha
      Participante

      Saudações Jéssica, tudo joia?

      Agradeço a atenção!

      A minha dúvida em não era sobre as estruturas condicionais em si…

      Mas sobre condições nos parênteses que na teoria deveriam ser equivalentes…

      No caso:
      (idade > 130 ou idade < 0)

      deveria ser equivalente á:
      (nao(idade >= 0 ou idade <= 130))

      na ocasião nao consegui fazer funcionar a segunda opção…

      • #139405
        Tutora Jessica
        Moderador

        Olá Daniel, ah sim agora compreendi melhor.
        Nesse caso troque de OU para E, dessa forma:
        se(nao(idade >= 0 e idade <= 130)) {

        Operador Ou : Retorna verdadeiro se um dos testes lógicos for verdadeiro , mesmo que outros testes retornem falsos
        Exemplo:Retorna Verdadeiro
        escreva(“Marcelo”==”Marcelo” Ou “Marcelo”==”Maria”)
        Nos dois testes acima, o primeiro se estivesse sozinho retornaria verdadeiro e o segundo depois do Operador Lógico Ou retornaria falso, porém graças ao Operador lógico Ou, eu estou dizendo que se uma das comparações retornar verdadeiro, ok .. E por isso o exemplo acima retorna verdadeiro.

        Operador E:Retorna Verdadeiro se todos os testes lógicos retornarem verdadeiro
        escreva(“Marcelo”==”Marcelo” E “Marta”==”Marcelo”)
        Observe que diferente do operador Ou, este teste vai retornar falso, pois o Operador lógico É exige que todas as operações lógicas retornem verdadeiro para o resultado ser verdadeiro.

        Usando o E vai funcionar conforme deseja, só fiquei com uma dúvida, essa forma que esta usando você aprendeu em algum curso aqui do estudonauta ou é uma forma que aprendeu fora do curso?

        • Esta resposta foi modificada 4 meses, 3 semanas atrás por Tutora Jessica.
Visualizando 16 respostas da discussão
  • Você deve fazer login para responder a este tópico.