Помощь - Поиск - Пользователи - Календарь
Полная версия: Последовательность цифр в числе!
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Footballplayer
опять застрял..

определить является ли последовательность цифр в числе справа налево последовательностью возрастающей..

например: 54321 - TRUE. 54325 - FALSE

я тут написал кое-что..но работает неправильно..не судите строго..я только учусь smile.gif

  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.



предполагается что задачу надо решать без использования массива..
volvo
Все проще гораздо:
var
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 стало = False, оно больше НИКОГДА не станет = True, это гарантируется использованием AND, ведь AND вернет True, только в случае двух операндов, равных True smile.gif )

Добавлено через 2 мин.
P.S. Можно еще ускорить, сделать цикл While Ok and (X <> 0) Do. Тогда как только встретится "неправильная" цифра, выполнение цикла немедленно прекратится.
Footballplayer
вот до этой строчки ни за что в жизни бы не додумался:




ok := ok and ((X mod 10) > prev);





...спасибо..со стороны всё так просто но фиг до этой простоты доберёшься..))
volvo
Цитата
вот до этой строчки ни за что в жизни бы не додумался:

  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);

(работает точно так же, как и первый вариант)
Footballplayer
есть одно но.... на числа оканчивающиеся нулём выдаёт FALSE..
я сделал так:

prev:=-1;  


соответственно изменив тип переменной prev на shortint ...

такой ход не ошибочен?
мисс_граффити
Ну да, иначе для чисел, оканчивающихся нулем, получалось равенство при первом сравнении...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.