1. Đề 20 1/2
ĐỀ THI MÔN TIN HỌC IFI 97
(120 phút)
Bài 1. Cho biết kết quả in ra của chương trình sau đây và giải thích kết quả đó.
Program IFI97(Output)
Var i:integer;
a:array[1..2]of integer;
Procedure ky_cuc(var a1,a2:integer);
Var t:integer;
Begin
t:=a1;
a2:=a2+1;
If t<>a1 then writeln(‘ky cuc!’);
End;
BEGIN
i:=1;
A[1]:=1;
A[2]:=1;
Ky_cuc(i,i);
Ky_cuc(a[i],a[i]);
W
END.
riteln(i,a[1],a[2]);
Bài 2. Hãy viết một chương trình đệ qui để tìm phần tử lớn nhất trong một mảng
A[1..n] (các phần tử của mảng là các số nguyên) bằng cách chia đôi mảng, phỏng
theo ý tưởng của giải thuật tìm kiếm nhị phân.
Bài 3: Cho khai báo của một danh sách tuyến tính móc nối như sau:
Type contro=^kieuphantu;
Kieuphantu=record
Giatri:integer;
Tieptheo:contro;
End;
Var danhsach: contro;
Hãy viết một hàm
Function da_sap(danhsach:contro):boolean;
cho phép kiểm tra một danh sách là đã được sắp thứ tự (không giảm) theo trường
giatri chưa. Hãy viết hàm theo hai cách: Dạng lặp và dạng đệ qui.
Bài 4. Người ta biểu diễn một biểu thức số học với các toán tử cộng, trừ, nhân,
chia hai ngôi và cộng, trừ một ngôi bằng một cây, trong đó một toán tử được chứa
ở một nút trong và mỗi biến được chứa ở một lá của cây. Chẳng hạn: biểu thức với
ngoặc đơn đầy đủ (((a-b)*x)-(((-c)/d)/e)) được biểu diễn bởi cây sau:
Trình bày: Trần Hoài Nhân
2. Đề 20 2/2
-
* /
+ c / e
a b - d
c
a. Viết khai báo của cây nói trên. Giả sử rằng mỗi biến có một giá trị cho
trước, hãy viết mỗi chương trình con cho phép, từ một cây đã thành lập ở bộ
nhớ trong như trên, tính giá trị của biểu thức số học liên quan.
b. Giả sử một biểu thức số học với ngoặc đơn đầy đủ đã được đọc sẳn vào một
biến kiểu STRING. Hãy viết một chương trinh con thành lập cây biểu diễn
biểu thức đó, cây này được lưu ở bộ nhớ trong của máy tính.
Trình bày: Trần Hoài Nhân