PDA

View Full Version : xem hộ tớ bài này với



nhat_thuc88tb
28-10-2010, 16:31
đề bài: đổi một số từ hệ 10 sang hệ 2.
program doiso;
const n = 50;
type stack = array[1..n] of integer;
var s : stack;
sodu, t, x, kq : integer;
{-------------------------------------}
procedure push(var s : stack; var t : integer; x : integer);
begin
if (t >= n) then write('stack tran')
else begin
t := t + 1;
s[t] := x;
end;
end;
{-------------------------------------}
procedure pop(var s : stack; var t : integer; var w : integer);
begin
if (t <= 0) then write('stack rong')
else begin
t := t - 1;
w := s[t+1];
end;
end;
{-------------------------------------}
procedure doi(x : integer; var w: integer);
begin
while (x > 0) do
begin
sodu := x mod 2;
push(s, t, sodu);
x := x div 2;
end;
while (t > 0) do
begin
pop(s, t, w);
write(w);
end;
end;
{--------------------------------------}
begin
repeat
writeln;
write('so muon doi la: '); readln(x);
doi(x, kq);
writeln('ket qua la : ', kq);
until x = 0;
end.

máterl
30-10-2010, 21:30
test thử đi.. thế mà cũng hỏi

Binhthcslt
31-10-2010, 21:14
Bài này rất đơn giản thôi mà, nhat_thuc lam gi ma phuc tạp vây? Theo mình xử lí theop 1 trong 2 cách sau sẽ đơn giản hơn:
+ Dùng xâu S để lưu lại số dư của N cho 2 (Chia liên tiếp đến khi n=0) rồi viết lại S heo thứ tự ngược lại.
+ Dùng mảng phụ để lưu số dư, rồi làm tương tự như C1.
Bạn thử xem nhé, mình lười viết code lắm, bài này học sinh của mình làm rất tốt. Hi.

nhat_thuc88tb
01-11-2010, 08:21
mình làm theo cách của bạn rùi. bọn mình đang học về stack nên phải làm bài này theo cách đó.
bạn thử chạy chương trình và sửa giúp mình phần chương trình chính. vd số muốn đổi là 23. theo chương trình của mình kết quả in ra la '10111 ket qua la 1' ma không phải là 'ket qua la 10111'.mình không biết sửa thế nào cả.