Hola, tengo este programa de un péndulo que no da el resultado que debería dar, para Longitud = 10m y ángulo = 0.01 rad Debería dar un periodo de 6,34s. Pero da 0,05segundos. Creo que sale del bucle antes de tiempo (hace 253 iteraciones y debería dar [creo] muchas más). Dejo el programar a ver si podéis encontrar el fallo:
Un saludo y gracias de antemano.
Código:
#include <iostream>#include <math.h>
#define g 9.8
using namespace std;
int main()
{
double periodo, longitud, angulo1, tiempo, vangular1, aangular1, vangular2, intervalo, cociente;
//aangular y vangular se corresponden con la aceleración y la velocidad angular respectivamente.
cout << "Introduzca la longitud del pendulo (en metros): ";
cin >> longitud;
cout << "Introduzca el angulo inicial (en radianes): ";
cin >> angulo1;
vangular1 = 0;
cociente = -(g/longitud);
aangular1 = cociente*sin(angulo1);
intervalo = 1.0e-4*(sqrt(longitud/g));
tiempo = 0;
vangular2 = 0;
//g está definida arriba
do{
vangular1 = vangular2;
vangular2 = vangular1 + aangular1*tiempo;
angulo1 = angulo1 + vangular1*tiempo;
aangular1 = cociente*sin(angulo1);
tiempo = tiempo + intervalo;
}while((vangular1 >= 0 && vangular2 > 0) || (vangular1 <= 0 && vangular2 < 0) || vangular2 == 0);
periodo = 2*tiempo - intervalo;
cout << "El periodo es: " << periodo << " +- " << intervalo <<endl;
}




Comentario