1. При выполнении указанных конструкций на экране появятся следующие числа (в столбик): 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10. Дело в том, что при выходе из цикла счетчик цикла сохраняет свое последнее значение. А раз мы требуем после завершения цикла вывода на экран значения счетчика, то компьютер повторно выведет нам число 10.

    2. Достаточно поменять местами верхнюю и нижнюю границы цикла и вместо To поставить DownTo:

Program Cikl2; 
Var
  i:Byte;
Begin
  WriteLn('Первые 10 натуральных чисел в обратном порядке: ');
  For i:=10 DownTo 1 Do {i принимает значения от 10 до 1}
     WriteLn(i);
End.
Текст этой программы можно взять здесь.

    3. При решении задачи о выводе на экран первых 10 четных натуральных чисел можно, конечно, завести переменную, которая последовательно будет принимать значения: 2, 4, 6, ..., 20. Однако учитывая тот факт, что чисел все равно остается 10, и оператор WriteLn может вычислять выражения, можно предложить следующий вариант программы:

Program Cikl3; 
Var
  i:Byte;
Begin
  WriteLn('Первые 10 четных натуральных чисел: ');
  For i:=1 To 10 Do {i принимает значения от 1 до 10}
     WriteLn(2*i); {При заданном i выводится 2*i}
End.
Текст этой программы можно взять здесь.