Ok. hier ist die Operationen, die ich erfolgreich Code so weit Dank Ihrer Hilfe:
Nachtrag:
polinom operator+(const polinom& P) const
{
polinom Result;
constIter i = poly.begin(), j = P.poly.begin();
while (i != poly.end() && j != P.poly.end()) { //logic while both iterators are valid
if (i->pow > j->pow) { //if the current term's degree of the first polynomial is bigger
Result.insert(i->coef, i->pow);
i++;
}
else if (j->pow > i->pow) { // if the other polynomial's term degree is bigger
Result.insert(j->coef, j->pow);
j++;
}
else { // if both are equal
Result.insert(i->coef + j->coef, i->pow);
i++;
j++;
}
}
//handle the remaining items in each list
//note: at least one will be equal to end(), but that loop will simply be skipped
while (i != poly.end()) {
Result.insert(i->coef, i->pow);
++i;
}
while (j != P.poly.end()) {
Result.insert(j->coef, j->pow);
++j;
}
return Result;
}
Subtraktion:
polinom operator-(const polinom& P) const //fixed prototype re. const-correctness
{
polinom Result;
constIter i = poly.begin(), j = P.poly.begin();
while (i != poly.end() && j != P.poly.end()) { //logic while both iterators are valid
if (i->pow > j->pow) { //if the current term's degree of the first polynomial is bigger
Result.insert(-(i->coef), i->pow);
i++;
}
else if (j->pow > i->pow) { // if the other polynomial's term degree is bigger
Result.insert(-(j->coef), j->pow);
j++;
}
else { // if both are equal
Result.insert(i->coef - j->coef, i->pow);
i++;
j++;
}
}
//handle the remaining items in each list
//note: at least one will be equal to end(), but that loop will simply be skipped
while (i != poly.end()) {
Result.insert(i->coef, i->pow);
++i;
}
while (j != P.poly.end()) {
Result.insert(j->coef, j->pow);
++j;
}
return Result;
}
Multiplikation:
polinom operator*(const polinom& P) const
{
polinom Result;
constIter i, j, lastItem = Result.poly.end();
Iter it1, it2, first, last;
int nr_matches;
for (i = poly.begin() ; i != poly.end(); i++) {
for (j = P.poly.begin(); j != P.poly.end(); j++)
Result.insert(i->coef * j->coef, i->pow + j->pow);
}
Result.poly.sort(SortDescending());
lastItem--;
while (true) {
nr_matches = 0;
for (it1 = Result.poly.begin(); it1 != lastItem; it1++) {
first = it1;
last = it1;
first++;
for (it2 = first; it2 != Result.poly.end(); it2++) {
if (it2->pow == it1->pow) {
it1->coef += it2->coef;
nr_matches++;
}
}
nr_matches++;
do {
last++;
nr_matches--;
} while (nr_matches != 0);
Result.poly.erase(first, last);
}
if (nr_matches == 0)
break;
}
return Result;
}
Abteilung( Bearbeitet ):
polinom operator/(const polinom& P) const
{
polinom Result, temp2;
polinom temp = *this;
Iter i = temp.poly.begin();
constIter j = P.poly.begin();
int resultSize = 0;
if (temp.poly.size() < 2) {
if (i->pow >= j->pow) {
Result.insert(i->coef / j->coef, i->pow - j->pow);
temp = temp - Result * P;
}
else {
Result.insert(0, 0);
}
}
else {
while (true) {
if (i->pow >= j->pow) {
Result.insert(i->coef / j->coef, i->pow - j->pow);
if (Result.poly.size() < 2)
temp2 = Result;
else {
temp2 = Result;
resultSize = Result.poly.size();
for (int k = 1 ; k != resultSize; k++)
temp2.poly.pop_front();
}
temp = temp - temp2 * P;
}
else
break;
}
}
return Result;
}
};
Die ersten drei funktionieren korrekt, aber die Division nicht, da das Programm in einer Endlosschleife zu stecken scheint.
Letzte Aktualisierung Nachdem ich Dave zugehört habe, habe ich es schließlich geschafft, indem ich sowohl / als auch & überladen habe, um den Quotienten und den Rest zurückzugeben. Also vielen Dank an alle für eure Hilfe und besonders an dich, Dave, für deine tolle Idee!
P.S. Wenn jemand möchte, dass ich diese 2 überlasteten Operatoren poste, bitte ich darum, indem ich meinen Beitrag kommentiere (und vielleicht eine Stimme für alle Beteiligten abgebe).