Solução em C do Problema 4

#include <stdio.h>

#define PI 3.14

/* Item (a) */

float arctan(float x) {

  int k;
  float termo, soma, eps;
  
  eps = 0.0001;
  termo = x;
  soma = x;
  k = 1;
  while (termo*termo > eps*eps){
    k = k+2;
    termo = -termo*x*x*(k-2)/k;
    soma = soma + termo;
  }

  return soma;
}

/* Item (b) */

/* Funcao extra: transforma angulo de radianos para graus */

float graus(float x) {

  return 180*x/PI;
}


float angulo(float x, float y) {

  float resp;

  if (x == 0 && y == 0) /* ERRO??? */
    return -1;

  if (x >= y)
    if (x != 0)
      resp =  graus(arctan(y/x));
    else
      resp = 90;
  else
    if (y != 0)
      resp = graus(PI/2 - arctan(x/y));
    else
      resp = 0;

  return resp;
}

int main() {
  
  int i, n;
  float x, y, xmin, ymin, angmin, ang;

  printf("Digite quantidade de pontos: ");
  scanf("%d", &n);

  angmin = 900;
  xmin = 0;
  ymin = 0;
  
  for (i = 0; i < n; i++){
    printf("Digite as coordenados de um ponto: ");
    scanf("%f %f", &x, &y);
    ang = angulo(x,y);
    if (ang == -1)
      printf("Ponto na origem, sera' desconsiderado\n");
    else
      if (ang < angmin){
	angmin = ang;
	xmin = x;
	ymin = y;
      }
  }

  printf("O ponto de menor angulo: (%f,%f)\n", xmin, ymin);
  printf("Menor angulo: %f graus\n", angmin);
    
  return 0;
}


Lista de Problemas

História da Computação | Listas de Exercícios | Problemas Resolvidos | macmulti@ime.usp.br