Pagina 1 di 1

Aiuto esercizio in c (di nuovo =) )

MessaggioInviato: ven dic 19, 2008 11:54 am
da jack_the _best
ciao a tutti, mi trovo ancora a dovervi chiedere aiuto [cry]
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:
output2.jpg


ci sono alcuni valori che dovrebbero uscire (10 10 -10 0 4 4 ) ma gli altri da dove escono??

aiutatemi vi prego

grazie

Re: Aiuto esercizio in c (di nuovo =) )

MessaggioInviato: mar dic 30, 2008 2:58 pm
da Antar3sX
Rieccomi [:)]

Il problema sta nella lettura dei dati.
Basta che aggiungi uno spazio alla scanf() in questo modo:

scanf("%u", &v[i].x);

deve diventare

scanf("%u ", &v[i].x);

in questo modo al ciclo successivo la getchar() non legge lo spazio non considerato dalla scanf()

Ciao

Re: Aiuto esercizio in c (di nuovo =) )

MessaggioInviato: mar dic 30, 2008 3:40 pm
da jack_the _best
è vero!!!! [acc2]

grazie mille( di nuovo) [^]