Tải bản đầy đủ (.doc) (15 trang)

thuat toan va so nguyen

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (82.03 KB, 15 trang )

Dữ liệu kiểu số nguyên
I / Loại : Thờng dùng 5 loại chính :
T/T Tên Miền giá trị Kích thớc
1 Byte 0..255 1 Byte
2 ShortInt -128 .. 127 1 Byte
3 Interger -32768 .. 32767 2 Byte
4 Word 0 .. 65535 2 Byte
5 LongInt -2147483648..2147483647 4 Byte
II / Các cách biểu diễn số nguyên :
1 - Dạng thập phân : Dùng các kí tự 0 .. 9
2 - Dạng nhị phân : Dùng 2 kí tự 0 và 1
3 - Dạng Hecxa : Dùng các kí tự 0,..9, và các chữ A,B,..,F
4 - Dạng cơ số n : Dùng n kí tự là 0,..,9,A,..F,...,Z,...
Thí dụ :
5 = 1*2
2
+ 0*2
1
+ 1+ 2
0
5 trong hệ nhị phân là : 101
15 = 1*2
3
+1*2
2
+ 1*2
1
+ 1+ 2
0
15 trong hệ nhị phân là : 11111
150 = 1*2


7
+1*2
4
+ 1*2
2
+ 1+ 2
1
150 trong hệ nhị phân là : 10010110
150= 9*16
1
+ 6*16
0
150 trong hệ Hecxa là 96
255=15*16
1
+ 15*16
0
255 trong hệ Hecxa là FF
Lu ý : Nếu có x = 0111000011011001 ( Dạng nhị phân )thì kể từ phải qua trái ta nói :
Bít 0 của x là 1
Bít 1 của x là 0
Bít 2 của x là 0
Bít 3 của x là 1
..........................
Bít 15 của x là 0 ( Bít bêntrái nhất )
Thực hành : Muốn chuyển một số x ( Thí dụ nguyên dơng kiểu Integer, ở dạng thập phân )
sang dạng n-phân ta tiến hành nh sau :
Biểu diễn x dới dạng :
x= a
15

* N
15
+ a
14
* N
14
+ .. + a
3
* N
3
+ a
2
* N
2
+ a
1
* N
1
+ a
0
* N
0
Khi đó dạng N-phân của x là :
a
15
a
14
a
13
... a

3
a
2
a
1
a
0 .
Một trong nhiều phơng pháp tiến hành là sơ đồ sau đây :

___________________
Dữ liệu kiểu số nguyên
x N
a
0
T
1
N
a
1
T
2
N
a
2 ...........
T
3
N
......
a
i-3

T
i-2
N
a
i-2
T
i-1
N
a
i-1
T
i
N
a
i
0
Trong hÖ N- ph©n x ®îc biÓu diÔn lµ a
i
a
i-1
a
i-2
.....a
2
a
1
a
0
150 2
0


75 2
1 37 2
1 18

2
0 9

2
1 4 2
0 2 2
0 1 2
1 0
Sè x trong hÖ nhÞ ph©n ®îc biÓu diÔn lµ 10010110 ( Gåm c¸c sè d lÊy
theo thø tù ng îc tõ d íi lªn )
___________________
D÷ liÖu kiÓu sè nguyªn
III / Các phép toán với số nguyên :
1 ) Các phép toán cộng,trừ,nhân,div( lấy thơng nguyên ) ,mod ( lấy d ). Cho kết quả là số
nguyên .
2 ) Phép chia ( / ) cho kết quả là số thực . Thí dụ : 10/ 2 là giá trị kiểu thực
3 ) Phép so sánh 2 số : lớn hơn ( > ) , nhỏ hơn ( < ) , không lớn hơn ( <= ) , không nhỏ hơn (
>= ) , bằng nhau ( = ) và không bằng nhau ( <> )
4 ) Phép nhân số nguyên dơng x với luỹ thừa bậc N của 2 : x SHL N
5 ) Phép chia số nguyên dơng x choluỹ thừa bậc N của 2 : x SHR N
6 ) Các phép toán xử lý trên các Bits của 2 số nguyên dơng :
AND : 1 and 1 = 1 0 and 1 = 0 1 and 0 = 0 0 and 0 = 0
OR : 1 or 1 = 1 0 or 1 = 1 1 or 0 = 1 0 or 0 = 0
XOR : 1 xor 1 = 0 0 xor 1 = 1 1 xor 0 = 1 0 xor 0 = 0
NOT : Not 1 = 0 Not 0 = 1

Thí dụ :
x := 5 ; { 0101 }
y := 12; { 1100 }
___________________
x and y sẽ bằng 4 { 0100 }
x or y sẽ bằng 13 { 1101 }
x xor y sẽ bằng 9 { 1001 }
6 ) Phép Not trên số nguyên :
Not x = - ( X+1)
Thí dụ Not 5 = - 6
Từ đây suy ra định nghĩa số đối của số nguyên dơng :
- x = ( Not x ) + 1
Vì thế trong hệ nhị phân ngời ta qui định nếu số x ( kiểu Integer ) có bit 15 bằng 1 thì x là
số âm , ngợc lại bít 15 bằng 0 thì x là số dơng.
Cho x=5 { x = 0000000000000101 }
Ta có
Not x = 1111111111111010
1 = 0000000000000001
-----------------------------------------------------
- x = (Not x) +1 = 1111111111111011
Ta thử kiểm tra x + (-x) có bằng 0 hay không ?
x = 0000000000000101
-x = 1111111111111011
-------------------------------------
___________________
Dữ liệu kiểu số nguyên
x + (-x) = 0000000000000000
Vậy định nghĩa số đối của x nh trên không dẫn đến điều vô lý !
Vài nhận xét đặc biệt
1 ) X OR X = X

2 ) X XOR X = 0
3 ) Nếu X AND (1 SHL k ) = 1 SHL k thì Bít k của X là 1, ngợc lại bít
này bằng 0
IV / Một số hàm với đối số nguyên
1) Random(N) Cho kết quả là số nguyên ngẫu nhiên trong đoạn [0,N-1]
Trớc khi gọi hàm này , cần gọi thủ tục khởi động bộ tạo số ngẫu nhiên : Randomize;
2) Odd(N) Cho kết quả kiểu Boolean . Nếu Odd(N) bằng True thì N là số lẻ , ngợc lại
N là số chẵn .
3) Abs(N) Cho trị tuyệt đối của số nguyên N .
V / Một vài bài toán mẫu :
Bài 1 : Cho số nguyên dơng x dạng thập phân , hãy đổi sang dạng nhị phân .
Bài 2 : Cho số nguyên dơng x dạng thập phân , hãy đổi sang dạng Hecxa .
Giải bài 1 :
Cách 1 :
Uses Crt;
Var x : integer;
B : Array[1..16] of Integer;
Procedure Taonhiphan( x : Integer);
Var k : Integer;
Begin
FillChar(B,Sizeof(B),0);
k := 0;
While x>0 do
Begin
Inc(k);
B[k] := x mod 2;
x := x div 2;
End;
For k := 16 downto 1 do Write(B[k]);
Writeln;

End;
BEGIN
Clrscr;
For x := 1 to MaxInt do Taonhiphan(x);
Readln
END.
___________________
Dữ liệu kiểu số nguyên
Cách 2 : Lập bảng phơng án các luỹ thừa của cơ số N
Uses Crt;
Const A : Array[1..16] of LongInt=(1,2,4,8,16,32,64,128,256,512,1024,
2048,4096,8192,16384,MaxInt+1);
Var x : Integer;
k : Byte;
Procedure Taonhiphan(x : Integer);
Begin
k := 15;
While (x>0) do
Begin
While A[k]>x do
Begin
Write('0');
Dec(k);
End;
Write('1');
x := x-A[k];
Dec(k);
End;
While k>0 do
Begin

Write('0');
Dec(k);
End;
Writeln;
End;
BEGIN
Clrscr;
For x:= 1 to MaxInt do Taonhiphan(x);
Readln
END.
Cách 3 Lấy giá trị của x từ các ô nhớ , hiện lên màn hình
Uses Crt;
Var x : Integer;
Procedure Taonhiphan(x : Integer);
Var k : Byte;
Begin
For k:=15 downto 0 do
If (x and ( 1 Shl k))= (1 Shl k) then Write('1') Else Write('0');
Writeln;
End;
BEGIN
Clrscr;
For x:=1 to MaxInt do Taonhiphan(x);
Readln
END.
___________________
Dữ liệu kiểu số nguyên
Giải bài 2 :
Cách 1 : Lập bảng giá trị các luỹ thừa của cơ số 16
Uses Crt;

Const A : Array[0..3] of LongInt=(1,16,256,4096);
B : Array[1..15] of Char=('1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
Var x : LongInt;
k : Integer;
Procedure TaoHecxa(x : LongInt);
Var p : Byte;
Begin
k := 3;
While (x>0) do
Begin
While A[k]>x do Begin Write('0'); Dec(k);End;
If k>=0 then
Begin
p := x div A[k];
Write(B[p]);
x := x-p*A[k];
Dec(k);
End;
End;
While (k>=0) do Begin Write('0'); Dec(k);End;
Writeln;
End;
BEGIN
Clrscr;
x := 90000;
TaoHecxa(x);
Readln
END.
Cách 2 : Dựa vào các hàm xử lý Byte
Uses Crt;

Const A : Array[0..15] of char ='0123456789ABCDEF';
Var x : Integer;
Procedure He16(x:Integer);
Begin
Write(x,': ','$');
Write(A[Hi(x) shr 4]);
Write(A[(Hi(x) and $F)]);
Write(A[Lo(x) shr 4]);
Write(A[(Lo(x) and $F)]);
Writeln;
End;
BEGIN
Clrscr;
For x:=0 to MaxInt do He16(x);
___________________
Dữ liệu kiểu số nguyên

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×