/* =============================================================== */ /* CORSO DI PROGRAMMAZIONE IN C (C89) */ /* Claudio Fornaro */ /* Ver. 3 - 2021 */ /* 16-Struct_Soluzioni.txt */ /* =============================================================== */ /* =============================================================== */ /* 1 */ /* =============================================================== */ #include #include #include #define NUMPUNTI 4 struct punto { float x; float y; }; int main() { struct punto punti[NUMPUNTI]; int i, j; float perimetro; float distmin, d; for (i=0; i < NUMPUNTI; i++) { printf("Punto %d, coordinate x e y (separate da spazio): ", i); scanf("%f%f", &punti[i].x, &punti[i].y); } /* calcolo lunghezza del perimetro */ perimetro = 0.0; for (i=0; i #include #include /* dichiarata esternamente perche' sia visibile a tutte le funzioni */ struct poligono { int nlati; double lato; }; struct poligono creapoli(void); double areapoli(struct poligono poli); double perimpoli(struct poligono poli); void doppiopoli(struct poligono *ppoli); int main() { struct poligono poli1, poli2; poli1 = creapoli(); printf("Il poligono 1 ha perimetro: %f e area %f\n", perimpoli(poli1), areapoli(poli1)); poli2=poli1; doppiopoli(&poli2); printf("Il poligono 2 ha perimetro: %f e area %f\n", perimpoli(poli2), areapoli(poli2)); return EXIT_SUCCESS; } struct poligono creapoli(void) { struct poligono po; printf("Numero lati poligono: "); scanf("%d", &po.nlati); printf("Lunghezza lati: "); scanf("%lf", &po.lato); return po; } double areapoli(struct poligono poli) { const double PI = 4.0 * atan(1.0); /* pi greco */ return (poli.nlati*poli.lato*poli.lato)/(4.0*tan(PI/poli.nlati)); } double perimpoli(struct poligono poli) { return poli.lato * poli.nlati; } void doppiopoli(struct poligono *ppoli) { ppoli->lato *= 2; /* equivalentemente: (*ppoli).lato *=2; */ } /* ========================================================================== */ /* 3 */ /* ========================================================================== */ #include #include #include /* definita esternamente perche' sia visibile a tutte le funzioni */ typedef struct poligono /* il tag poligono puo' essere omesso */ { int nlati; double lato; } Poligono; Poligono creapoli(void); double areapoli(Poligono poli); double perimpoli(Poligono poli); void doppiopoli(Poligono *ppoli); int main() { Poligono poli1, poli2; poli1 = creapoli(); printf("Il poligono 1 ha perimetro: %f e area %f\n", perimpoli(poli1), areapoli(poli1)); poli2=poli1; doppiopoli(&poli2); printf("Il poligono 2 ha perimetro: %f e area %f\n", perimpoli(poli2), areapoli(poli2)); return EXIT_SUCCESS; } Poligono creapoli(void) { Poligono po; printf("Numero lati poligono: "); scanf("%d", &po.nlati); printf("Lunghezza lati: "); scanf("%lf", &po.lato); return po; } double areapoli(Poligono poli) { const double PI = 4.0 * atan(1.0); /* pi greco */ return (poli.nlati*poli.lato*poli.lato)/(4.0*tan(PI/poli.nlati)); } double perimpoli(Poligono poli) { return poli.lato * poli.nlati; } void doppiopoli(Poligono *ppoli) { ppoli->lato *= 2; /* equivalentemente: (*ppoli).lato *=2; */ } /* =============================================================== */ /* 4 */ /* =============================================================== */ #include #include #include #define MAXPERSONE 100 #define LUNGNOME 32 /* definizione esterna perche' sia visibile anche nel prototipo */ struct persona { char nome[LUNGNOME]; char cognome[LUNGNOME]; int eta; int salario; }; void ordina(struct persona pe[], int n); int main() { struct persona pers, persone[MAXPERSONE] = {"","",0,0}; FILE *fp; char file[FILENAME_MAX]; int i; int numPersone; /* numero di persone lette */ printf("Nome del file da leggere: "); gets(file); if ((fp=fopen(file,"r")) == NULL) { fprintf(stderr, "Non posso aprire il file: %s\n", file); return EXIT_FAILURE; } i=0; while (i