опять застрял..
определить является ли последовательность цифр в числе справа налево последовательностью возрастающей..
например: 54321 - TRUE. 54325 - FALSE
я тут написал кое-что..но работает неправильно..не судите строго..я только учусь
program My7_11;
uses crt;
var t,a,b,x,k,i:longint;
BEGIN
clrscr;
writeln('Vvedite chislo: ');
readln(x);
t:=x;
q:=x;
while t<>0 do begin
t:=t div 10;
k:=k+1;end;
while i<k do begin
a:=x mod 10;
x:=x div 10;
b:=x mod 10;
x:=x div 10;
i:=i+1;
if b<a then halt;
end;
writeln('da');
readkey;
END.
Все проще гораздо:
varНе надо ничего выделять из числа заранее, не надо считать количество цифр в числе. Просто проверяешь, последняя цифра больше или нет предыдущей последней цифры (и накапливаешь этот результат. Как только один раз Ok стало = False, оно больше НИКОГДА не станет = True, это гарантируется использованием AND, ведь AND вернет True, только в случае двух операндов, равных True )
x: longint;
ok: boolean;
prev: byte;
begin
readln(x);
prev := 0; ok := true;
while X <> 0 do begin
ok := ok and ((X mod 10) > prev);
prev := X mod 10; X := X div 10;
end;
writeln(ok);
end.
вот до этой строчки ни за что в жизни бы не додумался:
ok := ok and ((X mod 10) > prev);
prev := 0; ok := true;(работает точно так же, как и первый вариант)
while ok and (X <> 0) do begin
ok := (x mod 10) > prev; { <--- а вот до этой? }
prev := X mod 10; X := X div 10;
end;
writeln(ok);
есть одно но.... на числа оканчивающиеся нулём выдаёт FALSE..
я сделал так:
prev:=-1;
Ну да, иначе для чисел, оканчивающихся нулем, получалось равенство при первом сравнении...