/* pr3_4.c pouzitie unie a pristup k jej zlozkam */
/* program bol kompilovany pod Borland C v3.0*/

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

typedef enum {NIC, GULA, VALEC, KOCKA, KVADER} T;

struct kvader{
   double dlzka;
   double sirka;
   double vyska;
   };
struct valec{
   double polomer;
   double vyska;
   };
union teleso{
   double rozmer;
   struct kvader a;
   struct valec b;
   };
union teleso t, *pt=&t;
T typ;
double objem;
char c;

void vstup(void);
void vypocet(void);

void main(void)
{
  do
  {
    clrscr();
    puts("Vypocet objemu telesa");
    vstup();
    vypocet();
    printf("Pokracovanie (A/N) :");
    c = toupper(getche());
  } while(c == 'A');
  return 0;
}

void vstup(void)
{
  printf("gula...0 kocka...1 kvader...2 valec...3 ");
  printf("\nteleso: ");
  c=getche();
  switch (c)
  {
  case '0' :
      printf("\npolomer gule : ");
      scanf("%lf",&(t.rozmer));
      typ = GULA;
      break;
  case '1' :
      printf("\nstrana kocky : ");
      scanf("%lf",&(pt->rozmer));
      typ = KOCKA;
      break;
  case '2' :
      printf("\ndlzka kvadra : ");
      scanf("%lf",&(t.a.dlzka));
      printf("sirka kvadra : ");
      scanf("%lf",&(t.a.sirka));
      printf("vyska kvadra : ");
      scanf("%lf",&(t.a.vyska));
      typ = KVADER;
      break;
  case '3' :
      printf("\npolomer valca : ");
      scanf("%lf",&(pt->b.polomer));
      printf("2vyska valca : ");
      scanf("%lf",&(t.b.vyska));
      typ = VALEC;
      break;
  default :
      printf(" Nezname teleso \a\n");
      typ = NIC;
      break;
  }
}

void vypocet(void)
{
  if (typ == GULA)
  {
    objem = 4./3*M_PI*pow(t.rozmer,3);
    printf("Objem gule: %10.2f \n",objem);
  }
  else if (typ == KOCKA)
  {
    objem = pow(t.rozmer,3);
    printf("Objem kocky: %10.2f \n",objem);
  }
  else if (typ == KVADER)
  {
    objem = t.a.dlzka*t.a.sirka*t.a.vyska;
    printf("Objem kvadra: %10.2f \n",objem);
  }
  else if (typ == VALEC)
  {
    objem = M_PI*pow(t.b.polomer,2)*t.b.vyska;
    printf("Objem valca: %10.2f \n",objem);
  }
}