L'esame è il 15...può andar bene questa soluzione:
codice:
/* 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
}
}
Grazie
Andrea