[C] Problema esercizio ricorsione

Messaggioda nick_10 » 25/11/2018, 12:26

Ciao a tutti!
Sempre problemi con le funzione ricorsive...
In questo esercizio son riuscito a fare solo una parte:
"Si scriva in C una funzione ricorsiva (che non deve pertanto fare uso di costrutti iterativi) che legga da input una sequenza di caratteri che termina con l’ingresso del carattere ’\n’, stampi a video la sequenza seguita dalla stessa sequenza in ordine invertito e, inoltre, restituisca in output il numero di caratteri inseriti. Ad esempio, se la sequenza letta fosse ’i’ d’ ’i ’ ’s’ la stampa prodotta sarebbe ’i’ d’ ’i ’ ’s’ ’s’ ’i ’ d’ ’i’ mentre l’output sarebbe 4".
In particolare la stampa dei caratteri è giusta. Non trovo il modo di contare i caratteri inseriti :(. Ho provato cosi:
Codice:
#include <stdio.h>
int caratteriric(){
    char c;
    int occ;
    c=getchar();
    if(c != '\n'){   **
        putchar(c);
        occ=1+caratteriric();
        putchar(c);
    }
    return occ;
}
int main() {
    caratteriric();
    printf("Il numero di caratteri inseriti è:%d\n",caratteriric());
    return 0;
}

Che è giusto...cioè come output di caratteri inseriti fornisce effettivamente 4 ma nel punto di codice indicato con ** il compilatore mi dice questo: Variable 'occ' is used uninitialized whenever 'if' condition is false
Ma se all'inizio dichiaro int occ=0 il programma mi fornisce 0 come numero di caratteri inseriti
nick_10
Average Member
Average Member
 
Messaggio: 333 di 754
Iscritto il: 17/11/2016, 16:21

Re: [C] Problema esercizio ricorsione

Messaggioda vict85 » 25/11/2018, 17:35

Quella variabile è effettivamente non inizializzata se c == '\n'. Dovresti inizializzarlo a 0 e rimuovere il primo putchar.
vict85
Moderatore
Moderatore
 
Messaggio: 9439 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C] Problema esercizio ricorsione

Messaggioda nick_10 » 25/11/2018, 21:17

Se lo inizializzo a zero però poi mi stampa il valore 0 e inoltre se tolgo il primo putchar non mi stampa la prima parte della sequenza
nick_10
Average Member
Average Member
 
Messaggio: 335 di 754
Iscritto il: 17/11/2016, 16:21

Re: [C] Problema esercizio ricorsione

Messaggioda apatriarca » 26/11/2018, 05:58

Perché stai chiamando due volte la funzione nel main? Restituire zero nel caso in cui il valore letto sia quello di a capo è il comportamento corretto, per cui credo che il tuo problema possa essere un'altro..
apatriarca
Moderatore
Moderatore
 
Messaggio: 5159 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: [C] Problema esercizio ricorsione

Messaggioda nick_10 » 26/11/2018, 22:31

Così dovrebbe andare...
Codice:
#include <stdio.h>
int caratteriric(){
    char c;
    int occ=0;
    c=getchar();
    if(c != '\n'){
        putchar(c);
        occ=1+caratteriric();
        putchar(c);
    }
    return occ;
}
int main() {
    printf("\nIl numero di caratteri inseriti è:%d\n",caratteriric());
    return 0;
}
nick_10
Average Member
Average Member
 
Messaggio: 337 di 754
Iscritto il: 17/11/2016, 16:21

Re: [C] Problema esercizio ricorsione

Messaggioda vict85 » 27/11/2018, 09:54

Penso che sia più leggibile se memorizzi il valore di ritorno della funzione in una variabile e poi stampi la variabile.
vict85
Moderatore
Moderatore
 
Messaggio: 9441 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C] Problema esercizio ricorsione

Messaggioda nick_10 » 28/11/2018, 13:49

Grazie a tutti per i consigli!
nick_10
Average Member
Average Member
 
Messaggio: 340 di 754
Iscritto il: 17/11/2016, 16:21


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite