CTDLGT đề số 2
ĐỀ SỐ 2
Câu 1:
Cho hàm số f(x,y) với x,y là các đối số kiểu nguyên như sau:
y nếu x <=0
F(x,y)= x + f(x -1 ,y) nếu y<=0
f( x-1 ,y)+ f(x,y-1) trong các trường hợp còn lại
a) Tính f(3,2) ,giải thích cách tính ?
b) Viết giải thuật đệ qui và thủ tục đệ qui để tính giá trị hàm f. Để tính f( 3,2) phải gọi thủ tục tính hàm giá trị bao nhiêu lần ?
Hướng dẫn
a, Tớnh F(3,2).
, Tớnh F(3,2).
• F(3,2) = F(2,2) + F(3,1)
• F(3,2) = F(1,2) + F(2,1) + F(2,1) + F(3,0)
• F(3,2) = F(0,2) + F(1,1) + F(1,1) + F(1,0) + F(1,1) + F(2,0) + F(2,0) + F(3,-1)
• F(3,2) = F(-1,2) + F(0,1) + F(0,1) + F(1,0) + F(0,1) + F(1,0) + 1+ + F(0,1) + F(0,1) + F(1,0) + F(1,0) + F(2,-1) + F(1,0) + F(2,-1) + 3 + F(2,1)
• F(3,2) = 2 + 1 + 1 +1+F(0,1)+ 1 + 1+F(0,1) +1 + 1 + 1 +1+F(0,1) + 1+F(0,1)+F(1,-2) + 1+F(0,1)+F(1,-2) + 1 +3 +F(1,1)+F (2,0)
Trong đó:F(1,-2)=F(0,-2)+F(1,-3)
=-2 + 1 + F(0,1)=2=1=1=4
F(1,1)=F(0,1)+F(1,0)
=1+1+F(0,1)=3
F(2,0)=0+ F(1,1)=3
vậy F(3,2)=32
b,viết hàm đệ quy tính giá trị hàm F
Function F(x:byte,y:byte):longint;
begin
if(x<=0)then F(x,y)=y
else if(y<=0) then F(x,y) = x + F(x-1,1)
else F(x,y)= F(x-1,y) + F(x,y-1) ;
end;
Câu 2:
Cho danh sách thí sinh dự thi, mỗi thí sinh có các thông tin: Số báo danh, họ và tên, năm sinh, điểm toán, điểm lý, điểm hoá, tổng điểm (TĐ = ĐT + ĐL + ĐH).
a) Hãy biểu diễn CTDL của danh sách nói trên dưới dạng một danh sách liên kết đơn.
b) Dựa vào CTDL đã biểu diễn ở trên hãy viết các thủ tục thực hiện các yêu cầu sau:
+ Nhập danh sách n thí sinh (cho n là số nguyên dương).
+ Tìm và in ra những thí sinh có tổng điểm >= 20.
+ Loại bỏ những thí sinh có tổng điểm bằng 0.
Hướng dẫn;
program de_8;
uses crt;
const max=1000;
type ts=record
ten:string[25];
d,m,y:byte;
td:real;
end;
list=record
A:array[1..1000] of ts;
end;
var l:list;n:byte;
procedure nhap_ds(var l:list;n:byte);
var i:byte;x:ts;
begin
for i:=1 to n do
begin
writeln('nhap thi sinh thu',i);
write('nhap ten: ');readln(x.ten);
write('ngay sinh: ');readln(x.d);
write('thang sinh: ');readln(x.m);
write('nam sinh: ');readln(x.y);
write('tong diem: ');readln(x.td);
l.a[i]:=x;
end;
end;
Function tim_kiem(var l:list):boolean;
var i:byte;
begin
if (n=0) then tim_kiem:= false
else
begin
for i:=1 to n do
if(l.A[i].td >= 20)then
writeln('thi sinh thu',i,l.A[i].ten,l.A[i].td:3:1);
tim_kiem:=true;
end;
end;
procedure delete(var l:list );
var i,j:byte;
begin
for i:=1 to n do
if (l.A[i].td=0) then
begin
for j:=i to n-1 do
l.A[j]:=l.A[j+1];
n:=n-1;
end;
end;
var k,i:byte;x:ts;
begin
clrscr;
write('nhap so luong thi sinh n=');readln(n);
nhap_ds(l,n);
writeln('thi sinh co tong diem >=20 la :');
tim_kiem(l);
writeln('danh sach sau khi loai bo nhung thi sinh co dtk=0 ' );
for i:=1 to n do
writeln ('thi sinh thu',i,l.A[i].ten);
readln;
end.
Câu 2 : Làm kiểu danh sách móc nối
program De_2;
{uses crt;}
type Ts=record
ten:string[25];
gtinh:string[3];
ns:integer;
dtb:real;
end;
tro=^node;
node=record
infor:Ts;
next:tro;
end;
var l:tro; d:byte;
procedure input(var l:tro);
var x:ts ; i,d:byte ; p,q:tro;
begin
l:=nil;i:=1;d:=0;
while(x.ten<>'') do
begin
writeln('nhap thong tin thi sinh thu',i,':');
write('Ten Thi sinh :') ; readln(x.ten);
write('gioi tinh:') ; readln(x.gtinh);
write('dtb') ; readln(x.dtb);
new(p);
p^.infor:=x;
p^.next:=nil;
if l=nil then
begin
l:=p;
i:=i+1;
end
else
begin
q:=l;
while q^.next<>nil do q:=q^.next;
q^.next:=p;
i:=i+1;
d:=d+1;
end;
end;
end;
procedure timkiem(var l:tro);
var x:ts ; q:tro;i:byte;
begin
i:=1;q:=l;
while (q^.next<>nil) do
begin
x:=q^.infor;
if (x.dtb>=8) then
begin
writeln('thi sinh thu ',i,x.ten:10, x.dtb:5:1 );
q:=q^.next;
end;
end;
end;
Function empty(l:tro):boolean;
begin
empty:=(l=nil);
end;
procedure insert_fist(var l:tro; x:ts);
var p:tro;
begin
new(p);
p^.infor:=x;
p^.next:=nil;
if empty(l)then l:=p
else begin
p^.next:=l;
l:=p;
end;
end;
procedure insert_mid(var l:tro;m:tro;x:ts);
var p:tro;
begin
new(p);m:=l;
p^.next:=m^.next;
m^.next:=p;
end;
procedure insert(var l:tro; x:ts; k:byte );
var d:byte ; q,m:tro;
begin
d:=0; q:=l;
while(q^.next<>nil) do
begin
d:=d+1;
q:=q^.next;
end;
if (k<1) or (k>d)then write('khong bo sung dc')
else
if (k=1) then
insert_fist(l,x)
else
begin
d:=1;m:=l;
while (d<k-1)do
begin
m:=m^.next;
d:=d+1;
end;
insert_mid(l,m,x);
end;
end;
procedure output(l:tro;q:tro);
var x:Ts ;
begin
q:=l;
while(q<>nil) do
begin
x:=q^.infor;
writeln('ten thi sinh:',x.ten:10 ,'g tinh:',x.gtinh:10 ,' diem trung binh:',x.dtb:3:1);
q:=q^.next;
end;
end;
var q:tro;k:byte;x:ts;
begin
writeln('nhap thong tin thi sinh ');
input(l);
writeln('nhung thi sinh co dtb>8 : ');
timkiem(l);
write('nhap vao vi tri can bo sung k:') ;readln(k);
writeln('nhap nhung thong tin cua ts can chen');
write('ten,gtinh,dtb');readln(x.ten,x.gtinh,x.dtb);
Writeln('danh sach sau khi bo sung:');
insert(l,x,k);
output(l,q);
readln;
end.
Bạn đang đọc truyện trên: AzTruyen.Top