Witam. Mam napisać program - sumator binarny 5 bitowy- zczytujący z pliku wartości liczb. Staram się przerobić program, tak aby w przypadku, gdy wartość sumy cyfr przekracza 9, układ korekcyjny powinien wygenerować przeniesienie oraz skorygować wynik tak, aby suma przeniesienia i wyniku skorygowanego była równa sumie dodawanych cyfr. Nie mam pojęcia jak to zrobić. Dziękuje za pomoc.
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
using namespace std;
class Liczba
{
private:
string liczba;
int *tablica;
int rozmiar;
public:
friend class Baza;
void wczytaj(istream &i){string tmp ; getline(i , liczba);}
void wypisz(ostream &o){o << liczba;}
void zamiana();
int* zwr_tab() {return tablica;}
string zwr_lic() {return liczba;}
};
void Liczba::zamiana()
{
rozmiar = liczba.length();
tablica = new int [rozmiar];
for(int i=0;i<liczba.length();++i)
{
tablica[i] = liczba[i] - 48;
}
}
class Baza
{
private:
Liczba *t;
int ile, wynik[100];
public:
void oblicz_rozmiar(const string &str);
void wpisz(const string &str);
void wypisz();
void dodaj();
void ww(){for(int i=0;i<100;++i){wynik[i]=0;}}
void wynikk();
void ostatni();
};
void Baza::oblicz_rozmiar(const string & str)
{
string tmp;
int licznik = 0;
ifstream plik(str.c_str());
while(!plik.eof())
{
getline(plik,tmp);
++licznik;
}
plik.close();
ile = licznik;
}
void Baza::wpisz(const string &str)
{
string strr;
ifstream plik(str.c_str());
t = new Liczba [ile];
for(int i=0;i<ile;++i)
{
t[i].wczytaj(plik);
t[i].zamiana();
}
}
void Baza::wypisz()
{
for(int i=0;i<ile;++i)
{
for(int j=0;j<t[i].rozmiar;++j)
{
cout<<t[i].tablica[j];
}
cout<<' '<< endl;
}
}
void Baza::dodaj()
{
for(int i=0;i<ile;++i)
{
for(int g=0 , j=t[i].rozmiar-1 ; j>-1 ; --j , ++g)
{
wynik[g] += t[i].tablica[j];
}
}
}
void Baza::wynikk()
{
for(int i=0;i<100;++i)
{
if(wynik[i]%2==0 && wynik[i] != 0 && wynik[i] != 1)
{
wynik[i+1] += (wynik[i]/2);
wynik[i] = 0;
}
if(wynik[i]%2!=0)
{
wynik[i+1] += (wynik[i]/2);
wynik[i] = 1;
}
if(wynik[i]==0)
{
wynik[i] = 0;
}
if(wynik[i]==1)
{
wynik[i] =1;
}
}
}
void Baza::ostatni()
{
for(int i=100;i>-1;--i)
{
if(wynik[i] == 1)
{
for(int j=i;j>-1;--j)
{
cout<<' '<<wynik[j];
}
break;
}
}
}
int main()
{
Baza b;
b.ww();
b.oblicz_rozmiar("zsumuj.txt");
b.wpisz("zsumuj.txt");
b.wypisz();
b.dodaj();
b.wynikk();
cout<<"\n\nWynik podanych liczb binarnych to: " << endl;
b.ostatni();
getch();
return 0;
}
Plik zsumuj.txt zawiera