/* 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);
}
}