#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
//maximo para lamda
double maxl (vector<double>&p){
double max1;
for (int i=0; i<p.size()-1; i++){ //calcula el maximo coeficiente del polinomio sin tener en cuenta al coeficiente director
if(abs(p[i])>max1) max1=abs(p[i]);
}
return max1;
}
//maximo para beta
double maxb (vector<double>&p){
double max2;
for (int i=1; i<=p.size(); i++){ //calcula el maximo coeficiente del polinomio sin tener en cuenta el termino independiente
if(abs(p[i])>max2) max2=abs(p[i]);
}
return max2;
}
//cambios de signo
int cambios_signo (vector<double>&p){
int cont=0;
for(int i=0; i<p.size()-1; i++){
if(p[i]<=0 && p[i+1]>0 || p[i]>0 && p[i+1]<=0) cont++;
}
return cont;
}
int main () {
int n;
cout << "introduce el grado del polinomio" << endl;
cin >> n;
vector<double>polinomio(n+1);
for (int i=0; i<n+1; i++){
cout << "a(" << i << ") = ";
cin >> polinomio[i];
cout << "i = " << i << ", polinomio["<<i<<"] = " << polinomio[i] << endl;
}
int cont=0;
while(polinomio[0]==0){
for (int i=0; i<=n; i++){
polinomio[i]=polinomio[i+1];
}
cont++;
}
polinomio.resize((polinomio.size())-cont);
vector<double>polinomio_negativo(n+1);
for (int i=0; i<=polinomio.size(); i++){
if (i%2==0){
polinomio_negativo[i]=polinomio[i];
}
else polinomio_negativo[i]=polinomio[i]*(-1);
}
//acotacion de raices
double lamda = maxl (polinomio)/abs(polinomio[polinomio.size()-1]);
double beta = maxb (polinomio)/abs(polinomio[0]);
cout << "lamda = " << lamda << endl;
cout << "beta = " << beta << endl;
cout << (1/(1+beta)) << " <= |z| <= " << 1+lamda << endl;
cout << "las cotas son" << endl;
cout << "C.I.R.P = " << (1/(1+beta)) << " " << "C.S.R.P = " << 1+lamda << endl;
cout << "C.I.R.N = " << -(1+lamda) << " " << "C.S.R.N = " << -(1/(1+beta)) << endl;
//descartes (cambios de signo)
cout << "el numero de raices positivas de p(x) es menor o igual en un numero par a " << cambios_signo(polinomio) << endl;
cout << "el numero de raices negativas de p(x) es menor o igual en un numero par a " << cambios_signo(polinomio_negativo) << endl;
//hua
int c=1;
while((polinomio[c]*polinomio[c] > polinomio[c-1]*polinomio[c+1]) && (c<n+1)){
c++;
}
cout << "Para k = " << c << " se verifica que a(k)^2<=a(k-1)*a(k+1) por lo que p(x) tiene al menos un par de raíces complejas conjugadas" << endl;
system ("PAUSE");
return 0;
}