/* soluzione iterativa della profondità del pozzo dal tempo di discesa più di ritorno del suono Nota: in un problema fisico è inutile esagerare con il numero di cifre!! */ #include #include int main() { const double g = 9.8; // m/s^2 const double vs = 340; // m/s const double tm = 3; // s tempo misurato const double epsilon = 1e-11; /* s (precisione assurda dal punto di vista fisico, ma solo per testare la velocità dell'algoritmo) */ double tc; // tempo 'vero' di caduta double b, c, s, s0, s1, s2, sa; int i; tc = tm; i=0; printf("i = %2d, s = %.12f\n", i, g*tc*tc/2.); do { i++; s0 = g*tc*tc/2.; tc = tm - s0 / vs; s = g*tc*tc/2.; printf("i = %2d, s = %.12f\n", i, s); } while (fabs(s-s0) > epsilon); printf("\nSoluzione equazioni (s): "); b = - 2. * ( tm *vs + vs*vs/g); c = pow(tm*vs, 2); s1 = -b/2 - sqrt( pow(b/2, 2) - c ); s2 = -b/2 + sqrt( pow(b/2, 2) - c); printf("%.12f m; %.f m (soluzione spuria)\n", s1, s2); return 0; }