Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - far ritornare un array ad una funzione
Forum - C/C++ - far ritornare un array ad una funzione

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 17:10
Venerdì, 17/08/2012
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?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6384
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:32
Venerdì, 17/08/2012
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à.
PM Quote
Avatar
Umberto (Member)
Pro


Messaggi: 156
Iscritto: 27/09/2011

Segnala al moderatore
Postato alle 18:59
Venerdì, 17/08/2012
Oppure pui ritornare un puntatore al array , meglio fare come dice nessuno :k:

PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 19:51
Venerdì, 17/08/2012
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

PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 22:39
Venerdì, 17/08/2012
Ecco adesso vi faccio vedere come ho fatto:
Codice sorgente - presumibilmente C#

  1. void skolemizzazione (char fnp[], int i);
  2.  
  3. int main(void)
  4. {
  5.    char  *fnp;          /*vettore in cui è contenuta la formula normale prenessa*/
  6.    int   i = 0,         /*indice del vettore fnp*/
  7.          conta_esistenziali = 0;
  8.  
  9.    /*alloco lo spazio per acquisire la FNP*/
  10.    fnp = (char *) malloc(sizeof (char)*100);
  11.    /*acquisisco la formula*/
  12.    acquisisci_fnp(fnp, i);
  13.    /*ora applico l'algoritmo di skolemizzazione*/
  14.    skolemizzazione(fnp, i);
  15.    for(i = 0;
  16.        (fnp[i] != '\0');
  17.        i++) {
  18.       if(fnp[i] == 'e')
  19.           conta_esistenziali++;
  20.    }
  21.    
  22.    if(conta_esistenziali == 0)
  23.       printf("La formula è ora in forma normale di skolem.\n");
  24. /*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')*/
  25.    return (0);
  26. }



Che sia sbagliato il modo in cui passo il vettore ?
Voi cosa mi dite ?

PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 23:07
Venerdì, 17/08/2012
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!! :k::k:

PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 23:53
Venerdì, 17/08/2012
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

PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 9:41
Sabato, 18/08/2012
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:

PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 19:54
Sabato, 18/08/2012
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++

  1. 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

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo