Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - applica la proprietà distributiva nelle formule logiche
Forum - C/C++ - applica la proprietà distributiva nelle formule logiche

Avatar
Diablo_91 (Normal User)
Newbie


Messaggi: 2
Iscritto: 11/01/2011

Segnala al moderatore
Postato alle 0:36
Martedì, 11/01/2011
Ciao a tutti, sono nuovo e ... chiedo scusa, ma vi chiedo gentilmente di aiutarmi con il mio problema.
Vorrei creare un programma in C che permetta di applicare la proprietà distriburiva a formule logiche. Vi do un esempio:
(!A | (B & C)
applicando la proprietà distributiva deve diventare così:
(!A | B) & (!A & C)

Naturalmente questo è solo un piccolo esempio molto limitato, ma ho bisogno di poterlo applicare a formule anche più grandi.

Avevo pensato a qualche idea sull'usare delle variabili per gli operatori, ma sinceramente non saprei se vada bene.

Spero in un vostro aiuto; grazie in anticipo.

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:52
Martedì, 11/01/2011
In pratica vuoi implementare un parser di espressioni logiche in C? E' un po' laborioso per il fine, ma si può fare, anche senza regex. Tuttavia spiegare qui come scrivere un parser mi sembra un po' restrittivo. Iniziamo col vedere quali sono le tue idee in merito.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
Diablo_91 (Normal User)
Newbie


Messaggi: 2
Iscritto: 11/01/2011

Segnala al moderatore
Postato alle 22:08
Martedì, 11/01/2011
Devo dire che sinceramente non conosco ne la regex, ne so cosa vuol dire "parser di espressioni logiche"; comunque io pensavo ad idee del tipo:
1)carico la formula in forma normale disgiuntiva in un array di carratteri
2)se nell'array c'è quel tipo di formula allora la trasformo in forma normale congiuntiva (ma sinceramente non so se è possibile una cosa di questo genere)

oppure un altra idea, avevo pensato di usare delle variabili per gli operatori &(and) e |(or), e dire: se nell'array ci sono quelle variabili allora fai la trasformazione.
Il punto e che non come fare a chiedere se nell'array sono presenti quei caratteri, infatti non so se è possibile.

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 12:12
Mercoledì, 12/01/2011
Il problema non è di quelli banali.
La tecnica standard è quella di creare un albero sintattico dell'espressione data in input (implementando un semplice parser), attraversare l'albero applicando delle trasformazioni basate sulle regole che ti interessano, e poi stampare la "produzione" del nuovo albero.

Ripeto che non è una cosa banale e quindi ti invito, se non l'hai già fatto, a studiare qualcosa di introduttivo sui parser, sugli alberi e magari consolidare un po' le tue conoscenze di C visto che dovrai gestire in scioltezza puntatori doppi e allocazione dinamica della memoria.


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM Quote