Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Цикл repeat ... until


Автор: ac1dbuRn 6.10.2009, 21:37
Код

var x,x1:integer;

begin
  write('write the number - '); read(x);
    repeat
      x1:= x mod 10;
      writeln(x1);
    until x1<0;
  readln;


Ввожу число 4547, а он выводит бесконечный цикл с числом 7...

нужно, при вводе числа, например 4547, в ответ было таким образом:
"В числе три разных цифры - 4, 5, 7"
4
5
4
7

Через mod и div получаются бесконечные циклы....

Через while тоже самое...
Код

var x:integer;

begin
  write('write the number - '); read(x);
  while x>0 do
  begin x:=x mod 10;
  writeln(x);
  end;

  readln;
  readln;

  { TODO -oUser -cConsole Main : Insert code here }
end.

Автор: kami 6.10.2009, 22:09
Цитата(ac1dbuRn @  6.10.2009,  21:37 Найти цитируемый пост)
 until x1<0;

А с каких пор остаток от деления может стать меньше нуля?

Автор: Keeper89 6.10.2009, 22:12
ac1dbuRn, а вы сами сообразили, что пишите? Операция mod никогда в жизни не даст отрицательного числа, которое вы хотите увидеть в цикле. О чем я? - О том, что сравнивать надо с нулем, т.е.
Код

until x1=0;


Добавлено через 37 секунд
Блин, kami опередил smile

Автор: Christoph 6.10.2009, 22:15
цикл repeat закончиться только лишь тогда когда условие станет True, в цикле while наоборот smile 
1.в цикле repeat никогда 0 не станет больше X
2. в цикле while тоже самое

Уго smile так нечестно

Автор: kami 6.10.2009, 22:27
Скорее всего, в цикле должно быть так:
Код

Writeln(x mod 10);
x:=x div 10;

Правда, при этом перечисление будет в порядке, обратном положению цифр в числе.

Добавлено через 2 минуты и 21 секунду
Цитата(Keeper89 @  6.10.2009,  22:12 Найти цитируемый пост)
 сравнивать надо с нулем

7 mod 10 = 7. И нулем здесь не пахнет даже через бесконечное количество циклов.  smile 

Автор: ac1dbuRn 6.10.2009, 22:32
вот, написал, тока как-то мудрёно... 

Код

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var x,x1,x2,x3,x4,x5,x6,x7,x8:integer;

begin
  write('write the number - '); read(x);

  x1:=x mod 10;
  x2:=x div 10;
  writeln(x1);

  x3:=x2 mod 10;
  x4:=x2 div 10;
  writeln(x3);

  x5:=x4 mod 10;
  x6:=x4 div 10;
  writeln(x5);

  x7:=x6 mod 10;
  x8:=x6 div 10;
  writeln(x7);



  readln;
  readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.


но это тока для 4-значного числа.... А можно ли как-то попроще и для n-ого кол-ва?...


kami, сейчас попробую

Добавлено через 9 минут и 21 секунду
kami, Отлично! Благодарю!  smile Всё получилось коротко и ясно  smile 

Автор: Keeper89 6.10.2009, 23:14
Цитата(kami @  6.10.2009,  23:27 Найти цитируемый пост)
7 mod 10 = 7. И нулем здесь не пахнет даже через бесконечное количество циклов.  smile

да уж, накосячил.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)