Witam kolegów!
mam pewien problem z napisaniem programu który miałby znajdować miejsca zerowe funkcji za pomoca bisekcji ( połowienia przedziałow).Mam program który oblicza ów miejsca zerowe lecz jest w nim podana funkcja x^2+x+1, a ja mam wprowadzic do tego programu funkcje o wpisywanych współczynnikach ( axx+b*x+c) gdzie a,b,c sa wpisywane z klawiatury. Z góry dzięki za wszystkie wskazówki! :) Pozdrawiam
oto program który posiadam:
// Znajdywanie miejsc zerowych metoda bisekcji
#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\n",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
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+x - 1); // i tu wielomian ma przyjac postac (ax*x+bx+c) gdzie a,b,c maja byc wpisywane z klawiatury
}