#include /*consente l'uso di printf e scanf*/ #include /*consente l'uso di getch*/ #define N 16 void tasto(void){ getch(); }/*tasto*/ int leggi (const char*st){ int n; printf("%s", st); scanf("%d", &n); return n; }/*leggi*/ void Leggi_num (int *num_A, int *num_B){ *num_A=leggi("Inserire il primo numero decimale : "); *num_B=leggi("Inserire il secondo numero decimale : "); }/*Leggi_num*/ void Convert_decTobin (int n, int *a){ int i, j; for(i=N-1; i>=0; i--){ a[i]= (n%2)!=0; n/=2; }/*for*/ for (j=0;j<=N-1;j++) printf("%d",a[j]); }/*Convert_decTobin*/ /* IP: A[] array contente il primo numero in binario IP: B[] array contente il secondo numero in binario OP: Sum[] array contente la somma dei due numeri in binario */ void Somma_Bin (int *A, int *B, int *Sum){ int i, j, k; for (j=0; j< N; j++) Sum[j]= 0; for (i=N-1; i>=0; i--){ if (A[i]>0 && B[i]>0){ Sum[i-1]+=1; }else{ Sum[i]+= A[i]+B[i]; if (Sum[i]==2){ Sum[i]= 0; Sum[i-1]= 1; }/*if*/ }/*if-else*/ }/*for*/ for (k=0;k<=N-1;k++) printf("%d",Sum[k]); }/*Somma*/ /*Converte tutte le cifre in binario*/ void ConvertiDati(int num_A, int num_B, int *A,int *B){ Convert_decTobin(num_A, A); printf("\n\n"); Convert_decTobin(num_B, B); printf("\n\n"); }/*ConvertiDati*/ /* IOP: B[] array contente il numero in binario da complementare OP: Complemento del numero in binario */ void Comp_Base(int *B){ int i, j, k, stop=N-1; for (i=N-1; B[i]!=1; i--) stop=i-1; for (j=stop-1;j>=0; j--) (B[j]==0)? (B[j]=1) : (B[j]=0); for (k=0; k<=N-1; k++) printf("%d", B[k]); printf("\n\n"); }/*Comp_Base*/ /* IP: A[] array contente il primo numero in binario IP: B[] array contente il secondo numero in binario OP: Differenza tra i numeri binari */ Diff_Bin(int *A, int *B, int *sum){ printf("Facciamo il complemento alla base del secondo termine:\n\n"); Comp_Base(B); Somma_Bin(A, B, sum); printf("\n"); }/*Diff_Bin*/ /*Gestisce le operazione da eseguire in base all'indicazione 1 o 2*/ void Scegli_OP (int num_A,int num_B, int *A,int *B,int *Sum, int Oper){ printf("1 = Addizione\n2 = Sottrazione\n"); Oper=leggi("Inserire l'operazione da effettuare : "); printf("\n"); ConvertiDati(num_A, num_B, A, B); (Oper==1) ? Somma_Bin(A, B, Sum) : Diff_Bin(A, B, Sum); }/*Scegli_OP*/ /* IP: n numero da convertire NUM_N+ OP: a[] Numero convertito in binario */ void Risultato(int *R){ int i, Ris_num=0,j=0; if (R[0]==1) Comp_Base(R); for (i=N-1; i>=0; i--,j++) Ris_num += (R[i]*(pow(2, j))); printf("Il risultato in decimale (se negativo, complementato) : %d\n", Ris_num); }/*Risultato*/ int main (void){ int num_A, num_B, Oper, A[N], B[N], Sum[N]; Leggi_num(&num_A,&num_B); Scegli_OP(num_A,num_B,A,B,Sum,Oper); Risultato(Sum); tasto(); }/*main*/