KIỂu dữ liệu số nguyên trong ngôn ngữ LẬp trình pascal I / Loại



tải về 46.63 Kb.
Chuyển đổi dữ liệu10.08.2016
Kích46.63 Kb.
KIỂU DỮ LIỆU SỐ NGUYÊN

TRONG NGÔN NGỮ LẬP TRÌNH PASCAL
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


Lưu ý : 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à :

a15 a14 a13 ... a3 a2 a1 a0 .

Một trong nhiều phương pháp tiến hành là sơ đồ sau đây :

x N


a0 T1 N

a1 T2 N




a2 ........... T3 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à ai a i-1 ai-2 .....a2 a1a0

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 )



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

-------------------------------------

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.
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.
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);



Readln;

END.
: web -> attachments
attachments -> KỲ thi thử ĐẠi học năM 2014 – Cho Cún Ngày thi: 09/4/2014 MÔn thi : toán thời gian làm bài: 180 phút
attachments -> MỘt số kinh nghiệm khi dạy và HỌc mạo từ A. MẠo từ không xáC ĐỊnh “A” – “AN”
attachments -> Bé gi¸o dôc vµ ®µo t¹o ViÖn to¸n häc MỘt số kiến thức về HÌnh olympiad
attachments -> Các bài trong các số Tạp chí Toán học & Tuổi trẻ từ tháng 12/2005 đến nay
attachments -> TRƯỜng trung học phổ thông chuyêN  SỞ giáo dục và ĐÀo tạo tỉnh quảng bìNH
attachments -> Định lí: Cho là trung điểm, điểm chuyển động tùy ý trên. Từ kẻ. Chứng minh rằng Chứng minh
attachments -> Ứng dụng kiểu xâu trong phép toán với số nguyên lớn I. ĐẶt vấN ĐỀ
attachments -> I. so sánh bằNG: Affirmative: As + adj/adv + As Ví dụ
attachments -> TRƯỜng thpt chuyên võ nguyên giáp một số phảN Ứng tổng hợp ancol – phenol – andehit – xeton – axit cacboxylic đƠn chức bằng phưƠng pháp tăNG, giảm mạch cacbon
attachments -> MỘt số kinh nghiệm dạy kỹ NĂng làm bài tậP ĐỌc hiểu môn tiếng anh cho đỘi tuyển học sinh giỏI




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2019
được sử dụng cho việc quản lý

    Quê hương