Думая с комментариями будет понятней.
Код:
Program num;
uses crt;
var
x,y,z,i,t,p,s,q,d,a,j,b,c:integer;
begin
randomize;
repeat
x:=random(70); рандомное 2-x значное число
y:=x mod 10; Разбиваю число на
z:=x div 10; две части
until y+1=z;
write(x);
q:=y;
d:=10;
for i:=1 to 50 do вывод чисел в обратном порядке
begin
p:=random(9); рандом из 9 чисел
if(p+1=q) если число меньше заданного на единицу
then
begin
write('+',p); записать его в плюс
t:=t+p; сложить сумму чисел
if(p=0) or (p=00) если дошли до нуля и 100 не набрали
then
begin
repeat
j:=j+d;
d:=d-1; отнимать единицу от каждого предыдущего числа
write('+',d); записать числа которые еще не встречались
until d=z+1;
end;
q:=q-1;
end;
end;
if(x+t>=100) а тут уже начал мудрить с лимитом,
then когда сумма превышает 100
begin
repeat
b:=(x+t-100);
write('-',b);
c:=d-b;
until c=100;
writeln('limit = ',t+j+x);
end
else
begin
writeln('=',t+j+x);
writeln('symma ne ravna; 100');
end;
end.