Advertisement
u53r

Covertitore decimale-binario

Dec 2nd, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.50 KB | None | 0 0
  1. /*
  2.   Scrivere un programma che, dato un numero decimale intero positivo, lo converta in binario
  3. */
  4.  
  5. #include <stdio.h>
  6. void conv(int, int []); // Prototipo della funzione di conversione
  7. void print_bin(int []); // Prototipo della funzione di stampa
  8. int main() {
  9.   int v[9]; // il massimo numero convertibile è 2^9 - 1 = 511. Ogni posizione del vettore conterrà una cifrà binaria
  10.   int dec, i; // dec = Numero da convertire, i = contatore
  11.   for (i = 0; i < 9; i++) {
  12.     v[i] = 0; // Pulisco il vettore
  13.   }
  14.   printf("Decimale (positivo, max. 511) --> ");
  15.   scanf("%d", &dec);
  16.   if(dec > 511){ // Controllo che non vengano inseriti numeri eccessivamente grandi
  17.     printf("Hai inserito un numero troppo grande\n");
  18.     return 1;
  19.   }else if(dec < 0){ // O negativi
  20.     printf("Hai inserito un numero negativo\n");
  21.     return 1;
  22.   }
  23.   conv(dec,v);
  24.   printf("Binario --> ");
  25.   print_bin(v);
  26.   return 0;
  27. }
  28.  
  29. 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)
  30.   int i=8; // i = contatore
  31.   // 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]
  32.   while(dec > 0){ // Finché il numero decimale è maggiore di zero
  33.     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
  34.     dec = dec / 2; // calcolo il quoziente di dec / 2
  35.     i--; // Decremento il contatore per passare alla successiva posizione del vettore
  36.   }
  37. }
  38.  
  39. void print_bin(int v[]){
  40.   int i,zero = 1; // i = contatore, zero = variabile per trovare la prima cifra diversa da zero
  41.   // Poiché i dati sono stati salvati a partire dall'ultima posizione, stampando il vettore a partire dalla posizione 0 la visualizzazione sarà corretta
  42.   for (i = 0; i < 9; i++) { // Stampo il vettore partendo da 0 fino a 8
  43.     if(zero == 1){ // Se zero è uguale a 1
  44.       if(v[i] == 1){ // Controllo che il valore attuale sia uguale a zero. In caso affermativo, cambio il valore di zero
  45.         zero = 0;
  46.         printf("%d", v[i]);
  47.       }
  48.     }else{ // Se zero è diverso da 1, stampo il valore corrente
  49.       printf("%d", v[i]);
  50.     }
  51.   }
  52.   if(zero == 1){ // Se alla fine del ciclo, zero è ancora uguale a 0, vuol dire che il numero decimale era 0
  53.     printf("0");
  54.   }
  55.   printf("\n"); // Vado a capo
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement