2012-01-06 4 views
1

Взяв пример, чтобы уточнить, скажем, у меня есть программа, которая принимает два входа от пользователя, a и b. Программа увеличивает a и уменьшает b. Программа возвращает значение, при котором значения a и b становятся равными. Следовательно, a должно быть меньше и b должно быть больше. Но что, если пользователь вводит противоположное? a как больше, так и b меньше? Очевидно, программа пойдет в бесконечный цикл. Но предположим, что я хочу, чтобы программа вернула, что «эти два номера никогда не могут встретиться». Тогда как я могу это проверить? Пожалуйста, не отвечайте на эту проверку номеров и отвечайте соответственно. Это просто пример. Я хочу знать, как проверить условие, которое никогда не может быть выполнено.Как проверить состояние, которое никогда не выполняется?

Другой пример, скажем, сравнение двух чисел. Предположим, у меня есть два числа, и я продолжаю их рандомизировать. Программа должна возвращать true, когда они равны и ложны, когда они не являются. Он не должен входить в бесконечный цикл, когда числа не равны. Я могу только сравнивать числа в каждой итерации и возвращать true, как только они будут равны. Но есть вероятность, что они никогда не станут равными, и программа никогда не прекратится. Как проверить такой сценарий и вернуть что-то вроде чисел, никогда не может быть равным.

+1

Непонятно, re спрашивать здесь. Вы ищете универсальный способ проверки входных данных, которые могут привести к тому, что ваша проблема не прекратится? Это проблема [проблема остановки] (http://en.wikipedia.org/wiki/Halting_problem), для которой нет общего решения. –

+0

Я думаю, что вы в значительной степени ответили на ваш вопрос. * a должно быть меньше, а b должно быть больше. * Поэтому, если 'a' больше, чем' b', тогда условие никогда не будет истинным, и поэтому оно будет работать бесконечно. –

+0

Продолжается исследование по проблеме http://en.wikipedia.org/wiki/Halting_problem! – synthesizerpatel

ответ

-1

Простая инструкция, как это?

if (a <= b) 
    throw "Condition cannot be met" 
else 
    for (; a != b; a--, b++) { 
     // Do something 
    } 

Пример в C++

EDIT я А и В навыворот! Тем не менее, тот же сценарий.

1

Это должно быть сделано в каждом конкретном случае; общая задача (с учетом итеративной процедуры, контролируемой переменным условием, определяет, будет ли условие когда-либо принимать заданное значение, например True) эквивалентно проблеме остановки, которая является невыполнимой ...

Смежные вопросы