Como ya te ha comentado @fzp, esa no es la manera correcta de hacer un filtro. La forma estándar es:
const int MIN_NUM_TERMINOS = 0; // Constante para el numero minimo de terminos permitido
const int MAX_NUM_TERMINOS = 15; // Constante para el numero maximo de terminos permitido
int main() {
int terminos;
do {
cout << "Introduce el numero de terminos [" << MIN_NUM_TERMINOS << " - " << MAX_NUM_TERMINOS << "]: ";
cin >> terminos;
} while(terminos < MIN_NUM_TERMINOS || terminos > MAX_NUM_TERMINOS);
// Cuando llegues a esta linea ya tendras un valor dentro del rango permitido
}
Breve paréntesis: No es buena práctica crear un if() vacío para incluir código en la parte del else.
// Esto:
if(numero > 0 && numero < 15);
else {
...
}
// Se puede sustituir por esto:
if(numero <= 0 || numero >= 15) {
...
}
Fin del paréntesis.
Además tienes otro problema importante y es que tienes variables sin inicializar. Estas variables dependiendo del ámbito en el que estén (local/global) tendrán un valor nulo (0 en caso de números) o basura (cualquier número). Siempre tienes que controlar que no pase esto en tus programas.
Teniendo en cuenta la sumatoria que quieres calcular:
deberías entender lo que estás haciendo y no copiar la fórmula lo más parecida posible...
El primer elemento de la serie sería:
El segundo elemento de la serie sería:
Viendo los primeros elementos de la serie puedes ver la relación que sigue. Por ejemplo:
- La primera parte únicamente cambia el signo del elemento. Cuando k es par, el signo es positivo y cuando k es impar el signo es negativo.
- La segunda parte tiene un factorial que puede resultar costoso de calcular. Sin embargo, si en la primera iteración tienes calculado 2!, basta multiplicar por 3 y por 4 para tener 4! y así sucesivamente sin tener que repetir cálculos.
- La tercera parte tiene x^4 en el primer elemento y x^8 en el segundo. En el tercero sería x^12, o lo que es lo mismo en cada iteración se multiplica por x^4. x^4 * x^4 = x^(4+4) = x^8 (propiedades de las potencias)
Sabiendo todo esto:
int main() {
// Inicializamos el resultado a 0 para poder acumular correctamente
double resultado = 0;
// Las variables n y x no hace falta inicializarlas porque se van a pedir por teclado
int n;
double x;
// Inicializamos las variables para k = 1
int signo = -1; // (-1)^1 = -1
double factorial = 2; // (2 * 1)! = 2! = 2
double elemento3 = pow(x, 4); // x^(4 * 1) = x^4. AVISO: Primero hay que pedir x
for(int i = 1; i <= n; ++i) {
// Sumamos el elemento i
resultado += signo * 1/factorial * elemento3;
// Actualizamos cada uno de los elementos
signo *= -1; // Asi cambiamos de signo en cada iteracion
factorial = ...;
elemento3 = ...;
}
}