Dubbio su chiamata a funzioni

di il
5 risposte

Dubbio su chiamata a funzioni

Ciao ragazzi , ho questo programma di cui devo fare lo stackdei record di attivazione e poi dire cosa stampa:
int main() {
int x = 5 ;
char nord[] = "BS",
sud[] = "NA";
printf("%c", nord[(++x)%2]); 
x = f( nord, sud, x-1 );
printf("%c", nord[(++x)%2]); 
return 0;
}

int f( char *nord, char *sud,
int x ) {
if( !x ) printf(" & ");
else {
printf("%c", sud[x%2]);
x = f( nord, sud, x-1 );
printf("%c", sud[x%2]);
}
return x+1;
}

Lo stack l'ho fatto senza problemi , ma quando mi chiede di dire cosa stampa io avrei detto BANANA&A , perchè non ho capito bene come usare l'istruzione di stampa evidenziata.
Il programma deve stampare BANANA&ANANAS.
Una volta che io entro nella funzione f e la ripeto fino a quando x non è 0 a questo punto stampo BANANA& poi la funzione restituisce x+1 (cioe 0+1) ed eseguo l'istruzione evidenziata e stampa A;

A questo punto non cè nulla che iteri il procedimento in modo da far stampare NANA.

Spero di essere stato chiaro e che qualcuno mi possa dare una mano.
grazie

5 Risposte

  • Re: Dubbio su chiamata a funzioni

    A questo punto non cè nulla che iteri il procedimento in modo da far stampare NANA.
    E no ... la

    return x+1;

    non è una sola ma tante quante sono state le chiamate alla f e ritornano tutte alla printf ...
  • Re: Dubbio su chiamata a funzioni

    Grazie della tempestiva risposta.

    Non ho capito però ancora una cosa, per ritornare un valore devo portare a termine la funzione , quindi nel nostro caso la x arriva a 0 e anzichè entrare nell'else stampa la & e a questo punto return 0+1 che sarebbe il valore della x all'interno della funzione e poi stampo la printf evidenziata e quindi stampa A , ma dopo che valori di ritorno avrei per far stampare NANA?

    Nel senso , tu hai detto che ad ogni chiamata di f ho un valore di ritorno , ma che valore ha la x ad ogni ritorno di f(dato che arrivo solo una volta alla fine)?
  • Re: Dubbio su chiamata a funzioni

    Dopo la printf in questione, la x sarà a 1 e verrà eseguita la return con 1+1 ...
  • Re: Dubbio su chiamata a funzioni

    Grazie mille , sei stato molto chiaro.

    Adesso ti pongo un altro dubbio che ho.

    typedef struct { char c, *p; int v[3];
    } Blocco;

    int g( Blocco * pb ) {
    pb->p = &((*pb).c);
    printf("%c ", pb->c);
    return pb->c - 'A';
    }

    void f( char **d, int *n ) {
    Blocco b;
    int i = 5;
    b.c = (*d)[0];
    if( strlen(*d) > 0 ) {
    for( i=0; i<*n; i++ )
    *(b.v+i) = g(&b);
    ++(*d);
    f( d, n );
    }
    return;
    }
    int main() {

    char s[]="YXABC", *p=s+2;
    int k = 2;
    f( &p, &k );

    printf("- %c", s[--k]);
    return 0;

    }


    Non capisco l'istruzione evidenziata, nel senso assegna alla b.c il valore puntato da d ma che significa [0]? (io l'avevo interpretato come posizione zero ma in realtà lui assegna la lettera A che non è in 0.

    Grazie mille
  • Re: Dubbio su chiamata a funzioni

    Questo è un altro problema, dovresti creare un nuovo thread.
Devi accedere o registrarti per scrivere nel forum
5 risposte