Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/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.
|
|
Bonny (Member)
Expert
Messaggi: 437
Iscritto: 24/04/2009
|
per esempio:
Codice sorgente - presumibilmente C/C++ |
int risultato;
risultato = (a && b || c || d);
|
Ultima modifica effettuata da Bonny il 18/12/2011 alle 21:25 |
|
Nullable (Normal User)
Expert
Messaggi: 217
Iscritto: 12/07/2011
|
Gli operatori logici servono a "creare un legame" tra 2 ( o più )espressioni, esempio :
Codice sorgente - presumibilmente C++ |
#include <stdio.h> int main() { int a = 1, b = 2, c = 3; if( (a < b) && (b < c) ) printf("c è il più grande"); getchar(); return 0; }
|
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++ |
#include <stdio.h> int main() { int a = 1, b = 3, c = 9; if( (a < b) || (b < c) ) printf("c è il più grande"); getchar(); return 0; }
|
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 |
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/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.
|
|
Bonny (Member)
Expert
Messaggi: 437
Iscritto: 24/04/2009
|
ti faccio un esempio
Codice sorgente - presumibilmente C++ |
#include <stdio.h> int main(){ int a=0, b = 1, c = 1, ris; ris = (a && b || c); /* o (a || b && c) o (a && b && (c || b)) ecc...... ovviamente questo vale per N variabili e N-1 operatori */ printf("%d", ris); return 0; }
|
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 |
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/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?
|
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/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 ?
|
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/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 ?
|
|
Dice (Normal User)
Expert
Messaggi: 238
Iscritto: 26/11/2011
|
Scusate se sono insistente, ma ...
non mi rispondete più ?
|
|