Advertisement
Mazamin

Completo 2A Binario

Jan 18th, 2019
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.64 KB | None | 0 0
  1. /*
  2.  * File:   main.c
  3.  * Author: dean
  4.  *
  5.  * L'operazione di somma in un elaboratore viene eseguita sommando al primo termine
  6.  * il secondo rappresentati in binario.
  7.  * Si scriva un programma che riceve come dati di ingresso due STRINGHE ASCII contenenti
  8.  * solo CARATTERI '0' e '1', oltre al '\0' al termine delle stringhe, che rappresentano i due operandi,
  9.  * e una terza stringa in cui dovrà essere memorizzato il risultato dell'operazione somma
  10.  * tra il primo e il secondo operando.
  11.  
  12.  * NOTE:
  13.  * - il numero di cifre su cui sono rappresentati gli operandi non e' noto a priori, ma e' lo stesso
  14.  *   per entrambi ed e' pari al numero di cifre più uno su cui andra' rappresentato il risultato
  15.  *
  16.  * - il numero di cifre su cui sono rappresentati gli operandi e la somma puo' essere al massimo 256.
  17.  * - si assuma che il vettore di caratteri passato come terzo parametro abbia dimensione sufficiente
  18.  *   a contenere un numero di bit pari al numero di bit più uno su cui sono rappresentati gli operandi
  19.  
  20.  * ESEMPI:
  21.  
  22.  * s1: 0100110100101
  23.  * s2: 0100110100101
  24.  * s3: 1001101001010
  25.  
  26.  * s1: 00000111
  27.  * s2: 00001001
  28.  * s3: 00011110
  29.    
  30.  * s1:  1111
  31.  * s2:  0001
  32.  * s3: 10000 (questa operazione ha dato luogo ad overflow)
  33.  
  34.  *  * Created on 10 febbraio 2014, 15.26
  35.  */
  36.  
  37. #include <stdio.h>
  38. #include <stdlib.h>
  39.  
  40. #define N 256
  41.  
  42. /* Prototipi di funzione */
  43. int somma (char s1[], char s2[], char s3[]);
  44. char somma_binaria (char op1, char op2, char riporto_precedente, char *riporto);
  45.  
  46. int main() /* NON RICHIESTO DAL COMPITO */
  47. {
  48.     char s1[N], s2[N], s3[N]; int overflow;
  49.     printf ("s1: ");
  50.     scanf ("%s", s1);
  51.     printf ("s2: ");
  52.     scanf ("%s", s2);
  53.     overflow = somma (s1, s2, s3);
  54.     /* IL CONTROLLO DELL’OVERFLOW NON E' RICHIESTO DAL COMPITO */
  55.     printf ("s3: %s\n", s3);
  56.     if (overflow)
  57.         printf ("Si e` verificato overflow.\n");
  58.     return EXIT_SUCCESS;
  59. }
  60.  
  61. /* La funzione somma calcola la somma s3 dei due operandi s1 e s2 */
  62. int somma (char s1[], char s2[], char s3[])
  63. {
  64.     int n, i;
  65.     char riporto='0', rip_prec='0';
  66.     for(n=0;s1[n]!='\0';n++){}
  67.     s3[n+1]='\0';
  68.     for(i=n;i>=0;i--){
  69.         s3[i]=somma_binaria(s1[i-1], s2[i-1], rip_prec, &riporto);
  70.         rip_prec=riporto;
  71.     }
  72.     s3[0]=riporto;
  73. }
  74.  
  75. /* La funzione calcola la somma di due bit e di un riporto in entrata fornendo il
  76.  riusltato e il riporto generato */
  77. char somma_binaria (char op1, char op2, char riporto_precedente, char *riporto)
  78. {
  79.     int s;
  80.     s=op1+op2+riporto_precedente-(3*'0');
  81.     if(s>1){
  82.         s-=2;
  83.         *riporto='1';
  84.     }
  85.     else
  86.         *riporto='0';
  87.     return s+'0';
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement