Kod: Zaznacz cały
#include <stdio.h>
// Prototypy funkcji uzytych w programie
float bisekcja(float, float, float);
float f(float);
int main(void)
{
// Program glowny
float lewy,prawy,eps,wynik;
// Wczytanie danych
printf("Podaj lewy kraniec przedzialu, lewy = ");
scanf("%f", &lewy);
printf("Podaj prawy kraniec przedzialu, prawy = ");
scanf("%f", &prawy);
printf("Podaj zadana dokladnosc, eps = ");
scanf("%f", &eps);
// Wywolanie funkcji obliczacej miejsce zerowe
wynik = bisekcja(lewy,prawy,eps);
printf("%f
",wynik);
}
float bisekcja(float lewy, float prawy, float eps)
{
// Funkcja oblicza miejsce zerowe funkcji f metoda bisekcji
float pierwiastek;
if ( f(lewy)*f(prawy) < 0 )
{
pierwiastek = lewy; // Pierwsze przyblizenie pierwiastka
while( (prawy-lewy) >= eps ) // Liczymy do momentu osiagniecia zadanej dokladnosci
{
pierwiastek = (prawy + lewy) / 2.0; // srodek przedzialu
if ( f(lewy)*f(pierwiastek) < 0 )
prawy = pierwiastek;
else if ( f(pierwiastek)*f(prawy) < 0 )
lewy = pierwiastek;
else break;
}
}
else
pierwiastek = -0.0; // Nie ma pierwiastka w przedziale, zwracamy -0.0
return(pierwiastek);
}
float f(float x)
{
// Funkcja, ktorej miejsc zerowych szukamy
return(x*x-9);
}