Home › Fóruns › Programação Básica › Erro ao executar o código ex 025
- Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 3 anos, 7 meses atrás por Tutora Mayla.
-
AutorPosts
-
-
26 de março de 2021 às 16:00 #63894Gabriel DrumondParticipante
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: “)
}
}
} -
26 de março de 2021 às 16:39 #63895Gabriel DrumondParticipante
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!
-
26 de março de 2021 às 19:10 #63907IcaroFilhoModerador
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-
26 de março de 2021 às 21:01 #63914Gabriel DrumondParticipante
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
-
-
26 de março de 2021 às 19:12 #63908IcaroFilhoModerador
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ó.
-
29 de março de 2021 às 22:01 #64043Tutora MaylaMestre
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 umsenao
no final onde a variável fosse inicializada isso garantiria que se a execução não entrar nos blocosse
, 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.
-
-
AutorPosts
- Você deve fazer login para responder a este tópico.