Passa al tema normale
Discussioni su argomenti di Informatica

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

[C] Problema esercizio ricorsione

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

Re: [C] Problema esercizio ricorsione

25/11/2018, 17:35

Quella variabile è effettivamente non inizializzata se c == '\n'. Dovresti inizializzarlo a 0 e rimuovere il primo putchar.

Re: [C] Problema esercizio ricorsione

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

Re: [C] Problema esercizio ricorsione

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

Re: [C] Problema esercizio ricorsione

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;
}

Re: [C] Problema esercizio ricorsione

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.

Re: [C] Problema esercizio ricorsione

28/11/2018, 13:49

Grazie a tutti per i consigli!
Rispondi al messaggio


Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000— Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.