Dusselige Ausgabenstellung
-
Hallo erstmal,
wir haben von unserem Prof. die Aufgabe bekommen eine App zu schreiben die faehig ist aus einer Zahl die Wurzel zu ziehn ohne die math.h zu verwenden.
Vorgegeben hat er uns die Formel zur Berechnung der Wurzel. Ausserdem soll der User eingeben koennen wie genau das ganze sein soll.Hier die Formel:
Sei a > 0.0 eine reelle Zahl. Dann konvergiert die rekursiv definierte Folge
x0 > 0 beliebiger Anfangswert
xn+1 = ½ * (xn + a/xn)
gegen die Quadratwurzel von a.Hier mein Source:
#include <iostream.h> int main() { double dbSqrt; double dbStartValue; cin >> dbSqrt; cin >> dbStartValue; do { dbStartValue = 0.5 * (dbStartValue + (dbSqrt / dbStartValue)); cout <<dbStartValue <<endl; dbStartValue++; } while(((dbStartValue * dbStartValue) - dbSqrt) < (dbStartValue * dbStartValue)); return 0; }Wie ihr schnell merken werdet wird die bedingung der While Schleife nie wahr und ich hab auch keine Ahnung wie ich es aendern muesste damit es klappt
-
Ups sorry, der Titel sollte eigendlich Dusselige Aufgabenstellung heisen
kleiner vertipper am Rande...
-
Hallo Robert,
Sehen wir mal, wonach Deine Bedingung fragt:
while(((dbStartValue * dbStartValue) - dbSqrt) < (dbStartValue * dbStartValue));Auf beiden Seiten der Gleichung steht
dbStartValue*dbStartValue - das ist dbStartValue ins Quadrat.
Auf der linken Seite zeihst Du einen Wert ab. (dbSqrt).
Und jetzt fragst Du, ob die linke Seite kleiner als die rechte Seite ist.
Ich würde sagen, die Bedingung trifft immer zu, solange dbSqrt eine positive Zahl ist. D.h. in Deinem Beispiel wird die Bedingung immer 'wahr' sein. (Falls Du für dbSqrt eine positive Zahl größer 0 eingegeben hast.)
Vielleicht solltest Du Dir erstmal überlegen, was Du an dieser Stelle überhapt testen willst. Muß nicht gleich C++ Code sein.
Viel Spaß beim rätseln.Btw:
Was soll dasdbStartValue++;in Deinem Code ?