Note di rilascio del simulatore AlgoritmoDiBooth, versione 1.0 Architettura del software Le classi principali del progetto sono: Main, Utility, Booth, e BoothBitPair. Classe MAIN: La classe Main è la principale, essa contiene : -Attributi Static numero1 e numero2 ed un metodo Main. Gli attributi numero1 e numero2 sono di tipo String, essi sono adibiti al ruolo di ricevere i dati di input immessi dall'utente e quindi passare tali parametri ai due metodi LaunchBooth e LaunchBoothBitPair. -Il Metodo Main contiene le istruzioni necessarie al fine di rendere i dati di input consoni per l'elaborazione, quindi vi è un blocco di istruzioni che serve a filtrare i dati immessi dall'utente, per esempio si controlla se i dati immessi siano numeri binari. --------------------------------------------------------------------- La classe Utility, contiene tutte le utility per preparare i dati di input, essa contiene: -Attributi:Nessuno -Metodi:isBin, LoadOnArray, FindMax, FindMax, Filler, Mirroring, AddOne, Add, LogicF, PrintMatrix, PrintArray, Initialize, DoMoltiplicandoPer2, DoComp2Per2, DoComp2, FillingMatrix, DoZero, ExtendsSign, Somma, SommaPer2. -Il Metodo "isBin" controlla che i numeri inseriti dall'utente siano conformi, ovvero in forma binaria. Prende in input una STRING e restituisce un valore BOOLEAN di tipo true se il valore in inpur è di tipo binario, viceversa, falso se non lo è. -Il Metodo "LoadOnArray" carica su di un array un numero binario. Prende in input un valore di tipo STRING ed esso viene restituito sotto forma di array sempre di tipo STRING. -Il Metodo "FindMax" trova il numero con la lunghezza maggiore e lo restituisce . Prende in input due valori di tipo STRING e restituisce in output quello con la lunghezza maggiore sempre di tipo STRING. -Il Metodo "FindMin" trova il numero con la lunghezza minore e lo restituisce . Prende in input due valori di tipo STRING e restituisce in output quello con la lunghezza minore sempre di tipo STRING. -Il Metodo "Filler" in base alla lunghezza massima riempie il numero con la lunghezza minore di 0 (a sinistra). Prende in input due valori, uno di tipo STRING che rappresenta il valore da estendere con i zeri e la lunghezza da raggiungere tramite l'estensione. In output restituisce il numero esteso con gli zeri. -Il Metodo "Mirroring" specchia i dati ricevuti. In input esso riceve un array di tipo STRING ed in output restituisce il medesimo array con i medesimi valori ma specchiati, come se fossero letti dalla fine verso l'inizio dell'array. -Il Metodo "AddOne" effettua una somma tra la riga di una matrice ed il valore "1". Il metodo prende in input una matrice di tipo STRING ed un valore INT che rappresenta la riga da sommare al valore "1". In output restituisce la somma tra la riga e il valore "1" mediante un valore di tipo STRING. -Il Metodo "Add" effettua una somma progressiva e restituisce un valore ricavato dalla somma di righe di una matrice. Prende in input una matrice di STRING ed effettua somme progressive delle righe della matrice restituendone alla fine un unico valore STRING ottenuto dalla somma di tutte le righe. -Il Metodo "LogicF" effettua la somma tra due numeri binari. Prende in input due array di tipo STRING, effettua la somma tra questi due numeri e restituisce quest'ultima sotto forma di array di STRING. -Il Metodo "PrintMatrix" stampa a video una matrice. Prende in input una matrice di STRING e ne stampa il contenuto a video. -Il Metodo "PrintArray" stampa a video un Array. Prende in input un array di valori che possono essere di tipo STRING o INT e ne stampa il contenuto a video. -Il Metodo "Initialize" inizializza a video un array o una matrice. Prende in input un array di valori che possono essere di tipo STRING o INT e lo/la inizializza. -Il Metodo "DoMoltiplicandoPer2" prende un array di interi che è il Moltiplicando ed effettua la moltiplicazione per due del moltiplicando. -Il Metodo "DoComp2Per2" prende un array di interi che è il Moltiplicando ed effettua la moltiplicazione per due del complemento a due del moltiplicando. -Il Metodo "DoComp2" prende un array di interi che è il Moltiplicando ed effettua il complemento a due del Moltiplicando. -Il Metodo "FillingMatrix" inserisce nella matrice frastagliata il valore corretto passato per parametro. -Il Metodo "DoZero" prende un array di interi che è il Moltiplicando e ritorna un array di egual dimensioni del moltiplicando all'interno pieno di zeri. -Il Metodo "ExtendsSign" prende in input un array di interi, la lunghezza massima e un booleano, tale funzione estende il segno del numero che in lunghezza risulta più piccolo, ed attraverso il booleano, inserisce o meno il bit implicito a destra della posizione LSB. -Il Metodo "Somma" effettua la somma richiamando il metodo "SommaPer2" -Il Metodo "SommaPer2" come un sommatore prende in input due array, li somma e restituisce la somma parziale, appena si finisce di sommare si avra la somma finale di tutti i valori passati per parametro. --------------------------------------------------------------------- La classe Booth, contiene l'algoritmo vero e proprio di Booth con metodi utilizzati solamente per l'algoritmo. -Gli attributi sono: new_n1, new_n2, moltiplicando, moltiplicatore, Old_Coded_molt, Matrix, count_zero, arr_c, matrix_j, pos_ext, risultato_plus_one, risultato. -I metodi sono: LaunchBooth e CodingMoltiplicatore. La classe BoothBitPair, contiene l'algoritmo di Booth con la codifica Bit-Pair del moltiplicatore, e contiene metodi esclusivi dell'algoritmo: - LaunchBooth, il cui compito è quello di preparare i dati di input ( moltiplicatore e moltiplicando ), inserendoli in due array di interi, estendendo eventualmente il segno se uno dei due input è più piccolo dell'altro. - CodingMolt, questo metodo viene chiamato all'interno del metodo LaunchBooth, il suo compito è quello di codificare opportunamente il moltiplicatore secondo la codifica bit-pair. - LoadInMatrix, tale metodo viene chiamato all'interno del metodo LaunchBooth prepara la matrice frastagliata con tutti i dati che servono. In pratica inserisce nella matrice, innanzitutto il moltiplicando e il moltiplicatore, calcola tutti i valori necessari per riempire la matrice (Complemento a 2 del moltiplicando, Complemento a 2 per 2 del moltiplicando, e così via..), successivamente controlla il moltiplicatore e inserisce i valori opportuni nelle righe successive della matrice attraverso un metodo chiamato FillingMatrix all'interno della classe Utility. --------------------------------------------------------------------- Tecniche di programmazione: Programmazione in Java orientata agli oggetti (OOP). --------------------------------------------------------------------- Collaudi I collaudi sono stati effettuati su ambiente Linux, con il SO Ubuntu 12.04 e su Windows, con il SO Windows Seven, non riscontrando alcuna differenza di esecuzione sia in Linux sia in Windows. Idee per ulteriori sviluppi: Eventuali migliorie sono elencate di seguito: 1. Snellimento del Codice. 2. Inserimento di una interfaccia grafica. 3. Inserimento di una modalità passo-passo che spiega le azioni effettuate ad ogni passaggio. 4. Far in modo da inserire i numeri decimali, e dare in output la moltiplicazione dei rispettivi numeri in complemento a 2.