|
Proseguiamo con gli esercizi sui cambiamenti di base. Ancora i ragazzi non sanno usare i
parametri.
Il testo dell'esercizio è il seguente:
Scrivere un programma C che:
- Legga un numero decimale da tastiera
- Chieda la base in cui convertirlo (scelta tra binario, ottale ed esadecimale),
verificando la scelta fatta dall'utente
- Converta il numero nella base richiesta, lasciando il numero convertito in un array
di interi, una cifra per ogni intero (usare una funzione per ogni base)
- Stampi il numero convertito (usare una funzione)
Utilizzare delle funzioni per i vari compiti, come indicato.
Una possibile soluzione è la seguente:
// Tizio - Caio - 3AIN
// converte un numero decimale in una base a scelta (ottale, binario,
// esadecimale)
#include<stdio.h>
#define DIM 32 // dimensione di un vettore int (4 byte)
void visualizza(); // visualizza il numero convertito nella base scelta
void binario(); // converte il numero decimale in binario
void ottale(); // converte il numero decimale in ottale
void esadecimale(); // converte il numero decimale in esadecimale
int vet[DIM]; // vettore per memorizzare le cifre del numero convertito
int n; // numero decimale da convertire
main() // funzione principale
{
int i; // Conatore
int k; // scelta del menu iniziale
for(i=0;i<DIM;i++) // azzeramento elementi del vettore
{
vet[i]=0;
}
printf("Numero decimale: "); scanf("%d",&n); // immissione del valore
printf("\n1) Binario\n2) Ottale\n3) Esadecimale\n\nScelta: "); // menu
do {
scanf("%d",&k);
} while(k<1 || k>3); // controllo sui valori del menu (data entry)
if(k==1) binario();
else if(k==2) ottale();
else if(k==3) esadecimale();
visualizza();
}
/* Funzione che converte il numero in 'n' in binario nel vettore 'vet'
*
* Ogni elemento di vet contiene un numero tra 0 e 1
* Il primo elemento di vet (vet [0]) contiene la cifre piu' significativa,
* l'ultimo (vet [DIM-1]) la meno significativa
*/
void binario()
{
int i; // Conatore
for (i = 0;i<DIM; i++)// memorizzazione a partire dall'ultimo
{ // elemento del vettore
vet[DIM-1-i]=n%2; // resto della divisione
n=n/2; // quoziente della divisione
}
}
/* Funzione che converte il numero in 'n' in ottale nel vettore 'vet'
*
* Ogni elemento di vet contiene un numero tra 0 e 7
* Il primo elemento di vet (vet [0]) contiene la cifre piu' significativa,
* l'ultimo (vet [DIM-1]) la meno significativa
*/
void ottale()
{
int i; // Conatore
for (i = 0;i<DIM; i++)// memorizzazione a partire dall'ultimo
{ // elemento del vettore
vet[DIM-1-i]=n%8; // resto della divisione
n=n/8;
}
}
/* Funzione che converte il numero in 'n' in esadecimale nel vettore 'vet'
*
* Ogni elemento di vet contiene un numero tra 0 e 15
* Il primo elemento di vet (vet [0]) contiene la cifre piu' significativa,
* l'ultimo (vet [DIM-1]) la meno significativa
*/
void esadecimale()
{
int i; // Conatore
for (i = 0;i<DIM; i++)// memorizzazione a partire dall'ultimo
{ // elemento del vettore
vet[DIM-1-i]=n%16; // resto della divisione
n=n/16; // quoziente della divisione
}
}
/* Funzione che visualizza il contenuto del vettore 'vet'
*/
void visualizza()
{
int j; // contatore
for(j=0;j<DIM;j++)
{
if(vet[j]>=10) printf("%c ",vet[j]+ 'A' - 10); // controllo per la
else printf("%c ",vet[j]+'0'); // visulizzazione delle
} // lettere esadecimali
// visualizza anche gli zeri a sinistra del numero convertito
printf("\n\n");
}
|
Per provare il programma, scaricare il sorgente, compilarlo
con il comando cc conversione.c ed eseguirlo con il comando ./a.out.
[Home Page dell'ITIS "Fermi"]
[Indice Terza]
[Precedente]
[Successivo]
© Ing. Stefano Salvi - Released under GPL licence
|