Witam to mój pierwszy post. Zbliża się poprawka z programowania a ze względu na to że posiadam stary egzamin prosiłbym was o pomoc w zadaniu które wstawiam poniżej. Jak powinna wyglądać ta funkcja?
Witaj.
Co napisałeś do tej pory i dlaczego uważasz, że ktoś odwali za ciebie całą robotę?
Jakbym dostał takie zadanie, to mógłbym nie pamiętać wzoru i to byłoby jedyną trudnością..
Ale Ty masz wszystko na tacy i nie potrafisz z tego skorzystać..
Nie dziwi mnie, że masz poprawkę i nie zdziwi mnie jak jej nie zaliczysz..
Strasznie nie lubię ludzi którzy idą po linii najmniejszego oporu.
def pierwiastek(p,x0):
x1=0.5*(x0+(p/x0))
if( ( x0 - x1 ) < 0.000001 ):
return x1
else :
return pierwiastek(p,x1)
dzięki poradziłem sobie.
zrobione na pętli do .. while..
do zamknięcia
Na pętli? Przecież tutaj ma być rekurencja ;o
@alzajac: to jest naprawdę proste zadanie. Ale zrobiłem je za Ciebie bo uczę sie Pythona i przyda mi się wprawka:
'''
TestNewton.py
Created on 2011-09-07
@author: piotr
'''
def __nextNewton(x, yi):
return 0.5 * (yi + x / yi)
def sqrtNewton(x, eps):
yp = x / 2.0
yn = __nextNewton(x, yp)
while abs(yp - yn) > eps:
yp = yn
yn = __nextNewton(x, yp)
return yn
def runTest():
x = 36.0
eps = 1E-6
y = sqrtNewton(x, eps)
print "pierwiastek z ", x, " = ", y, " przy eps=", eps
if __name__ == "__main__":
runTest()
Kilka uwag gdyby Cię pytali:
- warunek "if" na końcu programu pozwala na używanie go zarówno jako programu jak i modułu (gdy będzie użyty jako moduł runTest() się nie uruchomi)
- funkcja "__nextNewton" ma taką dziwną nazwę bo jest prywatna dla modułu (nie da się jej uruchomić z zewnątrz)
Zauważyłem teraz że jesteśmy w dziale C/C++.
Gdybyś jednak potrzebował wersji C/C++ to przerobienie tego nie powinno być problemem.
dziękuję wszystkim za odpowiedź i pomoc mimo mało ciepłego przyjęcia.. u mnie to wygląda teraz tak z tym że parametr x0 (u mnie "z") dałem na sztywno (liczyłem przykładowo na razie dla wartości x=2) bo właśnie nie ogarniam potrójnego znaku równości jeśli ktoś mógłby pomóc z tym jeszcze to byłbym wdzięczny... reszta działa:
double MYSQRT(double x)
{
double y,z,temp;
double e=0.000001;
z=1.5;
do{
y=0.5*(z+(x/z));
temp=z-y;
z=y;
}while(e<temp);
return y;
}