All pastes #335818 Raw Edit

Something

public text v1 · immutable
·published 2007-02-01 16:48 UTC
rendered paste body
#include <stdio.h>   /*consente l'uso di printf e scanf*/
#include <conio.h>   /*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*/