Скачиваний:
17
Добавлен:
01.05.2014
Размер:
1.81 Кб
Скачать
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream.h>

extern double F(double);

double BISECT(double Left,double Right,double Eps,int &N)
{
  double E = fabs(Eps)*2.0;
  double FLeft = F(Left);
  double FRight = F(Right);
  double X = (Left+Right)/2.0;
  double Y;

  if (FLeft*FRight>0.0) {puts("ЌҐўҐа­®Ґ § ¤ ­ЁҐ Ё­вҐаў « \n");exit(1);}
  if (Eps<=0.0) {puts("ЌҐўҐа­®Ґ § ¤ ­ЁҐ в®з­®бвЁ\n");exit(1);}

  N=0;
  if (FLeft==0.0)  return Left;
  if (FRight==0.0) return Right;

  while ((Right-Left)>=E)
  {
	X = 0.5*(Right + Left);     /* ўлзЁб«Ґ­ЁҐ бҐаҐ¤Ё­л ®в१Є        */
	Y = F(X);
	if (Y == 0.0) return (X);
	if (Y*FLeft < 0.0)
	   Right=X;
	else
	 { Left=X; FLeft=Y; }
	N++;
  };
  return(X);
}
//------------------------------------------------------------------------
double Round (double X,double Delta)
{
 if (Delta<=1E-9) {puts("ЌҐўҐа­®Ґ § ¤ ­ЁҐ в®з­®бвЁ ®ЄагЈ«Ґ­Ёп\n");exit(1);}
 if (X>0.0) return (Delta*(long((X/Delta)+0.5)));
    else    return (Delta*(long((X/Delta)-0.5)));
}
//-------------------------------------------------------------------------
//-------------------------- End of module --------------------------------
double c, d;

double F(double x)
{
	double tmp;
	tmp=tan(x);
	return tmp-(1/x);
}
//------------------------------------------------------------------------
void main()
{
	double delta, left, right,eps;
	cout<<"\n‚ўҐ¤ЁвҐ «Ґўго Ја ­Ёжг: ";
	cin>>left;
	cout<<"\n‚ўҐ¤ЁвҐ Їа ўго Ја ­Ёжг: ";
	cin>>right;
	cout<<"\n‚ўҐ¤ЁвҐ Є®нддЁжЁҐ­в в®з­®бвЁ ўлзЁб«Ґ­Ё©: ";
	cin>>eps;
	cout<<"\n‚ўҐ¤ЁвҐ Є®нддЁжЁҐ­в в®з­®бвЁ ®ЄагЈ«Ґ­Ёп: ";
	cin>>delta;
	double x;
	int k;
	x=BISECT(left,right,eps,k);
	x=Round(x,delta);
	cout<<"\nx= "<<x;
	cout<<"\nЉ®«ЁзҐбвў® и Ј®ў ЇаЁ ўлзЁб«Ґ­ЁЁ: "<<k;
}
Соседние файлы в папке Лабораторные работы №3_4_5_6