Fate un programma in C che prende in input un numero non specificato di punti del piano cartesiano.
Presi questi punti, ad esempio A,B,C e D. Calcola il perimetro del poligono ABCD.
Ad esempio potresti inserire questi sei punti. E voler calcolare il perimetro.
Il programma deve prendere in input:
un numero di punti imprecisato
calcolare la distanza tra questi punti
sommarle per trovare il perimetro
Buon Lavoro: qui sotto c’è la soluzione.
soluzione
#include<stdio.h>#include<stdlib.h>#include<math.h>struct Punto { float x; float y;};typedef struct Punto punto;float distanza_tra_due_punti(punto a, punto b);float perimetro(punto ** lista_di_punti,int dimensione_lista);void stampa_punto(punto p,char * nome_del_punto);void stampa_lista_di_punti(punto ** lista_di_punti,int dimensione);punto ** append(punto ** lista_di_punti,int numero_punti,punto * p);punto * alloca_punto(float x, float y);int main(){ float x; float y; punto *p; punto ** lista_di_punti=malloc(sizeof(punto *)); if(lista_di_punti==NULL){return 0;} int numero_punti=0; while(1){ //chiedere all'utente le coordinate printf("inserire la x del punto: "); if(scanf("%f",&x)!=1){break;} //alloca il punto p=alloca_punto(x,y); numero_punti++; //aggiungi il punto alla lista dei punti lista_di_punti = append(lista_di_punti,numero_punti,p); //stampa la lista dei punti stampa_lista_di_punti(lista_di_punti,numero_punti); } //stampo la lista dei punti per verificare che siano tutti stati inseriti correttamente stampa_lista_di_punti(lista_di_punti,numero_punti); //stampo il perimetro del poligono printf("il perimetro del poligono tracciato è: %f\n",perimetro(lista_di_punti,numero_punti)); //libero la lista di punti una volta finito le operazioni free(lista_di_punti);}float distanza_tra_due_punti(punto a, punto b){ return sqrt(pow((a.x-b.x),2)+pow((a.y-b.y),2));}float perimetro(punto ** lista_di_punti,int dimensione_lista){ float perimetro=0; int j=0; //per ogni coppia di punti in sequenza for(int i=0;i<dimensione_lista-1;i++){ j=i+1; //printf("la distanza tra il punto %d ed il punto %d è:%f\n ",i,j,distanza_tra_due_punti(*lista_di_punti[i],*lista_di_punti[j])); perimetro+=distanza_tra_due_punti(*lista_di_punti[i],*lista_di_punti[j]); } //printf("la distanza tra il punto %d ed il punto 0 è:%f\n ",j,distanza_tra_due_punti(*lista_di_punti[j],*lista_di_punti[0])); perimetro+= distanza_tra_due_punti(*lista_di_punti[j],*lista_di_punti[0]); return perimetro;}punto ** append(punto ** lista_di_punti,int numero_punti,punto * p){ lista_di_punti = realloc(lista_di_punti,numero_punti*sizeof(punto *) ); lista_di_punti[numero_punti-1]=p; return lista_di_punti;}void stampa_lista_di_punti(punto ** lista_di_punti,int dimensione){ printf("lista di punti: [\n"); for(int i=0;i<dimensione;i++){ stampa_punto(*lista_di_punti[i],""); } printf("]\n");}void stampa_punto(punto p,char * nome_del_punto){ printf("%s(%f,%f)\n",nome_del_punto,p.x,p.y);}punto * alloca_punto(float x, float y){ punto * p; p=malloc(sizeof(punto)); p->x=x; p->y=y; return p;}
Esercizio 2: Parole crociate
Scrivi un programma in C che prende in input una matrice di lettere.