Giro de una barra extensible (II)

De Ejercicios


Contenido

Enunciado

GIRO DE UNA BARRA EXTENSIBLE

Con el mismo programa principal del programa barra.c sustituye la función atan2a() por la función atan2b(), también programada por ti, ¡cómo no!, que devuelva un ángulo comprendido entre (0, 2π) radianes.

Soluciones

Programa en C por Angel

Solución comentada del Ejercicio:

/* fichero barra2.c */
#include <stdio.h>
#include <math.h>
#define PI 3.141592654
double calculaLongitud(double, double);
double atan2b(double, double);
void main(void) {
  FILE *fi;
  double x, y;
  int i;
  double radianes;
  double grados;
  double longitud;
  fi=fopen("datos.d", "r");
  for (i=1; i<=10; i++) {
     fscanf(fi, "%lf", &x);
     fscanf(fi, "%lf", &y);
     longitud=calculaLongitud(x,y);
     radianes=atan2b(x,y);
     grados=radianes*180.0/PI;
     printf("En el instante %d la barra tiene una longitud de %lf\n", i, longitud);
     printf("y forma un angulo de %lf radianes o %lf grados con la horizontal.\n", radianes, grados);
     getchar();
  }
  fclose(fi);
}
double calculaLongitud(double x, double y) {
  double resul;
  resul=sqrt(x*x+y*y);
  return(resul);
}
double atan2b(double x, double y) {
  double resul, aux;
  if (x==0.0)
     if (y>0.0)
         resul=PI/2;
       else
         resul=3*PI/2;
   else
      aux=atan(y/x);
  if (x<0.0)
        resul=aux+PI;
     else if (x>0.0)
             if (y<0.0)
                   resul=2*PI+aux;
                 else
                   resul=aux;
  return (resul);
}

Comentario

El programa es idéntico al barra.c, con la salvedad del cálculo de la tangente que se hace de forma similar al programa anterior.

Tipos de soluciones