resident писал(а):Под отладкой все ок.
Но не это самое странное, а то что Лазарус не выводит эти пусть и одинаковые значения, вобще, никак. Как будто и нет цикла с write вовсе.
эти значения будут выводится только, если "y in sn2". А этот самый y уже убрался при первой проходе цикла. 
Т.к. randomize() сбрасывает randseed в одно и тоже значение каждый раз в цикле, то и random возвращает одинаковые значения для "y" 
убедится на практике совсем не сложно:
- Код: Выделить всё
 var 
  sn1,sn2:set of 1..50; x,y:byte;
begin
  x:=0;
  sn1:=[1..50]; sn2:=sn1;
  for x:=1 to 20 do begin
    randomize;
    y:=random(50);
    writeln('y= ',y,' ');
    if [y]<=sn2 then write(y:4);
      writeln;
    sn2:=sn1-[y];
  end;
  readln
end.
В пошаговом режиме, из-за randomize() генерирует разные числа, потому что проходит достаточное количество времени между итерациями цикла.
тут нужно заметить что
- Код: Выделить всё
   y:=random(50);
имеет смысл поменять на 
- Код: Выделить всё
   y:=random(50)+1;
всё-таки наборы sn1 и sn2 от 1 до 50, а не от 0 до 49.