С массивом было бы гораздо легче и проще, чем так мучатся)), но если нужно именно без массива, то вот:
P.S. Для проверки можно сверить ответ с программы с ответом с калькулятора и он сойдётся, по крайней мере у меня с x=129 - сошёлся (см. скрин в прикреплённых файлах) :)))
var x,p,d,a,b:real;
i:integer;
begin
writeln ('p = ((x-2)(x-4)(x-8)...(x-128))/((x-1)(x-3)(x-7)...(x-127))');
a:=2;
b:=1;
p:=1;
repeat
write ('Введите x: ');
readln (x);
if x<=128 then writeln ('Введите x>128');
until x>128;
for i:=1 to 4 do
begin
d:=((x-a)/(x-b))*p;
a:=a*2;
b:=a-1;
p:=d*((x-a)/(x-b));
a:=a*2;
b:=a-1;
end;
p:=d;
writeln ('p = ',p);
end.