Diễn đàn câu lạc bộ
Bạn cần đăng nhập hoặc đăng kí để có thể gửi bài và sử dụng các chức năng của thành viên.

Join the forum, it's quick and easy

Diễn đàn câu lạc bộ
Bạn cần đăng nhập hoặc đăng kí để có thể gửi bài và sử dụng các chức năng của thành viên.
Diễn đàn câu lạc bộ
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Đổi cơ số!!!

2 posters

Go down

Đổi cơ số!!! Empty Đổi cơ số!!!

Bài gửi by chimsedinang Wed Sep 05, 2012 12:23 am

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é!

chimsedinang
Học viên 2
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

Về Đầu Trang Go down

Đổi cơ số!!! Empty Re: Đổi cơ số!!!

Bài gửi by tansonhn98 Wed Sep 05, 2012 7:10 pm

đâ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.
em chạy thử toàn ra 100% 0 hoặc 1 thui. thầy sửa hộ e với


Được sửa bởi tansonpro9x ngày Thu Sep 13, 2012 2:45 pm; sửa lần 1.
tansonhn98
tansonhn98
Học viên 3
Học viên 3

Tổng số bài gửi : 28
Điểm : 148
Danh tiếng : 12
Ngày tham gia : 08/08/2012
Tuổi : 26
Đến từ : Việt Nam

https://clbtin.forumvi.com/

Về Đầu Trang Go down

Đổi cơ số!!! Empty Re: Đổi cơ số!!!

Bài gửi by chimsedinang Sat Sep 08, 2012 5:31 pm

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
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

Về Đầu Trang Go down

Đổi cơ số!!! Empty Re: Đổi cơ số!!!

Bài gửi by tansonhn98 Sat Sep 08, 2012 8:54 pm

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
tansonhn98
tansonhn98
Học viên 3
Học viên 3

Tổng số bài gửi : 28
Điểm : 148
Danh tiếng : 12
Ngày tham gia : 08/08/2012
Tuổi : 26
Đến từ : Việt Nam

https://clbtin.forumvi.com/

Về Đầu Trang Go down

Đổi cơ số!!! Empty Re: Đổi cơ số!!!

Bài gửi by chimsedinang Sun Sep 09, 2012 10:47 am

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!

chimsedinang
Học viên 2
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

Về Đầu Trang Go down

Đổi cơ số!!! Empty Re: Đổi cơ số!!!

Bài gửi by tansonhn98 Sun Sep 09, 2012 10:57 am

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 Crying or Very sad Crying or Very sad
và thầy cũng nên cho code vào khung [code ] ... [/code] cho dễ nhìn nha Laughing Laughing
tansonhn98
tansonhn98
Học viên 3
Học viên 3

Tổng số bài gửi : 28
Điểm : 148
Danh tiếng : 12
Ngày tham gia : 08/08/2012
Tuổi : 26
Đến từ : Việt Nam

https://clbtin.forumvi.com/

Về Đầu Trang Go down

Đổi cơ số!!! Empty Re: Đổi cơ số!!!

Bài gửi by tansonhn98 Wed Sep 12, 2012 9:10 pm

đâ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.
tansonhn98
tansonhn98
Học viên 3
Học viên 3

Tổng số bài gửi : 28
Điểm : 148
Danh tiếng : 12
Ngày tham gia : 08/08/2012
Tuổi : 26
Đến từ : Việt Nam

https://clbtin.forumvi.com/

Về Đầu Trang Go down

Đổi cơ số!!! Empty Re: Đổi cơ số!!!

Bài gửi by chimsedinang Wed Sep 12, 2012 11:49 pm

ý 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:
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
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

Về Đầu Trang Go down

Đổi cơ số!!! Empty Re: Đổi cơ số!!!

Bài gửi by Sponsored content


Sponsored content


Về Đầu Trang Go down

Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết