Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
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?
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6405
Iscritto: 03/01/2010
|
Non hai bisogno di restituire nulla. Se modifichi l'array nella funzione, le modifiche le vedi anche nel main.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Umberto (Member)
Pro
Messaggi: 156
Iscritto: 27/09/2011
|
Oppure pui ritornare un puntatore al array , meglio fare come dice nessuno
|
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
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
|
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
Ecco adesso vi faccio vedere come ho fatto:
Codice sorgente - presumibilmente C# |
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] != '\0'); 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 ?
|
|
tasx (Dev Team)
Expert
Messaggi: 439
Iscritto: 15/12/2008
|
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: http://sws.dett.de/mini/hexdump-c/
ciaociao!!
|
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
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
|
|
tasx (Dev Team)
Expert
Messaggi: 439
Iscritto: 15/12/2008
|
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
|
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
No no, la funzione skolemizzazione mi lavora per bene, perchè tanto mi stampa le cose come voglio, mi funziona bene.
La dichiarazione dell'header non dovrebbe andare bene così come ho scritto ?
Codice sorgente - presumibilmente C/C++ |
void skolemizzazione (char fnp[], int i);
|
se devo cambiarla consigliatemi pure.
Se invece per header intendi l'altro file, quello con solo le funzioni, non è quello il problema, perchè non l'ho creato proprio, ho fatto tutto in un unico file
|
|