Conversione da base 10 a base X (Utilizzo della pila) Corso di Programmazione in Java – Esercizio n° 008 Esercizio n° 008 Conversione da base 10 a base X (Utilizzo della pila) Istituto Statale di Istruzione Superiore “F. Enriques”
IDEA: Utilizzare una pila dove memorizzare i resti. Corso di Programmazione in Java – Esercizio n° 008 Scrivere un programma che richiede un numero intero in base dieci ed una nuova base da 2 a 9 e che in seguito effettua la conversione del numero da notazione decimale ad una notazione espressa nella base specificata. La conversione si effettua con ripetute divisioni per la base in cui si sta convertendo il numero prendendo i resti delle divisioni in ordine inverso. Quindi i dati di input del nostro problema sono 2: il numero da convertire e la base di destinazione. IDEA: Utilizzare una pila dove memorizzare i resti. Per ottenere i dati nell’ordine corretto, basterà semplicemente svuotare la pila. Ricordatevi che dentro i vector, stack, queue, ecc.. non ci possono stare i tipi fondamentali, ma solamente le rispettive classi involucro. Istituto Statale di Istruzione Superiore “F. Enriques”
Come si effettua la conversione da base 10 a base X? Corso di Programmazione in Java – Esercizio n° 008 Come si effettua la conversione da base 10 a base X? Facciamo subito un esempio che vale più di 1000 parole… Voglio convertire il numero 135 da base decimale (base 10) a base binaria (base 2) Useremo la seguente convensione: 135 2 = 135 diviso 2 uguale a 62 resto 1 1 62 135 2 1 67 2 1 33 2 1 16 2 135 convertito in base 2 è uguale a: 10000111 8 2 4 2 2 2 1 2 1 Istituto Statale di Istruzione Superiore “F. Enriques”
Molto probabilmente avrete già capito come funziona il meccanismo… Corso di Programmazione in Java – Esercizio n° 008 Molto probabilmente avrete già capito come funziona il meccanismo… si prende il numero iniziale e si effettuano divisioni successive conservando ogni volta il resto che si ottiene… Una volta che il quoziente ottenuto è uguale a zero, il numero convertito si ottiene concatenando i resti prendendoli nel senso opposto in cui si sono ottenuti. Non a caso per questo esercizio vi si richiede di utilizzare come struttura dati di supporto una Pila!! Suggerimento: Utilizzate “import java.util.Stack” che contiene già implementata una Pila basate su un vettore per cui infischiandovene di come è implementata, potete direttamente istanziarla ed utilizzarne i metodi relativi, ovvero pop, push..ecc. Es.: import java.util.Stack … Stack MiaPila= new Stack( ); MiaPila.push(…qualcosa…); \\ Per inserire qualcosa in cima alla pila MiaPila.pop(…qualcosa…); \\ Per togliere qualcosa dalla cime della pila RICORDATEVI CHE DOVETE USARE LE CLASSI INVOLUCRO!!! Istituto Statale di Istruzione Superiore “F. Enriques”
public static String decToBasex(int n, int x) { String b= ""; Corso di Programmazione in Java – Esercizio n° 008 Innanzitutto facciamo un metodo che effettua la conversione utilizzando una pila. public static String decToBasex(int n, int x) { String b= ""; Stack S= new Stack(); do S.push(new Integer (n % x)); n = n / x; } while(n!=0); b= b + ((Integer) S.pop()).toString(); } while(!S.isEmpty()); return b; } Istituto Statale di Istruzione Superiore “F. Enriques”
public static void main(String[] args) { int numero=0, nuovabase=0; Corso di Programmazione in Java – Esercizio n° 008 public static void main(String[] args) { int numero=0, nuovabase=0; DataInputStream stream = new DataInputStream(System.in); String stringa,risultato; System.out.println("Inserisci il numero intero in base 10 da convertire..."); try { stringa= stream.readLine(); numero=Integer.valueOf(stringa); } catch(Exception e) System.out.println("Errore durante lettura del numero da convertire"); System.exit(0); … Istituto Statale di Istruzione Superiore “F. Enriques”
System.out.println("Inserisci la nuova base..."); try { Corso di Programmazione in Java – Esercizio n° 008 … System.out.println("Inserisci la nuova base..."); try { stringa= stream.readLine(); nuovabase=Integer.valueOf(stringa); } catch(Exception e) System.out.println("Errore durante lettura del numero da convertire"); System.exit(0); risultato = DecToBasex(numero,nuovabase); System.out.println("Il numero "+numero+ " in base "+nuovabase+“ è uguale a: "+risultato); }; Istituto Statale di Istruzione Superiore “F. Enriques”