|
Introdciamo a questo punto il concetto di opearazione bit a bit, facendone implementare
una tra due numeri binari immagazzinati in vettori.
Il testo dell'esercizio è il seguente:
Scrivere un programma C che:
- Legga due numeri tra 0 e 255 (controllando il numero immesso)
- Li converta in binario, mettendoli in due vetori da 8 interi, un bit per intero
- Esegua l'operazione AND bit a bit tra i due numeri, mettendo il risultato in un terzo
vettore
- Stampi i due numeri convertiti in binario ed il risultato dell'operazione logica
Utilizzare delle funzioni con i parametri per i vari compiti.
Una possibile soluzione è la seguente:
// Tizio - Pinco - 3AIN - 08/02/02
// Realizza la funzione AND bit a bit tra due parole binarie
// (senza utilizzare l'operatore unario &)
#include <stdio.h>
#define DIM 8 /* Dimensione del dato */
void binario(int n,int vet[]); // Converte il numero 'n' nel vettore 'vet'
void and(int vetA[],int vetB[],int vetC[]); // Esegue l' AND tra vetA e vetB e lascia il
// risultato in vetC
void visualizza (int vet []); // Visualizza il vettore 'vet'
main()
{
int vetA[DIM]; // Primo operando in binario
int vetB[DIM]; // Secondo operando in binario
int vetC[DIM]; // Risultato in binario
int a,b; // Operandi letti, interi
int j; // Variabile per ciclo
// Inizializza i tre 'numeri binari' a 0
for(j=0;j<DIM;j++)
{
vetA[j]=0;
vetB[j]=0;
vetC[j]=0;
}
// Legge il primo operando
do {
printf("A: "); scanf("%d",&a);
}while(a<0 || a>255); // Verifica che sia un numero a 8 bit (0..255)
// Legge il secondo operando
do {
printf("B: "); scanf("%d",&b);
}while(b<0 || b>255); // Verifica che sia un numero a 8 bit (0..255)
binario(a,vetA); // Converte il primo operando
binario(b,vetB); // Converte il secondo operando
and(vetA,vetB,vetC); // Calcola l'operatore
// Visualizza i risultati
visualizza (vetA);
printf (" and ");
visualizza (vetB);
printf (" = ");
visualizza (vetC);
printf ("\n");
}
/* converte un intero in binario
*
* Il numero da convertire viene passato in 'n'
* Il numero convertito viene lasciato in 'vet', il bit
* piu' significativo in vet [0].
* Gli elementi piu' significativi del vettore non vengono inizializzati
*/
void binario(int n,int vet[])
{
int j=0; // Contatore
while(n!=0) // Ciclo, fino a che ci sono bit in 'n'
{
vet[DIM-1-j]=n%2; // Mette in 'vet' il bit meno significativo
n=n/2; // Elimina il bit convertito
++j; // Incrementa il contatore
}
}
/* Calcola l'AND bit a bit tra due vettori di 'bit'
*
* I due vettori di DIM elementi di partenza sono 'vetAì e 'vetB'.
* Il risultato viene lasciato in 'vetC'
*/
void and(int vetA[],int vetB[],int vetC[])
{
int i; // Contatore
for(i=0;i<DIM;i++) // Per ogni elemento del vettore
{
if((vetA[i]!=0) && (vetB[i]!=0)) // And tra le due cifre
{
vetC[i]=1; // Se l'AND da' 'vero', metto 1
} else {
vetC[i]=0; // Altrimenti 0
}
}
}
/* Stampa su di una riga gli elementi dell vettore 'binario' vet
*/
void visualizza (int vet [])
{
int i; // Contatore
for(i=0;i<DIM;i++) // Per ogni elemento del vettore
{
printf("%2d",vet[i]); // Lo stampa
}
}
|
Per provare il programma, scaricare il sorgente, compilarlo
con il comando cc and.c ed eseguirlo con il comando ./a.out.
[Home Page dell'ITIS "Fermi"]
[Indice Terza]
[Precedente]
[Successivo]
© Ing. Stefano Salvi - Released under GPL licence
|