#include #include #include struct sommet { double x; double y; }; struct polygone { int ns; struct sommet* ts; }; void afficherSommet(struct sommet s) { printf("%6.2lf%6.2lf", s.x, s.y); } double calculerDistanceSommets(struct sommet s1, struct sommet s2) { return sqrt(pow(s1.x - s2.x, 2.0) + pow(s1.y - s2.y, 2.0)); } struct sommet creerSommet() { struct sommet s; s.x = (rand() % 101) / 100.0; s.y = (rand() % 101) / 100.0; return s; } double calculerPerimetrePolygone(struct polygone p) { double l = 0.0; for (int i = 0; i < p.ns - 1; i++) { l += calculerDistanceSommets(p.ts[i], p.ts[i + 1]); } l+= calculerDistanceSommets(p.ts[p.ns - 1], p.ts[0]); return l; } void afficherPolygone(struct polygone p) { printf("%d sommets\n", p.ns); for (int i = 0; i < p.ns; i++) { afficherSommet(p.ts[i]); printf("\n"); } } struct polygone creerPolygone(int n) { struct polygone p; p.ts = (struct sommet*) calloc(n, sizeof(struct sommet)); if (p.ts == NULL) { p.ns = 0; } else { p.ns = n; for (int i = 0; i < n; i++) { p.ts[i] = creerSommet(); } } return p; } void detruirePolygone(struct polygone pl) { if (pl.ts != NULL) { free(pl.ts); pl.ts = NULL; } } void main(void) { srand(2); printf("%zu %zu\n", sizeof(struct polygone), sizeof(struct sommet)); struct polygone pl = creerPolygone(5); printf("%zu\n", sizeof(pl)); printf("\n"); afficherPolygone(pl); printf("Perimetre : %lf\n", calculerPerimetrePolygone(pl)); detruirePolygone(pl); }