Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Scrivere un programma che, dato un numero decimale intero positivo, lo converta in binario
- */
- #include <stdio.h>
- void conv(int, int []); // Prototipo della funzione di conversione
- void print_bin(int []); // Prototipo della funzione di stampa
- int main() {
- int v[9]; // il massimo numero convertibile è 2^9 - 1 = 511. Ogni posizione del vettore conterrà una cifrà binaria
- int dec, i; // dec = Numero da convertire, i = contatore
- for (i = 0; i < 9; i++) {
- v[i] = 0; // Pulisco il vettore
- }
- printf("Decimale (positivo, max. 511) --> ");
- scanf("%d", &dec);
- if(dec > 511){ // Controllo che non vengano inseriti numeri eccessivamente grandi
- printf("Hai inserito un numero troppo grande\n");
- return 1;
- }else if(dec < 0){ // O negativi
- printf("Hai inserito un numero negativo\n");
- return 1;
- }
- conv(dec,v);
- printf("Binario --> ");
- print_bin(v);
- return 0;
- }
- void conv(int dec, int v[]){ // Effettuo il passaggio di dec per valore, di v[] per riferimento (tutti i vettori vengono sempre passati per riferimento)
- int i=8; // i = contatore
- // N.B. : Poiché il primo resto costituisce la cifra meno significativa (quella più a sinistra) i dati saranno salvati a partire dall'ultima posizione. Quindi, la cifra che deve essere moltiplicata per 2^0 sarà salvata in v[9]
- while(dec > 0){ // Finché il numero decimale è maggiore di zero
- v[i] = dec % 2; // Calcolo il resto della divisione di dec / 2 (può essere 0 o 1) e lo salvo il valore nella posizione corrente di v
- dec = dec / 2; // calcolo il quoziente di dec / 2
- i--; // Decremento il contatore per passare alla successiva posizione del vettore
- }
- }
- void print_bin(int v[]){
- int i,zero = 1; // i = contatore, zero = variabile per trovare la prima cifra diversa da zero
- // Poiché i dati sono stati salvati a partire dall'ultima posizione, stampando il vettore a partire dalla posizione 0 la visualizzazione sarà corretta
- for (i = 0; i < 9; i++) { // Stampo il vettore partendo da 0 fino a 8
- if(zero == 1){ // Se zero è uguale a 1
- if(v[i] == 1){ // Controllo che il valore attuale sia uguale a zero. In caso affermativo, cambio il valore di zero
- zero = 0;
- printf("%d", v[i]);
- }
- }else{ // Se zero è diverso da 1, stampo il valore corrente
- printf("%d", v[i]);
- }
- }
- if(zero == 1){ // Se alla fine del ciclo, zero è ancora uguale a 0, vuol dire che il numero decimale era 0
- printf("0");
- }
- printf("\n"); // Vado a capo
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement