Bom dia, pessoal.

Sabem quando agente comete um erro que é tão idiota que passa desapercebido?

Pois só assim pra um código simples como esse não funcionar. Ou existe alguma excessão à teoria, ou alguma coisa que ainda não aprendi. 

O problema tá resolvido, consegui um jeito de funcionar, mas agora fica a dúvida: porquê esses códigos não funcionaram do jeito que seria esperado?

É um erro no código? Onde? Na lógica ou na sintaxe? Ou existe alguma excessão à teoria que eu não conhećo? Ou algo na teoria que ainda não aprendi?

Se alguém puder esclarescer ajudaria muito, quero entender o que saiu errado, porquê não encontrei uma explicaćão para os erros.

Segue o video:

http://youtu.be/Fy3xTyjD0Ns

Exibições: 628

Responder esta

Respostas a este tópico

Obrigado pela aula Wiechert!

Abraço.

É isso aí, Wiechert :D fantasmas não existem, embora a impressão seja essa quando agente não entendeu a teoria 100% e aquele 0,1% detona tudo!

Só pra ver se eu entendi mesmo: se eu coloquei a<256 o programa vai imprimir até 255 e até aí não estourou a memória. Mas então o loop "for" incrementa a++ (mesmo sem imprimir) para verificar se "a" ultrapassou o valor atribuido a ele (a<256). Se fosse uma variável int essa comparaćão faria o loop terminar ali. Mas como é uma variável byte, nessa comparaćão ele precisa carregar 9 bits (256) e por isso ultrapassa a quantidade de bits disponíveis para o tipo byte. E aí estoura a pilha de memória, nessa comparaćão com 256 para finalizar o loop "for", é isso?

Alexandre,

Não sei se seu vídeo é publico ou privado, mas como você iniciou este debate que nos ajudou a ilustrar a todos com aulas de alto nível como sempre acontece aqui em varias ocasiões, sugiro que poste um vídeo tão bem elaborado como o que fez no inicio desta discussão do forum, com a solução encontrada, já que considero é um legado que deixamos para outros, e para a posteridade pode-se dizer, coisa inimaginável a poucos anos atras.

Grande abraço!

Grande idéia, postar um video simulando a solućão e não apenas o problema!

Alguns pela correria do dia a dia, outros por puro descuido, outros por desconsideracao, mas agente sempre coloca aqui os problemas e as vezes esquece de postar quando descobre a solucao.

Mas no final se não ouver o compartilhamento não existe este espaćo, que é uma grande mão na roda pra todos.

Sugestão aceita: vou fazer outro video. Abraćo!

Concordo plenamente em tudo Alexandre.

Abraço.

Alexandre,

O laço "for" funciona da seguinte maneira:

for ( inicialização ; condição ; incremento ) {

// Declaração (s);

}

1 - O programa entra no laço, verifica o valor inicial da variável de controle conforme declarado na inicialização, e em seguida verifica se ela está dentro das condições declaradas em condição;

2 - São executados todos os comandos contidos na(s) linhas entre as chaves (Declaração (s));

3 - A variável de controle é atualizada conforme declarado em incremento;

4 - A variável de controle é avaliada e se estiver dentro da condição o passo 2 é novamente executado, caso a condição não permita o laço é encerrado e o programa segue para a linha após a chave de encerramento do for.

Dito isso, teste você mesmo o funcionamento do  laço, anotando em um papel o valor da variável e o valor a ser impresso na serial e compare com os valores mostrados quando o programa roda de verdade. 

Entendeu agora porque com byte é impresso 254, 255, 0, 1... e com int 254, 255, -------- , 256? Se não entendeu, não tem problema, releia o tópico, a explicação do comando for e vá refazendo o procedimento de testar o programa rodando no papel, passo a passo, sem esquecer o funcionamento de cada comando e o tamanho de cada tipo de variável, com o tempo este procedimento acabará te dando o entendimento total do funcionamento do programa.

Abraço.

Valeu, Wiechert! É isso mesmo que estou fazendo, porque já percebi que quando não se entende corretamente a teoria, agente pode até chegar a uma solućão, mas é uma gambiarra: depois, lá na frente, agente se enrola mais ainda por causa de um detalhezinho mal entendido na teoria.

Fiz esse vídeo ontem por sugestão do Carlos kwiek , até pra ajudar outros que encontrem a mesma duvida, tentei explicar oq vc acabou de escrever, espero não ter falado muita bobagem :D mas foi como eu entendi: ele incrementa 255+1 para comparar o valor de "a" com a condićão estabelecida (para saber a hora de terminar o laćo "for"): 256 estoura a pilha e aí o "fantasma" aparece: quem não sabe fica como eu, se perguntando porque estourou a pilha se a variavel não chegou a 256. O fato é que chegou, nessa comparaćão executada pelo laćo for, embora não tenha sido impresso na tela. 

http://youtu.be/owoMLp7auR4

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço