Polynomklasse Grundrechenarten



  • Hallo
    das ist mei nerster Beitrag hier.
    Ich habe noch 2 Wochen zeit um eine Klasse mit Addition,Subtraktion, Multiplikation und Division.
    Dazu brauch ich erstmal noch eine Klasse Bruch.
    Kann mir die vielleicht jeamand geben?
    die Polynome habe ich als arrays der Länge 100 festgelegt.
    Jetzt habe ich 3 fragen:
    - wie gebe ich mit cout Polynome mit vielen Koeffizenten aus?
    Anfangs gibt man den Grad des polynoms ein(z.B. 10 also 11 Keofizenten).
    Da ich ja nicht weis wie viele Zahlen ich ausgeben muss, kann ich ja
    nicht alle 101 Zahlen ausgeben.

    - wie schreibe ich Funktionen von arrays?
    z.B. a[100]+b[100]?

    - kann ich mit arrays auch sowas machen? a[100].eigenschaft machen?



  • Du nimmst einfach ein Attribut, das den Grad des aktuellen Polynoms angibt, und wenn du das Polynom ausgeben willst, gibtst du die koeffizienten im array bis zu diesem Grad aus...

    Addition kannst du entweder als eine Funktion Polynom add(const Polynom& a, const Polynom& b); implementieren oder als operator+ des Polynoms.

    Ich weiß leider nicht genau, wo das Problem ist 😕



  • zahlenfan schrieb:

    Dazu brauch ich erstmal noch eine Klasse Bruch.
    Kann mir die vielleicht jeamand geben?

    Boost.Rational wäre vielleicht etwas für dich. Aber zur Übung ist es auch gut, selber so eine Klasse zu schreiben.

    zahlenfan schrieb:

    - wie gebe ich mit cout Polynome mit vielen Koeffizenten aus?
    Anfangs gibt man den Grad des polynoms ein(z.B. 10 also 11 Keofizenten).
    Da ich ja nicht weis wie viele Zahlen ich ausgeben muss, kann ich ja
    nicht alle 101 Zahlen ausgeben.

    Sagen dir Schleifen etwas? Iteriere solange, bis die anfangs eingegebene Zahl erreicht ist.

    zahlenfan schrieb:

    - wie schreibe ich Funktionen von arrays?
    z.B. a[100]+b[100]?

    Ich verstehe den Zusammenhang diesen beiden Zeilen nicht. Vielleicht sagst du, was du erreichen willst, dann kann dir gesagt werden wie.

    zahlenfan schrieb:

    - kann ich mit arrays auch sowas machen? a[100].eigenschaft machen?

    Auch das ist ein wenig ungenau. Aber ja, sowas kannst du machen, wenn der Array-Elementtyp eine Klasse ist.



  • 1. kann ich eine funktion von arrays so schreiben?

    add(double a[100],double b[100])
    {
    for (i=0;i=100;i++)
    { c[i]a[i]+b[i] }
    } so chreiben und wenn nicht wie geht das?

    2. wie gebe ich mit cout Polynome mit vielen Koeffizenten aus?
    eine Schleife war mir schon klar,aber wie muss ich das genau umsetzen?
    ich wüsste nicht wie ich umsetzen soll.
    weil ich nicht weis wie ich eine Iteration für cout schreiben soll.
    Ich kenne xn+1=f(x[n]). x[n+1]= ist a[n+1]x^(n+1).
    aber f(xn)= summe a[i]*x^i von i=0 bis n ist ja ein ausdruck aus <<..<< und ".." die sich immer abwechseln. Wie soll ich sowas schreiben.
    Ich habe versucht es zu erklären, und vll weis einer was gemeint ist.



  • 1. Ja, solltest du aber nicht. Das würde man in C so machen. Stattdessen solltest du eine Klasse wie beispielsweise std::vector benutzen und um diesen Container noch eine Wrapperklasse polynomial programmieren, für die du die jeweiligen operatoren definierst.

    2. Du kannst den operator<< überladen. Wie das geht kannst du in einschlägigen Büchern und Tutorials nachlesen. Dort machst du die Schleife hin, die mehrmals "cout << a[i] << "x^" << i" aufruft. Dazwischen natürlich noch das + ausgeben.

    geloescht



  • geloescht schrieb:

    1. Ja, solltest du aber nicht. Das würde man in C so machen. Stattdessen solltest du eine Klasse wie beispielsweise std::vector benutzen und um diesen Container noch eine Wrapperklasse polynomial programmieren, für die du die jeweiligen operatoren definierst.

    Für diesen Fall scheint mir std::valarray ganz geeignet, da sind viele Operatoren, z.B. für die elementweise Addition, schon überladen. Nachteil ist, dass der Shift-Operator auch überladen ist, also müsste man die Ausgabe über eine Funktion implementieren.

    Mehr Infos unter www.cplusplus.com...

    Edit: Vielleicht ist valarray doch nicht ganz das Wahre, weil zum Beispiel auch die Multiplikation elementweise geschieht. Das ist bei Polynomen wahrscheinlich nicht gewollt. Aber man kann es trotzdem innerhalb eines Wrappers einsetzen und dann die Operatoren der Schnittstelle anpassen...



  • Ich habe mal folgendes versucht um ein polynom auszugeben,aber es passier nichts:

    cout << " Bitte Koeffizenten eingeben.\n";
    for(i=0;i<=m;i++) //------------------P(x) eingeben Koeffizenten sind a
    {
    cout << "a("<< i <<"]=";
    cin >> a[i];
    }

    for(i2=0;i2<=m-1;i2++)
    {
    cout << "a["<< m-i2 <<"]*x^"<< m-i2 "+";
    }
    cout << a[0]<<;

    warum geht das nicht?



  • Mach mal eine Beispielanwendung, damit wir sehen können, was du überhaupt willst und für was die Variablen stehen und sehen können, was nicht läuft. Und benutz dann bitte die cpp-Tags.



  • Ich kann nicht genau erkennen, was du machen willst, aber ich versuchs mal zu erraten:

    cout << "Bitte Koeffizenten eingeben." << std::endl;
    
    //TYPE a[m];
    
    for (int i=0; i != m; i++)
    {
      cout << "a[" << i << "] = ";
      cin >> a[i];
    }
    
    //1. möglichkeit
    cout << a[0];
    for (int i=1; i != m; i++)
    { 
      cout << " + " << a[i] << " * x^" << i;
    }
    
    //2. möglichkeit - halte ich zwar für eher unwahrscheinlich, aber hab sie mal mit hingeschrieben ^^
    cout << "a[0]";
    for (int i=1; i != m; i++)
    { 
      cout << " + a[" << i << "] * x^" << i;
    }
    

    jz kann man es nicht nur ordentlich lesen, sondern es sollte auch noch das machen, wofür es geschrieben wurde ^^

    bb


Anmelden zum Antworten