Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892

    [c]:casi particolari!!!

    Ciao,ci sono casi in un programma scritto nel linguaggio C nei quali la valutazione dell’espressione booleana (e && !e) restituisce il valore 1???
    Debian Sarge 3.01a
    Slackware 10.2

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303

    Re: [c]:casi particolari!!!

    Originariamente inviato da Fabiuz
    Ciao,ci sono casi in un programma scritto nel linguaggio C nei quali la valutazione dell’espressione booleana (e && !e) restituisce il valore 1???
    Io spererei proprio di no!


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892
    Come scusa??? :master: :master:
    Praticamente devo dedurre che la risposta è no!!! giusto??
    Debian Sarge 3.01a
    Slackware 10.2

  4. #4
    Utente di HTML.it L'avatar di Ilmalcom
    Registrato dal
    Oct 2002
    Messaggi
    1,345
    Originariamente inviato da Fabiuz
    Come scusa??? :master: :master:
    Praticamente devo dedurre che la risposta è no!!! giusto??
    Vedi tu, te lo dice Boole che (e || !e) ha sempre come risultato false...

    Se proprio non ti fidi, semantica operazionale dell'or in C:
    - valuto e, se è vera restituisco true;
    - se è falsa, restituisco il valore del secondo membro, in questo caso !e quindi true.

    In ogni caso, come vedi, viene restituito true

  5. #5
    Utente di HTML.it L'avatar di Trusty
    Registrato dal
    Dec 2004
    Messaggi
    642
    la paura gioca brutti skerzi...............
    VVoVe:
    http://www.oilproject.org/ -->La Scuola On-LIne degli smanettoni!

  6. #6

    Re: [c]:casi particolari!!!

    Originariamente inviato da Fabiuz
    Ciao,ci sono casi in un programma scritto nel linguaggio C nei quali la valutazione dell’espressione booleana (e && !e) restituisce il valore 1???
    in C una espressione booleana viene valutata False se 0
    Vera per ogni valore diverso da 0 (1, 2, ma anche i valori negativi -1, -2 etc)

    ora la tabella di verità dell'and logico && è questa
    codice:
    a | b | (a && b)
    --|---|----------
    F | F |    F
    F | V |    F
    V | F |    F
    V | V |    V
    cioè (a && b) è Vera se e solo se a e b sono entrambe Vere.

    nel tuo caso dipende solo dal valore di e, che determina poi !e

    codice:
    e | !e  | (e && !e)
    --|-----|----------
    F | V   |   F
    V | F   |   F
    e il risultato di quella espressione è sempre Falso.

    l'or logico invece
    codice:
    a | b | (a && b)
    --|---|----------
    F | F |    F
    F | V |    V
    V | F |    V
    V | V |    V
    basta che o a, o b, o entrambe siano vere per essere vero l'or.


    codice:
    e | !e  | (e || !e)
    --|-----|----------
    F | V   |   V
    V | F   |   V
    qui è sempre vero

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Esiste, però, un caso in cui il risultato può sembrare incongruente: ad esempio, la valutazione di questa espressione, non è sempre falsa, come si può credere:
    codice:
    int a;
    if (a != !!a) {
       ...  // Queste istruzioni possono essere eseguite
    }
    Nel caso in cui la variabile a sia diversa da 0 e da 1, le istruzioni verranno eseguite.
    Il perchè è semplice: se la variabile a vale, ad esempio, 15 il test viene valutato in questo modo:
    codice:
    if (15 != 1) {
       ...  // e viene eseguito.
    }
    Questo accade perchè l'operatore ! agisce in questo modo: il primo rende FALSO il valore 15 (quindi lo mette a 0), poi il secondo lo rimette a vero, ma questa volta diventa 1...

    Quando A è diverso da NOT( NOT(A) )

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Originariamente inviato da LeleFT
    codice:
    int a;
    if (a != !!a) {
       ...  // Queste istruzioni possono essere eseguite
    }
    Astuto il ragazzo!!
    Ma senti, sei un programmatore C professionista tu che le sai tutte sul C?!?
    .: Teju.it - Una vita da raccontare
    .: 8s8.it - Wordpress gratis per tutti
    .: Vado.li - Accorcia URL

  9. #9
    [EDIT]Sbagliato post[/EDIT]

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Originariamente inviato da teju
    Astuto il ragazzo!!
    Ma senti, sei un programmatore C professionista tu che le sai tutte sul C?!?
    Assolutamente no: non sono un programmatore C professionista e non le so affatto tutte, anzi!!!
    Solamente che a volte mi diverto a provare delle cosette un po' bizzarre!


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.