Oppure

Loading
17/08/12 15:10
Dice
Problemino: voglio poter far ritornare un array ad una funzione:

void skolemizzazione (char fnp[], int i);

skolemizzazione(fnp, i);

io alla funzione skolemizzazione gli passo l'arry di caratteri fnp[], però dentro a quella funzione vieni modificato, e allora io voglio che mi ritorno l'array fnp[] modificato.

Ho provato a fare un semplice return (fnp[]), ma niente;

come devo fare?
aaa
17/08/12 15:32
Non hai bisogno di restituire nulla. Se modifichi l'array nella funzione, le modifiche le vedi anche nel main.
17/08/12 16:59
Umberto
Oppure pui ritornare un puntatore al array , meglio fare come dice nessuno :k:
aaa
17/08/12 17:51
Dice
era quello che pensavo anche io, ma lo sai cos è che non mi riesce ?
(pensa che poi è una cagata pazzesca)
allora: io prima invoco la funzione skolemizza, passandoli appunto quel vettore.
La funzione lavora bene e mi modifica il vettore.
Fin qui tt bn

Adesso quello che devo fare è contare quanto 'e' ci sono nell'array e in base al numero stampare un messaggio

E' questo che non mi vieneeeeeeee !!!!!!

Ma non so perchèèèèèè

Più tardi vi posto il codice
aaa
17/08/12 20:39
Dice
Ecco adesso vi faccio vedere come ho fatto:
void skolemizzazione (char fnp[], int i);

int main(void)
{
   char	 *fnp;		/*vettore in cui è contenuta la formula normale prenessa*/
   int	 i = 0,		/*indice del vettore fnp*/
   	 conta_esistenziali = 0;

   /*alloco lo spazio per acquisire la FNP*/
   fnp = (char *) malloc(sizeof (char)*100); 
   /*acquisisco la formula*/
   acquisisci_fnp(fnp, i);
   /*ora applico l'algoritmo di skolemizzazione*/
   skolemizzazione(fnp, i);
   for(i = 0;
       (fnp[i] != 'Ecco adesso vi faccio vedere come ho fatto:

void skolemizzazione (char fnp[], int i);

int main(void)
{
   char	 *fnp;		/*vettore in cui è contenuta la formula normale prenessa*/
   int	 i = 0,		/*indice del vettore fnp*/
   	 conta_esistenziali = 0;

   /*alloco lo spazio per acquisire la FNP*/
   fnp = (char *) malloc(sizeof (char)*100); 
   /*acquisisco la formula*/
   acquisisci_fnp(fnp, i);
   /*ora applico l'algoritmo di skolemizzazione*/
   skolemizzazione(fnp, i);
   for(i = 0;
       (fnp[i] != '{parsed_message}');
       i++) {
      if(fnp[i] == 'e')
	  conta_esistenziali++;
   }
   
   if(conta_esistenziali == 0)
      printf("La formula è ora in forma normale di skolem.\n");
/*non me lo stampa, perchè lui deve contare le 'e' dell'arry dopo la modifica (e non ce ne dovrebbero essere), mentre mi considera l'array prima della modifica (dove ci sono delle 'e')*/
   return (0);
}


Che sia sbagliato il modo in cui passo il vettore ?
Voi cosa mi dite ?'); i++) { if(fnp[i] == 'e') conta_esistenziali++; } if(conta_esistenziali == 0) printf("La formula è ora in forma normale di skolem.\n"); /*non me lo stampa, perchè lui deve contare le 'e' dell'arry dopo la modifica (e non ce ne dovrebbero essere), mentre mi considera l'array prima della modifica (dove ci sono delle 'e')*/ return (0); }


Che sia sbagliato il modo in cui passo il vettore ?
Voi cosa mi dite ?
aaa
17/08/12 21:07
tasx
Ciao!

Hai controllato la funzione skolemizzazione?

conta_esistenziali corrisponde con il numero di 'e' acquisite o è diverso?

piccolo consiglio, visto che conosci la dimensione massima dell'array *fnp potresti stampartelo alla fine per verificare come è stato modificatio, per stamparlo puoi usare una qualunque funzione hexdump che trovi in giro su internet, ad esmpio questa: sws.dett.de/mini/hexdump-c/

ciaociao!! :k::k:
aaa
17/08/12 21:53
Dice
La variabile conta_esistenziale mi da il numero di 'e' prima della modifica dell'array, quando invece, visto che come istruzione viene dopo la modifica, mi dovrebbe dare il numero di 'e' dopo la modifica, ma non lo fa.
Perchè ?
Pensavo appunto che avrei dovuto fare ritornare il vettore fnp dalla funzione skolemizzazione, tipo così:

fnp = skolemizzazione(fnp, i);

ma mi da errore.

Non lo so
aaa
18/08/12 7:41
tasx
Ciao!
Quando passi fnp come parametro nella funzione skolemizzazione non gli passi una copia del vettore ma un puntatore alla zona di memoria dove è stato allocato quindi qualunque modifica tu faccia quella rimane anche senza stare a farlo ritornare dalla funzione,
quindi sei sicuro che la funzione skolemizzazione faccia il suo dovere?

probabilmente ti da errore perchè dovrai cambiarne la dichiarazione nell'header.

ciaociao :k::k:
aaa