Salve!
le specifiche del mio esercizio sono:
Scrivere una funzione RICORSIVA in linguaggio C in grado di ricevere un vettore di STRUCT di dimensione indefinita. Ogni elemento del vettore contiene una variabile struct con un campo di tipo char, uno di tipo unsigned e uno di tipo long.
Se il campo di tipo char contiene il carattere ’p’ il valore nel campo di tipo unsigned
va considerato positivo; se contiene il carattere ’n’, il valore va considerato negativo.
Il carattere ’t’ rappresenta il valore sentinella, che identifica la fine del vettore.
La funzione deve salvare nel campo di tipo long dell’elemento i il valore della somma parziale
dei campi di tipo unsigned dei primi i + 1 elementi (considerando il segno definito dal
carattere ’p’ o ’n’), fino al raggiungimento dell’elemento contenente il carattere terminatore
’t’.
La funzione main del programma deve quindi popolare i campi di tipo char e unsigned
degli elementi del vettore di struct (che potete dichiarare con dimensione 100), leggendo
la sequenza in input, deve richiamare la funzione ed infine stampare (sempre nel main),
per ogni elemento del vettore, il valore numerico considerando il segno del campo di tipo
unsigned e il valore della somma parziale.
La sequenza di input `e della forma carattere (’n’ o ’p’), seguito da un intero positivo maggiore di 0 (il tutto ripetuto 0 o più volte), ed infine il carattere ’t’.
Esempio: Se l’input `e
p 10 n 10 p 4 p 3 n 5 t
Il programma deve stampare
10 10 -10 0 4 4 3 7 -5 2
e il codice che ho scritto è:
#include<stdio.h>
#define SIZE 100
typedef struct parole{ //struttura
char segno;
unsigned valore;
long sommetta;
}Parole;
void somma_pref(Parole vettorino[], int i); //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("%u", &vettorino[i].valore); //prendo il valore
}
somma_pref(vettorino, 0); //FUNZIONE
for(i=0; vettorino[i].segno=='t'; i++); //stampa
{
printf("%u %ld", vettorino[i].valore, vettorino[i].sommetta);
}
return 0;
}
void somma_pref(Parole vettorino[], int i)
{
if(vettorino[i].segno=='t') //caso base per uscire dalla ricorsione
{
return;
}
if(vettorino[i].segno=='p') //caso p, positività del valore
{
vettorino[i].sommetta+=vettorino[i].valore;
somma_pref(vettorino, i+1); //vado avanti nella ricorsione
}
else if(vettorino[i].segno=='n') //caso n, negatività del valore
{
vettorino[i].sommetta-=vettorino[i].valore;
somma_pref(vettorino, i+1); //vado avanti nella ricorsione
}
}
(scusate i nomi fantasiosi ma lo faccio per divertirmi con gli amici)
cmq il problema è che il programma compila ma la ricorsione non va...come risultato ( anche se giusto) mi da solo il primo valore con somma parziale!!! ( a me servirebbero tutti :master: )
non so, potrebbero anche esserci altri errori che io non vedo o non conosco!
grazie![]()