//--------------------------------------------------------------------
// CotaCauchy.cpp
//
// Aluna: Polyana Roberta Pereira
// Disciplina: An�lise Num�rica    Professor: Volnei
// Programa: Determina a localiza��o de ra�zes complexas
//--------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <complex.h>

int main(int argc, char **argv)
{
    float vetor[10], aux[10], potencia[10], erro, mult[9];
    int grau, i, it = 0;
    float modulo;

	float base, expoente, erro_total, soma = 0, xi, x=0;
    
    puts ("Dado um polinomio e possivel determinar a localizacao de suas raizes complexas");
    puts ("e reais. O metodo para a resolucao e conhecido como Cota de Cauchy\n");

    printf ("Informe o grau do seu polinomio: (valor maximo: 10) ");
    scanf ("%i", &grau);
    printf ("Informe o valor do erro: ");
    scanf ("%f", &erro);

    for ( i = grau ; i >= 0 ; i-- ) {
        fprintf (stdout, "Informe o valor do x^%i: ", i);
        scanf ("%f", &vetor[i]);
    }
    puts ("\n");
    for ( i = grau ; i >= 0 ; i-- ) {
        if (vetor[i] >= 0) {
           fputs ("+ ", stdout);
        } else {
           fputs ("- ", stdout);
        }
        modulo = fabs(vetor[i]);
        fprintf (stdout, "%.2fx^%i ", modulo, i);
    }
    
    do {
        soma = 0;
        for ( i = 1; i <= grau; i++ ){
            aux[i] = fabs(vetor[grau - i]/vetor[grau]);
    		base = x;
    		expoente = grau - i;
    		if ( i != grau ) {
                  potencia[i] = powf(base, expoente);
            } else {
                  potencia[i] = 1;       
            }
            mult[i-1] = aux[i]*potencia[i];
    		soma += mult[i-1];
        }
        
        float exp;
        exp = 1/(float) grau;

    	xi = powf(soma, exp);

        erro_total = xi - x;
        printf ("\n\nIteracao: %i", it++);
        printf ("\nO valor do erro e %f", erro_total);
        
        x = xi;

    } while (erro < erro_total);
    
    printf("\nFuncionou, viu!!! ;)");
    getch();
    return 0;
}

