Помощь - Поиск - Пользователи - Календарь
Полная версия: Последовательность цифр в числе!
Форум «Всё о Паскале» > 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 ...

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