Algoritmi di conversione in basi numeriche diverse
description
Transcript of Algoritmi di conversione in basi numeriche diverse
Algoritmi di conversione in basi numeriche diverse
Lab Programmazione - turno 2
aa 2008/2009
AA2006/07
Lab ProgrammazioneL. Capra
2
Conversione da base X a base 10
• Input : stringa di “cifre” e base numerica (int)• Es
“12B” (numero) 16 (base)
• Output: valore intero corrispondente in base 10
1 · 162 + 2 · 161 + 11 · 160 = 299
(n.b. 11 è il valore corrispondente alla cifra ‘B’)
• Cosa bisogna usare: i metodi length, charAt, indexOf della classe String
AA2006/07
Lab ProgrammazioneL. Capra
3
Conversione da base X a base 10
• algoritmo per convertire un qualunque numero scritto in base x (2 ≤ x ≤ 16) in base decimale
• Insieme dei simboli
base 2: ‘0’,’1’
base 3: ‘0’,’1’,’2’
…
base 11: ‘0’,…,’9’,’A’
…
base 16: ‘0’,…,’9’,’A’,…,’F’
AA2006/07
Lab ProgrammazioneL. Capra
4
Conversione da base X a base 10
• Bisogna controllare che i simboli presenti nella stringa da convertire siano consistenti rispetto alla base• ad es. se la base è 8 solo i simboli ‘0’,..,’7’ potranno
comparire nella stringa
• Bisogna trovare un modo per associare a ogni simbolo il corrispondente valore• ad es. il valore di ‘A’ è 10, quello di ‘F’ è 15
AA2006/07
Lab ProgrammazioneL. Capra
5
Conversione da base X a base 10
• Idea: rappresentare l’insieme dei simboli (cifre) con una stringa di caratteri (basi da 2 a 16)
• String simboli = “0123456789ABCDEF”;
• valore numerico di una cifra ≡ posizione carattere corrispondente nella stringa simboli
• usando la funzione indexOf è semplicissimo trovare il valore numerico di un simbolo-cifra
• Es. indexOf(simboli , ‘A’) 10
AA2006/07
Lab ProgrammazioneL. Capra
6
Conversione inversa: da base 10 in base X
• Input : numero intero e nuova base• Es: 299
16
• Output: stringa di cifre corrispondente al num. in base x• Es. (base 16) : “12B“
• Algoritmo: 299 16 18 16
1 16
“12B”
11 (B)2
1
resti
AA2006/07
Lab ProgrammazioneL. Capra
7
Conversione da base 10 a base X
• Problema: dato il valore del resto (es. 11), come troviamo il simbolo corrispondente (‘B’)?
• Soluzione
• usiamo il metodo charAt e nuovamente la stringa simboli
• Es. charAt(simboli,11) ‘B’
AA2006/07
Lab ProgrammazioneL. Capra
8
Conversione da base x a base y
• Input: una stringa di cifre, la vecchia base (int x) e la base in cui vogliamo convertire (int y)
• Algoritmo (semplicissimo)
• convertiamo la stringa da base x a base 10 • detto z il risultato (int), convertiamo z in base y• output: una stringa di cifre