1. #include typedef struct { double real; double imag; } Complex; Complex somma (Complex a, Complex b) { Complex c = {a.real + b.real, a.imag + b.imag}; return c; } main(){ Complex a = {2, 2}; Complex b = {1, -5}; Complex c = somma(a, b); if (c.imag < 0) printf("c = %g%gi\n", c.real, c.imag); else printf("c = %g+%gi\n", c.real, c.imag); } =================== 2. #include typedef struct { int giorno, mese, anno; } Data; int ConfrontaDate (Data d1, Data d2) { if (d1.anno > d2.anno) return 1; if (d1.anno < d2.anno) return -1; if (d1.mese > d2.mese) return 1; if (d1.mese < d2.mese) return -1; if (d1.giorno > d2.giorno) return 1; if (d1.giorno < d2.giorno) return -1; return 0; } main(){ Data d1 = {11, 5, 2000}; Data d2 = {11, 5, 2000}; printf("%d\n", ConfrontaDate(d1,d2)); } ============== 3. #include #include typedef struct EL { double ascissa; double ordinata; struct EL *next; } Punto; typedef Punto *ListaDiPunti; ListaDiPunti crealista(int n){ double x, y; int i; ListaDiPunti aux,lista; if (n==0) return NULL; printf("ascissa: "); scanf("%lg",&x); printf("ordinata: "); scanf("%lg",&y); lista = malloc(sizeof(Punto)); lista->ascissa = x; lista->ordinata = y; aux=lista; i=1; while(i < n) { printf("ascissa: "); scanf("%lg",&x); printf("ordinata: "); scanf("%lg",&y); aux->next= malloc(sizeof(Punto)); aux =aux->next; aux->ascissa = x; aux->ordinata = y; i++; } aux->next=NULL; return lista; } void stampaListaRic(ListaDiPunti lis) { if (lis!= NULL) { printf("(%g,%g) ", lis->ascissa, lis->ordinata); stampaListaRic(lis->next); } else printf("//\n"); } void stampa(ListaDiPunti lis) { while (lis!= NULL) { printf("(%g,%g) ", lis->ascissa, lis->ordinata); lis = lis->next; } printf("//\n"); } void inserisciTesta (ListaDiPunti *lista) { ListaDiPunti aux; double x, y; printf("Inserisci un nuovo punto.\n"); printf("ascissa: "); scanf("%lg",&x); printf("ordinata: "); scanf("%lg",&y); aux = malloc(sizeof(Punto)); aux->ascissa = x; aux->ordinata = y; aux->next = *lista; *lista = aux; } void cancellaUltimo(ListaDiPunti *lista) { ListaDiPunti aux; if (*lista != NULL) { if ((*lista)->next == NULL) { free(*lista); *lista = NULL; } else { aux = *lista; while ((aux->next)->next != NULL) aux = aux->next; free(aux->next); aux->next = NULL; } } } main() { ListaDiPunti lista; int n; printf("Numero di punti: "); scanf("%d", &n); lista = crealista(n); inserisciTesta(&lista); stampaListaRic(lista); stampa(lista); cancellaUltimo(&lista); stampa(lista); } ================= 4. #include #include typedef struct EL { int elem; struct EL *next; } ElementoLista; typedef ElementoLista *ListaDiInteri; ListaDiInteri crealista(int n){ int num; int i; ListaDiInteri aux,lista; if(n == 0) return NULL; printf("Inserisci un intero: "); scanf("%d",&num); lista = malloc(sizeof(ElementoLista)); lista->elem = num; aux = lista; i=1; while(i < n) { printf("Inserisci un intero: "); scanf("%d",&num); aux->next = malloc(sizeof(ElementoLista)); aux = aux->next; aux->elem = num; i++; } aux->next=NULL; return lista; } void stampa(ListaDiInteri lis) { while (lis!= NULL) { printf("%d ", lis->elem); lis = lis->next; } printf("//\n"); } void eliminaSecondaOcc(ListaDiInteri *lista, int x) { ListaDiInteri prec; /* puntatore all'elemento precedente */ ListaDiInteri corr; /* puntatore all'elemento corrente */ int ctr = 0; if (*lista != NULL) { if ((*lista)->elem == x) ctr++; prec = *lista; corr = prec->next; while (corr != NULL && ctr < 2) { if (corr->elem == x) ctr++; if (ctr == 2) { prec->next = corr->next; free(corr); corr = prec->next; } else { prec = prec->next; /* avanzamento dei due puntatori */ corr = corr->next; } } } } main() { ListaDiInteri lista; int n; printf("Numero di elementi della lista: "); scanf("%d", &n); lista = crealista(n); stampa(lista); eliminaSecondaOcc(&lista, 2); stampa(lista); } ============== 5. #include #include typedef struct EL { int elem; struct EL *next; } ElementoLista; typedef ElementoLista *ListaDiInteri; ListaDiInteri crealista(int n){ int num; int i; ListaDiInteri aux,lista; if(n == 0) return NULL; printf("Inserisci un intero: "); scanf("%d",&num); lista = malloc(sizeof(ElementoLista)); lista->elem = num; aux = lista; i=1; while(i < n) { printf("Inserisci un intero: "); scanf("%d",&num); aux->next = malloc(sizeof(ElementoLista)); aux = aux->next; aux->elem = num; i++; } aux->next=NULL; return lista; } void stampa(ListaDiInteri lis) { while (lis!= NULL) { printf("%d ", lis->elem); lis = lis->next; } printf("//\n"); } /* versione iterativa */ ListaDiInteri massimo(ListaDiInteri lista) { if (lista == NULL) return NULL; ListaDiInteri max = lista; while(lista->next != NULL) { lista = lista->next; if (lista->elem > max->elem) max = lista; } return max; } main() { ListaDiInteri lista, max; int n; printf("Numero di elementi della lista: "); scanf("%d", &n); lista = crealista(n); stampa(lista); max = massimo(lista); if (max != NULL) printf("%d\n",max->elem); } =================== 6. #include #include typedef struct EL { int elem; struct EL *next; } ElementoLista; typedef ElementoLista *ListaDiInteri; ListaDiInteri crealista(int n){ int num; int i; ListaDiInteri aux,lista; if(n == 0) return NULL; printf("Inserisci un intero: "); scanf("%d",&num); lista = malloc(sizeof(ElementoLista)); lista->elem = num; aux = lista; i=1; while(i < n) { printf("Inserisci un intero: "); scanf("%d",&num); aux->next = malloc(sizeof(ElementoLista)); aux = aux->next; aux->elem = num; i++; } aux->next=NULL; return lista; } void stampa(ListaDiInteri lis) { while (lis!= NULL) { printf("%d ", lis->elem); lis = lis->next; } printf("//\n"); } /* ListaDiInteri concatena(ListaDiInteri *lista1, ListaDiInteri *lista2) { ListaDiInteri aux; if (*lista1 == NULL) return *lista2; aux = *lista1; while (aux->next != NULL) aux = aux->next; aux->next = *lista2; return *lista1; } */ ListaDiInteri concatena(ListaDiInteri lista1, ListaDiInteri lista2) { ListaDiInteri lista; if (lista1 == NULL) return lista2; lista = lista1; while (lista1->next != NULL) lista1 = lista1->next; lista1->next = lista2; return lista; } main() { ListaDiInteri lista1, lista2, lista3; int n; printf("Numero di elementi della prima lista: "); scanf("%d", &n); lista1 = crealista(n); printf("Numero di elementi della seconda lista: "); scanf("%d", &n); lista2 = crealista(n); stampa(lista1); stampa(lista2); lista3 = concatena(lista1, lista2); stampa(lista3); }