1/2
BỘ GIÁO DỤC & ĐÀO TẠO Họ và tên thí sinh:..................................................
ĐẠI HỌC HUẾ Số báo danh:..................................................
KỲ THI TUYỂN SINH SAU ĐẠI HỌC NĂM 2004
Môn thi: Ngôn ngữ lập trình
(Dành cho cao học)
Thời gian làm: 180 phút
Câu 1. Cho một chương trình viết trên Pascal như sau:
var x:integer;
procedure tanggiam(var x:integer; y:integer);
begin
writeln(x,y);x:=x+1;
if y>0 then
begin
y:=y-1;
tanggiam(x,y);
writeln(x,y);
end;
end;
BEGiN
x:=3;
tanggiam(x,x);
END.
Hãy viết các kết quả in ra khi thực hiện chương trình trên.
Câu 2. Một người có thể biết nhiều ngoại ngữ khác nhau, vì vậy việc lưu trữ thông
tin về trình độ ngoại ngữ của một số các bộ có thể tổ chức như sau:
• Sử dụng một cây nhị phân tìm kiếm để lưu tên cán bộ theo khóa Ten, nút
gốc của cây có địa chỏ là T.
• Mỗi nút trên cây T, ngoài trường Ten, còn có trướng DSNN dùng để lưu địa
chỉ nút đầu của một danh sách nối đơn. Trình độ ngoại ngữ của mỗi cán bộ
được thể hiện trên mỗi danh sách nối đơn này với trường khóa là NgoaiNgu.
Cấu trúc này được khai báo như sau:
Type str20=Sring[20];
troNN=^NN;
NN=record
Ngoaingu:Str20; {ngoại ngữ: Anh, Phap, Nga,…}
Capdo:Char {cấp độ: A, B, C}
Next:TroNN;
end;
TroCB=^CB;
CB=record
Ten:Str20; {Tên cán bộ}
DSNN:TroNN;
Left, Right:TroCB;
end;
Var T:TroCB;
Trình bày: Trần Hoài Nhân
2/2
a. Viết hàm:
Function DinhViCB(f:TroCB; Name:Str20):TroCB;
Cho kết quả là địa chỉ của một nút trên cây T mà trường Ten có giá trị là
Name. Nếu không tìm thấy nút này thì hàm trả về giá trị NIL.
b. Viết thủ tục:
Procedure BoSungCB(var T:TroCB; Name:Str20);
Để bổ sung một cán bộ mới vào cây T có trường Ten=Name và DSNN=NIL.
c. Viết thủ tục:
Procedure CapNhat(T:TroCB; Name, FL:Str20; Level:Char);
Để cập nhật thông tin “cán bộ có tên Name biết ngoại ngữ FL với cấp độ
Level”. Lưu ý rằng:
• Việc cập nhất này chỉ được thực hiện trong trường hợp có cán bộ có tên
Name. Nếu không tìm được cán bộ có tên Name thì thông báo “Khong co
can bo nay!”.
• Nếu cán bộ tìm ra chưa biết ngoài ngữ FL, thì cần bổ sung thông tin này
vào đầu danh sách móc nối đơn.
• Nếu cán bộ tìm ra đã biết ngoại ngữ FL, thì chỉ thay đổi cấp độ cũ bởi
cấp độ mới Level trong trường hợp cấp độ mới Level là lớn hơn cấp độ
cũ.
d. Viết thủ tục:
Procedure InDS(T:TroCB);
Để in ra danh sách tất cả cán bộ (theo thứ tự tăng dần của tên cán bộ) kèm
khả năng ngoại ngữ, theo ví dụ mẫu như sau:
TRÌNH ĐỘ NGOẠI NGỮ CỦA CÁC CÁN BỘ
1. AN: ANH-B
2. BINH: ANH-C, NGA-B, PHAP-A
3. CHI: Khong biet thu tieng nào
…
Câu 3. Cho cây nhị phân có khai báo như sau:
Type TroNut=^Nut;
Nut=record
Info:integer;
L
End;
eft,right:TroNut;
Var T:TroNut;
Cây T (nút gốc trỏ bởi T) được gọi là một “đống” nếu cây T là rỗng, hoặc cây T
chỉ có một nút, hoặc cây T có tính chất sau: giá trị trường Info của bất kỳ nút N nào
thuộc cây T đều lớn hơn giá trị trường Info của mọi nút thuộc cây con trái và cây
con phải của nút N đó.
Viết hàm
Function LaDong(T:TroNut):boolean;
cho kết quả là True nếu
cây T là một đống, ngược lại trả về giá trị False.
Ghi chú: Cán bộ coi thi không được giải thích gì thêm.
Trình bày: Trần Hoài Nhân