CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự do – Hạnh phúc ĐÁP ÁN ĐỀ THI TỐT NGHIỆP CAO ĐẲNG NGHỀ KHOÁ 2 (2008 - 2011) NGHỀ: LẬP TRÌNH MÁY TÍNH MÔN THI: LÝ THUYẾT CHUYÊN MÔN NGHỀ Mã đề số: DA LTMT - LT17

Nội dung Điểm

Câu I. Phần bắt buộc

a. Phương pháp biểu diễn danh sách liên kết kép

1 1,0

- Danh sách liên kết kép là một cấu trúc dữ liệu bao gồm 1 tập hợp các phần tử, trong đó mỗi phần tử là một nút, trong mỗi nút có chứa hai liên kết tới nút liền trước và liền sau nút đó.

- Cấu trúc 1 nút của danh sách liên kết kép

Lptr INFO Rptr

Trong đó:

+ INFO: là trường chứa thông tin (dữ liệu) của nút

+ Lptr: là con trỏ chứa địa chỉ của nút liền trước (bên

trái) nút này trong danh sách.

+ Rptr: là con trỏ chứa địa chỉ của nút liền sau (bên

phải) nút này trong danh sách.

- Danh sách liên kết kép luôn được quản lý bởi hai con trỏ trỏ: một vào nút cực trái của danh sách và một trỏ vào nút cực phải của danh sách.

- Một danh sách liên kết kép được biểu diễn tổng quát như sau:

R

L

b. - Thêm một nút có thông tin là X vào trước nút M đang trỏ, nếu không tồn tại nút M thì chèn vào đầu cực trái

Trang: 1/5

void themtruocM(L, R, X, M) { // Tạo nút mới new<= avail; new->info=X; if(L==NULL); {L=R=new; new->rptr=new->lprt=NULL;} else { // Tìm nút M P=L; while(p!=M && p!=NULL) p=p->rptr; if(P!=NULL) // tìm thấy nút M If(M==L) // M trùng với nút cực trái {new->rptr = M; M->lptr=new;

new->lptr=NULL; L=new; }

{ p=M->lptr;

else

New->rptr=M; M->lptr=new; p->rptr=new; new->lptr=p;}

else // Không tìm thấy nút M {new->rptr = M; M->lptr=new;

new->lptr=NULL; L=new; } }

}

1,0

while(demlink; if(p!=NULL) {

switch { case L==R: {L=R=NULL; break;} case

L==p:

{L=L->rptr;

L-

>lptr=NULL;break;}

case

R==p:

{R=R->lptr;

R-

>rptr=NULL;break;}

default: {q=p->lptr; M=p->rptr;

q->rptr=M;

M->lptr=q;

break;}

} free(p);

} else cout<<”Khong ton tai nút thu ”<

1,0 - Xóa nút thứ k trong danh sách. void xoa_nut_thu_k(L, R, M) { // Tìm nút thứ k if(L== NULL) count<<”Danh sach rong”; else { dem=1; p=L;

Trang: 2/5

FX ={A, B, C} FX ={A, B, C, D}

2

FX ={A, B, C, D, E}

1,0

FX ={A, B, C, D, E, G, H}

a. Tính (AB)+ - Gọi X={A, B} - Do AB C nên - Do B D nên - Do CD E nên - Do CE GH nên

FX ={A, B, G}

FX ={A, B, C, G} FX ={A, B, C, D, G}

FX ={A, B, C, D, E, G}

1,0

FX ={A, B, C, D, E, G, H}

b. Tính (BG)+ - Gọi X={B, G} - Do G A nên - Do AB C nên - Do B D nên - Do CD E nên - Do CE GH nên

3

0,25 0,25

#include"conio.h" #include"iostream.h" #include"string.h" #include"stdio.h" class diem { private: char *mahs; char *hoten; float t,l,h; public: diem() { mahs=new char[10];hoten=new char[40]; t=0;l=0;h=0; } ~diem() { delete mahs; delete hoten; } void nhap() { cout<<"\nMa hoc sinh:";gets(mahs); cout<<"\nHo va ten:"; gets(hoten); fflush(stdin); cout<<"diem toan:";cin>>t; cout<<"diem ly:";cin>>l; cout<<"diem hoa:";cin>>h; }

Trang: 3/5

0,1 0,15

0,25

float tongdiem() { return t+l+h; } void hienthi() { cout<<"\n"<>n; for(int i=0;i

Trang: 4/5

0,5

(ds[i].tongdiem()>tg)

void BD::tongdiem_Max() { float tg=0.0; int max,i; for(i=0;i

0,1

void main() { BD ds; ds.nhapBD(); ds.hienthiBD(); ds.tongdiem_Max(); getch(); }

………, ngày ………. tháng ……. năm ………

II. Phần tự chọn

Trang: 5/5