PDA

View Full Version : Code xử lí phép toán trừ nhị phân bằng C++. Không ra kết quả đúng



Yoh
09-10-2011, 12:48 PM
#include<iostream>
#include<string.h>

using namespace std;

class SoNP
{
private:
char x[41],y[41],z[41];
int i;
public:
void nhap();
void tru();
void hien();
void sobu2(char []);
};
void SoNP::nhap()
{
cout<<"\nNhap so nhi phan A: ";cin>>x;
cout<<"\nNhap so nhi phan B: ";cin>>y;
}
void SoNP::sobu2(char b[])
{
int kt=0;
if (b[0]=='1')
{
kt=1;
int nho;
if (b[9]-1==-1)
{
b[9]='1';
nho=1;
}
else
{
b[9]='0';
nho=0;
}
for (int i=8;i>=0;i--)
if (b[i]-nho==-1)
{
b[i]='1';
nho=1;
}
else if (b[i]-nho==0)
{
nho=0;
b[i]='0';
}
else
nho=0;

for (int i=0;i<10;i++)
if (b[i]=='0')
b[i]='1';
else
b[i]='0';
}
}
void SoNP::tru()
{
int nho=0;
for(i=9;i>=0;i--)
{
if(x[i]-y[i]-nho==-1)
{
z[i+1]='1';
nho=1;
}
else if(x[i]-y[i]-nho==0)
{
z[i+1]='0';
nho=0;
}
else
{
z[i+1]=x[i]-y[i]-nho;
nho=0;
}
}
if(nho==1)
z[0]='1';
}
void SoNP::hien()
{
char z[41];
cout<<"\nA-B= "<<z<<endl;
}
int main()
{
char x[41],y[41];
SoNP a;
a.nhap();
a.sobu2(x);
a.sobu2(y);
a.tru();
a.hien();
system("pause");
}
E chạy nhưng k ra kết quả!! Mọi người giúp e với! E xin cảm ơn!

birthis
09-10-2011, 02:11 PM
Bạn xem lại đoạn code này:

if (b[0]==1)
{
...
}
Có phải là nhầm lẫn ko, và có phải ý bạn là thế này:

if (b[0]=='1')
{
...
}

PhuongPH
09-10-2011, 02:23 PM
Các biến x,y,z của bạn là kiểu char , biến nho là kiểu int , sao bạn lấy 2 cái này mà thực hiện các operator với nhau dc .

Yoh
09-10-2011, 02:49 PM
Bạn xem lại đoạn code này:

if (b[0]==1)
{
...
}
Có phải là nhầm lẫn ko, và có phải ý bạn là thế này:

if (b[0]=='1')
{
...
}
Mình đã sửa lại! Nhưng nó k hiện ra kết quả! (:-)??(:-)??

Yoh
09-10-2011, 02:53 PM
Các biến x,y,z của bạn là kiểu char , biến nho là kiểu int , sao bạn lấy 2 cái này mà thực hiện các operator với nhau dc .
Vậy mình phải làm thế nào hả bạn?? Thuật toán thì mình nghĩ ra r, nhưng viết code thấy sai tùm lum quá!! Bạn debug giúp mình đc k?? Cảm ơn bạn! :X:X

birthis
09-10-2011, 03:07 PM
Mình đã sửa lại! Nhưng nó k hiện ra kết quả! (:-)??(:-)??

Bạn sửa thế cũng như không. Ví dụ đoạn này:

if (b[9]-1==-1)
b[i] là 1 char, tốt nhất là bạn so sánh nó với 1 char, chứ viết như trên là sai rồi.
Viết lại như thế này:

if (b[9] == '0')
Mà mình nghĩ lấy bù 2 của bạn sao lại phức tạp thế.
Theo thuật toán là đảo bit tất cả chuỗi đầu vào rồi cộng thêm 1 và chuỗi đã đảo bit là được bù 2 rồi mà.

Yoh
09-10-2011, 09:18 PM
Bạn sửa thế cũng như không. Ví dụ đoạn này:

if (b[9]-1==-1)
b[i] là 1 char, tốt nhất là bạn so sánh nó với 1 char, chứ viết như trên là sai rồi.
Viết lại như thế này:

if (b[9] == '0')
Mà mình nghĩ lấy bù 2 của bạn sao lại phức tạp thế.
Theo thuật toán là đảo bit tất cả chuỗi đầu vào rồi cộng thêm 1 và chuỗi đã đảo bit là được bù 2 rồi mà.
Bạn rảnh viết dùm mình nha!! Mình k biết đổi dấu bit nên làm theo cách này! Ai ngờ sai cơ bản! :mad:(D:)>:(|