// Aufgabe 23-2a.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "std-rene-schwarz.h"
#include "math.h"

double fctv( double x, float p, float q, float r )
{
	return (p*x + q*sin(x) + r);
}

double round( double x, float accuracy )
{
	x *= pow(10, accuracy);
	x = floor(x);
    x /= pow(10, accuracy);
    return x;
}

int _tmain(int argc, _TCHAR* argv[])
{
	cout << rsheader << endl;
	cout << "Aufgabe 23-2a\nBisektionsverfahren\n\n\n" << endl;

	double a, b, x;
	float p = 0, q = 0, r = 0, accuracy = 5;

	cout << "f(x) = p*x + q*sin(x) + r\n" << endl;
	cout << "Bitte geben Sie die Parameter der Gleichung ein." << endl;
	cout << "p: ";
	cin >> p;
	cout << "q: ";
	cin >> q;
	cout << "r: ";
	cin >> r;
	cout << "\n\nBitte geben Sie die Intervallgrenzen an, in denen eine Nullstelle" << endl;
	cout << "f" << ue << "r die Funktion gesucht werden soll.\n\nrechte Intervallgrenze a: ";
	cin >> a;
	cout << "linke Intervallgrenze b: ";
	cin >> b;
	cout << "\n\nUnd nun bitte noch die Genauigkeit des Verfahrens (Abbruchbedingung):" << endl;
	cout << "Genauigkeit: 10^-";
	cin >> accuracy;
	cout << "\n\n\nBitte warten...\n\n";

	do
	{
		x = (a+b)/2;
		if( fctv(a,p,q,r) * fctv(x,p,q,r) < 0 )
			b = x;
		else
			a = x;
		cout << "a = " << a << ", b = " << b << ", x = " << x << endl;
	}
	while(
		(fctv(x,p,q,r) != 0) &&
		((round(x,accuracy) != round(a,accuracy)) || (round(x,accuracy) != round(b,accuracy)))
	);
	
	cout << "\n\n\nDie Nullstelle im angegebenen Intervall liegt n" << ae << "herungsweise bei\n          x = " << round(x,accuracy) << endl;
	cout << "mit einer Genauigkeit von 10^-" << accuracy << ".\n\n\n" << endl;

	system("PAUSE");
	return 0;
}


