Erro ao executar o código ex 025

Home Fóruns Programação Básica Erro ao executar o código ex 025

Visualizando 4 respostas da discussão
  • Autor
    Posts
    • #63894
      Gabriel Drumond
      Participante

      Este é o meu código, quando executo passo a passo, em todas as possibilidades a variável é declarada de acordo com as condicionais corretamente. Porém quando eu dou o comando de output (escrever a resposta na tela) aparece o seguinte aviso: “Erro na compilação!”; “Existem trechos do código onde a variável maior pode não ter sido inicializada”. Estou desde ontem fuçando tudo e não acho o Por quê, na minha cabeça não faz sentido…
      Se ela não foi inicializada, talvez seja porque ela seja igual às outras, e já tem uma condicional para este caso, que o output é “números iguais”. Testei sem o output (escreva) e tá tudo certo, só realmente quando eu coloco o escreva(“Números em ordem: “, maior, meio, menor) ele buga wtf
      Alguém tente colar este código no Portugol para dar uma analisada, plsssss

      `programa
      {

      funcao inicio()
      {
      inteiro n1, n2, n3, maior, meio, menor
      escreva(“Digite um valor: “)
      leia(n1)
      escreva(“Digite um valor: “)
      leia(n2)
      escreva(“Digite um valor: “)
      leia(n3)

      se(n1 > n2){
      se(n2 > n3){
      maior = n1
      meio = n2
      menor = n3
      } senao se (n3 > n1){
      maior = n3
      meio = n1
      menor = n2
      } senao se(n3 > n2){
      maior = n1
      meio = n3
      menor = n2
      }
      } senao se(n2 > n1){
      se(n1 > n3){
      maior = n2
      meio = n1
      menor = n3
      } senao se(n3 > n2){
      maior = n3
      meio = n2
      menor = n1
      } senao se(n3 > n1){
      maior = n2
      meio = n3
      menor = n1
      }
      }

      se(n1 != n2 e n2 != n3){
      escreva(“Números em ordem: “, maior, meio, menor)
      } senao{
      escreva(“Números iguais: “)
      }
      }
      }

    • #63895
      Gabriel Drumond
      Participante

      Revi a solução do professor, e escrevi um código igual ao dele, funcionando 100%, porém quando eu coloco o escreva (sem condicional só o escreva simples antes do penultimo “{” da o mesmo erro!

    • #63907
      IcaroFilho
      Moderador

      Boa noite Gabriel,
      a meu ver, este erro acontece pois a variável ainda não tem valor e o programa esta tentando executa-la (seria o lance de escopo, no caso a linha escreva(44) → escreva("Números em ordem: ", maior,"-", meio,"-", menor)).. mas posso estar enganado.
      De qualquer modo, eu trato este erro apenas atribuindo um valor nulo a variável.
      inicializa as variáveis maior, menor, meio com valores 0

      • #63914
        Gabriel Drumond
        Participante

        CARACA DEU CERTO! Realmente, no inicio do código, ao declarar a variáveis eu coloquei um valor que maior meio e menor = 0 , ou seja, vão receber 0 de inicio e depois serão atribuidas de acordo com uma condicional e deu certo!!! O pq? Não faço ideia! kkkkkkk eu realmente não faço ideia, pq de qualquer forma ela seriam declaradas conforme as condições impostas pelo programa, mas deu certo heheheheh

    • #63908
      IcaroFilho
      Moderador

      OBS: eu botei um separador na linha 44 , se não vai juntar tds os números e dará a impressão que é um numero só.

    • #64043
      Tutora Mayla
      Mestre

      Gabriel, realmente o seu código trata todas as opções. A questão ai é que as vezes o compilador precisa ter certeza que a variável não está vazia, pois como todos os blocos condicionais possuem um se não é possível saber se a execução entrará em um bloco e iniciará a variável. Se houvesse um senao no final 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.

      O caso onde as variáveis não são inicializadas no seu código é o caso onde 2 ou 3 possuem o mesmo valor, por isso da erro.

      Há várias formas de resolver este problema, mas para não modificar a sua lógica que está boa, basta inicializar a variável quando for declarada como o Icaro informou.

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

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