Originariamente inviato da Xaratroom
codice:
#include <stdio.h>

#define SIZE 100

typedef struct									//struttura
{
	char segno;
	int valore;
	long int sommetta;
} Parole;

void somma_pref (Parole vettorino[], int i, long int somma_precedente);		//prototipo della funzione

int main()
{
	Parole vettorino[SIZE] = {0};						//dichiaro il vettore di struct
	int i;
	
	for(i = 0; i < SIZE; i++)
		{
		scanf (" %c", &vettorino[i].segno);				//prendo il segno del valore
		if(vettorino[i].segno == 't')					// se è t mi fermo
			break;
		scanf(" %d", &vettorino[i].valore);				//prendo il valore
		}
		
	somma_pref(vettorino, 0, 0);						//FUNZIONE
	
	i = 0;
	while (vettorino[i].segno != 't')					//stampa
		{
		printf("%d %ld ", vettorino[i].valore, vettorino[i].sommetta);
		i++;
		}
	
	return 0;
}

void somma_pref (Parole vettorino[], int i, long int somma_precedente)
{
	if(vettorino[i].segno=='t')						//caso base per uscire dalla ricorsione
		return;
	
	if(vettorino[i].segno == 'n')						//caso n, negatività del valore
		vettorino[i].valore *= -1;					//il valore deve diventare negativo
		
	vettorino[i].sommetta = vettorino[i].valore + somma_precedente;
	somma_pref(vettorino, i+1, vettorino[i].sommetta);
}
Controlla se è corretto, rispetto alle consegne ...
E poi dimmi che cosa avevi sbagliato, confrontando i due programmi.

La mia soluzione prevede un campo di tipo int e non usigned int ...
Di conseguenza, se non va bene, devi modificarlo
Ciao....la tua soluzione funziona, ma secondo me non va bene per il semplice motivo che il testo dell'esercizio dice che il campo valore deve essere unsigned e che quindi deve contenere un valore sempre >= 0, mentre tu usi un int e nella tua funzione lo fai anche diventare negativo moltiplicandolo per -1, dove necessario. Secondo me poi non serve nemmeno il terzo parametro che hai aggiunto alla funzione, perché è comunque sempre raggiungibile cosi:
codice:
vettorino[i-1].sommetta
Bisogna solo stare attenti la prima volta che viene richiamata la funzione, cioè quando il parametro i = 0.
Secondo me una funzione così dovrebbe andare:

codice:
void somma_pref(Parole vettorino[], int i)
{
     if(vettorino[i].segno == 't')
         return;
     if(i == 0)
         vettorino[i].sommetta = (vettorino[i].segno == 'p') ? vettorino[i].valore : -vettorino[i].valore;
     else
         vettorino[i].sommetta = vettorino[i-1].sommetta + ((vettorino[i].segno == 'p') ? vettorino[i].valore : -vettorino[i].valore);
     somma_pref(vettorino, i+1);
}