PDA

Visualizza la versione completa : [c]:casi particolari!!!


Fabiuz
24-01-2005, 18:51
Ciao,ci sono casi in un programma scritto nel linguaggio C nei quali la valutazione dell’espressione booleana (e && !e) restituisce il valore 1???

LeleFT
24-01-2005, 18:56
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. :ciauz:

Fabiuz
24-01-2005, 19:10
Come scusa??? :master: :master:
Praticamente devo dedurre che la risposta è no!!! giusto??

Ilmalcom
24-01-2005, 20:08
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

Trusty
24-01-2005, 20:52
la paura gioca brutti skerzi...............
:oVVoVe:

internet
24-01-2005, 22:34
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


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



e | !e | (e && !e)
--|-----|----------
F | V | F
V | F | F


e il risultato di quella espressione è sempre Falso.

l'or logico invece


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.




e | !e | (e || !e)
--|-----|----------
F | V | V
V | F | V


qui è sempre vero

LeleFT
24-01-2005, 23:01
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:


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:


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

teju
25-01-2005, 10:44
Originariamente inviato da LeleFT


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?!? :zizi:

Storm Sentry
25-01-2005, 11:50
Sbagliato post

LeleFT
25-01-2005, 11:53
Originariamente inviato da teju
Astuto il ragazzo!!
Ma senti, sei un programmatore C professionista tu che le sai tutte sul C?!? :zizi:
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. :ciauz:

Loading