You are on page 1of 2

/* structuri alternative: figuri geometrice */ #include <stdio.h> #include <math.h> #include <string.h> float const pi = 3.

141592; typedef enum {t_punct, t_segment, t_cerc} t_figura; typedef struct { int x; int y; } punct; typedef struct { punct A; punct B; } segment; typedef struct { punct centru; int raza; } cerc; typedef struct { t_figura t_fig; union { punct pct; segment sgmnt; cerc crc; } fig; } figura; float perim(figura f) { if (f.t_fig == t_punct) return 0; if (f.t_fig == t_segment) return sqrt(pow(f.fig.sgmnt.A.x-f.fig.sgmnt.B.x,2)+ pow(f.fig.sgmnt.A.y-f.fig.sgmnt.B.y,2)); if (f.t_fig ==t_cerc) return 2.0 * pi * (float)f.fig.crc.raza; } void main(void) { figura f; float pf; printf("\n\n\nExemplul I_51.c (structuri alternative)\n\n\n"); printf("Tip figura(0-punct, 1-segment, 2-cerc): "); scanf("%d", &f.t_fig); if (f.t_fig == t_punct) { printf("Coordonate punct (numere intregi): "); scanf("%d%d",&f.fig.pct.x, &f.fig.pct.y); } else if (f.t_fig == t_segment) { printf("Coordonatele primului punct (numere intregi): "); scanf("%d%d",&f.fig.sgmnt.A.x, &f.fig.sgmnt.A.y);

printf("Coordonatele celui de-al doilea punct (numere intregi): "); scanf("%d%d",&f.fig.sgmnt.B.x, &f.fig.sgmnt.B.y); } else if (f.t_fig == t_cerc) { printf("Coordonatele centrului (numere intregi): "); scanf("%d%d",&f.fig.crc.centru.x, &f.fig.crc.centru.y); printf("Raza (numar intreg): "); scanf("%d",&f.fig.crc.raza); } pf = perim(f); printf("Figura are perimetrul %f.", pf); printf("\nExecutie program terminata.\n"); }

You might also like