Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Создать пример


Автор: Михалыч 11.4.2015, 08:58
Нужно составить пример , вот такой  19-12-4, соответственно числа подставляются случайно, каждое число это Label.
Делаю так, но иногда программа виснет на прочь. А иногда и не виснет. Подскажите как правильно сделать?

Код

repeat
 Application.ProcessMessages;
k := RandomRange(1, 20);
  p := RandomRange(1,20);
until p > k; 
Label1.Caption := IntToStr(p);
Label2.Caption := IntToStr(k);
sum:=p-k;
 repeat
 Application.ProcessMessages;
r := RandomRange(1, 20);// присваиваем число
until sum > r;
Label3.Caption := IntToStr(r);


Автор: ТоляМБА 11.4.2015, 12:16
пусть
k=1, p=2
условие until p > k;
срабатывает.
sum:=p-k; //sum = 2-1=1
условие 
until sum > r; подразумевает окончание цикла при условии что число 1 (sum) будет больше чем число ® из диапазона значений от 1 до 20
чего не случится никогда, получаем бесконечный цикл.
То есть при любых вариантах в которых выполняется p - k=1 программа будет уходить в бесконечный цикл.

Автор: ТоляМБА 11.4.2015, 16:31
При k=20 и p=20 условие
until p > k;
не сработает и мы получим заведомо лишнюю итерацию, поэтому лучше записать
k := RandomRange(1, 19);

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