Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * File: main.c
- * Author: dean
- *
- * L'operazione di somma in un elaboratore viene eseguita sommando al primo termine
- * il secondo rappresentati in binario.
- * Si scriva un programma che riceve come dati di ingresso due STRINGHE ASCII contenenti
- * solo CARATTERI '0' e '1', oltre al '\0' al termine delle stringhe, che rappresentano i due operandi,
- * e una terza stringa in cui dovrà essere memorizzato il risultato dell'operazione somma
- * tra il primo e il secondo operando.
- * NOTE:
- * - il numero di cifre su cui sono rappresentati gli operandi non e' noto a priori, ma e' lo stesso
- * per entrambi ed e' pari al numero di cifre più uno su cui andra' rappresentato il risultato
- *
- * - il numero di cifre su cui sono rappresentati gli operandi e la somma puo' essere al massimo 256.
- * - si assuma che il vettore di caratteri passato come terzo parametro abbia dimensione sufficiente
- * a contenere un numero di bit pari al numero di bit più uno su cui sono rappresentati gli operandi
- * ESEMPI:
- * s1: 0100110100101
- * s2: 0100110100101
- * s3: 1001101001010
- * s1: 00000111
- * s2: 00001001
- * s3: 00011110
- * s1: 1111
- * s2: 0001
- * s3: 10000 (questa operazione ha dato luogo ad overflow)
- * * Created on 10 febbraio 2014, 15.26
- */
- #include <stdio.h>
- #include <stdlib.h>
- #define N 256
- /* Prototipi di funzione */
- int somma (char s1[], char s2[], char s3[]);
- char somma_binaria (char op1, char op2, char riporto_precedente, char *riporto);
- int main() /* NON RICHIESTO DAL COMPITO */
- {
- char s1[N], s2[N], s3[N]; int overflow;
- printf ("s1: ");
- scanf ("%s", s1);
- printf ("s2: ");
- scanf ("%s", s2);
- overflow = somma (s1, s2, s3);
- /* IL CONTROLLO DELL’OVERFLOW NON E' RICHIESTO DAL COMPITO */
- printf ("s3: %s\n", s3);
- if (overflow)
- printf ("Si e` verificato overflow.\n");
- return EXIT_SUCCESS;
- }
- /* La funzione somma calcola la somma s3 dei due operandi s1 e s2 */
- int somma (char s1[], char s2[], char s3[])
- {
- int n, i;
- char riporto='0', rip_prec='0';
- for(n=0;s1[n]!='\0';n++){}
- s3[n+1]='\0';
- for(i=n;i>=0;i--){
- s3[i]=somma_binaria(s1[i-1], s2[i-1], rip_prec, &riporto);
- rip_prec=riporto;
- }
- s3[0]=riporto;
- }
- /* La funzione calcola la somma di due bit e di un riporto in entrata fornendo il
- riusltato e il riporto generato */
- char somma_binaria (char op1, char op2, char riporto_precedente, char *riporto)
- {
- int s;
- s=op1+op2+riporto_precedente-(3*'0');
- if(s>1){
- s-=2;
- *riporto='1';
- }
- else
- *riporto='0';
- return s+'0';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement