aaaaaa123456789 icon

JV programming challenges, week 6, challenge 2

aaaaaa123456789 | PRO | 12/22/13 09:29:21 PM UTC | 0 ⭐ | 449 👁️ | Never ⏰ | []
C |

1.99 KB

|

None

|

0 👍

/

0 👎

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "common.h"
 
void get_coords(const char *, long double *, long double *);
long double get_value(const char *);
 
#define pi 3.1415926535897932384626433832795029L
 
inline long double square (long double number) {
  return number * number;
}
 
int main (void) {
  long double x1, x2, y1, y2;
  get_coords("First circle:  ", &x1, &y1);
  get_coords("Second circle: ", &x2, &y2);
  long double scale = get_value("Radius:        ");
  long double distance = sqrtl(square(x2 - x1) + square(y2 - y1));
  distance /= scale;
  if (distance >= 2.0L) {
    printf("no overlap\n");
    return 0;
  }
  long double overlap = pi - distance * sqrtl(1.0L - 0.25L * square(distance)) - 2.0L * asinl(0.5L * distance);
  long double area = (2.0L * pi - overlap) * square(scale);
  printf("Area: %.10Lg\n", area);
  return 0;
}
  
void get_coords (const char * prompt, long double * x, long double * y) {
  char * line;
  char ** tokens;
  while (1) {
    printf("%s", prompt);
    line = get_line(NULL);
    tokens = tokenize_string(line, " ", 1);
    free(line);
    if (count_lines(tokens) != 2) {
      free(tokens);
      printf("Please enter two coordinates.\n");
      continue;
    }
    *x = strtold(*tokens, &line);
    if (*line) {
      free(tokens);
      printf("Please enter a valid value for the X coordinate.\n");
      continue;
    }
    *y = strtold(tokens[1], &line);
    if (*line) {
      free(tokens);
      printf("Please enter a valid value for the Y coordinate.\n");
      continue;
    }
    free(tokens);
    return;
  }
}
 
long double get_value (const char * prompt) {
  char * line;
  char * errp;
  long double result;
  while (1) {
    printf("%s", prompt);
    line = get_line(NULL);
    result = strtold(line, &errp);
    if (*errp || (result <= 0.0L)) {
      free(line);
      printf("Please enter a valid value.\n");
      continue;
    }
    free(line);
    return result;
  }
}

Comments