L'esame è il 15...può andar bene questa soluzione:
Graziecodice:/* La funzione Agg(), modifica i valori del campo val degli elementi della lista L in modo tale che il valore del campo val di un elemento m sia pari alla somma dei (vecchi) valori dei campi val dell'elemento m e degli elementi successivi che sono interi dispari. Esempio: se la sequenza dei valori dei campi val della lista era:2,5,8,3,2,4 allora l funzione la modifica così: 10,8,11,3,2,4. */ #include <stdio.h> #include <stdlib.h> typedef struct Elem{ long val; struct Elem *next; } Elem, *List; void Agg(List L){ /* Dichiaro il puntatore al nodo corrente e lo setto al primo nodo */ List corrente = L; while(corrente != NULL){ // Finchè non raggiunge la fine della lista L->val += Som(L->next); L = L->next; // Passa al prossimo nodo } } /* La funzione Som() riceve l'indirizzo del nodo successivo al nodo corrente e calcola la somma di tutti gli elementi aventi campo val dispari per poi restituire il risultato alla funzione Agg() */ long Som(List L){ long somma = 0; if(L == 0) return 0; // Se non ci sono altri elementi la somma è 0 else{ while(L->next != NULL){ if(L->val%2==1) // Se il campo val del nodo puntato da L è dispari somma += L->val; L = L->next; // Passa al prossimo nodo } return somma; // Ritorna ad Agg il valore della somma } }
Andrea

