Đề 15
1/2
Đề thi tuyển cao học 1995
Môn thi: Lập trình
(180 phút)
Bài 1. Cho chương trình sau:
Program Print(input,output);
Var i:integer;
T:arra 1..2
Procedure p(var x,y:interger);
y[ ]of interger;
Begin
{3}X:=x+1;
{4}Y:=y+1;
{5}Write(x,y);
{6}End;
Begin
{1}i:=1;T[1]:=2;T[2]:=0;
{2}P(i,T[T[i]]);
{7}witeln(i,T[1],T[2]);
{8}End.
Cho biết kết quả in ra từ chương trình trên. Chỉ rõ giá trị của các biến và các
tham số, qua mỗi bước theo vết thực hiện {1,2,3,4,5,6,7,8}
Bài 2. Cho hàm:
Function M(n:integer):integer;
Begin
If n>100 then M:=n-100
Else M:=M(M(n+1));
End.
a. Cho biết các giá trị M(101), M(99), M(88).
b. Một cách tổng quát, cho biết M(n) với các trường hợp khác nhau của n. Giải
thích lời đáp đưa ra.
Bài 3. Trong một hệ soạn thảo, văn bản đang soạn được lưu ở bộ nhớ trong dưới
dạng một danh sách nối kép như sau:
Trình bày: Trần Hoài Nhân
Đề 15
2/2
Dòng 1
Dòng 2
Dòng n
…
…
Đầu
Trường hợp chung
Trường hợp văn bản rỗng
Cuối
Đầu
Cuối
Khai báo của danh sách này như sau:
Type str80=String[80];
Tro=^dongvb;
Dongvb=record
Truoc:tro;
Dong:str80;
Sau:tro;
End;
Var dau,cuoi:tro; {đều bằng NIL khi văn bản là rỗng}
a. Viết một thủ tục dưới dạng:
Procedure XenTruoc(var d:tro;p:tro;s:str80);
Cho phép xen một dòng mới với nội dung cho bởi s vào trước phần tử trỏ
bởi p trong danh sách có đầu d.
b. Gọi Bloc(db,cb) là một khối liền nhau các dòng kể từ dòng trỏ bới db đến
dòng trỏ bởi cb. Hãy viết một thủ tục dưới dạng:
Procedure chuyenBl(var d,c:tro; db,cb,noiden:tro);
Cho phép chuyển dời Bloc(db,cb) tới trước dòng trỏ bởi noiden trong
danhsach(d,c), giả sử noiden không ở trong Bloc.
c. Viết một thủ tục:
Procedure chepBl(var d:tro; db,cb,noiden:tro);
Cho phép chép (mà không hủy) một Bloc(bd,cb) tới trước dòng trỏ bởi
noiden trong danh sách có đầu d. Giải sử noiden không ở trong Bloc.
Trình bày: Trần Hoài Nhân