Quine_McCluskey.​QuineMcClusky
public
Quine_McCluskey.​QuineMcClusky
Properties
termini_minimi
public int[] termini_minimi { get; set }

I termini minimi della funzione

dontcare
public int[] dontcare { get; set }

Le condizioni di indifferenza

numero_variabili
public int numero_variabili

Il numero di variabili logiche nella funzione. Il massimo numero di variabili è 26(rappresentate dalle lettere maiuscole dalla A alla Z)

Variables
rappresentazioni_binarie
private List<string> rappresentazioni_binarie

Lista di stringhe contenente le rappresentazioni binarie degli implicanti.

temp
private List<string> temp

Una lista temporanea di stringhe utilizzata durante la computazione. Conterrà semplicemente una copia della lista precedente.

termini_essenziali
private List<string> termini_essenziali

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.

gruppi
private int[] gruppi

Il numero di elementi per ogni gruppo, l'indice dell'array rappresenta il gruppo.

fine
public bool fine

Indica che l'algoritmo di semplificazione è giunto al termine.  (La ricerca degli implicanti primi essenziali viene effettuata dopo che l'algoritmo di semplificazione è terminato).

Functions
Combinazioni
private IEnumerable<string> Combinazioni(
string input
)

Permette di risalire ai termini minimi implicati nella riduzione partendo da una rappresentazione binaria ridotta

Returns

Tutte le possibili combinazioni ottenute sostituendo agli underscores nella stringa o 0 o 1.

Converti_in_Binario
private void Converti_in_Binario()

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.

Converti_In_Decimale
private int Converti_In_Decimale(
string n_bin
)

Converte in decimale una rappresentazione binaria

Conta_Gruppo
private int Conta_Gruppo(
string rappresentazione_binaria
)

Funzione che conta gli uno presenti nella rappresentazione e ne restituisce il gruppo di appartenenza

Ordina_per_Gruppi
private void Ordina_per_Gruppi()

Funzione che ordina la lista rappresentazioni_binarie in funzione dei gruppi

Gruppo_Massimo
private int Gruppo_Massimo()

Restituisce il gruppo massimo tra gli implicanti

Inizializza_Gruppi
private void Inizializza_Gruppi()
Confronta
private string Confronta(
string a,
string b
)

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.

Rimuovi_Duplicati
private void Rimuovi_Duplicati(
List<stringlista
)

Rimuove i termini duplicati da una lista

Rimuovi_Termini_non_Essenziali
private void Rimuovi_Termini_non_Essenziali()

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.

Primo_Step
public List<string> Primo_Step()

Questa funzione restituisce una lista stampabile contenente semplicemente i termini minimi e le condizioni di indifferenza rappresentate in binario con il gruppo di appartenenza

Step_Successivo
public void Step_Successivo()

Procede di un passo avanti con la riduzione

Stampa_Stato_Corrente
public List<string> Stampa_Stato_Corrente()

Restituisce una lista stampabile dello stato corrente

Implicanti_Primi_Essenziali
private List<string> Implicanti_Primi_Essenziali()

Questa funzione serve nell'ultimo step a eliminare tutti i termini non essenziali, effettuando la ricerca della "copertura ottima"

E_Contenuto
private bool E_Contenuto(
string a,
string b
)

Funzione che verifica che un termine essenziale sia contenuto in una stringa di termini essenziali

Ultimo_Passaggio
private void Ultimo_Passaggio()

Nell'ultimo passaggio le rappresentazioni binarie vengono convertite in stringhe di termini essenziali

Stampa_Stato_Finale
public List<string> Stampa_Stato_Finale()

Funzione analoga a Stampa_Stato_Corrente() con la differenza che questa volta viene restituita la forma SOP finale della funzione semplificata.

Stampa_Stato_Finale_Petrick
public List<string> Stampa_Stato_Finale_Petrick()

Funzione che attua il metodo di Petrick e restituisce la forma semplificata ottenuta

Moltiplicazione
private string Moltiplicazione(
string a,
string b
)

Procedura che restituisce il prodotto tra due moltiplicandi nella forma POS es. (P0+P1+P2)(P3+P4)

Idempotenza_AND
private string Idempotenza_AND(
string mul
)

Procedura che effettua la semplificazione applicando la regola di idempotenza XX = X

Idempotenza_OR
private string Idempotenza_OR(
string mul
)

Procedura che effettua la semplificazione applicando la regola di idempotenza X + X = X

Assorbimento
private string Assorbimento(
string mul
)

Procedura che effettua la semplificazione applicando la regola di assorbimento X + XY = X

Valuta_Meno_Costosi
private void Valuta_Meno_Costosi(
List<stringtermini
)

Valuta il costo letterale