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

chuyên đề tin học chương 8 dữ liệu kiểu file

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 (103.98 KB, 6 trang )

Chuyªn Tin 10
CHƯƠNG 8 : DỮ LIỆU KIỂU LIỆT KÊ, KIỂU ĐOẠN CON,
DỮ LIỆU KIỂU TẬP HỢP- DỮ LIỆU KIỂU BẢN GHI
I / Dữ liệu kiểu liệt kê ( Enumerated ):
1 ) Khai báo kiểu :
Type Tên_kiểu = (danh sách tên các giá trị );
Var Tên_biến : Tên_Kiểu;
Trong đó tên giá trị phải đặt theo đúng qui cách của Tên , thí dụ như : Không bắt đầu bằng chữ số ,
không chứa kí tự #, kí tự ngoặc ‘(‘ , ‘)’, kí tự dấu trừ ‘-’,kí tự dấu cách ‘ ‘,
2 ) Thí dụ :
Type ColorE = (Red, Blue,Green,Yellow);
DateE = (Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);
Var Mau : ColorE;
Ngay : DateE;
Biến Mau có kiểu ColorE , kiểu này chỉ có 4 giá trị Red, Blue,Green,Yellow.
Biến Ngay có kiểu DateE, kiểu này có 7 giá trị Sunday,Monday ,Tuesday, Wednesday, Thursday,
Friday, Saturday
.
3) Cách xử dụng biến kiểu Liệt kê :
+ Giá trị của biến có thể nhận được thông qua lệnh gán Thí dụ : Mau := Green;
+ Muốn hiện giá trị của biến liệt kê trên màn hình phải qua thủ tục hiện gián tiếp .
Thí dụ
Procedure Hiện (Mau : ColorE);
Begin
Case Mau of
Red : Witeln(‘Red ‘);
Blue : Witeln(‘Blue ‘);
Green : Witeln(‘Green ‘);
Yellow: Witeln(‘Yellow ‘);
End;
End;


+ Kiểu liệt kê cũng thuộc loại vô hướng đếm được (như Boolean,Char,Integer,Byte, Word ) vì
vậy có thể xử dụng các hàm Ord,Succ,Pred .
Thí dụ :
Trong các kiểu nêu trên ta có : Ord(Red) =0, Succ(Red)=Blue, Pred(Tuesday)=
Monday Giá trị của biểu thức Pred(Friday)=Saturday là False . Giá trị của biểu thức
Pred(Friday)=Thursday là True
+ Có thể lấy 1 giá trị của danh sách các giá trị thông qua Tên_kiểu . Thí dụ : ColorE(0) là Red ,
DateE(1)=Monday
II / Dữ liệu kiểu đoạn con ( Sub Range ):

III / Dữ liệu kiểu tập hợp ( Set Of ):
IV / Dữ liệu kiểu bản ghi ( Kiểu Record):
Bài 1 :
250
Chuyªn Tin 10
Bài toán “Rủ nhau đi cắm trại “ : Quan hệ rủ nhau đi cắm trại , cho bằng biểu thức : Thí dụ :
AB>CEF . Ta hiểu các biểu thức này có nghĩa là : Mỗi kí tự ( Khác dấu ‘>‘) là tên một học sinh .
Khi có đủ các học sinh ở vế trái của biểu thức thì sẽ rủ thêm được các học sinh ở vế phải tham gia
trại . Cho biết nhóm đầu tiên khởi xướng là FC .Các quan hệ và nhóm khởi xướng cho trong File
‘CAMTRAI.TXT’ tổ chức :
+ Dòng đầu là số N là số quan hệ rủ nhau
+ N dòng tiếp theo , Mỗi dòng là 1 quan hệ
+ Dòng cuối cùng là nhóm khởi xướng
Hỏi những học sinh nào sẽ đi cắm trại .
File CAMTRAI.TXT
5
AB>CEF
C>AD
EG>D
CD>B

D>E
FC
Bài 2 :
Cho N tập hợp số nguyên ( Kiểu Byte) (2<=N<=10) . Nếu 2 tập hợp có chung ít nhất 1 phần tử , ta
nói rằng chúng có đường đi sang nhau ( liên thông nhau ). Trong N tập hợp đã cho ,hãy tìm mọi
đường đi từ một tập thứ nhất tới tập thứ hai ( có thể thông qua các tập khác ).
Dữ liệu cho từ File ‘DUONGDI.TXT’ Tổ chức như sau :
+ Dòng đầu là số N
+ N dòng tiếp theo ,dòng i gồm các số nguyên của tập i , hai số liền nhau cách nhau dấu cách
( #32 )
BÀI CHỮA
Bài 1 :
Uses Crt;
Const Max = 20;
Fi = 'Camtrai.txt';
Type KTH = Set of char;
KMTH = Array[1 Max] of KTH;
KDD = Array[1 Max] Of Boolean;
Var i,N,sn : Byte;
KQ : KTh;
P,T : KMTH;
D : KDD;
S : String;
Ok : Boolean;
Procedure Hien(x : KTH);
Var ch : Char;
Begin
For ch:='A' to 'Z' do
If ch in x then Write(ch);
End;

Procedure Sach(Var S : String);
Var i : Byte;
Begin
i := 1;
While i<= Length(S) do
Begin
251
Chuyªn Tin 10
If S[i]=' ' then
Begin
Delete(S,i,1);
Dec(i);
End;
Inc(i);
End;
End;
Procedure Nhap;
Var F : Text;
phu,k : Byte;
vt,S : String;
Begin
Assign(F,Fi);
Reset(F);
Readln(F,N);
For i:=1 to N do
Begin
Readln(F,S);
Sach(S);
phu := Pos('>',S);
Vt := Copy(S,1,phu-1);

T[i] := [];
For k := 1 to Length(Vt) do T[i] := T[i]+[Vt[k]];
S := Copy(S,phu+1,Length(S) );
P[i] := [];
For k := 1 to Length(S) do P[i] := P[i]+[S[k]];
Hien(T[i]);Write('>');
Hien(P[i]);
Writeln;
End;
Readln(F,S);
Close(F);
KQ := [];
For i:=1 to Length(S) do
KQ := KQ+[S[i]];
Sn := Length(S);
Hien(KQ);
Writeln;
End;
Procedure Ketnap(i : Byte);
Var ch : Char;
Begin
If (T[i]<=KQ) and (Not D[i]) then
Begin
KQ := KQ+P[i];
D[i] := True;
Ok := True;
End;
End;
Procedure Duyet;
Var i : Byte;

252
Chuyªn Tin 10
Begin
FillChar(D,Sizeof(D),False);
Ok := True;
While Ok do
Begin
Ok := False;
For i:=1 to N do Ketnap(i);
End;
End;
BEGIN
Clrscr;
Nhap;
Duyet;
Hien(KQ);
Readln
END.
Bài 2 :
{Phuong phap de qui + Vet can.Co the them d/k : do dai duong di L=hang so}
Uses Crt;
Const Max = 20;
Fi = 'Duongdi.txt';
Fo = 'Duongdi.out';
Type KTH = Set of Byte;
KMTH = Array[1 Max] of KTH;
KDD = Array[1 Max] of Boolean;
KNG = Array[1 Max] Of Byte;
Var TH : KMTH;
X : KTH;

CX : KDD;
NG : KNG;
N,L : Byte;
Dem : LongInt;
Procedure Hien(X : KTH);
Var i : Integer;
Begin
For i:=0 to 255 do If i in X then Write(i:4);
Writeln;
End;
Procedure Nhap;
Var i,k : Byte;
x : Byte ;
F : Text;
Begin
Assign(F,Fi);
Reset(F);
Readln(F,N);
i := 1;
While Not SeekEof(F) do
Begin
TH[i] := [];
While not SeekEoLn(F) do
253
Chuyªn Tin 10
Begin
Read(F,x);
TH[i] := TH[i]+[x];
End;
Readln(F);

Hien(TH[i]);
Inc(i);
End;
Close(F);
End;
Function C(i,j : Byte): Boolean;
Begin
If ((TH[i]*TH[j])<>[]) then C := True Else C:= False;
End;
Var F : Text;
Procedure Thong(i,j :Byte);
Var k,h : Byte;
Begin
For k:=1 to N do
If (k<>i) then
If (CX[k]) and C(NG[L],k) then
Begin
Inc(L);
NG[L] := k;
CX[k] := False;
If (k<>j) then Thong(k,j) Else
Begin
Inc(dem);
Write(F,'Duong di ',dem,' : ');
Write( 'Duong di ',dem,' : ');
For h:=1 to L do Write(NG[h]:4);
For h:=1 to L do Write(F,NG[h]:4);
Writeln;Writeln(F);
End;
Dec(L);

CX[k] := True;
End;
End;
Procedure Tim;
Var i,j : Byte;
Begin
Assign(F,Fo);
Rewrite(F);
Dem := 0;
For i :=1 to N do
For j := 1 to N do
Begin
FillChar(CX,Sizeof(CX),True);
FillChar(NG,Sizeof(NG),0);
L := 1;
NG[L] := i;
CX[i] := False;
Thong(i,j);
End;
254
Chuyªn Tin 10
Close(F);
End;
BEGIN
Clrscr;
Nhap;
Tim;
Readln
END.
255

×