Nguyễn Lý Hữu Huấn
BỘ GIÁO DỤC VÀ ĐÀO TẠO Họ và tên thí sinh: ……….
ĐẠI HỌC HUẾ Số báo danh: ……….
----------
ĐỀ THI TUYỂN SINH CAO HỌC NĂM 2007
Môn thi: Ngôn ngữ lập trình
(Dành cho Cao học)
Thời gian làm bài: 180 phút
Câu 1: Cho biết kết quả in ra màn hình khi thực hiện chương trình dưới đây:
PROGRAM Mystery;
PROCEDURE Permute (var a, b, c, d: char);
VAR e: char;
BEGIN
e:=a; a:=b; b:=c; c:=d; d:=e;
END;
PROCEDURE Cook(n: integer);
VAR c, h, a, r: char;
BEGIN
c:=’l’; h:=’d’; a:=’u’; r:=’j’;
while (n>5) do begin
Permute(c, h, a, r);
Writeln(c, h, a, r);
c:=chr(ord(c)-1); a:=chr(ord(a)+3);
n:=n div 10;
end;
writeln(c, h, a, r); writeln(n);
END;
BEGIN
Cook(2001);
END.
Câu 2: Người ta tổ chức lưu trữ trong bộ nhớ các dòng của một văn bản dưới dạng
một danh sách liên kết kép mà mỗi nút của nó gọi là một dòng. Ta dùng hai con trỏ là
Dau và Cuoi lần lượt trỏ vào dòng đầu và dòng cuối của văn b
ản. Cho khai báo cấu
trúc dữ liệu này như sau:
Type St80 = String[80];
Tro = ^dongvb;
dongvb = Record
Truoc: Tro; {lưu địa chỉ dòng trước}
Dong: St80; {dòng văn bản}
Sau: Tro; {lưu địa chỉ dòng sau}
End;
Var Dau, Cuoi: Tro;
Giả sử văn bản khác rỗng.
Nguyễn Lý Hữu Huấn
a). Viết thủ tục Chentruoc(Var Dau: Tro; Vitri: Tro; Dong: St80) cho phép chèn
một dòng với nội dung là Dong vào trước dòng có địa chỉ là Vitri trong văn bản mà
nút đầu được trỏ bởi con trỏ Dau.
b). Viết thủ tục Chensau(Var Cuoi: Tro; Vitri: Tro; Dong: St80) cho phép chèn một
dòng với nội dung là Dong vào sau dòng có địa chỉ là Vitri trong văn bản mà nút cuối
được trỏ bởi con trỏ Cuoi.
c). Ta định nghĩa khối là một dãy liên tiếp các dòng trong văn bản. Ký hiệu (db, cb) là
khối được xác định vị trí bởi địa chỉ dòng đầu db và dòng cuối cb. Viết thủ tục
Chepkhoi(Var: Dau: Tro; db, cb, Noiden: Tro) cho phép sao chép khối (db, cb) tới
trước dòng trỏ bởi Noiden trong danh sách trỏ bởi Dau. Giả sử Noiden không ở trong
khối (db, cb).
Câu 3: Cho cây nhị phân T (nút gốc trỏ bởi T) có khai báo như sau:
Type TroNut = ^Nut;
Nut = Record
Info: Integer;
Left, Right: TroNut;
End;
Var T: TroNut;
a). Giả sử cây T là cây nhị phân tìm kiếm khác rỗng, hãy viết hai hàm Min(T:
TroNut): Integer và Max(T: TroNut): Integer lần lượt cho kết quả là giá trị nhỏ
nhất và giá trị lớn nhất của trường Info của các nút thuộc cây T.
b). Viết hàm LaCayNPTK(T: TroNut): Boolean cho kết quả là True nếu cây T là
một cây nhị phân tìm kiếm, ngược lại trả về giá trị False.
Câu 4:
a). Hãy mô tả thuật toán sắp xếp theo thứ tự tăng dần một mảng các số nguyên theo
kiểu nổi bọt (bubble sort) bằng ngôn ngữ lập trình Pascal.
b). Xét dãy số sau: 4, 7, 2, 5, 6. Hãy cho biết diễn biến của dãy số này (sự thay đổi mỗi
lúc có hoán đổi giá trị) khi việc sắp xếp được thực hiện theo kiểu nổi bọt.
c). Giả sử dãy này gồm n số liệu, hãy chỉ ra trường hợp xấu nhất (chương trình phải
thực hiện việc hoán đổi nhiều nhất) đối với thuật toán sắp xếp theo kiểu nổi bọt và giải
thích tại sao? Tính số lần thực hiện việc hoán đổi trong trường hợp này.
----------------------------------------
Ghi chú: Cán bộ coi thi không giải thích gì thêm.