arcalc.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. /* god bless euclid */
  4. int gcd(int a, int b) {
  5. int t;
  6. while (b) {
  7. t = a;
  8. a = b;
  9. b = t % b;
  10. //printf("t %i a %i b %i\n", t, a, b);
  11. }
  12. return a;
  13. }
  14. void simplifyfraction(int *num, int *denom) {
  15. int n = *num;
  16. int d = *denom;
  17. /* check for div by 0 */
  18. if (d == 0) {
  19. fprintf(stderr, "division by 0, result undefined\n");
  20. exit(1);
  21. }
  22. /* get gcd */
  23. int comdiv = gcd(n, d);
  24. /* reduce */
  25. n = n / comdiv;
  26. d = d / comdiv;
  27. /*
  28. if (n == 1) {
  29. printf("simplified to %i\n", n);
  30. } else if(comdiv == 1) {
  31. printf("already at reduced state %i/%i\n", n, d);
  32. } else {
  33. printf("simplified to %i/%i\n", n, d);
  34. }
  35. */
  36. *num = n;
  37. *denom = d;
  38. }
  39. int main(int argc, char **argv) {
  40. if (argc < 3) {
  41. fprintf(stderr, "usage: arcalc width height\n");
  42. return 1;
  43. }
  44. int w, h;
  45. sscanf(argv[1], "%i", &w);
  46. sscanf(argv[2], "%i", &h);
  47. printf("width %i height %i\n", w, h);
  48. simplifyfraction(&w, &h);
  49. printf("aspect ratio is %ix%i\n", w, h);
  50. return 0;
  51. }