Executando verificação de segurança...
2

Pascal exercicio (Lógica de Programação) - Dúvida.

Olá estou estudando lógica de programção juntamente com Pascal e hoje ao ver uma video aula em inglês sobre laço FOR acabei ficando com uma grande dúvida. Vendo o video é possível entender um pouco, mas, como não sou muito bom no inglês, acaba complicando na hora da explicação, enfim, caso possam me ajudar, ficarei grato.

  • CÓDIGO:
    Var
    x : integer;
    Begin
    for x := 0 to 10 do
    begin
    writeln('X = ',x);
    x := x + 1;
    end;
    End.

  • RESULTADO DO CÓDGIO:
    X = 0
    X = 2
    X = 4
    X = 6
    X = 8
    X = 10

Eu quero entender porque ele tá resultando de 2 em 2. Na minha cabeça, assim que o laço recomeçar na segunda vez, x vai valer 1, então antes de imprimir na tela o 2, era para aparecer 1 e quando cair na equação x:=x+1 ele iria dar 2 e assim por diante. É isso, quem poder ajudar, obrigado!

Carregando publicação patrocinada...
2

Opa, não conheço pascal mas imagino que não seja muito diferente entre outras linguagens, especialmente com os fundamentos.

Em estruturas de repetição for, normalmente, precisa de 3 coisa para executá-lo:
1 - valor inicial, 2 - valor final, 3 - iterador;

Pelo que vi no vídeo, no Pascal tem por padrão o iterador(ou contador) já embutido. Como sua variável é adicionada após cada vez que se escreve uma linha, quando entra no loop novamente, sua váriável já entra no loop com o valor adicionado ao valor padrão estipulado pela linguagem.

Espero ter ajudado. :)

1
2

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.

1

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.

1

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).

1
2

Nesse caso, o x que está atrelado ao loop(que tambem assume uma condicional while) até x == 10, por padrao vai fazer a soma de
1 em 1, caso apenas imprimir x
ele vai retornar: 0,1,2,3,4..10

Porém nesse caso ele esta imprimindo o x do loop
e somando ou pulando 1
posição ou valor do loop

O que talvez seja a chave para tirar essa dúvida é que x representa o "passo" do loop,
na lógica pura é: mostra um passo, pula um passo...
(pois de 1 em 1 ele já faria obrigatóriamente)

Espero ter ajudado! 😁

1