Codice non capito

di il
13 risposte

Codice non capito

Ciao ragazzi, potete spiegarmi cosa significa quel "trovato" con ! scritto nel for e nell'if sottostante?

int trovato = 0;

for (i = 1; i < len && !trovato; i++) {

if (trovato)

13 Risposte

  • Re: Codice non capito

    If (trovato)

    significa

    if (trovato == true)

    mentre

    !trovato

    significa

    nega trovato

    Più che "capire" devi studiare nel libro del linguaggio gli operatori booleani.
  • Re: Codice non capito

    Trovato=false vuol dire che trovato=1? perchè è stato dichiarato di tipo intero con un valore pari a 0
  • Re: Codice non capito

    Mettila così: in C non esiste il tipo 'boolean' e normalmente a questo scopo si usa un int.
    Il valore 0 corrisponde a false mentre ogni altro valore corrisponde a true.
  • Re: Codice non capito

    >> Standard C (since C99) provides a boolean type, called _Bool
    dai un occhio a wikipedia ,
  • Re: Codice non capito

    Però anche se esiste il tipo booleano è pratica comune usare dei valori numerici interi, come ha detto Candaluar. E, come ha detto, un intero uguale a zero equivale a "falso", mentre un intero diverso da zero (sia positivo, sia negativo) equivale a "vero". Il che, per inciso, torna utile in molte situazioni.
  • Re: Codice non capito

    AldoBaldo ha scritto:


    Però anche se esiste il tipo booleano è pratica comune usare dei valori numerici interi, come ha detto Candaluar. E, come ha detto, un intero uguale a zero equivale a "falso", mentre un intero diverso da zero (sia positivo, sia negativo) equivale a "vero". Il che, per inciso, torna utile in molte situazioni.

    Quindi il trovato del for e quello dell'if a cosa corrispondono?
  • Re: Codice non capito

    Da qualche parte, nel codice, "trovato" verrà impostato su 0 o su un valore diverso da 0.

    Nel for, "i<len && !trovato" significa "ripeti il ciclo finché i è minore di len e trovato è uguale a zero".

    Nell'if, "if(trovato)" significa "se trovato è diverso da zero, fai questo e quello".

    Tutto qui.
  • Re: Codice non capito

    AldoBaldo ha scritto:


    Da qualche parte, nel codice, "trovato" verrà impostato su 0 o su un valore diverso da 0.

    Nel for, "i<len && !trovato" significa "ripeti il ciclo finché i è minore di len e trovato è uguale a zero".

    Nell'if, "if(trovato)" significa "se trovato è diverso da zero, fai questo e quello".

    Tutto qui.

    si, trovato inizialmente è impostato su 0.
    quindi !trovato non vuol dire che trovato è uguale a 1?
  • Re: Codice non capito

    No, "!trovato" vuol dire che trovato è uguale a zero. Si legge "not trovato" (il punto esclamativo è un operatore, cercane una descrizione, credo si chiami "operatore di negazione").
  • Re: Codice non capito

    AldoBaldo ha scritto:


    No, "!trovato" vuol dire che trovato è uguale a zero. Si legge "not trovato" (il punto esclamativo è un operatore, cercane una descrizione, credo si chiami "operatore di negazione").
    Quindi come posso interpretarlo il documento in allegato?
    Allegati:
    23841_71cea3b4fe8d6abae6e4ce3de3d4505e.png
    23841_71cea3b4fe8d6abae6e4ce3de3d4505e.png
  • Re: Codice non capito

    Evidentemente la funzione duplicato() ritorna 1 se vi sono due caratteri uguali in una determinata stringa.
    Il compito viene risolto in maniera ricorsiva, testando ad ogni passo il primo carattere della stringa con tutti i caratteri che seguono.
    Se si trova un duplicato si può uscire dal for e ritornare 1.
    Se non si trova alcun duplicato del primo carattere, invece, si passa il problema al passo successivo, analizzando la sottostringa ottenuta saltando il primo carattere (&v[1]).
    Detto tutto questo, il ciclo for deve analizzare tutta la stringa ricevuta, partendo dal secondo carattere (v[1]) fino all'ultimo (v[len-1]): se trova un carattere uguale al primo (v[0]) non ha senso proseguire quindi esce dal for e ritorna 1.
    Ti consiglio di provare a scrivere la stessa funzione senza l'uso della ricorsione, utilizzando due for annidate (o due while annidate se preferisci).
    Oppure inserisci delle printf per stampare il contenuto della stringa e verificare i vari passaggi.
  • Re: Codice non capito

    candaluar ha scritto:


    Evidentemente la funzione duplicato() ritorna 1 se vi sono due caratteri uguali in una determinata stringa.
    Il compito viene risolto in maniera ricorsiva, testando ad ogni passo il primo carattere della stringa con tutti i caratteri che seguono.
    Se si trova un duplicato si può uscire dal for e ritornare 1.
    Se non si trova alcun duplicato del primo carattere, invece, si passa il problema al passo successivo, analizzando la sottostringa ottenuta saltando il primo carattere (&v[1]).
    Detto tutto questo, il ciclo for deve analizzare tutta la stringa ricevuta, partendo dal secondo carattere (v[1]) fino all'ultimo (v[len-1]): se trova un carattere uguale al primo (v[0]) non ha senso proseguire quindi esce dal for e ritorna 1.
    Ti consiglio di provare a scrivere la stessa funzione senza l'uso della ricorsione, utilizzando due for annidate (o due while annidate se preferisci).
    Oppure inserisci delle printf per stampare il contenuto della stringa e verificare i vari passaggi.
    Ma !trovato vuol dire che non è stato trovato l'elemento nella stringa?
  • Re: Codice non capito

    Trovato è una variabile intera e come tale può valere -39, 1297, 0, -5, 1, 33313...

    ! è un operatore, come sono operatori anche + e /. La differenza è che mentre + e / sono operatori binari (ossia agiscono su due operandi), l'operatore ! è unario (ossia agisce su un solo operando). In pratica quello che fa l'operatore ! è negare l'operando a cui è associato (quindi se trovato è vero allora !trovato sarà falso, se invece trovato è falso allora !trovato sarà vero).
    Il significato di vero e falso in relazione ad una variabile intera ti è stato già spiegato da candaluar e AldoBaldo.

    Detto questo si deduce che if(!trovato) coincide con if(trovato == false).
    Se poi la condizione appena scritta risulti verificata o meno, dipende da quanto vale la variabile trovato.
Devi accedere o registrarti per scrivere nel forum
13 risposte