|
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
|