Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Tabelle di verità
Forum - C/C++ - Tabelle di verità

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 21:06
Domenica, 18/12/2011
Allora.... inzomma.... ahahah
io vorrei provare a fare un programmino, che adesso cercherò di spiegarvi:
io (l'utente) inserisco una formula logica proposizionale con al massimo 4 proposizioni (rappresentate da lettere minuscole) e al massimo 3 connettivi logici (rappresentati da cifre decimali) (esempio: a 1 b 2 c 3 d). E devo vedere se esiste un assegnamento di verità che lo risolve.
Questa è la mia ipotesi: per verificare l'assegnamento di verità bisogna usare le tabelle di verità...
il mio problema è che non so come fare.
Voi  mi sapreste aiutare ?
Grazie mille in anticipo.

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 21:23
Domenica, 18/12/2011
per esempio:

Codice sorgente - presumibilmente C/C++

  1. int risultato;
  2.  
  3. risultato = (a && b || c || d);




Ultima modifica effettuata da Bonny il 18/12/2011 alle 21:25
PM Quote
Avatar
Nullable (Normal User)
Expert


Messaggi: 217
Iscritto: 12/07/2011

Segnala al moderatore
Postato alle 21:38
Domenica, 18/12/2011
Gli operatori logici servono a "creare un legame" tra 2 ( o più )espressioni, esempio :

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.         int a = 1, b = 2, c = 3;
  6.         if( (a < b) && (b < c) )
  7.                 printf("c è il più grande");
  8.         getchar();
  9.         return 0;
  10. }



La doppia "e-commerciale" ( chiamato anche and logico ) lega (a < b) [ che è vera ] e ( b < c ) [ anch'essa vera ]. Dal momento che l'and logico è verificato se entrambe ( o più ) le espressioni sono vere allora ( in questo caso ) verrà eseguita la printf(). Invece per l'or logico :

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.         int a = 1, b = 3, c = 9;
  6.         if( (a < b) || (b < c) )
  7.                 printf("c è il più grande");
  8.         getchar();
  9.         return 0;
  10. }



succede che anche se solo una delle due espressioni ( in questo caso ) è vera allora esegue certe istruzioni.

Fatta questa precisazione vorrei chiederti :
1) Potresti essere più chiaro ?
2) Potresti spiegare la frase "e al massimo 3 connettivi logici rappresentati da crifre decimali" ?

Ultima modifica effettuata da Nullable il 18/12/2011 alle 21:39
PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 12:34
Lunedì, 19/12/2011
Scusate la poco chiarezza del messaggio, cercherò di spiegarmi meglio e per farlo vi farò un esempio:
formula logica inserita dall'utente: a 1 b 2 c 3 d
dove: 1 = AND; 2 = OR; 3 = IMPLICAZIONE  (potrebbero essere qualsiasi connettivo).
Questo esempio che ho scritto rappresenta il caso pessimo, perchè ci possono essere al massimo 4 proposizioni e la massimo tre connettivi logici.
Un caso più semplice potrebbe essere ad esempio: a 2 b.
Da quello che ho studiato, per stabilire se esiste un assegnamento di verità che soddisfa la formula bisogna utilizzare le tabelle di verità:
(mi riferisco al primo esempio che ho fatto)
formula logica: a 1 b 2 c 3 d

a | b | c | d | a1b | (a1b)2c | ( (a1b)2c)3d) |
0   0   0   0     0           0                 1
0   0   0   1     0           0                 1
0   0   1   0     0           1                 0

E via di seguito ( non continuo perchè sarebbe troppo lungo da fare adesso, vengono fuori 16 righe (2^4) (4 è il numero di proposizioni) ).

Spero di essere stato più chiaro.

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 16:34
Lunedì, 19/12/2011
ti faccio un esempio

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. int main(){
  3.  
  4. int a=0, b = 1, c = 1, ris;
  5.  
  6. ris = (a && b || c);
  7.  
  8. /* o (a || b && c) o (a && b && (c || b)) ecc......
  9. ovviamente questo vale per N variabili e N-1 operatori */
  10.  
  11.    printf("%d", ris);
  12. return 0;
  13. }



boh non vedo niente di cosi complesso sinceramente:-|
ovviamente il tuo programma dovra codificare l'1 come AND il 2 come l'OR ecc....

Ultima modifica effettuata da Bonny il 19/12/2011 alle 16:35
PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 17:24
Giovedì, 22/12/2011
Ok, questo l'ho capito, grazie mille.
Però ho un altro problemino:
i valori delle proposizioni non li devo inserire io, ma mi deve fare in automatico tutti i casi.
Io avevo pensato di usare un enum {0, 1}
Però non so di preciso come usarlo.
Mi potreste aiutare?

PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 12:17
Martedì, 27/12/2011
Come faccio a dirli al programma che deve mettere in ogni riga:
0000
0001
0010
aeccetera ?
Per caso c'è un metodo per facilitare il loro inserimento nella matrice ?

PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 17:40
Giovedì, 29/12/2011
Allora ?
Mi date una mano ?
Io per il momento sono messo così:
riesco ad inserire la formula, ho fatto qualche validazione (devo finirle), e ho contato quante proposizioni ci sono nella formula.
Adesso devo riuscire a creare una tabella di verità.
Suggerimenti ?

PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 18:18
Domenica, 01/01/2012
Scusate se sono insistente, ma ...
non mi rispondete più ?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo