Đổi cơ số!!!
2 posters
Trang 1 trong tổng số 1 trang
Đổi cơ số!!!
Bài toán chung ta có thể đổi 1 số ở cơ số a sang cơ số b bất kì. Dạng hay dùng nhất là đổi từ hệ Thập phân sang Nhị phân và ngược lại.
* Thập phân -> Nhị phân: Chia liên tiếp cho 2 được phần dư viết ngược lại.
ví dụ: Số 28 đổi sang nhị phân sẽ là: 111000
Có rất nhiều cách để code chương trình này, cách ngắn gọn nhất là dùng xâu kí tự:
S:='';
while n<>0 do
begin
if n mod 2 = 0 then Insert('0',S,1) else Insert('1',S,1);
n:=n div 2;
end;
{xâu S thu được chính là số nhị phân cần đổi sang}
* Nhị phân -> Thập phân: (số nhị phân là xâu S có độ dài là n = length(S))
Cách đổi: Số thập phân = S[1]*2^(n-1) + S[2]*2^(n-2)+.....+ S[n-1]*2^1 + S[n]*2^0
quy ước: 2^0 = 1
ví dụ: Số nhị phân 11100 = 1*2^4 + 1*2^3 + 1+2^2 + 0*2^1 + 0*2^0 = 28
Có nhiều cách để code chương trình này, dưới đây là 1 cách đơn giản:
n:=length(S);
for i:=1 to n do
Begin
if i = n then temp:=1 else temp:=0;
if (S[i] = '1') and (i < n) then
begin
temp:=1;
for j:=1 to n-i do temp := temp*2;
end;
So := So + temp;
end;
{So thu được chính là số ở hệ cơ số 10 cần tìm}
Mọi người có ý tưởng code hay hơn thì đóng góp nhé!
* Thập phân -> Nhị phân: Chia liên tiếp cho 2 được phần dư viết ngược lại.
ví dụ: Số 28 đổi sang nhị phân sẽ là: 111000
Có rất nhiều cách để code chương trình này, cách ngắn gọn nhất là dùng xâu kí tự:
S:='';
while n<>0 do
begin
if n mod 2 = 0 then Insert('0',S,1) else Insert('1',S,1);
n:=n div 2;
end;
{xâu S thu được chính là số nhị phân cần đổi sang}
* Nhị phân -> Thập phân: (số nhị phân là xâu S có độ dài là n = length(S))
Cách đổi: Số thập phân = S[1]*2^(n-1) + S[2]*2^(n-2)+.....+ S[n-1]*2^1 + S[n]*2^0
quy ước: 2^0 = 1
ví dụ: Số nhị phân 11100 = 1*2^4 + 1*2^3 + 1+2^2 + 0*2^1 + 0*2^0 = 28
Có nhiều cách để code chương trình này, dưới đây là 1 cách đơn giản:
n:=length(S);
for i:=1 to n do
Begin
if i = n then temp:=1 else temp:=0;
if (S[i] = '1') and (i < n) then
begin
temp:=1;
for j:=1 to n-i do temp := temp*2;
end;
So := So + temp;
end;
{So thu được chính là số ở hệ cơ số 10 cần tìm}
Mọi người có ý tưởng code hay hơn thì đóng góp nhé!
chimsedinang- Học viên 2
- Tổng số bài gửi : 15
Điểm : 130
Danh tiếng : 20
Ngày tham gia : 16/08/2012
Re: Đổi cơ số!!!
đây là code em làm thử
- Code:
{2->10}
uses crt;
var so,i,j,n,temp:integer;
s:string;
begin
clrscr;
write('He 2: ');readln(s);
n:=length(s);
for i:=1 to n do
begin
if i=n then temp:=1 else temp:=0;
if (s[i]='1') and (i<n) then
begin
temp:=1;
for j:=1 to n-i do temp:=temp*2;
end;
so:=so+temp;
end;
writeln('He 10: ',so);
readln;
end.
Được sửa bởi tansonpro9x ngày Thu Sep 13, 2012 2:45 pm; sửa lần 1.
Re: Đổi cơ số!!!
th cop nguyên bài của bạn về chạy ngon lành mà. Bạn chạy lại xem nếu vẫn lỗi thì gửi file .pas vào mail mình xem nhé!
chimsedinang- Học viên 2
- Tổng số bài gửi : 15
Điểm : 130
Danh tiếng : 20
Ngày tham gia : 16/08/2012
Re: Đổi cơ số!!!
e chạy bài 2>10 với g trị 28 có kq là 11100 nhưng chạy 10>2 với g trị 11100 có kq là 57. thầy xem hộ em với
Re: Đổi cơ số!!!
ok, sorj co' chut' thieu sot.
cau lenh: if i=n then temp:=1 else temp:=0; phai viet day du la:
if (i=n) and (s[n]='1') then temp:=1 else temp:=0;
ban xem lai nhe!
cau lenh: if i=n then temp:=1 else temp:=0; phai viet day du la:
if (i=n) and (s[n]='1') then temp:=1 else temp:=0;
ban xem lai nhe!
chimsedinang- Học viên 2
- Tổng số bài gửi : 15
Điểm : 130
Danh tiếng : 20
Ngày tham gia : 16/08/2012
Re: Đổi cơ số!!!
em đã thay thử nhưng kq là 56 với g trị 11100 của hệ 2. thầy sửa hộ e với
và thầy cũng nên cho code vào khung [code ] ... [/code] cho dễ nhìn nha
và thầy cũng nên cho code vào khung [code ] ... [/code] cho dễ nhìn nha
Re: Đổi cơ số!!!
đây là code tự làm của em nhưng vẫn hơi có chút sai sót, mong thầy sửa giúp
- Code:
uses crt;
var i,n,a,b,lth,h10:integer;
x,h2:string;
begin
clrscr;
write('He 2: ');readln(h2);
lth:=0;
h10:=0;
for i:=1 to length(h2) do
begin
n:=-1;
for i:=1 to length(h2) do
begin
inc(n);
end;
x:=h2[1];
b:=1;
if x='1' then for i:=1 to n do b:=b*2;
delete(h2,1,1);
h10:=h10+b;
end;
writeln('He 10: ',h10);
readln;
end.
Re: Đổi cơ số!!!
ý tưởng xóa các kí tự đi cũng hay, tuy nhiên bạn bị nhầm ở 2 chỗ
- Vòng For. nó sẽ chạy hết theo cái length(h2) ban đầu chứ không thay đổi theo cái h2 bên trong nó.
- khi gán b:=2*b. Nếu kí tự cuối cùng là 1 thì ta chỉ cộng thêm 1 (do 2 mũ 0 = 1) nhưng của bạn + với 2
bạn có thể sửa theo gợi ý sau:
P/S: th đã chạy lại code lần trước. với 11100 cho kết quả là 28. Bạn kiểm tra lại trên máy bạn nhé!
- Vòng For. nó sẽ chạy hết theo cái length(h2) ban đầu chứ không thay đổi theo cái h2 bên trong nó.
- khi gán b:=2*b. Nếu kí tự cuối cùng là 1 thì ta chỉ cộng thêm 1 (do 2 mũ 0 = 1) nhưng của bạn + với 2
bạn có thể sửa theo gợi ý sau:
- Code:
uses crt;
var i,n,a,b,lth,h10:integer;
x,h2:string;
begin
clrscr;
write('He 2: '); readln(h2);
lth:=0;
h10:=0;
while length(h2) > 1 do
begin
if h2[1] = '1' then
begin
b:=1;
for i:=1 to length(h2)-1 do b:=b*2;
h10:=h10+b;
end;
delete(h2,1,1);
end;
if h2[1] = '1' then h10:=h10+1;
writeln('He 10: ',h10);
readln;
end.
P/S: th đã chạy lại code lần trước. với 11100 cho kết quả là 28. Bạn kiểm tra lại trên máy bạn nhé!
chimsedinang- Học viên 2
- Tổng số bài gửi : 15
Điểm : 130
Danh tiếng : 20
Ngày tham gia : 16/08/2012
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết
|
|