AngoLinux

Conversione di un numero da decimale a binario e viceversa

- A cura del Prof. Stefano Salvi -


Siamo arrivati agli esercizi in linguaggio C. In questo momento i ragazzi conoscono i vettori ma non sanno ancora usare i parametri.

Il testo dell'esercizio è il seguente:

Scrivere un programma C che:
  • Legga un numero decimale da tastiera
  • Converta il numero decimale in binario, immagazzinando ogni singolo bit in un diverso elemento di un vetore di interi (usare una funzione)
  • Visualizzi il vettore così ottenuto (usare una funzione)
  • Legga un numero binario da tastiera
  • Converta il numero binario letto in decimale (usare una funzione)
  • Stampi il numero convertito
Utilizzare delle funzioni per i vari compiti, come indicato.

Una possibile soluzione è la seguente:
// Tizio - Caio - 3AIN
// Conversione di un numero da decimale a binario e viceversa

#include<stdio.h>
#include<math.h>

#define DIM 32	/* Dimensione del numero in bit, quindi del vettore */

void visualizza();	// Visualizza il contenuto del vettore
void binario();		// Converte da numero intero a binario nel vettore
void decimale();	// Converte da binario nel vettore a numero intero

int i,j;	// Variabili per i cicli
int vet[DIM];	// Vettore che conterra' l'immagine binaria
int b;		// Numero 'binario' introdotto dall'utente
int d;		// Numero decimale introdotto dall'utente
int dec;	// Valore decimale del numero binario
int res;	// Resto della divisione (nella conversione)

void main()
{
	// Inizializzazione
	for(i=0;i<DIM;i++)
	{
		vet[i]=0;
	}
	// Lettura del numero da convertire
	printf("Numero decimale: "); scanf("%d",&b);
	// Converte il numero in 'b' e lo lascia nel vettore 'vet' in binario
	binario();
	// Visualizza il contenuto del vettore 'vet'
	visualizza();
	// Lettura del numero da convertire
	printf("Numero binario: "); scanf("%d",&d);
	// Converte il numero binario in 'd', lasciando il risultato in 'dec'
	decimale();
	// Visualizza il risultato
	printf("IL numero decimale e': %d\n",dec);
	getchar();
}

/* Prende il numero contenuto nella variabile 'b'
 * e lo converte in binario, lasciando il risultato
 * nel vettore 'vet'.
 * Ogni elemento di 'vet' vale 0 o 1 (quindi un valore binario).
 * Il bit piu' siginficativo e' immagazzinato all'indice 0, il
 * meno significativo all'indice DIM-1.
 * La variabile 'b' viene azzerata nel processo
 */
void binario()
{
	i=0;		// Inizializza indice
	while(i<DIM)	// Fino all'untimo elemento
	{
		if((b%2)==0)	// Se il bit meno significativo e' 0
		{
			vet[DIM-1-i]=0;	// metto 0 nell'elemento del vettore
		} else {
			vet[DIM-1-i]=1;	// se no, metto 1
		}
		b=b/2;		// Elimino ilbit meno significativo per passare al prossimo
		++i;		// conto i bit elaborati
	}	
}

/* Visualizza il contenuto del vettore 'vet', dal primo elemento all'ultimo
 */
void visualizza()
{
	for(j=0;j<DIM;j++)
	{
		printf("%d ",vet[j]);
	}
	printf("\n\n");
}	

/* Il numero contenuto in 'b' e' un'intero costituito solo di cifre 1 e 0
 * Viene considerato come numero binario e convertito in decimale.
 * Il numero originale viene azzerato alla fine
 * Il numero convertito viene depositato in 'dec'.
 */
void decimale()
{
	// 'i' e' l'indice del 'bit', 'd' il numero 'binario' da convertire
	for(i=0;d > 0;i++)
	{
		res=d%10;		// Estrae il 'bit' meno significativo
		d=d/10; 		// Elimina il 'bit' meno significativo dal numero
		dec=dec+res*pow(2,i);	// Aggiunge il bit, con il suo peso, al risultato
	}
        
}

Per provare il programma, scaricare il sorgente, compilarlo con il comando cc binario.c ed eseguirlo con il comando ./a.out.


[Home Page dell'ITIS "Fermi"] [Indice Terza] [Precedente] [Successivo]

© Ing. Stefano Salvi - Released under GPL licence