Program wyznaczajacy m.zerowe funkcji metoda bisekcji

0

Zadanie
Program,który metodą bisekcji wyznaczy z zadaną dokładnością q miejsca zerowe funkcji określonej następująco f(x)=x-e^(-x) w zadanym przedziale [0,1].
[code]
#include<iostream>
#include<cmath>
#include<iomanip>

using namespace std;
float funkcja(float x)
{
float f;
f=x-exp(-x);
return f;
}

int main(void)
{
float q,x,m,p1,k1;
int p={0};
int k={1};

if(funkcja(p)*funkcja(k)<0)
{

cout<<"Podaj dokladnosc "<<endl;
cin>>q;

while((k-p)>q)
{

             m=(p+k)/2;
             
          
             
             if(funkcja(m)==0)
             {
             p1=m;
             k1=m;
             
             cout<<"p1="<<p1<<endl;
             
             cout<<"k1="<<k1<<endl;
             
             }              
             
             if(funkcja(p)*funkcja(m)<0)
             {
             p1=p;
             k1=m;
             
             cout<<"p1="<<p1<<endl;
             
             cout<<"k1="<<k1<<endl;
             
             }
             
             if(funkcja(p)*funkcja(m)>0)
             {
             p1=m;
             k1=k;
             
             cout<<"p1="<<p1<<endl;
             
             cout<<"k1="<<k1<<endl;
             
             
             }
             

             
             

}
}

return(0);
system("PAUSE"); 

} [/code]

mam tyle,
nie wiem czy to jest dobrze,
wiem, ze p nie bedzie sie zmieniac , zmieniac jedynie bedzie sie k, ktore bedzie przyjmowac wartosc m, przez co przedzial bedzie sie zmniejszac, az w koncu te m bedzie miejscem zerowym, nie wiem jak to zapisac w c++
prosze o jakas wskazowke
z gory wielkie dzieki!

0

Przeanalizuj poniższy kod:

 
#include <math.h>
#include <conio.h>
#include <iostream>
  double fcja(double x)
   {
      return x-exp(-x);
      }   
using namespace std;
int main()
{
  double epsilon,x,temp,iloczyn;
  double dolna=0,gorna=1.0;
  cout<<"podaj dokladnosc wyniku ";
  cin>>epsilon;
    iloczyn=fcja(dolna)*fcja(gorna);cout<<iloczyn;
    	while (gorna-dolna>epsilon)
    	 {
           temp=(dolna+gorna)/2;
           if (fcja(dolna)*fcja(temp)<0) gorna=temp;else dolna=temp;     
           }
   cout<<"Pierwiastek znajduje sie w punkcie x = "<<(dolna+gorna)/2;             
  getch();  
  return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1