Oppure

Loading
18/12/11 20:06
Dice
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.
aaa
18/12/11 20:23
Bonny
per esempio:

int risultato;

risultato = (a && b || c || d);


Ultima modifica effettuata da Bonny 18/12/11 20:25
aaa
18/12/11 20:38
Nullable
Gli operatori logici servono a "creare un legame" tra 2 ( o più )espressioni, esempio :

#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 :

#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 18/12/11 20:39
aaa
19/12/11 11:34
Dice
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.
aaa
19/12/11 15:34
Bonny
ti faccio un esempio

#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 19/12/11 15:35
aaa
22/12/11 16:24
Dice
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?
aaa
27/12/11 11:17
Dice
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 ?
aaa
29/12/11 16:40
Dice
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 ?
aaa