Quadratwurzelfunktion mit Hilfe einer Reihenentwicklung berechnen


  • Mod

    Hilft dir denn das, was ich gesagt habe? Wenn du i+2 ausrechnest, dann bekommst du den Wert, der um 2 größer ist als i. Wenn es doch nur eine Möglichkeit gäbe, diesen i zuzuweisen...

    Ich weiß, dass ich mich in das Thema noch einlesen muss.
    Mir ist es nur wichtig diese Aufgabe zulösen.

    Du solltest dich vorher einlesen, dann könntest du auch die Aufgabe lösen! Die Aufgabe verlangt viel mehr als nur Zwei und Zwei zusammenzählen zu können. Wie willst du die Aufgabe schaffen, wenn du damit schon strauchelst?



  • Habe jetzt folgendes:

    for(i = 0; i <= k; i=i+2) {
    	divi = (x*i);
    	printf("hochzahl:%d\n", divi);}
    	for(j = 1;j<=k;j=j+2){
    		hochzahl= (x*j);
    		printf("div:%d\n", hochzahl);
    	}
    

    Damit habe ich jeweils den Dividenden bzw Quotienten.
    Um jeweils ein + bzw - zubekommen kann ich ja mit -1^i rechnen.
    Wie ich das genau implementiere muss ich noch herausfinden.



  • bettdecke schrieb:

    Um jeweils ein + bzw - zubekommen kann ich ja mit -1^i rechnen.
    Wie ich das genau implementiere muss ich noch herausfinden.

    🙄
    Es reicht auch aus das Vorzeichen in jedem Durchlauf mal -1 zu nehmen.

    int vorzeichen = -1; // oder 1, was du brauchst
    ...
    for(...)
    {  
      irgend etwas berechnen mit vorzeichen;
    
      printf("Vorzeichen=%d\n", vorzeichen);
      vorzeichen*=-1;
    }
    


  • Ich habe immer noch Probleme mit den Schleifen.
    Bei k=3 soll im Zähler 1*3 und im Nenner 2*4*6 berechnet werden und mit x^k multipliziert werden.
    Doch wie kann ich das lösen wenn ich ne verschachtelte Funktion habe?


  • Mod

    Indem du es tust?

    Drück dich doch mal klar aus! Fast alle deine Beiträge sind nur mit fortgeschrittener Wahrsagerei verständlich. Sag, was du tun willst, warum du damit Schwierigkeiten hast und wie dein Code aussieht. Wenn du Fachworte benutzt, dann sei dir sicher, dass sie richtig sind. Was soll eine verschachtelte Funktion sein? Mein Wahrsagegerät sagt mir, dass du entweder Rekursion meinst oder Schleifen verschachtelt hast. Da beides sehr unterschiedlich ist und dann auch noch jeweils auf tausende unterschiedliche Arten umgesetzt werden kann, kann man dir einfach nicht helfen!



  • Ok ich werde mich in nächster Zeit ausführlicher zu meinen Problemen äußern.

    Habe also ne geschachtelte For-Schleife.

    for(i = 2; i <= k; i=i+2) {
    	nenner = (x*i);
    	printf("Nenner:%d\n", nenner);}
    	for(j = 1;j<k;j=j+2){
    		zaehler= (x*j);
    		printf("Zaehler:%d\n", zaehler);
    	}
    

    Diese geben mir jeweils den Nenner bzw den Zähler an.
    Als nächstes soll vom Zähler bzw. Nenner das Produkt gebildet werden und der Zähler durch den Nenner dividiert werden.
    Und hier liegt man Problem.

    Wie kann ich es realisieren, dass er mir das Produkt des Nenner und der Zählers bildet und diese dann dividiert.
    "zaehler*=zaehler" kann ich ja nicht nutzen, da er mir nur das Quadrat bildet.

    Hoffe ich habe dieses mal mein Problem etwas ausführlicher beschrieben. 🙂



  • In einer Schleife kann auch mehr als eine Variable geändert werden.

    j = 1;
    for(i = 2; i <= k; i=i+2) {
        nenner = (x*i);
        printf("Nenner:%d\n", nenner);}
        zaehler= (x*j);
        printf("Zaehler:%d\n", zaehler);
    
        j = j+2;
    }
    

    oder etwas übersichtlier/anders

    for(i = 2,j = 1; i <= k; i=i+2,j=j+2) {
        nenner = (x*i);
        printf("Nenner:%d\n", nenner);}
        zaehler= (x*j);
        printf("Zaehler:%d\n", zaehler);
    }
    

    Ob das auch das berechnet was du willst, musst du wissen. :xmas2:



  • Musste bei deiner Schleife nur ne Klammer anders setzen 🙂
    Wie kann ich jedoch das Produkt der einzelnen Durchläufe bilden?



  • bettdecke schrieb:

    Musste bei deiner Schleife nur ne Klammer anders setzen 🙂

    Da wo die Klammer war gehört sie auch nicht hin, weil man sie dort nicht sieht.
    Dann waren die Schleifen auch nicht verschachtelt sondern nacheinander und die Einrückung dazu völlig daneben.

    j = 1;
    zaehler = 1;
    nenner = 1;
    for(i = 2,j = 1; i <= k; i=i+2,j=j+2) {
        nenner *= i;
        printf("Nenner:%d\n", nenner);
        zaehler *= j;
        printf("Zaehler:%d\n", zaehler);
    }
    

    so in etwa ?



  • Danke!
    Jetzt bildet er das Produkt!
    Habe jetzt nen weiteres Problem mit dem Bilden von x^k.
    Als ich eine for-Schleife mit der Erhöhung um jeweils 1 hatte ($i++) konnte ich x^k durch wiederholtes multiplizieren von x mit einer Variable mit dem Anfangswert 1 realisieren.
    Wie ist das jetzt denn möglich?



  • Überleg mal selber wie du von k auf i und j kommst.
    ungefähr:
    i = 2 * k;
    j = i + 1; // oder - 1,
    genauer mag ich das jetzt nicht überlegen.

    Du musst mal deine Erkenntisse einsetzen.

    bettdecke schrieb:

    konnte ich x^k durch wiederholtes multiplizieren von x mit einer Variable mit dem Anfangswert 1 realisieren.

    Etwas anderes habi ich doch bei nenner und zaehler auch nicht gemacht.



  • Bin jetzt dahinter gekommen 🙂
    Mein Code sieht jetzt so aus

    for(i = 2; i <= k+k; i=i+2) {
    	nenner*=i;
    	expo*=1*x;
    	printf("Expo:%lf\n",expo);
    	printf("Nenner:%d\n", nenner);
    	}
    	for(j = 1;j<=k+(k-2);j=j+2){
    		zaehler*=j;
    
    		printf("Zaehler:%d\n", zaehler);
    	}
    

    Aufgrund der zwei Schleifen kann ich die Werte der einzelnen Durchläufe nicht dividieren.
    Wenn ich deine For-Schleife nutze, kann ich die Were dividieren jedoch habe ich die gleiche Anzahl an Nennern und Zähler, da Zählbedingung (i<=k+k) nur für i und j gilt.
    Habe es auch so versucht

    for(i = 2,j = 1; i <=k+k,j<=k+(k-2); i=i+2,j=j+2)
    

    Jedoch ohne Erfolg.



  • Bei der for-Schleife sind die Elemente for (Initialisierung; Test; Fortsetzung) Anweisung
    Ich glaube kaum, dass du den Test richtig begreifst, wenn der einen Kommaoperator hast.
    Bei dir steht da i <=k+k,j<=k+(k-2) Welche Bedingung gilt da jetzt?

    Mach mal eine Liste welche i und j du für welche k benötigst.

    k |  i |  j
    ---+----+----
     1 |  2 |  1
     2 |  4 |  1 
     3 |  6 |  3
     4 |  8 |  5
    

    Jetzt musst du mal schauen, wie du aus k i und j berechnen kannst.
    evtl. brauchst du für k=1 auch eine Sonderbehandlung.
    Dann hast du nur eine Schleife über k und kannst den Rest ganz einfach berechnen.



  • Ja das Kommata war falsch. Ich hätte beide mit einem && Operator verbinden sollen, jedoch ohne den gewünschten Effekt.

    Habe die Tabelle jetzt aufgestellt.
    Und abgesehen von der Ausnahme bei k=1 ist j immer i-3.
    Wie ich jetzt aber daraus auf eine Abbruchbedingung schließe, ist mir nicht klar.



  • bettdecke schrieb:

    Wie ich jetzt aber daraus auf eine Abbruchbedingung schließe, ist mir nicht klar.

    ((k <=  Ihre_Matrikel_Nummer%100) || (k <= 10))
    

    Du brauchst nur eine Schleife über k. i und j kannst du ja jetzt berechnen.
    (Ich hoffe doch, dass du aus k auch j berechnen kannst)



  • Den Ansatz verstehe ich leider nicht.
    Ich habe es bisher so geregelt

    if (k < 10)
    k=10;
    

    Langsam gebe ich es einfach auf...
    Dachte ich hätte es jetzt mehr oder weniger aber leider doch nicht.....



  • In der Grafik aus deinem ersten Post ist k eine Laufvariable und nicht das Ende.
    Es ist sogar die Laufvariable und geht bis 10 oder Ihre_Matrikel_Nummer%100.



  • Ich gebe jetzt auf.
    Es macht einfach kein Sinn.Leider

    Danke dir trotzdem für deine Hilfe!





  • Super!
    Danke dir vielmals!
    Falls, du mal im Köln/Bonner Raum bist schulde ich dir nen Bier 🙂


Anmelden zum Antworten