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);
}