[C] Wyznaczenie pierwiastka bez funkcji sqrt

timus221
Użytkownik
Użytkownik
Posty: 579
Rejestracja: 13 sty 2011, o 20:17
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 120 razy
Pomógł: 7 razy

[C] Wyznaczenie pierwiastka bez funkcji sqrt

Post autor: timus221 »

Witam. Moim zadaniem jest wyznaczenie pierwiastka bez uzycia funkcji sqrt. Znalazlem metode Newtona ,ktora chyba nalezy wykorzystac. Jak narazie moj program wyglada tak :

Kod: Zaznacz cały

#include<stdio.h>
#include<math.h>
int main()
{
	int e=0.001;
	int a;
	float b,c;
	
printf("Podaj liczbe naturalna
");
	scanf("%d",&a);
	b=a-0.5;
	while(b-c<e&&c-b>(-e))
	{
		c=b;
		b=0.5*(c+(a/c));
		printf("%d
",b);
}
}
Jednak nie dziala jak nalezy. Co jest nie tak? Poprosze o pomoc i z gory dziekuje za odp .
abc666

[C] Wyznaczenie pierwiastka bez funkcji sqrt

Post autor: abc666 »

Pierwsze co zrób to popraw nazwy zmiennych. Dłuższe nazwy nikomu nie zaszkodzą.

Masz zły warunek w while. Po pierwsze zakładasz monotoniczność ciągu kolejnych przybliżeń, a po drugie warunek jest chyba odwrotnie niż chciałeś?
timus221
Użytkownik
Użytkownik
Posty: 579
Rejestracja: 13 sty 2011, o 20:17
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 120 razy
Pomógł: 7 razy

[C] Wyznaczenie pierwiastka bez funkcji sqrt

Post autor: timus221 »

Kod: Zaznacz cały

#include<stdio.h>
#include<math.h>
int main()
{
	int e=0.001;
	int a;
	float xk,xkplus1;
	
printf("Podaj liczbe naturalna
");
	scanf("%d",&a);
	xk=a-0.5;
	while(xk-xkplus1<e&&xkplus1-xk>(-e))
	{
		xk=xkplus1;
		xkplus1=0.5*(xk+(a/xk));
		printf("%d
",xkplus1);
}
}
ale nadal program nie dziala. Nie wiem gdzie moze byc blad.
abc666

[C] Wyznaczenie pierwiastka bez funkcji sqrt

Post autor: abc666 »

while(xk-xkplus1<e&&xkplus1-xk>(-e))

Już pisałem o tym. Twój warunek to \(\displaystyle{ |x_{k}-x_{k+1}| < e}\) a ma być całkiem odwrotnie. (No i ten warunek obecny ma niepotrzebny minus)
timus221
Użytkownik
Użytkownik
Posty: 579
Rejestracja: 13 sty 2011, o 20:17
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 120 razy
Pomógł: 7 razy

[C] Wyznaczenie pierwiastka bez funkcji sqrt

Post autor: timus221 »

poprawione,ale teraz podajac liczbe a wyskakuje mi wynik 0.
abc666

[C] Wyznaczenie pierwiastka bez funkcji sqrt

Post autor: abc666 »

Ach, jeszcze zmień format wyświetlania danych. Zamiast %d zrób %f. No i wyżej xkplus1=a-0.5;.
Ukryta treść:    
timus221
Użytkownik
Użytkownik
Posty: 579
Rejestracja: 13 sty 2011, o 20:17
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 120 razy
Pomógł: 7 razy

[C] Wyznaczenie pierwiastka bez funkcji sqrt

Post autor: timus221 »

ślicznie dziękuję
pawel_wr
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 25 paź 2012, o 04:00
Płeć: Mężczyzna
Lokalizacja: wroclaw
Pomógł: 3 razy

[C] Wyznaczenie pierwiastka bez funkcji sqrt

Post autor: pawel_wr »

W linii 5 zdaje się , że jest błędna deklaracja int e=0.001 ;
należy zmienić to np. na double e=0.001
abc666

[C] Wyznaczenie pierwiastka bez funkcji sqrt

Post autor: abc666 »

Masz racje. Nawet tego nie zauważyłem, a sprawdziłem tylko na kwadratach ładnych.
ODPOWIEDZ