Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Генерация уравнения


Автор: Sergio 6.5.2009, 21:22
Всем привет.
Нужно написать программу которая генерирует уравнение типа:
Цитата

3+5/2=4

где поля некоторые могут быть пусты. игроку нужно вставить нужные числа, знаки. Например:
Цитата

_+5_2=4

Также нужно игроку показать возможные варианты ответа. Как реализовать даную задачу?
У меня есть идея но это хардкод и много кода.

Заранее спасибо.

Автор: cardinal 6.5.2009, 21:33
Цитата(Sergio @  6.5.2009,  19:22 Найти цитируемый пост)
У меня есть идея но это хардкод и много кода.

Хочешь меньше, тогда напиши кучу вариантов в ручную в текстовый файл и доставай оттуда случайно попавшийся... smile 

Автор: maxim1000 6.5.2009, 23:41
можно генерировать случайно 5 элементов: число, знак, число, знак, число.
Потом вычислять получившееся выражение и случайным образом скрывать какие-то из них

Автор: Sergio 8.5.2009, 14:46
maxim1000, так и думаю сделать. Но вот проблемка мне чтобы знать какой знак использовать при вычислении нужно много блоков типа:
Цитата

если первый знак помножить а второй знак поделить то: первпое число * второе число / третье число = ...

это слишком много писать. можно как-то покороче вычислить какой знак по рандому выпал?

Автор: maxim1000 9.5.2009, 00:00
хм... да, похоже, тут надо будет писать парсер небольшой
правда, думаю, настолько небольшой, что и писать несложно:
1. определить первую операцию (по приоритету)
2. выполнить первую операцию
2. выполнить вторую операцию
скобок тут не предвидится, так что сложностей особых, вроде, быть не должно...

Автор: _Y_ 9.5.2009, 12:24
Здесь два варианта: сложный и простой.

Сложный:

Я бы сделал абстрактный класс Calc с абстрактными же методоми calc(x,y) и symbol().  В качестве наследников классы Plus, Minus и так далее - сколько душе угодно. Метод calc(x,y)  выдает результат вычисления. Метод symbol() - символ опереции "+", "-" и т.д. для вывода в тексте задания.

1. Согнал бы экземпляры этих классов в массив и из массива выбирал случайным образом. 
2. Подставлял бы случайные целые числа и вычислял результат.
3. Случайно прятал бы несколько величин, а спрятанные величины делал одним из вариантов ответа.

Простой:

Как сказал cardinal, создай таблицу вариантов и выбирай случайным образом. Можно создать таблицу формул, а коеффициенты для них генерировать.

Я очень много работал с составлением тестов для студентов и т.п. ИМХО составлять тесты програмно имеет смысл только если надо нагенерировать больше сотни однотипных вариатнов. Меньше - всегда быстрее вручную. Или в каком-нибудь Excel-е.

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