Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 15 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
15
Dung lượng
267,5 KB
Nội dung
Trường Đại học Bách Khoa Hà Nội Viện Công nghệ thông tin truyền thông Tài liệu phát triển chương trình phần mềm Đề tài : Tạo ADT có tên Array.h viết chương trình CheckArray.c để kiểm tra Giảng viên hướng dẫn : TS Vũ thị Hương Giang Nhóm sinh viên thực : Vũ Văn Bảo Trần Trung Hiếu Nguyễn Minh Tiến Nguyễn Văn Tùng Nguyễn Hồng Vinh Lớp : KSCLC – K55 Năm học : 2012 - 2013 Hà Nội, 2013 Mục lục Mục lục I.Phân tích tốn 1.Yêu cầu toán 2.Biểu đồ IPO II.Thiết kế giải pháp A.Thiết kế ADT có tên Array 1.Cấu trúc ADT 2.Thao thác nhập liệu cho cấu trúc củaADT .5 3.Thao tác hiển thị liệu cấu trúc ADT 4.Thao tác xếp liệu ADT theo thuật toán xếp bọt 5.Thao tác xếp liệu ADT theo thuật toán xếp chèn 6.Thao tác xếp liệu ADT theo thuật toán xếp chọn 7.Thao tác tìm phần tử giá trị lớn vị trí 8.Thao tác tìm phần tử có giá trị nhỏ vị trí 9.Thao tác tính giá trị trung bình phần tử 10.Thao tác tính độ lệch giá trị hai phần tử 11.Thao tác tính độ lệch trung bình phần tử .7 12.Thao tác tìm kiếm phần tử có giá trị cho trước .7 13.Thao tác tìm kiếm nhị phân phần tử có giá trị cho trước .7 14.Thao tác hiển thị độ phức tạp thuật toán thời gian thực tế B.Thiết kế chương trình CheckArray cung cấp chức để kiểm tra ADT Array III.Cài đặt thiết kế A.Cài đặt ADT Array 1.Nhập, nhập lại liệu 2.Hiển thị liệu 3.Sắp xếp giải thuật xếp bọt 4.Sắp xếp giải thuật xếp chèn 5.Sắp xếp giải thuật xếp chọn 6.Tìm giá trị lớn vị trí .10 7.Tìm giá trị nhỏ mảng 10 8.Tìm giá trị trung bình phần tử .10 9.Tìm độ lệch phần tử 11 10.Tìm độ lệch trung bình phần tử 11 11.Tìm phần tử có giá trị cho trước băng thuật tốn tìm kiếm 11 12.Tìm phần tử có giá tri cho trước thuật tốn tìm kiếm nhị phân 12 13.Biểu diễn độ phức tạp thuật toán thời gian thực 12 B.Cài đặt chương trình CheckArray 12 Tài liệu tham khảo 14 I Phân tích tốn u cầu tốn • Tạo ADT có tên Array lưu trữ file Array.h ADT bao gồm hai thành phần thông tin: - Max[]: mảng giá trị thực - Count: số lượng phần tử mảng Max[] ADT cho phép thực số thao tác mảng số thực: 1) Nhập mảng 2) Hiển thị mảng 3) Sắp xếp phần tử mảng theo thuật toán xếp bọt 4) Sắp xếp phần tử mảng theo thuật toán xếp chèn 5) Sắp xếp phần tử mảng theo thuật tốn xếp chọn 6) Tìm giá trị lớn vị trí phần tử có giá trị lớn 7) Tìm giá trị nhỏ vị trí phần tử có giá trị nhỏ 8) Tính giá trị trung bình phần tử mảng 9) Tìm độ lệch giá trị hai phần tử có vị trí 10) Tính độ lệch trung bình giá trị phần tử mảng 11) Tìm kiếm tuyến tính phần tử mảng có giá trị x,nếu tìm thấy đưa vị trí, khơng trả 12) Tìm kiếm nhị phân phần tử mảng có giá trị x,nếu tìm thấy thơng báo có phần tử x mảng, khơng thơng báo khơng thấy 13) Biểu thị độ phức tạp thuật toán theo big O hiển thị thời gian tính tốn thực tế micro giây • Viết chương trình cung cấp chức để kiểm tra ADT Biểu đồ IPO Input Số nguyên Dãy số thực Số lượng phần tử Count Mảng giá trị thực Max[] Số lượng phần tử Count Mảng giá trị thực Max[] Số lượng phần tử Count Mảng giá trị thực Max[] Số lượng phần tử Count Mảng giá trị thực Max[] Số lượng phần tử Count Mảng giá trị thực Max[] Số lượng phần tử Count Mảng giá trị thực Max[] Số lượng phần tử Count Mảng giá trị thực Max[] Số lượng phần tử Count Mảng giá trị thực Max[] Vị trí hai phần tử Số lượng phần tử Count Mảng giá trị thực Max[] Số lượng phần tử Count Mảng giá trị thực Max[] Giá trị cần tìm kiếm Process Đọc từ bàn phím Xuất hình Output Giá trị count Giá trị phần tử mảng Dãy số thực Sắp xếp bọt Dãy số thực có thứ tự Sắp xếp chèn Dãy số thực có thứ tự Sắp xếp lựa chọn Dãy số thực có thứ tự Tìm giá trị lớn mảng so sánh phần tử mảng với giá trị lớn Tìm giá trị nhỏ mảng so sánh phần tử mảng với giá trị nhỏ Tính giá trị trung bình Giá trị lớn mảng Vị trí phần tử có giá trị lớn Giá trị nhỏ mảng Vị trí phần tử có giá trị nhỏ Giá trị trung bình Trừ cho Độ lệch Tính độ lệch trung bình Độ lệch trung bình Tìm Vị trí giá trị cần tìm kiếm Số lượng phần tử Count Mảng giá trị thực Max[] Giá trị cần tìm kiếm Các thao tác Tìm nhị phân Thơng báo có hay khơng Tính thời gian Thời gian II Thiết kế giải pháp A Thiết kế ADT có tên Array Cấu trúc ADT Trong chương trình này, tạo cấu trúc ADT có tên mang, bao gồm filed: • Filed thứ tên count có kiểu liệu int, để lưu trữ số lượng phần tử mảng max • Filed thứ mảng max có kiểu liệu float, có số phần tử count, giới hạn số phần tử tối đa mảng 1000 Thao thác nhập liệu cho cấu trúc củaADT • Chọn cách nhập liệu từ bàn phím • Sử dụng lệnh printf để thơng báo nhập, lệnh scanf để nhập liệu • Khi nhập liệu, ý đến giới hạn field count, kiểu liệu filed cấu trúc Nếu thơng báo nhâp thành cơng Nếu sai tì cho phép nhập lại • Sau nhập xong trả giá trị cấu trúc ADT vừa nhập Thao tác hiển thị liệu cấu trúc ADT • Lấy liệu biến có cấu trúc mang • Sử dụng lệnh printf để in liệu hình Thao tác xếp liệu ADT theo thuật tốn xếp bọt • Lấy liệu đầu vào biến có kiểu mang • Sử dụng thuật toán bubbleSort để xếp lại liệu mảng Bắt đầu từ đầu dãy, thuật toán tiến hành so sánh phần tử với phần tử sau thực đổi chỗ, chúng khơng theo thứ tự Q trình lặp lặp lại gặp lần duyệt từ đầu dãy đến cuối dãy mà thực đổi chỗ Cách làm đẩy phần tử lớn xuống cuối dãy, phần tử có giá trị nhỏ dịch chuyển đầu dãy • Sau trả giá trị có kiển mang Thao tác xếp liệu ADT theo thuật tốn xếp chèn • Lấy liệu đầu vào biến kiểu mang • Sử dụng thuật toán insertionSort để xếp lại liệu • Trả giá trị có kiểu mang Thao tác xếp liệu ADT theo thuật tốn xếp chọn • Lấy liệu đầu vào biến kiểu mang • Sử dụng thuật tốn selectionSort để xếp lại liệu Tìm phần tử nhỏ đưa vào vị trí dầu tiên Tìm phần tử nhỏ đưa vào vị trí Tìm phần tử nhỏ đưa vào vị trí …… • Trả giá trị có kiểu mang Thao tác tìm phần tử giá trị lớn vị trí • Lấy liệu vào biến kiểu mảng • Sử dụng thuật tốn tìm giá trị lớn mảng, để in hình giá trị phần tử có giá trị lớn Gán max = phần tử đầu tiên, so sánh max với phần tử tiếp theo, max mà nhỏ phần tử max lại gắn bang giá trị phần tử đó, q trình kết thúc so sánh max với phần tử cuối • Từ giá trị lớn đó, sử dụng thuật tốn tìm kiếm để in vị trí phần tử lớn (phần tử vị trí thứ mảng) Thao tác tìm phần tử có giá trị nhỏ vị trí • Lấy liệu đầu vào biến kiểu mang • Sử dụng thuật tốn tìm kiếm giá trị nhỏ mảng, để in giá trị phần tử có giá trị nhỏ Gán = phần tử đầu tiên, so sánh max với phần tử tiếp theo, max mà lớn phần tử lại gắn bang giá trị phần tử đó, trình kết thúc so sánh max với phần tử cuối • Từ giá trị nhỏ đó, sử dụng thuật tốn tìm kiếm để in hình vị trí phần tử có giá trị nhỏ Thao tác tính giá trị trung bình phần tử • Lấy liệu đầu vào biến kiểu mang • Sử dụng câu lênh for để tính tổng phần tử mảng • Sau tính giá trị trung bình cách lấy tổng chia cho số phaabf tử mảng la count, trả giá trị đó, giá trị bày có kiểu float 10.Thao tác tính độ lệch giá trị hai phần tử • Lấy liệu đầu vào biến kiểu mang, hai biến kiểu i,jint biểu thị cho vị trí phần tử cần tính độ lệch • Kiểm tra xem vị trí có tồn mảng khơng • Nếu khơng trả giá trị tương ứng: Nếu khơng có phần tử thứ i: trả giá trị -1 Nếu khơng có phần tử thứ j: trả giá trị -2 Nếu khơng có hai phần tử: trả giá trị -3 • Nếu có hai vị trí, trả giá trị độ lớn độ chênh lệch hai phần tử này, giá trị có kiểu float 11.Thao tác tính độ lệch trung bình phần tử • Lấy đầu vào biến kiểu mang • Tính giá trị trung bình phần tử avg • Sử dụng cơng thức tính độ lệch trung bình dltb = bậc hai củatổng bình phương hiệu phần tử với giá trị trung bình • Trả giá trị vừa tính được, giá trị có kiểu float 12.Thao tác tìm kiếm phần tử có giá trị cho trước • Lấy đầu vào biến kiểu mang, biến x kiểu float giá trị cần tìm kiếm • Sử dụng thuật tốn tìm kiếm tuần tự, để tìm kiếm Duyệt tùng phần tử, giá trị phần tử giá trị cần tìm lưu lại số • Nếu tìm thấy in hình thơng báo tìm thấy phần tử này, in số phần tử • Nếu khơng tìm thấy in hình số 13.Thao tác tìm kiếm nhị phân phần tử có giá trị cho trước • Lấy đầu vào biến kiểu mang, biến x kiểu float biểu diễn cho giá trị cần tìm kiếm • Sắp xếp lại mảng, dùng thuật toán xếp chèn • Sử dụng thuật tốn tìm kiếm nhị phân để lưu lại vị trí tìm phía sau vị trí tìm Thuật tốn nhị phân chia toán lớn thành toán nhỏ • Sử dụng thuật tốn tìm kiếm nhị phân để lưu lại vị trí tìm phía trước vị trị tìm • Nếu tim thấy in hình số • Nếu khơng tìm thấy in hình khơng tìm thấy 14.Thao tác hiển thị độ phức tạp thuật tốn thời gian thực tế • Lấy đầu vào biến kiểu mang, biến y_c kiểu int biểu diễn yêu cầu cần tính thời gian • Sử dụng switch … case… kiểm tra yêu cầu để thực • Ở giá trị sau case đăt thời điểm bắt đầu thực thời điểm kết thúc thao tác • In hình thơng báo độ phức tạp thuật toán, thời gian thực thời điểm kết thúc trừ thời điểm bắt đầu B Thiết kế chương trình CheckArray cung cấp chức để kiểm tra ADT Array • Tạo liệu ban đầu cho mảng • Tạo menu lựa chọn, sử dụng lệnh printf để in danh mục menu • Từ menu lựa chọn sử dụng câu lệnh điều khiển switch …case …để thực menu • Ở lựa chọn sử dụng thao tác cài đặt ADT Array, để kiểm tra thao tác • Cho phép thực tiếp thao trên: Khi tất lệnh đặt vòng do… while III Cài đặt thiết kế A.Cài đặt ADT Array Nhập, nhập lại liệu Cài đặt hàm: mang nhap(); mang nhap(){ do{ printf("\n Nhap so luong phan tu cua mang count = "); scanf("%d", &c); if((c < 1) || (c > 1000)) printf("\n Du lieu nhap khong dung, hay nhap lai; "); }while ((c < 1) || (c > 1000)); mang1.count = c; for (i = 0; i < mang1.count; i++){ printf("\n nhap phan tu thu %3d max[%3d]= ", i + 1, i); scanf("%f", &g_t); fflush(stdin); mang1.max[i] = g_t; } printf("\n Ban da nhap du lieu cong !!"); return (mang1); } Hiển thị liệu Cài đặt thủ tục: void hien(mang mang1); void hien(mang mang1){ printf("\n So luong phan tu count = %3d",mang1.count); for(i=0;i= 0; i ){ for (j = 1; j mang1.max[j]){ float temp = mang1.max[j-1]; mang1.max[j - 1] = mang1.max[j]; mang1.max[j] = temp; } } } return (mang1); } Sắp xếp giải thuật xếp chèn Cài đặt hàm: mang insertionSort(mang mang1); mang insertionSort(mang mang1){ for( i = 1;i < mang1.count; i++){ last = mang1.max[i]; for (j = i - 1;j >= 0; j ){ if (mang1.max[j] > last) mang1.max[j + 1] = mang1.max[j]; else break; } mang1.max[j + 1] = last; } return (mang1); } Sắp xếp giải thuật xếp chọn Cài đặt hàm: mang selectionSort(mang mang1); mang selectionSort(mang mang1); for (i = 0; i < mang1.count - 1; i++){ = i; for (j = i + 1;j < mang1.count; j++){ if (mang1.max[j] < mang1.max[min]) = j; } temp = mang1.max[i]; mang1.max[i] = mang1.max[min]; mang1.max[min] = temp; } return (mang1); } Tìm giá trị lớn vị trí Cài đặt thủ tục: void finMax(mang mang1); void findMax(mang mang1){ float mmax = mang1.max[0]; int i; for(i = 1; i < mang1.count; i++){ if (mmax < mang1.max[i]) mmax = mang1.max[i]; } printf("\n Phan tu lon nhat cua mang co gia tri %13.5f", mmax); printf("\n Phan tu lon nhat la phan tu thu: "); for(i = 0; i < mang1.count; i++){ if (mmax == mang1.max[i]) printf("\n %3d", i + 1); } } Tìm giá trị nhỏ mảng Cài đặt thủ tục: void finMin(mang mang1); void findMin(mang mang1) { float = mang1.max[0]; int i; for(i = 1; i < mang1.count; i++){ if (min > mang1.max[i]) = mang1.max[i]; } printf("\n Phan tu nho nhat cua mang co gia tri %13.5f", min); printf("\n Phan tu nho nhat la phan tu thu: "); for(i = 0;i < mang1.count; i++){ if (min == mang1.max[i]) printf("\n %3d", i + 1); } } Tìm giá trị trung bình phần tử Cài đặt hàm: float avgMax(mang mang1); float avgMax(mang mang1) { 10 int i; float sum = 0, avg; for (i = 0;i < mang1.count; i++){ sum = sum + mang1.max[i]; } avg = sum/((float)(mang1.count)); return (avg); } Tìm độ lệch phần tử Cài đặt hàm float dolech(mang mang1, int i, int j); float dolech(mang mang1, int i, int j){ float do_lech; if (((i > mang1.count)||(i < 1))&&((j > mang1.count)||(j < 1))) return (-3); else if ((i > mang1.count)||(i < 1)) return(-1); else if((j > mang1.count)||(j < 1)) return(-2); else{ do_lech = fabs(mang1.max[j-1] - mang1.max[i-1]); return (do_lech); } } 10.Tìm độ lệch trung bình phần tử Cài đặt hàm: float dolectb(mang mang1); float dolechtb(mang mang1){ float avg,s = 0; int i; avg = avgMax(mang1); for (i = 0; i < mang1.count; i++) s = pow(mang1.max[i] - avg, 2) + s; return (sqrt(s)); } 11.Tìm phần tử có giá trị cho trước băng thuật tốn tìm kiếm Cài đặt thủ tục: void sequentialSearch(mang mang1, float x); void sequentialSearch(mang mang1, float x){ int i, e = 0; int cs[mang1.count]; for (i = 0; i < mang1.count; i++){ 11 if (mang1.max[i] == x){ cs[e] = i; e++; } } if (e == 0) printf("\n %3d", e); else { printf("\n Chi so cua phan tu co gia tri %7.3f tim theo giai thuat sequentialSearch la: ", x); for (i = 0; i < e; i++) printf("%3d", cs[i]); // in cac chi so can tim } } 12.Tìm phần tử có giá tri cho trước thuật tốn tìm kiếm nhị phân Cài đặt thủ tục: void binarySearch(mang_input, float giatri); 13.Biểu diễn độ phức tạp thuật toán thời gian thực Cài đặt thủ tục: void getTime(mang mang_input, int y_c); B.Cài đặt chương trình CheckArray int main() { Khai báo biến Thông báo nhập nhập liệu lần đầu do{ print danh mục menu switch(yc){ case 2: gọi hàm nhap(); gọi thủ tục hien() để hiển thị kết kiểm tra case 3: goi hàm bubble(); gọi thủ tục hien() để hiển thị kết kiểm tra case4: gọi hàm insertionSort(); goi thủ tục hien() để hiển thị kết kiểm tra case 5: gọi hàm selectinSort(); goi thủ tục hien() để hiển thị kết kiểm tra case 6: gọi thủ tục finMax(); 12 case 7: goi thủ tục finMin(); case 8: gọi hàm avgMax(); in kết để kiểm tra case 9: nhập sô nguyên gọi hàm dolech(); dựa vào giá trị in kết case 10: gọi hàm dolechtb(); in kết để kiểm tra case 11: nhập vào số thực cần tìm kiếm gọi thủ tục sequentialSearch(); case 12: nhập vào số thực tìm kiếm gọi thủ tục binary(); case 13: nhập vào yêu cầu cần tính thời gian Gọi thủ tục getTime() defaut thơng báo khơng có u cầu } Nhập vào số ngun tiep để hỏi có thực tiếp khơng while (tiep ==0); } 13 Tài liệu tham khảo [1] Slide giảng KTLT-Vũ Thị Hương Giang [2] Code complete A Practical Handbook ofd Software Construction tác giả Steve Mc Connell 14 ... báo có hay khơng Tính thời gian Thời gian II Thiết kế giải pháp A Thiết kế ADT có tên Array Cấu trúc ADT Trong chương trình này, tạo cấu trúc ADT có tên mang, bao gồm filed: • Filed thứ tên count... ADT vừa nhập Thao tác hiển thị liệu cấu trúc ADT • Lấy liệu biến có cấu trúc mang • Sử dụng lệnh printf để in liệu hình Thao tác xếp liệu ADT theo thuật toán xếp bọt • Lấy liệu đầu vào biến có. .. có kiểu liệu int, để lưu trữ số lượng phần tử mảng max • Filed thứ mảng max có kiểu liệu float, có số phần tử count, giới hạn số phần tử tối đa mảng 1000 Thao thác nhập liệu cho cấu trúc củaADT