Classe che gestisce la tabella dei termini minimi e la riduzione della funzione logica corrisponente
I termini minimi della funzione
Le condizioni di indifferenza
Il numero di variabili logiche nella funzione. Il massimo numero di variabili è 26(rappresentate dalle lettere maiuscole dalla A alla Z)
Lista di stringhe contenente le rappresentazioni binarie degli implicanti.
Una lista temporanea di stringhe utilizzata durante la computazione. Conterrà semplicemente una copia della lista precedente.
La lista dei termini essenziali deve restare separata da quella delle rappresentazioni binarie perchè può contenere dei termini che durante lo svolgimento dell'algoritmo non vanno incontro a semplificazione e rimangono isolati.
Il numero di elementi per ogni gruppo, l'indice dell'array rappresenta il gruppo.
Indica che l'algoritmo di semplificazione è giunto al termine. (La ricerca degli implicanti primi essenziali viene effettuata dopo che l'algoritmo di semplificazione è terminato).
private IEnumerable<string> Combinazioni( |
| ) |
Permette di risalire ai termini minimi implicati nella riduzione partendo da una rappresentazione binaria ridotta
Tutte le possibili combinazioni ottenute sostituendo agli underscores nella stringa o 0 o 1.
Questa funzione converte in binario tutti gli elementi degli array numerici termini_minimi e dontcare e aggiunge ogni rappresentazione binaria ottenuta alla lista rappresentazioni_binarie.
private int Converti_In_Decimale( |
| ) |
Converte in decimale una rappresentazione binaria
private int Conta_Gruppo( |
| ) |
Funzione che conta gli uno presenti nella rappresentazione e ne restituisce il gruppo di appartenenza
Funzione che ordina la lista rappresentazioni_binarie in funzione dei gruppi
Restituisce il gruppo massimo tra gli implicanti
private string Confronta( |
| ) |
Funzione che confronta due stringhe e restituisce una nuova stringa qualora sia stata riscontrata solo una differenza. (una posizione in cui differisce il valore del singolo carattere 0 o 1) La nuova stringa è uguale a quelle di partenza con l'eccezione che nella posizione in cui è stata individuata la differenza viene inserito un '_'. Se per esempio venissero comparate le stringhe "0001" e "1001" l'unica differenza sarebbe in posizione 0 e la stringa risultate sarebbe "_001". Se invece venissero comparate le stringhe "0011" e "1001" avremmo due differenze, rispettivamente in posizione 0 e 2, pertanto non verrebbe restituita alcuna stringa.
private void Rimuovi_Duplicati( |
| ) |
Rimuove i termini duplicati da una lista
Rimuove i termini che non sono essenziali dalla lista termini_essenziali Questo è necessario poichè può avvenire che un termine in realtà non essenziale venga qui aggiunto.
Questa funzione restituisce una lista stampabile contenente semplicemente i termini minimi e le condizioni di indifferenza rappresentate in binario con il gruppo di appartenenza
Procede di un passo avanti con la riduzione
Restituisce una lista stampabile dello stato corrente
Questa funzione serve nell'ultimo step a eliminare tutti i termini non essenziali, effettuando la ricerca della "copertura ottima"
private bool E_Contenuto( |
| ) |
Funzione che verifica che un termine essenziale sia contenuto in una stringa di termini essenziali
Nell'ultimo passaggio le rappresentazioni binarie vengono convertite in stringhe di termini essenziali
Funzione analoga a Stampa_Stato_Corrente() con la differenza che questa volta viene restituita la forma SOP finale della funzione semplificata.
Funzione che attua il metodo di Petrick e restituisce la forma semplificata ottenuta
private string Moltiplicazione( |
| ) |
Procedura che restituisce il prodotto tra due moltiplicandi nella forma POS es. (P0+P1+P2)(P3+P4)
private string Idempotenza_AND( |
| ) |
Procedura che effettua la semplificazione applicando la regola di idempotenza XX = X
private string Idempotenza_OR( |
| ) |
Procedura che effettua la semplificazione applicando la regola di idempotenza X + X = X
private string Assorbimento( |
| ) |
Procedura che effettua la semplificazione applicando la regola di assorbimento X + XY = X
private void Valuta_Meno_Costosi( |
| ) |
Valuta il costo letterale