File: Stare vježbe/vjezbe13/81__union.c

  1. /*
  2.   81__union.c
  3.   -----
  4.   Program demonstrira rad s unijama (union-ima).
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <math.h>
  9.  
  10. typedef union {
  11. double fexp;
  12. int nexp;
  13. } nvals;
  14.  
  15. typedef struct {
  16. double x;
  17. char flag;
  18. nvals exp;
  19. } values;
  20.  
  21. double power(values a);
  22.  
  23. int main() {
  24. values a;
  25. int i;
  26. double n,y;
  27.  
  28. printf("Unesite vrijednost za x: ");
  29. scanf("%lf", &a.x);
  30. printf("Unesite vrijednost za n: ");
  31. scanf("%lf", &n);
  32. i=(int)n;
  33. a.flag=(i == n) ? 'i' :'f';
  34. if (a.flag == 'i')
  35. a.exp.nexp = i;
  36. else
  37. a.exp.fexp = n;
  38.  
  39. if (a.flag == 'f' && a.x <= 0.0)
  40. printf("Greska pri unosu!\n");
  41. else {
  42. y=power(a);
  43. printf("y= %.4f\n",y);
  44. }
  45.  
  46. return 0;
  47. }
  48.  
  49. double power(values a) {
  50. int i;
  51. double y=a.x;
  52.  
  53. if (a.flag == 'i')
  54. if (a.exp.nexp == 0)
  55. y=1.0;
  56. else {
  57. for (i=1;i<abs(a.exp.nexp); ++i)
  58. y *=a.x;
  59. if (a.exp.nexp < 0)
  60. y=1./y;
  61. }
  62. else
  63. y=exp(a.exp.fexp*log(a.x));
  64.  
  65. return y;
  66. }
  67.