2009-08-07 4 views
0

Я пытаюсь написать программу, которая поможет кому-то изучить математику GRE. Как многие из вас могут знать, фракции являются большой частью теста, а калькуляторы не допускаются. В основном я хочу создать четыре случайных числа (скажем, 1-50) и либо + -/* их, а затем принять ответ в формате фракции. Случайное число вещей легко. Проблема в том, как я могу 1) принять дробный ответ и 2) обеспечить, чтобы ответ был полностью сокращен?Способ получить математический ответ в форме фракции

Я пишу в ASP.NET (или jQuery, если этого будет достаточно). Мне было очень интересно, есть ли какая-нибудь библиотека или что-то такое, что обрабатывает такие вещи ...

Спасибо!

ответ

0

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

[pseudocode] 
if (answer.contains("/")) 
    int a = answer.substring(1,answer.instanceof("/")) 
    int b = answer.substring(answer.instanceof("/")) 
if (a/b == expectedAnswer) 
    if (gcd(a,b) == 1) 
    GOOD! 
    else 
    Not sufficiently reduced 
else 
    WRONG! 

Чтобы узнать является ли это уменьшенный весь путь, создать функцию НОД, которая должна оценить до значения знаменателя, которые пользователь поставляется в качестве ответа.

+0

Как я мог написать (L) CD-функцию, кроме того, чтобы прокручивать каждое число в моем диапазоне и делать смешную сумму вычислений? – Jason

+2

Использование алгоритма Евклида: http://en.wikipedia.org/wiki/Euclidean_algorithm#Implementations – Amber

+2

Этот фрагмент кода содержит несколько ошибок: (1) Дробь уменьшается, если gcd (a, b) == 1 не gcd (a , b) == b. (2) Сравнение с плавающими точками должно допускать некоторое отклонение от ошибок округления: if (a/b == expectedAnswer) может отклонить некоторые правильные (но не уменьшенные) ответы из-за ошибок округления с плавающей запятой. – Accipitridae

0

Learn Python и попробовать fractions модуль.