Olá amigo, tudo bem?

Eu costumo brincar que eu ando "Na contramão do sucesso", uma vez que, embora já antiga, o pascal é a minha linguagem favorita!

Conforme já andei falando por aqui, trabalho até hoje com ele, por conta de um projeto de acessibilidade, que ainda o usa.

Vamos lá para o código, vou tentar descrever o que acontece:

Irei comentando abaixo da linha, explicando o fluxo.

Var x : integer; //Variável x do tipo inteiro declarada Begin for x := 0 to 10 do { Início do loop for. X começa em 0 e termina em 10. O que essa linha diz é: para x começando em 0 até 10, faça essas coisas } begin writeln('X = ',x); //escreve valor de x; inicialmente, vai escrever 0. x := x + 1; // somou 1 ao valor de x. //se x valia 0, agora vale 1. end; end.

Fim do for e fim do programa. Como x ainda não chegou em 10, ele irá mais uma vez verificar a declaração do for. Lembra? X valia 1. Quando ele for no início do for de novo, vai ser testado: x vale 10? Não. Então soma mais 1. X que era 1, agora passou a ser 2. Ao entrar no bloco do for e exibir x, vai escrever 2. Vai somar mais 1, fica 3. O bloco termina, ele verifica novamente e tudo vai acontecer de novo.

Você tem duas atividades dentro do seu bloco for, que serão repetidas até que x atinja o valor 10: Uma é escrever o valor dessa variável x, a outra é somar 1 ao valor de x.

Vou te dar uma ideia:

Existem duas formas de você fazer aparecer os valores de 1 em 1. Uma é você isolando a segunda instrução, a que soma 1 em x dentro do próprio bloco for. A outra, vou deixar você pensar, risos.

Mas a melhor forma de você aprender é ir fazendo pequenas modificações nos exercícios.

Fabiano, muito obrigado! Desse jeito que você fez, explicando linha por linha ficou bem claro.

Mas eu ainda não consegui entender, porque ele não imprimi o 3 na tela. Quando recomeçar a repetição com X:= 2 ele vai imprimir o 2 na tela e depois somar x:= x(que agora vale 2) + 1 e então, quando recomeçar o For ele era para imprimir 3, mas não imprimi e vai direto para o 4. Essa parte de pular um número que eu não entendi ainda, o porque ele pula um número e imprimi um número, nesse caso, ficando de 2 em 2 até 10.

Pula de 2 em dois justamente por que tem um comando dentro do próprio for somando 1 em x. A instrução for em si já incrementa 1, e tem mais um comando somando 1 dentro do bloco. Só que há apenas uma instrução writeln, ou seja: quando ele faz o ciclo completo de ler todo o bloco e voltar novamente ao cabeçalho para verificar se a condição foi satisfeita (x ser igual a 10), ele já vale 1 a mais do que valia no ciclo anterior. Em resumo: você tem duas instruções de soma, mas só uma instrução de exibir. Digo que são duas por que, uma é a soma em si: x := x+1; A outra é o próprio comportamento da instrução for, que incrementa 1 a cada ciclo. Estou chamando de ciclo, a ação de ler o cabeçalho, entrar no begin, executar o que lá está, e, no end, voltar ao cabeçalho e repetir tudo de novo, até a condição ser verdade (x = 10).
Perfeito, agora entendi, valeu!