bài tập kĩ thuật lập trình Tạo một ADT có tên là Array và viết một chương trình CheckArray để kiểm tra

16 816 0
bài tập kĩ thuật lập trình Tạo một ADT có tên là Array và viết một chương trình CheckArray để kiểm tra

Đ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

Trờng đại học bách khoa Hà nội Viện công nghệ thông tin Bài tập nhóm Kĩ thuật lập trình ti : To mt ADT có tên l Array v vit mt chng trình CheckArray kim tra. Ging viên hng dn: TS. V Th Hng Giang Nhóm sv thc hin 1: V Vn Bo Trn Trung Hiu Nguyn Minh Tin Nguyn Vn Tựng Nguyn Hng Vinh LP : KSCLC K55 Nm hc : 2012-1013 Hà Nội, 2013 Mục lục Mục lục2 Lời mở đầu 3 1 Chơng I: Phân tích bài toán lập trình 4 Nội dung 1: Yêu cầu 4 Nội dung 2: Biểu đồ IPO 5 Chơng II: Thiết kế giải pháp 6 Chơng III: Cài đặt thiết kế9 Chơng IV: Kiểm tra giải pháp 9 Tài liệu tham khảo 2 Lời mở đầu Hiện nay, do nhu cầu tính toán thực tế, và nhiều bài toán thực hiện trên cấu trúc mảng. Vì vậy chúng tôi đã viết nên chương trình này nhằm một phần nào đó để giải quyết vấn đề trên. 3 Ch¬ng I: Ph©n tÝch yªu cÇu Néi dung 1: - Tạo một ADT có tên là Array và lưu trữ trong file Array.h. ADT này bao gồm hai thành phần thong tin: - Max[]: mảng các giá trị thực - Count: số lượng các phần tử trong mảng Max[] ADT này cho phép thực hiện một số thao tác trên mảng số thực: 1. Nhập mảng 2. Hiển thị mảng 3. Sắp xếp các phần tử của mảng theo thuật toán sắp xếp nổi bọt 4. Sắp xếp các phần tử của mảng theo thuật toán sắp xếp chèn 5. Sắp xếp các phần tử của mảng theo thuật toán sắp xếp chọn 6. Tìm giá trị lớn nhất và vị trí các phần tử có giá trị lớn nhất 7. Tìm giá trị nhỏ nhất và vị trí các phần tử có giá trị nhỏ nhất 8. Tính giá trị trung bình của các phần tử trong mảng 9. Tìm độ lệch về giá trị giữa hai phần tử có vị trí bất kì 10.Tính độ lệch trung bình về giá trị của các phần tử trong mảng 11.Tìm kiếm tuyến tính phần tử của mảng có giá trị là x,nếu tìm thấy thì đưa ra vị trí, nếu không thì trả về 0 12.Tìm kiếm nhị phân phần tử của mảng có giá trị là x,nếu tìm thấy thì thông báo là có phần tử x trong mảng, nếu không thì thông báo là không thấy 13.Biểu thị độ phức tạp thuật toán theo big O và hiển thị thời gian tính toán thực tế bằng micro giây - Viết một chương trình cung cấp các chức năng để kiểm tra ADT này. Néi dung 2: BiÓu ®ồ IPO: 4 Input Process Output Số lượng phần tử Count Mảng các giá trị thực Max[] Đọc từ bàn phím Xuất ra màn hình Dãy các số thực Số lượng phần tử Count Mảng các giá trị thực Max[] Sắp xếp nổi bọt Dãy các số thực có thứ tự Số lượng phần tử Count Mảng các giá trị thực Max[] Sắp xếp chèn Dãy các số thực có thứ tự Số lượng phần tử Count Mảng các giá trị thực Max[] Sắp xếp lựa chọn Dãy các số thực có thứ tự Số lượng phần tử Count Mảng các giá trị thực Max[] Tìm giá trị lớn nhất trong mảng và so sánh các phần tử mảng với giá trị lớn nhất đó Giá trị lớn nhất trong mảng Vị trí của các phần tử có giá trị lớn nhất Số lượng phần tử Count Mảng các giá trị thực Max[] Tìm giá trị nhỏ nhất trong mảng và so sánh các phần tử mảng với giá trị nhỏ nhất đó Giá trị nhỏ nhất trong mảng Vị trí của các phần tử có giá trị nhỏ nhất Số lượng phần tử Count Mảng các giá trị thực Max[] Tính giá trị trung bình Giá trị trung bình Số lượng phần tử Count Mảng các giá trị thực Trừ cho nhau Độ lệch 5 Max[] Vị trí của hai phần tử Số lượng phần tử Count Mảng các giá trị thực Max[] Tính độ lệch trung bình Độ lệch trung bình Số lượng phần tử Count Mảng các giá trị thực Max[] Giá trị cần tìm kiếm Tìm tuần tự Vị trí của giá trị cần tìm kiếm Số lượng phần tử Count Mảng các giá trị thực Max[] Giá trị cần tìm kiếm Tìm nhị phân Thông báo có hay không Tinh thời gian Thời gian Chương 2: Thiết kế giải pháp Bài toán được tiếp cận theo hướng Structure Design (Top-Down Design) Bài toán được phân rã ra thành các bài toán con theo từng module,dựa theo yêu cầu của đề bài,bao gồm 1. hien Sử dụng cấu trúc lặp và tuần tự để in ra tất cả các phần tử trong mảng mỗi khi có lời gọi đến hàm. 2. nhap(); 3. bubble Sort Tìm giá trị cho vị trí thứ i trong mảng max[] : for(j=1; j<i; j++) if ( max[j] > max[j+1]) max[j] <-> max[j+1]; 6 4.insertion Sort. Đưa lần lượt các phần tử từ 1-> count vào vị trí chính xác.Mảng được xem như chỉ có i phần tử khi xét đến vị trí thứ i. j=i ; ưhile(j>1) if (max[j]>max[j-1]) max[j] <->max[j-1]; 5.selection Sort Tìm cách đưa giá trị lớn nhất về đầu mảng hay giá trị nhỏ nhất về cuối mảng (sau mỗi lần thực hiện mảng đã cho bớt đi phần tử vừa xét ) . Để tìm giá trị cho vị trí thứ i. for(j=i+1;j<=count;j++) if(a[i]<a[j]) max[i] <-> max[j] ; 6.findMax Duyệt qua một lượt tất cả các phần tử trong mảng để tìm giá trị lớn nhất. maxx=max[i]; for(i=1;i<=count;i++) if max[i]>maxx maxx=max[i]; 7.findMin Duyệt qua một lượt tất cả các phần tử trong mảng để tìm giá trị nhỏ nhất. min=max[i]; for(i=1;i<=count;i++) if max[i]>min min=max[i]; 8.avgMax Tính tổng giá trị tất cả các phần tử trong mảng sau đó chia cho số lượng các phần tử(count). sum=0; for(i=1;i<=count;i++) sum=sum+max[i]; avgeMax=sum/count; 9.dolech Lấy trị tuyệt đối của 2 phần tử đã biết trước vị trí trong mảng là i và j. dolecl=abs(max[i]-max[j]) 10.dolechtb 7 Bình phương độ lệch trung bình (dolechtb) là tổng bình phương của độ chênh lệch giữa các phần tử trong mảng và giá trị trung bình. for (i=0; i<=mang1.count; i++) sum=mang1.max[i]+sum; sum=sum/mang1.count; s=0; for (i=0; i<=mang1.count; i++) s=pow(mang1.max[i] -sum, 2)+s; dolechtb=sqrt(s) 11.sequentialSearch Duyết qua tất cả các phần tử trong mảng Nếu thấy xuất hiện giá trị cần tìm thì biến kiểm tra gán chỉ số vào mang cs ta tăng e lên 1 Nếu e = 0 thì đưa ra không có,ngược lại đưa ra giá trị cs. e=0; for (i=0;i<mang1.count;i++) { if (mang1.max[i]==x) { cs[e]=i; e++; } } 12.BinarySearch Ta sắp xếp mảng đã cho giảm dần theo các thuạt toán BubbleSort ,SelectionSort hoặc InsertionSort Chia mảng đã cho thành 2 mảng con,so sánh x với giá tri của phần tử đứng giữa.Nếu lớn hơn ta xét tiếp nửa bên trải của mảng,ngược lại ta xét nửa bên phải. do { mid=(left+right)/2 ; if(giatri==mang1.max[mid]) { cs1[e] = mid; e++; }; if (giatri<mang1.max[mid]) right = mid-1 ; else left = mid+1 ; }while(left<=right) ; 8 Chương 3: Cài đặt thiết kế - Mã nguồn chương trình nằm trong 2 file array.h và checkarray.c - Trong file array.h có tất cả 12 hàm được đánh số và để thực hiện các chức năng: Khai báo cấu trúc kiểu dữ liệu là kiểu mang; 11 hàm chính: • nhap(mang mang1); • mang bubbleSort(mang mang1); • mang insertionSort(mang mang1); • mang selectionSort(mang mang1); • void findMax(mang mang1); • void findMin(mang mang1); • float avgMax(mang mang1); • float dolech(mang mang1, int i,int j); • void dolechtb(mang mang1); • void sequentialSearch(mang mang1, float x); • void binarySearch(mang mang1, float giatri) 1 hàm phụ: void hien(mang mang1); Chương 4: Kiểm tra giải pháp  Chúng tôi đã thử nghiệm chương trình trên rất nhiều các bộ test và đưa ra kết quả chính xác.  Kết quả sau khi chạy chương trình 9 1.Nhập dữ liệu từ bàn phím và xuất dữ liệu ra màn hình: 10 [...]...2 .Kiểm tra khả năng thực thi của các hàm 3 -> 13: 11 12 13 14 15 Tài liệu tham khảo [1] Slide bài giảng KTLT-Vũ Thị Hương Giang [2] Code complete A Practical Handbook ofd Software Construction của tác giả Steve Mc Connell 16 . học bách khoa Hà nội Viện công nghệ thông tin Bài tập nhóm Kĩ thuật lập trình ti : To mt ADT có tên l Array v vit mt chng trình CheckArray kim tra. Ging viên hng dn: TS. V Th Hng Giang Nhóm. }while(left<=right) ; 8 Chương 3: Cài đặt thiết kế - Mã nguồn chương trình nằm trong 2 file array. h và checkarray. c - Trong file array. h có tất cả 12 hàm được đánh số và để thực hiện các chức. 1: - Tạo một ADT có tên là Array và lưu trữ trong file Array. h. ADT này bao gồm hai thành phần thong tin: - Max[]: mảng các giá trị thực - Count: số lượng các phần tử trong mảng Max[] ADT này

Ngày đăng: 16/05/2015, 13:10

Từ khóa liên quan

Mục lục

  • Lời mở đầu

  • Tài liệu tham khảo

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

Tài liệu liên quan