Modulo 3, exercício 54 – Fundamentos da programação

Home Fóruns Programação Básica Modulo 3, exercício 54 – Fundamentos da programação

Visualizando 7 respostas da discussão
  • Autor
    Posts
    • #64007
      BRUNO BOECHAT
      Participante

      Olá a todos!
      Não estou conseguindo criar o programa de forma fiel ao que o guanabara ensinou. Já copiei linha a linha letra a letra e mesmo assim o prorama não roda. diz que preciso inicializar a variavel nome,idade e resp ao utilizar o comando de repetição enquanto(verdadeiro).
      Para contornar isso dei valores a essas variaveis quando as declarei, e isso funcionou, porém sei que isso é uma gambiarra e prentendo não começar assim!rs!
      Agradeço a quem puder me ajudar!

      programa
      {
      //primeiro estruturar o programa do básico ao complexo por partes
      //criar as variaveis nome, idade,cont e resp – dentro do enquanto
      //testar entrada de dados (primeira coisa a se fazer)

      //criar as variaveis jovem,velho,maior e menor –
      //testar a condicional maior e menor , jovem e velho

      //fazer validações do nome e idade
      //testar
      //fazer validação da finalização do programa

      inclua biblioteca Tipos –> tp
      inclua biblioteca Texto –> tx
      funcao inicio()
      {
      cadeia nome = “a”, jovem = ” “, velho = ” “, teclado
      inteiro idade = 0, cont = 0,maior = 0, menor = 0
      caracter resp = ‘s’
      //precisei inicializar as variveis nome,idade e resp pois não
      //estava conseguindo usa-las no enquanto(verdadeiro), dava erro sempre
      //mas da forma que fiz isso é uma gambiarra, preciso aprender melhor!!!

      faca{

      escreva(“\n=====================”)
      escreva(“\nPESSOA: “,cont + 1,”\n”)
      escreva(“\n=====================”)

      enquanto (verdadeiro){
      escreva(“\nNOME: “)
      leia(teclado)
      se (tx.numero_caracteres(teclado) >= 3){
      nome = teclado
      pare
      }senao{
      escreva(“\n<<ERRO>> NOME DEVE CONTER NO MINIMO 3 LETRAS!”)
      }
      }

      enquanto (verdadeiro){
      escreva(“\nIDADE: “)
      leia(teclado)
      se (tp.cadeia_e_inteiro(teclado,10)){
      idade = tp.cadeia_para_inteiro(teclado,10)
      se (idade >=1 e idade <= 130){
      pare
      }senao{
      escreva(“\n<<ERRO>> IDADE INVALIDA!!!”)
      }
      }senao{
      escreva(“\n<<ERRO>> DIGITE UM NÚMERO INTEIRO!!!”)
      }
      }

      //=====VALIDAÇÃO DO MAIS JOVEM E MAIS VELHO COM NOMES E IDADES==========
      //se contador for igual a 1 o primeiro nome e a primeira idade
      //são considerados tanto o mais velho quanto o mais novo
      //caso o cont seja > que 1 ai o teste condicional vai dizer quem é o
      //menor e maior com seus respectivos nomes e idades

      cont++
      se (cont == 1){
      jovem = nome
      velho = nome
      maior = idade
      menor = idade

      }senao{
      se (idade > maior){
      maior = idade
      velho = nome
      }senao{
      menor = idade
      jovem = nome
      }
      }
      // aqui deu dor de cabeça, não consegui mesmo fazer a contagem de caracteres!
      //ele apenas entra no looping se digitar mais de uma caracter,mas fica
      //sem mensagem de erro! já ajuda mas não está legal
      enquanto (verdadeiro){
      escreva(“\nQUER CONTINUAR? [s/n]”)
      leia(teclado)
      se (tp.cadeia_e_caracter(teclado)){
      resp = tp.cadeia_para_caracter(teclado)
      se (tx.numero_caracteres(teclado) == 1){
      pare
      }senao
      escreva(“\n<<ERRO>> DIGITE APENAS [S\\N]”)
      }
      }

      }enquanto (resp == ‘s’ ou resp == ‘S’)
      escreva(“\nVOCÊ CADASTROU “,cont,” PESSOAS”)
      escreva(“\nO MAIS NOVO FOI “,tx.caixa_alta(jovem),” COM “,menor,” ANOS”)
      escreva(“\nE O MAIS VELHO FOI “,tx.caixa_alta(velho),” COM “,maior,” ANOS”)
      }
      }

    • #64035
      FRANCISCO TADEU PEZZI
      Participante

      Olá Bruno, no que eu entendi, quando na feitura do programa se você fizer por etapas como cadenciou no inicio, ele vai funcionar normal, até você partir para
      validação, pois colocara a cadeia teclado na jogada e será perdidas as referências nome, idade e resp. por isso deve ser inicializadas essas variáveis, não se trata de gambiarra. fica tranquilo,
      cadeia nome = “”
      inteiro idade = 0
      resp = ‘ ‘
      Se tiver outra informação me passe, mas esse é meu entendimento você não errou em nada. Bons estudos. E desistir não é uma opção!

    • #64038
      FRANCISCO TADEU PEZZI
      Participante

      Desculpe.
      caracter resp = ‘ ‘

    • #64044
      Tutora Mayla
      Mestre

      Bruno, o seu código está bom e isso não é de forma alguma uma gambiarra. A questão ai é que as vezes o compilador precisa ter certeza que a variável não está vazia, pois como todos são inicializadas em blocos condicionais se não é possível saber se a execução entrará em um bloco e iniciará a variável. Se houvesse um senao onde a variável fosse inicializada isso garantiria que se a execução não entrar nos blocos se, ou seja, se os valores inseridos não pertencerem a nenhuma condição, a variável seria inicializada mesmo assim. Mas nessa questão não há como inserir um senão e manter a lógica.

      Por conta do enquanto(verdadeiro) sabemos que as variáveis vão ser sempre inicializadas, mas o programa enxerga apenas a questão que mencionei sobre os blocos condicionais.
      Há várias formas de resolver este problema, mas para não modificar a sua lógica que está boa, basta inicializar as variáveis quando forem declaradas como já foi feito, e novamente, não é uma gambiarra nessa situação, não se preocupe.

      Quanto a sua dúvida sobre a contagem de caracteres, o problema está na organização dos blocos condicionais.
      Uma cadeia só será caractere se seu tamanho for igual a 1, então não há necessidade de testar isso novamente dentro desse bloco. Basta por um senao no se onde é verificado se é caractere que entrarão no senao todos os casos onde o tamanho for maior que 1.

      
      se (tp.cadeia_e_caracter(teclado)){  //a função só retornará verdadeiro se o tamanho da variável teclado for 1
      resp = tp.cadeia_para_caracter(teclado)
      }senao
      escreva(“\n<<ERRO>> DIGITE APENAS [S\\N]”)  //entrarão aqui todos os casos onde o tamanho da variável teclado não for 1
      }
      

      Quaisquer outras dúvidas estamos a disposição.

      • #64089
        BRUNO BOECHAT
        Participante

        Boa noite,
        Muito obrigado mesmo pelo rápido feed back Tayla! Consegui entender perfeitamente!

    • #64080
      Katia Santos Antunes
      Participante

      OLÁ !
      NO MOMENTO EM QUE FAÇO A VALIDAÇÃO DE DADOS E SUBSTITUO A VARIÁVEL (NOME) OU (RESP) OU (IDADE) POR (TECLADO ), NO FINAL DA SEMPRE ERRO NO CÓDIGO .
      A MESSAGEM DE ERRO É ” EXISTEM TRECHOS DE CÓDIGO ONDE A VARIÁVEL () PODE NÃO TER SIDO INICIALIZADA ” . EU NÃO CONSIGO IDENTIFICAR O ERRRO , SE ALGÉM PODER ME AJUDAR AGRADEÇO : ) copiei um trecho do código abaixo
      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>> A idade deve ser um numero inteiro\n “)
      }
      }

      • #64144
        Tutora Mayla
        Mestre

        Katia, movi a sua dúvida para este tópico que trata do mesmo assunto. Há uma resposta minha aqui explicando o porque deste problema acontecer, dê uma olhada nela e na interação que houve neste tópico e se ainda houver dúvidas volte a entrar em contato.
        Antes de criar um tópico é sempre bom verificar se já existe um tópico sobre o assunto, utilize a barra de pesquisa no fórum para procurar por tópicos já existentes.
        Espero ter ajudado, quaisquer dúvidas basta entrar em contato.

    • #64118
      FRANCISCO TADEU PEZZI
      Participante

      – Boa tarde! Katia, não consegui verificar, observe se no indicativo de erro não está aparecendo a linha, como você não mandou o código todo não sei dizer, mas geralmente nestes casos, tudo está normal, até acrescentar a variável teclado.
      – Observe você lançou a variável teclado como cadeia?
      – Se lançou como ela entrou no meio entre as variáveis, nome, resp e idade estas tem que ser inicializadas com um valor:
      cadeia nome = ” ”
      caracter resp = ‘ ‘
      Talvez
      inteiro idade = 0
      Do mais só observando o código todo. Espero ter ajudado. Desistir não é uma opção! Bom estudos!

    • #64132
      IcaroFilho
      Moderador

      Bom dia Katia, eu já postei uma explicação no forum a respeito de variável não inicializada.
      Conforme Francisco falou, você provavelmente criou uma variável sem valor e quando o programa inicializa e faz a verificação, ele se depara com isso.
      Então basta inicializa-las conforme dito pelo amigo.
      Caso isso não ocorra, por favor poste o código completo para verificarmos junto a você.
      PS: Use a formatação CODE no forum para postar os códigos, assim não precisaremos corrigir os espaços e aspas caso precisemos polo no Portugal Studio.

    • #66395

      Fala pessoal, tudo tranquilo?
      alguém pode me ajudar?? Estava tendo um pouco de dificuldade no exercício 54 do modulo 3 por isso resolvi dar uma olhada na resposta. Porém copiei o exercício igual ao vídeo da aula do mestre Guanabara e não está executando igual o dele. No meu o portugol aponta erro de compilação devido as variáveis NOME, IDADE e RESP e ter sido inicializadas. Porém no vídeo elas também não foram. Aí quando inicializo elas o programa roda.
      Segue abaixo o código que copiei e que inicializei as variáveis NOME, IDADE e RESP para que ele funcionasse. Caso alguém note uma diferença com o código do professor pode deixa o feedback por favor. (Estou revisando esse codigo faz 3 dias)

      programa
      {
      	inclua biblioteca Tipos --> t
      	inclua biblioteca Texto --> txt
       	funcao inicio()
      	{
      		escreva("{ EXERCÍCIO 054 - Pessoas Validadas }\n\n")
      		
      		cadeia teclado, nome = "", jovem = "", velho = ""
      		inteiro idade = 0, cont = 0, maior = 0, menor = 0
      		caracter resp = ' '
      		
      		faca{//ENTRADA DE DADOS COM VALIDAÇÃO
      			escreva("---------------------\n")
      			escreva("      PESSOA " + (cont + 1) + "\n")
      			escreva("---------------------\n")
      			
      			enquanto (verdadeiro) {
      				escreva("NOME = ")
      				leia(teclado)
      				se (txt.numero_caracteres(teclado) >= 3) {
      					nome = teclado
      					pare
      				} senao {
      					escreva("<<ERRO>> O nome deve ter pelo menor 3 letras.\n")
      				}
      			}
      
      			enquanto (verdadeiro) {
      				escreva("IDADE = ")
      				leia(teclado)
      				se (t.cadeia_e_inteiro(teclado, 10)) {
      					idade = t.cadeia_para_inteiro(teclado, 10)	
      					se (idade >= 3 e idade <= 130) {
      						pare	
      					} senao {
      						escreva("<<ERRO>> Idade inválida.\n")
      					}
      				} senao {
      					escreva("<<ERRO>> A idade deve ser um número inteiro.\n")
      				}
      			}
      			cont++
      			se (cont == 1) {//SE FOR A PRIMEIRA PESSOA
      				maior = idade
      				menor = idade
      				jovem = nome
      				velho = nome
      			} senao {//SE NÃO FOR A PRIEMEIRA PESSOA
      				se (idade > maior) {
      					maior = idade
      					velho = nome
      				}
      				se (idade < menor) {
      					menor = idade
      					jovem = nome
      				}
      			}
      
      			enquanto (verdadeiro) {
      				escreva("Que continuar? [S/N] ")
      				leia(teclado)
      				se(t.cadeia_e_caracter(teclado)) {
      					resp = t.cadeia_para_caracter(teclado)
      					se(resp == 'S' ou resp == 's' ou resp == 'N' ou resp == 'n') {
      						pare
      					} senao {
      						escreva("<<ERRO>> Resposta inválida! Digite apena 'S' ou 'N'.\n")
      					}
      				} senao {
      					escreva("<<ERRO>> O valor deve ser apenas uma letra.\n")
      				}
      			}
      		} enquanto( resp == 'S' ou resp == 's')
      		escreva("=========================================\n")
      		escreva("Você cadastro " + cont + " pessoas.\n")
      		escreva(jovem + " é a pessoa mais nova com " + menor + " anos.\n")
      		escreva(velho + " é a pessoa mair velha  com " + maior + " anos.\n")
      		escreva("==========================================\n\n")
      	}
      		
      }
      • #66441
        Tutora Mayla
        Mestre

        Antonio, tem uma resposta minha neste tópico explicando o porquê deste problema acontecer. Por isso movi a sua postagem para cá. Dê uma olhada na resposta e na interação que aconteceu aqui e se ainda houver dúvidas volte a entrar em contato.
        Antes de criar um tópico é sempre bom verificar se já existe um tópico sobre o assunto, utilize a barra de pesquisa no fórum para procurar por tópicos já existentes.

        Espero ter ajudado, quaisquer dúvidas basta entrar em contato.

Visualizando 7 respostas da discussão
  • Você deve fazer login para responder a este tópico.