Oppure

Loading
09/04/10 13:47
cremino89
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 ....

#include<iostream>
#include<cmath>
#include<vector>
using namespace std;


main()
{
int i,j;
int vet1[5];
int vet2[5];

cout<<"inserire i bit del prima stringa max[5]\n";

for(i=0;i<5;i++)
{
    cin>>vet1[i];

}

cout<<"inserire i bit del seconda stringa max[5]\n";
for(j=0;j<5;j++)
{
    cin>>vet2[j];

}

cout<<"\n";
for(i=5;i>=0;i--)

{
  if(vet1[i]+vet2[i]==0)
   cout<<"0";

   if(vet1[i]+vet2[i]==1)
   cout<<"1";



   if(vet1[i]+vet2[i]==2){

   vet1[i+1]==vet1[i+1]+1;
   cout<<"0";



   }

}







 }






spero che nn sono del tutto fuori strada!
aaa
09/04/10 16:12
Poggi Marco
Ciao! Ho letto il tuo programma, e posso consigliarti di utilizzare una variabile per calcolare l' importo.

Ecco un esempio:
#include<iostream>

using namespace std;

int main(int argc, char *argv[])
{
int i=0,j=0,imp=0,s=0;
int vet1[5];
int vet2[5];
int vet3[5];

cout<<"inserire i bit del prima stringa max[5]\n";

for(i=0;i<5;i++)
{
    cout<<"Inserimento del "<<i+1<<" elemento: ";
    cin>>vet1[i];
}

cout<<"inserire i bit del seconda stringa max[5]\n";
for(j=0;j<5;j++)
{
    cout<<"Inserimento del "<<j+1<<" elemento: ";
    cin>>vet2[j];
}

 cout<<"\n";
 for(i=0; i<5; i++)
 {
    s=vet1[i]+vet2[i]+imp;
    vet3[i]=s % 2;
    imp=s-vet3[i];
 }
 int l=0;
 cout<<"\nStampa della somma:"<<endl;
 for (l=4; l>=0; l--) cout<<vet3[l];
 cout<<endl;
 fflush(stdin);
 getchar();
 return 0;
}
aaa
10/04/10 10:59
cremino89
ti ringrazio....sn riuscito ;) grazie per l'aiuto!:pat:

cmq alla fine ho risolto cosi!

#include<iostream>
#include<string>

using namespace std;

void bit_adder(bool , bool , bool , bool& , bool& );
string adder(string, string,  bool&);

int main( ) {
   string n1,n2;
   bool overflow;
   
   cout << "Inserire il primo numero binario    ";
   cin  >> n1;
   
   cout << "Inserire il secondo numero binario  ";
   cin  >> n2;
   
   if(n1.length()!=n2.length()) {
      cout << "i due numeri binari devono avere la stessa lunghezza\n";
      return 1;  
   }
  
   cout << "Il risulsato della somma binaria e' " << adder(n1,n2,overflow) << "\n";
   if(overflow)
      cout << "C'e' overflow \n";
   else
      cout << "Non c'e' overflow \n";   
   return 0;
}

string adder(string s1, string s2,  bool& of) {
   int i, lunghezza=s1.length();   
   bool x, y, z, c_in=false, c_out, segno_s1, segno_s2, segno_ris;
   string risultato="";
   for(i=lunghezza-1; i>=0; i--) {
      x=s1.substr(i,1)=="1";
      y=s2.substr(i,1)=="1";
      bit_adder(x,y, c_in, z, c_out);
      if(z)
         risultato="1"+risultato;
      else
         risultato="0"+risultato;            
      c_in=c_out;
   }   
   segno_s1=s1.substr(0,1)=="1";
   segno_s2=s2.substr(0,1)=="1";
   segno_ris=risultato.substr(0,1)=="1";
   of= (segno_s1==segno_s2) && (segno_s1!=segno_ris);
   return risultato;
}

void bit_adder(bool a, bool b, bool c_in, bool& c, bool& c_out) {
   if (c_in) 
      c=a==b;
   else
      c=(a || b) && !(a && b);
   c_out= (a && b) || (a && c_in) || (b && c_in);   
}


Ultima modifica effettuata da cremino89 10/04/10 11:09
aaa
10/04/10 11:12
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
for(i=0; i<5; i++)
{
    s=vet1[i]+vet2[i]+imp;
    vet3[i]=s % 2;
    imp=s-vet3[i];
} 


potresti dirmi a cosa serve?perche nn sono riuscito a capirlo!
aaa
10/04/10 12:16
Poggi Marco
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
for(i=0; i<5; i++)
{
    s=vet1[i]+vet2[i]+imp;
    vet3[i]=s % 2;
    imp=s-vet3[i];
} 


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.
aaa
10/04/10 21:29
cremino89
ci sono adesso grazie:):k:
Ultima modifica effettuata da cremino89 10/04/10 21:37
aaa
11/04/10 10:49
Poggi Marco
Di nulla!
aaa