Tổng hợp : Đề thi và đề cương tuyển sinh Cao học và nghiên cứu sinh môn Ngôn ngữ lập trình từ năm 1993-2007
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
PAI HOC HUE
KY THI TUYEN SINH SAU DAI HOC NAM 2005
Dap an dé thi tuyén sinh Cao hoc Môn thi: Ngôn ngữ lập trình
Cau 1: 1,5 đ
Két qua in ra trén man hinh:
8 4 10 5 9
8 4 5 10 9
8 4 5 9 10
4 8 5 9 10
4 5 8 9 10
* Dong 1: 0,5 a
* Dong 2-3: 0,5 a
* Dong 4-5: 0,5 d
Cau 2: 4,0 d
a) 1,0 đ
Function Addr(FirstS: TroMH; BMaMH: Integer): TroMH;
Begin
If FirstS=nil then Addr:=nil
else if FirstS’.MaMH=BMaMH then Addr:=FirstS
else Addr:=Addr(FirstS*.next, BMaMH);
End;
* Xử lý trường hợp để có Addr=nil: 0,5 d
* Xử lý trường hợp để có Addr< >mil: 0,5 đ
b) 3,0 d
Procedure ListOfSubjects(FirstT: TroGV; BMaGV: St8); (1,5 d)
Procedure LOS(F: TroM);
var _ stt: integer; p: TroMH;
Begin If F<>nil then
begin stt:=1; writeln¢STT’:5, ‘Ten mon hoc’:30, ‘So DVHT”’:10);
while F<>nil do
begin p:=Addr(FirstS, F*’.MaM);
writeln(stt:5, p®.TenMH:30, p*.SoDVHT:10);
F:=F”.Tiep; stt:=stt+1;
end;
end;
End;
Trang 2Begin If (FirstT<>nil)and(FirstT*.MaGV<=BMaGV) then
If FirstT”’.MaGV=BMaGV then LOS(FirstT*.DSM) else ListOfSubjects(FirstT’ Down, BMaGV);
End;
* Định vị đến nút giáo viên cần tìm (có sử dụng danh sách tăng dần): 0,5 đ
* Duyệt danh sách mã môn học: 0,3 đ
* Jn theo mẫu: 0,5 đ
Procedure ListOfTeachers(FirstT: TroGV; BMaM: Integer); (1,5 đ)
var stt: integer;
Procedure LOT(F: TroGV; BMaM: Integer);
Procedure Find_and_Print(P: TroM; BMaM: Integer);
Begin If P<>nil then
if P’.MaM=BMaM then begin writeln(stt:5, F’.HoTenGV:30); stt:= stt+1;
end else Find and Print(P^.Tiep, BMaM);
End;
Begin If F<>nil then
begin Find_and_Print(F* DSM, BMaM);
LOT(F^.down, BMaM);
end;
End;
Begin If FirstT<>nil then
begin stt:=1; writeln“STT’:5, ‘Ho ten giao vien’:30);
LOT(FirstT, BMaM);
end;
End;
* Duyệt mọi múi giáo viên: 0,5 a
*Jm theo mẫu: 1,0 đ
Cau 3: 4,5 d
a) 1,5 đ
Function Muc(Top, p: TroNutIrenCay):Word ;
Function Cha(Top, p: TroNutTrenCay):TroNutTrenCay;
Begin If (Top=nil)or(Top=p) then Cha:=nil
else If (Top*.Left=p) or (Top*.Right=p) then Cha:=Top
else if Cha(Top”’.Left, p)<>nil then Cha:=Cha(Top”%.Left, p)
else Cha:= Cha(Top”.Right, p);
End;
Trang 3Begin If Top=nil then Muc:=0
else Ifp=Top then Muc:=1
else Muc:=Muc(Top, Cha(Top, p))+1;
End;
* Xác định địa chi nut cha cua p: + 0,5 d (truoéng hop cha=nil)
+ 0,5 d (truong hop cha<>nil)
* Từ đó xác định mức của nút p: 0,3 đ
b) 2,0 d
Procedure InsertQueue(var First, Last: TroNutTrenDS; X: TroNutTrenCay); (1,0 d)
var p: TroNutTrenDS;
Begin new(p); p*.Info:=X; p*.next:=nil;
If First=nil then begin First:=p; Last:=p; end
Else begin Last“.next:=p; Last:=p; end;
End;
* Xứ lý trưởng hợp First = nil: 0,5 d
* Xứ lý truong hop First <> nil: 0,5 d
Procedure DeleteQueue(var First, Last: TroNutTrenDS; var X: TroNutTrenCay); (1,0 d) var p: TroNutTrenDSs;
Begin
If First=nil then write(‘Khong xoa duoc’)
Else If First=Last then
begin X:=First’.Info;dispose(First); First:=nil; Last:=nil; end Else
begin p:=First; X:=pˆ.Info; First:=pˆ^.next; dispose(p); end;
End;
* Xứ lý truong hop First = nil va First=Last: 0,5 a
* Xứ lý trưởng hợp còn lại: 0,5 d
c) 1,0 đ (không chia nhỏ)
Procedure Lietke(Top: TroNutTrenCay);
var First, Last: TroNutTrenDS; X: TroNutTrenCay;
Begin If Top<>nil then
begin First:=nil; Last:=nil;
InsertQueue(First, Last, Top); writeln(Top” Value);
Repeat
DeleteQueue(First, Last, X);
If X*.Left<>nil then begin InsertQueue(First, Last, X”*.Left);
writeln(X”.Left® Value);
end;
Trang 4If X*.Right<>nil then begin InsertQueue(First, Last, X^.Right);
writeln(X”.Right® Value);
end;
Until First=nil;
end;
End;