Понимание инвариантов цикла

Я знаю, что первокурсник из колледжа, знакомясь с уроками информатики, попросил меня помочь с одним из домашних заданий. Я прочитал несколько раз, и мне стыдно признать, что я не знаю, о чем они просят. Вот вопрос:

Ниже приведена схема цикла. Завершите работу программы, чтобы она прочитала значения x и y, подтвердите их (продолжая запрашивать у пользователя, пока они не введут правильные значения), и запустите так, чтобы данные утверждения всегда были верными. Включите утверждение инварианта цикла в четырех точках вашей программы, где оно должно быть истинным. Вы не можете использовать оператор умножения, кроме как в заданных выражениях assert (…).

assert(x>0 && y>0);
while(...)
{
assert(sum == i*(x+1));
...
...
}
assert(sum == y*(x+1));

Я не знал, что такое инвариант цикла, поэтому я погуглил и прочитал Статья в википедии. Исходя из этого, я понял, что первое утверждение assert говорит мне, что я не должен позволять x и y быть отрицательными в течение всего цикла. По правде говоря, я застрял в этой точке. Может ли кто-нибудь помочь мне понять, что они просят здесь?

0

Решение

Описание домашней работы является неполным до такой степени, что почти бессмысленно.

Однако можно делать вывод что речь идет о том, чтобы позволить пользователю ввести два натуральных числа и вычислить произведение без использования оператора умножения в виде суммы.

Обычно произведение натуральных чисел можно определить как сумму следующим образом:

2 раза б = б + б
(a + 1) раз b = b + (a раз b)

со случаями для операндов 1 и 0, вытекающих из требований общих правил.

Сходство последнего уравнения с утверждениями, которые вы показываете, вероятно, не является совпадением.

Во всяком случае, это хорошо работает как инвариант цикла. При увеличении переменной цикла инвариант цикла остается в силе и гарантирует, что у вас есть хороший продукт. Таким образом, когда цикл завершен, ограничение инварианта цикла на этот продукт плюс значение переменной цикла в этой точке гарантирует, что у вас есть продукт, который (легко сводится к) x * y.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector