Quadratwurzel



  • Hallo, Ich soll die Quadratwurzel mit Hilfe des Newton Verfahrens programmieren. So weit so gut ich habe jetzt das weitgehend hinbekommen, aber ich hab grad echt kein plan mehr wie man die einzelne Näherungsversuche angeibt.

    double wurzeldowhile(double a)
    {
      double x = a, y = 1;
      if (x < y) std::swap(x, y); // falls 0 <= a < 1
      do
      {
        x = (x+y)*0.5;
        y = a/x;
      }
      while (x > y);
      return x;
    }
    
    int main ()
    {
        cout.precision(10); cout.setf(ios_base::fixed);
        cout << "Die Quadratwurzel mit Hilfe einer Do-while-Schleife ist " <<wurzeldowhile(2) << endl;
    

    Ich hab den Code noch ohne Schleifen damit ihr genau wisst was ich machene mit Annäherungsversuche:

    #include <iostream>
    using namespace std;
    double Betrag(double x) {
    return ((x<0) ? -x : x);}
    bool gut_genug (double x, double a) {
    return (Betrag(x*x-a) <= 1e-15); }
    double wurzeliter (int i, double xn, double a) {
    if (gut_genug(xn,a)||(i>1000)) return xn;
    cout << "i= " << i << ", x= " << xn << endl;
    wurzeliter(i+1,(xn+a/xn)*0.5,a);
    return 0; }
    double wurzel (double a) { return wurzeliter(1,1.0,a); }
    int main () {
    cout.precision(20); cout << wurzel(2) << endl;
    return 0;}
    

    Also eig soll das Programm geschrieben werden nur mit Hilfe von Schleifen, aber wie gesagt ich weiß nicht wie ich die einzelnen Iterationen Schritte anzeigen lasse

    Danke im vorraus euer Dennis


  • Mod

    Machst du zwischen Zeile 7 und 8 eine Ausgabe.

    Ich hoffe dein Code ist nicht wirklich so formatiert, wie du ihn hier darstellst.



  • Neein ist nur provisorisch so hingeschrieben.
    kannst du bisschen genauer sein ?
    Dankeschön



  • okay habs schon daaanke ! 😃 😃



  • Wie hast du die Näherungsversuche noch mit reingepackt ? Hänge an derselben Aufgabe und habe es auch nur bisher geschafft, die Rechnung komplett durchlaufen zu lassen, sodass die Wurzel ausgegeben wird. Kann aber so nicht komplett richtig sein, weil bei mir noch gefordert ist, dass ich nach maximal 10 durchläufen abbreche. Das krieg ich auch nicht hin 😃 👎


  • Mod

    MuchachoP schrieb:

    Wie hast du die Näherungsversuche noch mit reingepackt ? Hänge an derselben Aufgabe und habe es auch nur bisher geschafft, die Rechnung komplett durchlaufen zu lassen, sodass die Wurzel ausgegeben wird. Kann aber so nicht komplett richtig sein, weil bei mir noch gefordert ist, dass ich nach maximal 10 durchläufen abbreche. Das krieg ich auch nicht hin 😃 👎

    Dann muss eben die Anzahl der bisherigen Durchlaeufe mitgeschleppt werden und in der Abbruchbedingung geprueft werden. Der - leider total unlesbar formatierte - Code im ersten Beitrag macht das bereits. Die Zahl der bisherigen Durchlaeufe ist das i und es wird abgebrochen, wenn i > 1000.



  • Hat mich wieder einer der mods rausgeschmissen?
    War doch diesmal gar nicht so schlimm, oder?

    EDIT:
    Hatte mal von meinem Bruder (Physiker) einen extrem coolen Algorithmus zum Berechnen der Wurzel bekommen. Finde ihn aber in meiner Zettelwirtschaft leider nicht mehr.

    EDIT #2:
    Sorry, hatte die threads verwechselt. Alles ist gut.

    EDIT #3:
    code fragment #1 ist gut formatiert, damit kann man was anfangen
    code fragment #2 ist gut für nen code obfuscation contest, mit sowas will sich eigentlich niemand beschäftigen


Anmelden zum Antworten