![Mi metto a piangere... [cry]](http://www.megalab.it/forum/images/smilies/crying.gif)
ho un problema con questo esercizio:
Esercizio 2 [Somma prefissi]. 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 dalcarattere ’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 ` 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
ATTENZIONE, per leggere la sequenza in input, utilizzate la funzione getchar per la lettura
dei caratteri, e la funzione scanf per la lettura dei valori interi (che potete assumere essere
solamente positivi).
io ho scritto un codice, che apparentemente sembra funzionare ma viene fuori un output strano, piu' lungo rispetto a quello che mi aspetterei
questo e' il codice
- Codice: Seleziona tutto
#include<stdio.h>
typedef struct {
char c;
unsigned int x;
long int somma;
}struttura;
void somma(struttura v[], int i){
if(v[i].c=='t')
return;
if(v[i].c=='n'){
v[i].somma-=v[i].x;
}
else{
v[i].somma+= v[i].x;
}
v[i+1].somma=v[i].somma; //passa il valore di somma alla struttura successiva
somma(v, i+1);
return;
}
int main(){
struttura v[100];
int i=0;
do{
v[i].c=getchar();
v[i].somma=0;
if(v[i].c!='t')
scanf("%u", &v[i].x);
i++;
}while(v[i-1].c!='t');
somma(v, 0);
for(i=0;v[i].c!='t';i++){
if(v[i].c=='n')
printf("-%u\n%ld\n", v[i].x, v[i].somma);
else
printf("%u\n%ld\n", v[i].x, v[i].somma);
}
}
questo e' l'output:
ci sono alcuni valori che dovrebbero uscire (10 10 -10 0 4 4 ) ma gli altri da dove escono??
aiutatemi vi prego
grazie