Đồ Án Nghiên cứu cấu trúc dữ liệu bài toán cây gia phả

27 3.9K 12
Đồ Án Nghiên cứu cấu trúc dữ liệu bài toán cây gia phả

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN  BÁO CÁO ĐỒ ÁN: CẤU TRÚC DỮ LIỆU & THUẬT TOÁN GVHD : PHAN THANH TAO NHÓM : 12 LỚP : 07T2 SVTH : Trần Thanh Liêm Nguyễn Hữu Nhân Lê Phương Tiến Đà Nẵng, tháng 12 năm 2009 Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 1 Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao Mục lục Mục lục 2 Lời nói đầu 3 I. Giới thiệu đề tài và đề tài 4 Giới thiệu đề tài : 4 Đề tài 4 II. Nghiên cứu lý thuyết 5 III. Các giải pháp có thể và cấu trúc đề xuất 6 IV. Mô tả thuật toán 8 V. Lập trình 11 1.Chương trình 11 2.Kết quả 20 VI. Kết luận 26 Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 2 Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao Lời nói đầu Cấu trúc dữ liệu là một môn học quan trọng trong lĩnh vực CNTT. Nó là cơ sở vững chắc để ta giải quyết các bài toán trong quá trình học tập cũng như trong cuộc sống. Một điều quan trọng nữa là nó cung cấp cho chúng ta những hiểu biết về các giải thuật tác động lên dữ liệu cũng như cách tổ chức dữ liệu để giải quyết các bài toán sao cho dễ nhất, tối ưu nhất. Sau khi học môn “Cấu trúc dữ liệu ” và tiếp đến là môn “Phân tích và thiết kế giải thuật”, chúng em được giao thực hiện đồ án môn học “Cấu trúc dữ liệu và thuật toán ”để giải quyết một số bài toán liên quan đến môn học và đề tài chúng em được nghiên cứu ở đây là bài toán cây gia phả. Đây là đồ án đầu tiên của chúng em nên không thể tránh khỏi sai sót, rất mong sự giúp đỡ tận tình của các thầy cô trong khoa. Em cũng xin cảm ơn thầy Phan Thanh Tao đã hướng dẫn và giúp chúng em hoàn thành đồ án này. Nhóm sinh viên thực hiện Trần Thanh Liêm Nguyễn Hữu Nhân Lê Phương Tiến Nhóm 12 Lớp 07T2 Khoa Công Nghệ Thông Tin Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 3 Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao I. Giới thiệu đề tài và đề tài  Giới thiệu đề tài : Đối với mỗi dòng họ đều có một tài liệu ghi chép lại tất cả những người có liên quan với nhau trong dòng họ, tài liệu đó chính là gia phả. Hay gia phả là bản ghi chép tên họ, tuổi tác, vai trò và công đức của cha mẹ, ông bà, tiên tổ trong thời đại mà họ đã sinh ra và lớn lên của một gia đình hay một dòng họ. Gia phả đã xuất hiện từ thời xa xưa ở phương Tây cũng như ở phương Đông. Tại các nước Đông Á, việc xây dựng và lưu truyền gia phả được xem là một cách ghi nhớ công ơn tổ tiên, gây dựng lòng tự hào trong dòng tộc. Ở Tây phương, người ta có tập tục làm cây phả hệ, tương tự như Tông đồ của người Hoa hay người Việt. Một Tông đồ, một Gia phả, một Phả ký, một Phổ truyền dù đơn sơ hay súc tích cũng đều trở nên những tài liệu quý báu cho nhà xã hội học, nhà sử học về sau. Nó còn có thể hữu dụng cho những nghiên cứu về tâm lý, về di truyền học, huyết học, y học nữa. Để thấy rõ một cách tổng quát các chi lớn, nhỏ, xa, gần của một họ, người ta còn lập ra các phả đồ, với những hình vẽ đơn giản kèm theo tên tuổi ghi vắn tắt ở bên dưới. Do đó,bài toán cây gia phả rất thông dụng trong cuộc sống hiện nay.Và với sự phát triển của Công Nghệ Thông Tin thì sẽ giúp cho việc tạo lập và quản lý cây gia phả sẽ tốt hơn.  Đề tài : Quản lý thông tin gia phả của một dòng họ. Thông tin về một con người trong gia phả gồm : họ tên, ngày sinh, tình trạng gia đình, cha,mẹ,… a. Hãy định nghĩa cấu trúc dữ liệu thích hợp để quản lý gia phả,sau đó cài đặt cấu trúc dữ liệu này. b. Giả sử không có hai người trùng tên,hãy viết chương trình con nhập vào họ tên của một người,sau đó cho biết người đó có trong gia phả không?Nếu có thì in ra tất cả các thế hệ con,cháu … của người này và in ra những người cùng thế hệ với người này. Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 4 Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao II. Nghiên cứu lý thuyết Gia phả đã xuất hiện từ thời xa xưa ở phương Tây cũng như ở phương Đông. Tại Việt Nam, gia phả sơ giản ghi chép tên cúng cơm, ngày giỗ và địa điểm an táng của ông cha. Theo các nhà sử học phỏng đoán thì gia phả đã xuất hiện từ thời Sĩ Nhiếp làm Thái thú ở Giao Chỉ, hoặc gần hơn tức là từ thời Lý Nam Đế (khoảng nǎm 476-545). Nhưng phải đến thời nhà Lý, nhà Trần mới xuất hiện những cuốn tộc phả, thế phả (ghi cả thế thứ, tông tích toàn họ), phả ký (ghi lại hành trạng, sự nghiệp của tổ tiên). Mới đầu gia phả xuất hiện chỉ trong Hoàng tộc cùng giới quan lại, nhà Lý có Hoàng Triều Ngọc Điệp - năm 1026; nhà Trần có Hoàng Tông Ngọc Điệp, nhà Lê có Hoàng Lê Ngọc Phả Cùng với sự xuất hiện các gia phả của Hoàng tộc là gia phả của các danh gia, quan lại và cứ thế lan rộng, phổ biến ghi chép gia phả trong nhân dân. Trước đây, gia phả chủ yếu được ghi chép bằng chữ Hán-Nôm, nhưng số người giỏi không nhiều, qua nhiều năm chiến tranh, nhiều bộ, cuốn gia phả của nhiều dòng họ cũng mất dần Tục làm gia phả phát triển mạnh ở hai miền Bắc và Trung, miền Nam rất ít gia đình làm gia phả ở đấy còn được gọi là "gia phổ" và biến thái thành "tông chi" tức tờ "tông chi tông đồ". Trong gia phả, người đứng đầu ngành trưởng (trưởng họ, trưởng tộc) có bổn phận ghi hết những chi tiết về thân thích và dòng dõi; những người con khác sao lại bản gia phả chính đó. Các gia đình giữ gìn kỹ lưỡng và truyền từ đời cha tới đời con. "Họ" theo nghĩa gốc có liên hệ với nhà và dưới chế độ phong kiến, nối kết con người với đất ruộng: một mái nhà, một gia đình, một họ. Họ và tên của một người định vị trí của cá nhân người đó trong xã hội, xác định cá thể trong một toàn thể. Và trong một cây gia phả thì chỉ chú ý đến con trai,còn con gái thì chỉ lưu thông tin, không mở rộng trong gia phả. Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 5 Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao III. Các giải pháp có thể và cấu trúc đề xuất Các giải pháp :  Cấu trúc thông tin dưới dạng bảng. o Ưu điểm : - Dễ quản lý - Nó thể hiện được mối quan hệ giữa các thành viên trong dòng họ. o Nhược điểm : Tốn dung lượng bộ nhớ. Ví dụ : Để thể hiện mối quan hệ giữa 4 người A,B,C,D. Ta cần bảng 4x4. Nếu số người là n là cần bảng là nxn. Minh hoạ :  Cấu trúc theo kiểu danh sách đa liên kết Danh sách đa liên kết là danh sách có nhiều mối liên kết o Ưu : - Ít tốn bộ nhớ - Thể hiện được đầy đủ các mối quan hệ. o Nhược : - Quá nhiều đường thể hiện quan hệ - Khó quản lý Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 6 Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao Ví dụ mô tả :  Cấu trúc theo kiểu đơn liên kết Danh sách đơn liên kết là danh sách mà các phần tử được kết nối với nhau nhờ vùng(trường) liên kết. Ví dụ như trong struct human có human *next. o Ưu điểm : Dễ cài đặt, dễ lập trình, dễ quản lý o Nhược điểm : Không thấy rõ được cái mối quan hệ. Các mối quan hệ chỉ được thể hiện qua các biến. Sơ đồ minh hoạ Qua các cấu trúc được mô tả thì nhóm chúng em chọn cấu trúc đơn liên kết.Vì với cấu trúc này sẽ dễ dàng cho việc quản lý,thêm,sửa,xoá,update,tìm kiếm trong gia phả,vì mỗi gia phả sẽ luôn được thay đổi theo năm tháng.Khắc phục nhược điểm : là không chỉ rõ mối quan hệ nhưng các mối quan hệ thể hiện qua các biến nên người đọc hoặc người sử dụng chương trình vẫn có thể hiểu được. Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 7 Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao IV. Mô tả thuật toán Gia phả giả định : Với cấu trúc chọn là Danh Sách đơn liên kết thì mô hình đề xuất như sau: + ) Trường liên kết để nối giữa 2 phần tử hunman *next; + ) Trường thông tin liên quan đến một phần tử Cấu trúc đc khái báo như sau : struct hunman { int thehe; infor thongtin; hunman *next;//để chỉ đến phần tử tiếp theo trong gia phả. }; Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 8 Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao Trong đó infor thongtin là : struct infor { char name[50]; char pa[50]; char ma[50]; char vc[50];//vợ hay chồng int ns[3];// Gồm có ngày tháng và năm sinh }; Quản lý dữ liệu bằng con trỏ kiểu Family; typedef hunman *Family; Input: + ) từ file (đã có sẳn danh sách và được lưu dưới dạng file *.bin) + ) nhập trực tiếp từ bàn phím Output: + ) màn hình + ) file *.txt,*.bin Các hàm điều khiển chương trình: + ) được phân 2 loại : - Quản lý chung cho cả chương trình ( begin()… ) - Quản lý việc thực hiện các hàm con trong thân chương trình ( list(),chon() …) + ) các hàm đều được sử dụng nhiều lần để thực hiện các yêu cầu từ bài toán Thuật toán riêng chư từng hàm được sử dụng 1) Dữ liệu: được bắt buộc nhập khi thực hiện cách lệnh theo yêu cầu của bài toán ,chủ yếu lấy dự liệu từ file “gia_pha.bin” vì để tiện cho việc thao tác Thuật toán : dung con trỏ FILE để lấy dữ liệu trong file “gia_pha.bin” theo kiểu dữ liệu human 2) Nhập dữ liệu trực tiếp từ bàn phím: - Gọi hàm them vào cuối danh sách n lần ( tùy theo yêu cầu người nhập) t=f; (*p).next=NULL; if(t!=NULL) { while((*t).next!=NULL) t=(*t).next; (*t).next=p; } else f=p; Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 9 Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao 3) Xuất dữ liệu: - File ( cũng dung con trõ FILE để thao tác trên 2 loại file là txt và bin ) - Màng hình ( xuất từng phần tữ trong danh sách ra màng hình,sử dụng vòng lặp để thực hiện việc xuất dữ liệu) 4) Các hàm có chức năng tìm kiếm: - Gồm: tìm một người trong gia phả ( tim(F) ), tìm người cùng thế hệ ( ng_cung_thehe(F) ),tìm con cháu của một người ( timconchau(F)) - Sử dụng thuật toán chung là tìm kiếm 1 phần tử trong danh sách và trả về kiểu con trỏ Family - Code như sau: Family search(Family &f,char ten[50]) { Family p; p=f; while(p!=NULL && strcmp((*p).thongtin.name,ten) ) p=(*p).next; return p; } 5 ) Hàm reset với mục đính đưa danh sách về lại trạng thái ban đầu (là NULL ) Khi sự quản lý không đủ khả năng ( do các hàm và các biến gọi lẫn nhau nên dễ xảy ra tình trạng chồng chất dự liệu).Có thể khắc phục bằng các ghi dự liệu ra mà đưa chứ về lại trại trái ban đầu Hàm này dùng để xóa hết các phần tử trong Danh sách ,khôi phục và giải phóng các vùng nhớ đã sử dụng Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 10 [...]... Chon:"); Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 19 Đồ án : Cấu Trúc Dữ Liệu& Thuật Toán GVHD:Phan Thanh Tao 2 Kết quả chạy chương trình (Kết quả cho gia phả ở trên)  Giao diện chính của chương trình Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 20 Đồ án : Cấu Trúc Dữ Liệu& Thuật Toán GVHD:Phan Thanh Tao  Thực hiện chương trình Sau khi chọn vào thực hiện... tác khác nhau Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 21 Đồ án : Cấu Trúc Dữ Liệu& Thuật Toán GVHD:Phan Thanh Tao Trường hợp chọn 1 : Tìm thử xem người đó có trong gia phả hay không? Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 22 Đồ án : Cấu Trúc Dữ Liệu& Thuật Toán GVHD:Phan Thanh Tao Trường hợp chọn 2 : Tìm kiếm những người cùng thế hệ với người... Trang: 25 Đồ án : Cấu Trúc Dữ Liệu& Thuật Toán GVHD:Phan Thanh Tao VI Kết luận  Chương trình bài toán cây gia phả ở trên đã thực hiện đúng theo yêu cầu của đề bài. Hi vọng rằng chương trình này sẽ được ứng dụng nhiều trong cuộc sống  Trong quá trình chạy thì không phát sinh lỗi  Cho ra kết quả nhanh chóng với độ chính xác cao đúng với thuật toán  Có sử dụng đồ hoạ trực quan Nhóm sinh... từ bàn phím Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 23 Đồ án : Cấu Trúc Dữ Liệu& Thuật Toán GVHD:Phan Thanh Tao Trường hợp chọn 3 : Tìm tất cả con cháu của người có tên nhập từ bàn phím Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 24 Đồ án : Cấu Trúc Dữ Liệu& Thuật Toán GVHD:Phan Thanh Tao  Trở lại menu chính Nếu chọn 2 thì sẽ in ra thông tin sinh... -void nhapF() { int i; char *s= "gia_ pha.bin"; clrscr(); textcolor(7); resetF(F); menu(); textcolor(4); printf("\n"); cprintf(" NHAP DU LIEU CHO GIA PHA "); printf("\n"); textcolor(7); printf("\n"); printf(" 1.Nhap tu FILE"); printf("\n\n 2.Nhap bang tay"); Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 16 Đồ án : Cấu Trúc Dữ Liệu& Thuật Toán GVHD:Phan Thanh Tao do{ printf("\n\n\n... hiện Lớp: 07T2 Trang: 17 Đồ án : Cấu Trúc Dữ Liệu& Thuật Toán GVHD:Phan Thanh Tao break; } case 5 : { printf("\n >\n"); resetF(F); list(); tieptuc(); break; } case 6 : { printf("\n >\n"); ghiTXT(F); list(); tieptuc(); break; } case 7 : { printf("\n >\n"); xuat(F); list(); tieptuc(); break;... Nhap ten file TXT de in gia pha :"); gets(s); if(s[0]!=NULL) { tep=fopen(s,"w+"); printf("\n > "); if(tep==NULL) printf("\n KO MO DC FILE "); else { fprintf(tep,"> "); while(p!=NULL) { if(p==NULL) break; fprintf(tep,"\nSTT: %d",i); Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 15 Đồ án : Cấu Trúc Dữ Liệu& Thuật Toán GVHD:Phan Thanh Tao... if(p) { t=f; while(t!=NULL) { if( (*t).thehe==(*p).thehe ) in_thongtin(t); t=(*t).next; } } else printf("\n >"); getch(); } Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 13 Đồ án : Cấu Trúc Dữ Liệu& Thuật Toán GVHD:Phan Thanh Tao // -void conchau(char s[50],Family f) { char temp[50]; Family p; p=f; strcpy(temp,s); while(p!=NULL)... *s) { Family p; FILE *tep; tep=fopen(s,"r+b"); if(tep==NULL) printf("\n KO MO DC FILE"); else { while(!feof(tep)) Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 14 Đồ án : Cấu Trúc Dữ Liệu& Thuật Toán GVHD:Phan Thanh Tao { p=new hunman; fread(p,sizeof(hunman),1,tep); if(feof(tep)) break; them2(f,p); } } fclose(tep); } // - GHI FILE BIN // void ghiBIN(Family f) { Family... void chon2(); // -MAIN -// int main() { textbackground(1); textcolor(7); clrscr(); begin(); return 1; } Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 11 Đồ án : Cấu Trúc Dữ Liệu& Thuật Toán GVHD:Phan Thanh Tao // Dinh nghia HAM -// void Infor(Family &p) { fflush(stdin); printf("\n Nhap ten:"); gets((*p).thongtin.name); printf("\n Nhap ten cha:"); gets((*p).thongtin.pa); . được giao thực hiện đồ án môn học Cấu trúc dữ liệu và thuật toán ”để giải quyết một số bài toán liên quan đến môn học và đề tài chúng em được nghiên cứu ở đây là bài toán cây gia phả. Đây là đồ. Đồ án : Cấu Trúc Dữ Liệu& amp;Thuật Toán GVHD:Phan Thanh Tao ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN  BÁO CÁO ĐỒ ÁN: CẤU TRÚC DỮ LIỆU & THUẬT TOÁN . 2 Đồ án : Cấu Trúc Dữ Liệu& amp;Thuật Toán GVHD:Phan Thanh Tao Lời nói đầu Cấu trúc dữ liệu là một môn học quan trọng trong lĩnh vực CNTT. Nó là cơ sở vững chắc để ta giải quyết các bài toán

Ngày đăng: 10/04/2015, 16:31

Tài liệu cùng người dùng

Tài liệu liên quan