<< Chapter < Page Chapter >> Page >
Dữ liệu kiểu tập hợp

DỮ LIỆU KIỂU TẬP HỢP

1 Khái niệm tập hợp:

a. Khái niệm tập hợp:

Một tập hợp bao gồm n phần tử cùng kiểu dữ liệu (0<=n<=255), kiểu của các phần tử phải là kiểu vô hướng đếm được (nguyên, ký tự, logic, liệt kê, đoạn con). Số thứ tự các phần tử trong tập hợp luôn nằm trong khoảng 0-255.

b. Khai báo kiểu và gán dữ liệu vào tập hợp:

Để mô tả kiểu tập hợp, dùng từ khóa Set of tiếp đó là kiểu dữ liệu cơ bản của các phần tử tạo nên tập hợp.

Ví dụ:

Type

mau=set of (xanh, hong, tim, vang, den ,nau);

sn1:set of 0..100;

sn2: set of 100..200;

chucai1: set of ‘a’..’z’;

chucai2: set of ‘A’..’Z’;

Kytu=set of Char;

Var a:mau; b:sn1;

Khi khai báo kiểu tập hợp cần chú ý một số điều sau đây:

  • Thứ tự các phần tử trong tập hợp luôn theo chiều tăng dần.

Nếu khai báo sn1=set of 200..100 ->sai

  • Kiểu dữ liệu của các phần tử mặc dù có thể là số nguyên, nhưng khi khai báo là kiểu Byte.

Sn=set of Byte; ->đúng

Sn2 =set of Word; ->sai

  • Những giá trị mà chúng ta khai báo sau từ khóa SET OF sẽ dẫn tới một trong 2 khả năng:

+ Nếu là khai báo kiểu liệt kê, kiểu Boolean thì phía sau từ khóa SET OF là giá trị mà tập hợp có thể nhận.

Ví dụ:

Nếu gán a:=[xanh,tim,luc]; ->sẽ bị báo lỗi.

+ Với những kiểu còn lại(nguyên, ký tự, đoạn con) những từ khai báo sau từ khóa Set of không phải là giá trị của các phần tử của tập hợp mà là thứ tự của phần tử đó. Kiểu của các dữ liệu đó sẽ cho biết các phần tử của tập hợp.

Type

sn1=set of 0..100;

kytu=set of char;

Var

a:sn1; b:kytu;

...

Với khai báo trên, ta không thể gán:

a:=['a',12,'c'];

b:=[1,2,100];

  • Không được gán trực tiếp các số nguyên có giá trị lớn hơn 255

Vd b2:=[100,200,256]

2 Phân loại tập hợp:

a. Tập hợp cùng kiểu:

Các tập hợp được coi là cùng kiểu nếu chúng được xây dựng trên cùng một kiểu cơ bản.

Ví dụ:

Type

mau=set of (xanh,hong,tim,vang,den,nau);

mau_xe=set of (xanh..vang);

b. Hình thành một tập hợp:

Một tập hợp được hình thành khi ta gán cho biến tập hợp các giá trị cụ thể, các giá trị này được đặt trong hai dấu ngoặc vuông.

Ví dụ:

c:=[2,15,30,100..200];

chu:=[‘A’..’Z’];

3 Các phép tính trên tập hợp:

a. Phép gán:

Phép gán được dùng để hình thành nên một tập hợp. Có thể gán một tập hợp cho một biến tập hợp cùng kiểu hoặc gán một biến tập hợp cho cho một biến tập hợp khác cùng kiểu.

b. Phép hợp:

Hợp của 2 tập hợp A và B khi đó có thể viết là A+B

Hợp của 2 tập hợp A và B là một tập hợp gồm các phần tử thuộc A và các phần tử thuộc B.

Giả sử các tập hợp A,B,C được hình thành như sau:

A:=[1..8,10..15];

B:=[5..9,20,30];

C:=A+B;

  • C gồm các phần tử [1..15,20,30];

c. Phép giao:

Giao của 2 tập hợp A và B, ký hiệu là A*B, là một tập hợp gồm các phần tử đồng thời thuộc A và thuộc B.

C:=A*B;

  • C gồm các phần tử [5,6,7,8];

d. Phép trừ:

Phép trừ của 2 tập hợp A và B, ký hiệu là A-B, cho ta một tập hợp gồm các phần tử thuộc A và nhưng không thuộc B.

C:=A-B; C gồm các phần tử [1..4,10..15]

e. Phép thuộc về:

Phép thuộc về ký hiệu là IN là một phép thử xem một giá trị hay một biến có thuộc về một tập hợp hay không? Nếu có giá trị phép thử là True, ngược lại là False.

Ví dụ:

T1:=[‘a’..’z’];

T2:=’c’;

Write (T2 in T1);

Write(‘1’ in T1);

3.4 Các phép so sánh trên tập hợp:

a. Phép bằng, ký hiệu là =

Hai tập hợp A và B gọi là bằng nhau nếu mọi phần tử của A đều thuộc B và mọi phần tử của B đều thuộc A.

Ví dụ:

[1..6]=[1,2,3,4,5,6]cho kết quả là True

[‘a’,’b’,’c’]=[‘A’,’B’,’C’]cho kết quả False

b. Phép không bằng, ký hiệu<>

Hai tập hợp A và B gọi là không bằng nhau nếu tập A có ít nhất một phần tử không thuộc tập B hoặc tập B có ít nhất một phần tử không thuộc A.

[1..6]<>[1,2,3,4,5,6] cho kết quả là False

c. Phép nhỏ hơn hoặc bằng, ký hiệu<=:

Tập A gọi là nhỏ hơn hoặc bằng tập B nếu mọi phần tử của A đều thuộc tập B.

[1..6]<=[1,2,3,4,5,6,7] cho kết quả là True

d. Phép lớn hơn hoặc bằng, ký hiệu>=:

Tập A gọi là lớn hơn hoặc bằng tập B nếu mọi phần tử của B đều thuộc tập A.

[1..6]>=[1,2,3,4,5,6,7] cho kết quả là False

Bài tập 1: Trò chơi gieo xúc xắc: nguyên tắc chơi như sau: người chơi chọn một số trong khoảng từ 1 đến 6, máy sẽ gieo 3 con xúc xắc để được 3 số. Nếu số của người chơi nằm trong tập số mà máy đã gieo thì người chơi thắng, ngược lại người chơi thua. Nếu ba lần chơi mà người chơi đều thắng thì tuyên bố người chơi trúng số độc đắc.

Program xuc_xac;

Uses crt;

Var xucxac:set of 1..6;

So,i,dem,a,b,c:1..6; tl:char;

Begin

Clrscr;

Repeat

Clrscr;

For i:=1 to 3 do

Begin

Textcolor(5);

Write(‘moi ban chon mot so tu 1 den 6’); readln(so);

a:=random(6); b:=random(6); c:=random(6);

xucxac:=[a,b,c];

writeln(‘so ma ban da chon’, so);

writeln(‘so may da gieo’, a,’ ‘,b,’ ‘,c);

If so in xucxac then

Begin

Textcolor(4);

Writeln(‘Ban da thang van thu’,i);

Dem:=dem+1;

End

Else

Writeln(‘Ban da thang van thu’,i);

If dem=3 then Writeln(‘Ban trung doc dac – Xin chuc mung’);

End;

Writeln;

Write(‘choi tiep hay k?C/K’);

Readln(tl);

Until upcase(tl)=’K’;

End.

Bài tập 2: Viết chương trình nhập vào một chuỗi (chữ và số) , in ra kết quả số lần xuất hiện của mỗi chữ cái, in ra tổng số các chữ cái nhập từ bàn phím.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Lập trình nâng cao. OpenStax CNX. Sep 19, 2008 Download for free at http://cnx.org/content/col10576/1.2
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Lập trình nâng cao' conversation and receive update notifications?

Ask