Erro no Código C++

Pessoal, eu não estou conseguindo achar um erro que está ocorrendo no meu código em C++. Parece que é somente um erro de sinal ou de delimitadores

    #include <iostream>
    #include <math.h>

    float F(int x);  // protótipo da minha função

    using namespace std;

    #define IterM 100;
    #define eps 0.00000001; 

    int main(void)
    {
    float a, b, *bnx; // aqui eu escolhi usar ponteiro porque os valores a, b mudarão
    int Iter;

    cout << "Type value 'a': ";
    cin >> a;

    cout << "Type value 'b': ";
    cin >> b;

    	if(F(a)*F(b) > 0) //chamada da função que avaliará a imagem de 'a' e 'b'

    	cout << "No signal of change ";
    	
    	system("pause");
    	
    	exit(1);

      Iter =0;

      while((b-a)>eps) & Iter < IterM)  
      {

    Iter+=1;

    *bnx = (a + b)/2;

    cout << a << "________" << b << "________" << *bnx << endl;

    	if(F(*bnx) * F(a) > 0) 
    	{
    	bnx = &a;
    	F(bnx)= &F(a);
    	}
    	else 
    	{
    	bnx = &b;
    	F(bnx) = &F(b);
    	}
    	return 0;
      }
    cout << "approximate  root:   " << *bnx << endl;
    system("pause");
    }

    float F(int x) {
    return pow(x,2)-8*(x) +15; 
    } 

Vejam o resultado reportado pelo compilador:

VCakh8uM.c: In function ‘int main()’:
VCakh8uM.c:33: error: expected )' before ';' token VCakh8uM.c:33: error: expected primary-expression before ')' token VCakh8uM.c:33: error: expected;’ before ‘)’ token
VCakh8uM.c:33: error: expected primary-expression before ‘)’ token
VCakh8uM.c:33: error: expected ;' before ')' token VCakh8uM.c:62: error: expected}’ at end of input

cara teu codigo esta dificil de ler e esta mal identado - provavelmente por conta de colar aqui.

nao faço ideia de onde é a linha 33, aparentemente vc tem um erro na linha 33. falta um ) antes de um ; .

agora me diz uma coisa, o que vc espera disso?

while ((b-a)>eps) & Iter < IterM )

pq isso faz um and bit-a-bit e não um and logico. and logico vc faz com &&

Vou tentar explicar: Estou implementando um método de biparticionamento para achar raíz de uma equação dados um intervalo a e b [a,b]
avaliando as funções f(a) e f(b) precisam ter sinais contrários. Dividimos
xn= (a + b)/2 e avaliamos o ponto xn na função–> f(xn). Se f(xn)*f(a) > 0 precisamos trocar os valores dos intervalos. Então, xn assume o valor de a. Caso contrário, xn assume o valor de b. Por isso que eu criei um ponteiro para mudar estes valores. Sei que existe modo de fazer sem usar ponteiro. Mas quero solidificar meu conhecimento de ponteiro aplicando a este caso.

Explicando o “while”: eu defini uma precisão de 0.00000001 que chamei de eps.
Se a diferença do intervalo b-a for menor que 0.00000001 E menor que a iteração máxima (que eu defini como sendo 100), continue dentro do laço.

#include <iostream>
#include <math.h>

#define IterM 100;
#define eps 0.00000001;

float F(int x);  // protótipo da minha função

using namespace std;

int main(void)
{

float a, b, *bnx; // aqui eu escolhi usar ponteiro porque os valores a, b mudarão
int Iter;

cout << "Type value 'a': ";
cin >> a;

cout << "Type value 'b': ";
cin >> b;

	if(F(a)*F(b) > 0) //chamada da função que avaliará a imagem de 'a' e 'b'

	cout << "No signal of change ";
	
	system("pause");
	
	exit(1);

  Iter =0;

  while((b-a)>eps) && Iter < IterM)  
  {

Iter+=1;

*bnx = (a + b)/2;

cout << a << "________" << b << "________" << *bnx << endl;

	if(F(*bnx) * F(a) > 0) 
	{
	bnx = &a;
	F(bnx)= &F(a);
	}
	else 
	{
	bnx = &b;
	F(bnx) = &F(b);
	}
	return 0;

  }
cout << "approximate  root:   " << *bnx << endl;
system("pause");
}

float F(int x);     //  aqui é a definição de minha função
{
return (pow(x,2)-8*(x) +15); 
}

_Aqui ficou melhor numerado. Veja:

https://t.co/rYJT0ss5u5

Olha essa construção float( expressão ) eu nunca vi.

O que é comum é fazer um cast pra float

(float) expressão

Se vc chama uma função que retorna um float, não tem que fazer cast.

Talvez seja isso que esteja causando o erro

*O problema foi resolvido e para melhor organização foi feito um tabelamento. Criei uma função para passagem de parâmetros por endereçamento de memória. O método setw(n) foi feito por tentativa e erro porque pra mim não ficou claro qual espécie de inteiro ‘n’ vem dentro de setw(n). Bom, tá aí pra quem quiser estudar como ficou.

#include <iostream>
#include <iomanip>
#include <conio.h>
#include <math.h>

#define IterM  100
#define eps 0.0000001

float F(float x);    

float swap(float &x, float &y);

using namespace std;

int main(void)
{
float a, b;

cout << "Type value 'a': ";
cin >> a;

cout << "Type value 'b': ";
cin >> b;

system("color f0");

if(F(a)* F(b) > 0) 
{	
cout << "Sem mudar o sinal";
	
system("pause");
}


else
{

float Iter;

cout << string(80,'_') << endl;
cout << setw(15) << "a | ";
cout << setw(15) << "b | ";
cout << setw(15) << "c | ";
cout << setw(15) << "Fc | ";
cout << setw(15) << "Fa | " << endl;
cout << string(80,'_') << endl;


	Iter =0;
	while(Iter <= IterM) 
	{
	float c, F_a, F_c, t;
	
	Iter+=1; 

	c = (a+b)/2.0;

	F_a = F(a);
	F_c = F(c);
	
		if(F(c) * F(a) > 0) 
		{
		swap(a,c);
		 }
		else 
		{
		 swap(b,c);
		}
       
	  	if((b-a) < eps)
     		break;
	
		cout << setfill('_');
		cout << setw(15) << a; 
		cout << setw(15) << b;
		cout << setw(15) << c;
		cout << setw(15) << F_a;
		cout << setw(15) << F_c << endl;
	}


	system("pause");
}

}


float F(float x)    
{
return (pow(2,x)-3) ; 
}

float swap(float &x, float &y)
{
float t;

t=x;
x = y;
y = t;

return 0;
}