Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - SOMMA TRA NUMERI BINARI
Forum - C/C++ - SOMMA TRA NUMERI BINARI

Avatar
cremino89 (Normal User)
Newbie


Messaggi: 8
Iscritto: 09/04/2010

Segnala al moderatore
Postato alle 15:47
Venerdì, 09/04/2010
salve a tutti devo fare un programam che fa le somma tra due numeri binari.
ho un unico problema ,ovvero se ad esempio sommo 1111+1111..ad aogni perde il resto 1..nn capisco come fare ad indirizzarlo verso l'elemrnto del vettore precedente ...io sn giunt a questo ....

Codice sorgente - presumibilmente C++

  1. #include<iostream>
  2. #include<cmath>
  3. #include<vector>
  4. using namespace std;
  5.  
  6.  
  7. main()
  8. {
  9. int i,j;
  10. int vet1[5];
  11. int vet2[5];
  12.  
  13. cout<<"inserire i bit del prima stringa max[5]\n";
  14.  
  15. for(i=0;i<5;i++)
  16. {
  17.     cin>>vet1[i];
  18.  
  19. }
  20.  
  21. cout<<"inserire i bit del seconda stringa max[5]\n";
  22. for(j=0;j<5;j++)
  23. {
  24.     cin>>vet2[j];
  25.  
  26. }
  27.  
  28. cout<<"\n";
  29. for(i=5;i>=0;i--)
  30.  
  31. {
  32.   if(vet1[i]+vet2[i]==0)
  33.    cout<<"0";
  34.  
  35.    if(vet1[i]+vet2[i]==1)
  36.    cout<<"1";
  37.  
  38.  
  39.  
  40.    if(vet1[i]+vet2[i]==2){
  41.  
  42.    vet1[i+1]==vet1[i+1]+1;
  43.    cout<<"0";
  44.  
  45.  
  46.  
  47.    }
  48.  
  49. }
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  }




spero che nn sono del tutto fuori strada!


John Forbes Nash jr      
In prima elementare la mestra mi ha detto che ero nato con due porzioni di cervello e solo mezza porzione di cuore.
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 18:12
Venerdì, 09/04/2010
Ciao! Ho letto il tuo programma, e posso consigliarti di utilizzare una variabile per calcolare l' importo.

Ecco un esempio:
Codice sorgente - presumibilmente C++

  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7. int i=0,j=0,imp=0,s=0;
  8. int vet1[5];
  9. int vet2[5];
  10. int vet3[5];
  11.  
  12. cout<<"inserire i bit del prima stringa max[5]\n";
  13.  
  14. for(i=0;i<5;i++)
  15. {
  16.     cout<<"Inserimento del "<<i+1<<" elemento: ";
  17.     cin>>vet1[i];
  18. }
  19.  
  20. cout<<"inserire i bit del seconda stringa max[5]\n";
  21. for(j=0;j<5;j++)
  22. {
  23.     cout<<"Inserimento del "<<j+1<<" elemento: ";
  24.     cin>>vet2[j];
  25. }
  26.  
  27.  cout<<"\n";
  28.  for(i=0; i<5; i++)
  29.  {
  30.     s=vet1[i]+vet2[i]+imp;
  31.     vet3[i]=s % 2;
  32.     imp=s-vet3[i];
  33.  }
  34.  int l=0;
  35.  cout<<"\nStampa della somma:"<<endl;
  36.  for (l=4; l>=0; l--) cout<<vet3[l];
  37.  cout<<endl;
  38.  fflush(stdin);
  39.  getchar();
  40.  return 0;
  41. }



Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
cremino89 (Normal User)
Newbie


Messaggi: 8
Iscritto: 09/04/2010

Segnala al moderatore
Postato alle 12:59
Sabato, 10/04/2010
ti ringrazio....sn riuscito ;) grazie per l'aiuto!:pat:

cmq alla fine ho risolto cosi!

Codice sorgente - presumibilmente C#

  1. #include<iostream>
  2. #include<string>
  3.  
  4. using namespace std;
  5.  
  6. void bit_adder(bool , bool , bool , bool& , bool& );
  7. string adder(string, string,  bool&);
  8.  
  9. int main( ) {
  10.    string n1,n2;
  11.    bool overflow;
  12.    
  13.    cout << "Inserire il primo numero binario    ";
  14.    cin  >> n1;
  15.    
  16.    cout << "Inserire il secondo numero binario  ";
  17.    cin  >> n2;
  18.    
  19.    if(n1.length()!=n2.length()) {
  20.       cout << "i due numeri binari devono avere la stessa lunghezza\n";
  21.       return 1;  
  22.    }
  23.  
  24.    cout << "Il risulsato della somma binaria e' " << adder(n1,n2,overflow) << "\n";
  25.    if(overflow)
  26.       cout << "C'e' overflow \n";
  27.    else
  28.       cout << "Non c'e' overflow \n";  
  29.    return 0;
  30. }
  31.  
  32. string adder(string s1, string s2,  bool& of) {
  33.    int i, lunghezza=s1.length();  
  34.    bool x, y, z, c_in=false, c_out, segno_s1, segno_s2, segno_ris;
  35.    string risultato="";
  36.    for(i=lunghezza-1; i>=0; i--) {
  37.       x=s1.substr(i,1)=="1";
  38.       y=s2.substr(i,1)=="1";
  39.       bit_adder(x,y, c_in, z, c_out);
  40.       if(z)
  41.          risultato="1"+risultato;
  42.       else
  43.          risultato="0"+risultato;            
  44.       c_in=c_out;
  45.    }  
  46.    segno_s1=s1.substr(0,1)=="1";
  47.    segno_s2=s2.substr(0,1)=="1";
  48.    segno_ris=risultato.substr(0,1)=="1";
  49.    of= (segno_s1==segno_s2) && (segno_s1!=segno_ris);
  50.    return risultato;
  51. }
  52.  
  53. void bit_adder(bool a, bool b, bool c_in, bool& c, bool& c_out) {
  54.    if (c_in)
  55.       c=a==b;
  56.    else
  57.       c=(a || b) && !(a && b);
  58.    c_out= (a && b) || (a && c_in) || (b && c_in);  
  59. }




Ultima modifica effettuata da cremino89 il 10/04/2010 alle 13:09


John Forbes Nash jr      
In prima elementare la mestra mi ha detto che ero nato con due porzioni di cervello e solo mezza porzione di cuore.
PM Quote
Avatar
cremino89 (Normal User)
Newbie


Messaggi: 8
Iscritto: 09/04/2010

Segnala al moderatore
Postato alle 13:12
Sabato, 10/04/2010
avrei preferito trovare una soluzione tramite vettori ma il mio cervello ragiona a stringhe ..bho nn riesco propio a d espletare il resto tramite i vettori,anche seguendo il tuo programam marco nn riesco a capire l'utilita di questo for
Codice sorgente - presumibilmente Plain Text

  1. for(i=0; i<5; i++)
  2. {
  3.     s=vet1[i]+vet2[i]+imp;
  4.     vet3[i]=s % 2;
  5.     imp=s-vet3[i];
  6. }



potresti dirmi a cosa serve?perche nn sono riuscito a capirlo!


John Forbes Nash jr      
In prima elementare la mestra mi ha detto che ero nato con due porzioni di cervello e solo mezza porzione di cuore.
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 14:16
Sabato, 10/04/2010
Testo quotato

Postato originariamente da cremino89:

avrei preferito trovare una soluzione tramite vettori ma il mio cervello ragiona a stringhe ..bho nn riesco propio a d espletare il resto tramite i vettori,anche seguendo il tuo programam marco nn riesco a capire l'utilita di questo for
Codice sorgente - presumibilmente Plain Text

  1. for(i=0; i<5; i++)
  2. {
  3.     s=vet1[i]+vet2[i]+imp;
  4.     vet3[i]=s % 2;
  5.     imp=s-vet3[i];
  6. }



potresti dirmi a cosa serve?perche nn sono riuscito a capirlo!



In definitiva è molto semplice:

1- pre ogni ciclo, calcola la somma dell' i_esimo elemento dei vettori v1, v2 e
   l' importo.

2- il risultato, viene salvati nell' i_esima posizione del vettore v3.
   (viene calcolato il resto di due, rispetto alla somma)

3- l' importo viene determinato per differenza tra s e il risultato.

Infine si stampa il risultato.


Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
cremino89 (Normal User)
Newbie


Messaggi: 8
Iscritto: 09/04/2010

Segnala al moderatore
Postato alle 23:29
Sabato, 10/04/2010
ci sono adesso grazie:):k:

Ultima modifica effettuata da cremino89 il 10/04/2010 alle 23:37


John Forbes Nash jr      
In prima elementare la mestra mi ha detto che ero nato con due porzioni di cervello e solo mezza porzione di cuore.
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 12:49
Domenica, 11/04/2010
Di nulla!


Nulla va più veloce della luce, quindi rilassati.
PM Quote