2016-11-29 35 views
0

Я пытаюсь закодировать четыре основных оператора для многочленов для школьного задания. Я в настоящее время застрял на части разделения. В Википедии есть макет pseudo code, но я не могу реально реализовать его в своем коде правильно. Часть задания также должна была использовать LinkedList, поэтому каждый из моих полиномов является LinkedList с объектами Term, содержащими переменную коэффициента и экспоненты.Кодирование полиномиального отдела

Вот что я до сих пор:

public void dividePolynomials(LinkedList<Term> a, LinkedList<Term> b) 
{ 
    LinkedList<Term> q = new LinkedList<Term>; 
    LinkedList<Term> r = a; 

    while(!isEmpty(r) && (r.highestDegree() > d.highestDegree())) 
    { 
     int co = r.get(0).getCo()/d.get(0).getCo(); 
     int ex = r.get(0).getEx()/d.get(0).getEx(); 
     Term t = new Term(); 
    } 
} 

Я пытался следовать псевдокод Википедии, но очевидно, что я не закончил его. Любая помощь будет очень благодарна :)

+0

Как используется «Срок»? Можете ли вы дать мне пример ожидаемого ввода/вывода? – Derlin

+0

Класс Term имеет два параметра и коэффициент экспоненты, например 2x^3 будет Term (2, 3). Вход для этого метода разделения - два LinkedLists (a и b), а выход должен быть разделен на b. Используя два многочлена, у которых не было бы остатка, выход должен быть другим полиномом. С остатком будет многочлен и цифра. –

ответ

1

Следуя строго псевдокоду, вы увидите, что он принимает два полинома и возвращает новый многочлен. Это может не соответствовать вашим другим операторам, но, вероятно, это лучший выбор. Таким образом, ваш заголовок метода должен быть больше вдоль линий

где QRPair класс, состоящий из двух многочленов; a quotient и remainder.

Ниже приведен грубый перевод псевдокода.

public LinkedList<Term> deepCopy(LinkedList<Term> p) { 
    //implement this! 
} 
public QRPair dividePolynomials(LinkedList<Term> a, LinkedList<Term> b) { 
    LinkedList<Term> q = "0" //set q to be the polynomial 0 
    LinkedList<Term> r = deepCopy(a); //want a copy of a, not just reference.  
    while(!isEmpty(r) && (r.highestDegree() > d.highestDegree())) 
    { 
      int co = r.get(0).getCo()/d.get(0).getCo(); 
      int ex = r.get(0).getEx()/d.get(0).getEx(); 
      Term t = new Term(co,ex); 
      q = addPolynomials(q,t); 
      r = subtractPolynomials(r,multiplyPolynomials(t,d)); 
      //assume subtract/multiplyPolynomial returns LinkedList<Term> 
    } 
    return QRPair(q,r); 
} 

Обратите внимание, что вы все еще должны реализовать deepCopy. Причина, по которой мы не можем выполнить назначение r = a, состоит в том, что это означает, что r и a ссылаются на тот же объект, который нам не нужен. Аналогичным образом, если мы сделаем r = (LinkedList<Term>)a.clone(), тогда r будет иметь (неглубокую) копию связанного списка a. Однако каждый элемент в r будет ссылаться на тот же объект, что и каждый элемент в a, что также не то, что мы хотим. Мы хотим, чтобы элементы в r были независимы от элементов a.

+0

Благодарим за помощь! Мне пришлось немного изменить код, чтобы он соответствовал моей программе, но он должен работать. Теперь у меня есть некоторые странные логические ошибки, возникающие в другом методе, который я должен решить, прежде чем я смогу проверить деление :) –