1. Trang chủ
  2. » Tất cả

Tiểu Luận Cơ Sở Ngành Kỹ Thuật Phần Mềm. Phần Mềm Mô Phỏng Các Thuật Toán Sắp Xếp. Ths.gvc Võ Huỳnh Trâm.pdf

14 22 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 14
Dung lượng 1,77 MB

Nội dung

NIÊN LUẬN CƠ SỞ NGÀNH KỸ THUẬT PHẦN MỀM PHẦN MỀM MÔ PHỎNG CÁC THUẬT TOÁN SẮP XẾP Sinh viên thực hiện Cán bộ hướng dẫn Nguyễn Văn Tài ThS GVC Võ Huỳnh Trâm MSSV B1400722 HỌC KỲ 1, 2017 2018 TRƯỜNG ĐẠI[.]

TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG BỘ MÔN CÔNG NGHỆ PHẦN MỀM NIÊN LUẬN CƠ SỞ NGÀNH KỸ THUẬT PHẦN MỀM PHẦN MỀM MƠ PHỎNG CÁC THUẬT TỐN SẮP XẾP Sinh viên thực Nguyễn Văn Tài MSSV: B1400722 Cán hướng dẫn ThS.GVC Võ Huỳnh Trâm HỌC KỲ 1, 2017 - 2018 ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN NIÊN LUẬN CƠ SỞ NGÀNH KTPM (Học kỳ 1, Năm học 2017-2018) GIÁO VIÊN HƯỚNG DẪN: STT HỌ VÀ TÊN Võ Huỳnh Trâm SINH VIÊN THỰC HIỆN: STT HỌ VÀ TÊN Nguyễn Văn Tài MSCB MSSV THƯỞNG (Tối đa 1,0 điểm) ĐIỂM B1400722 I HÌNH THỨC (Tối đa 0,5 điểm) Bìa (tối đa 0,25 điểm)  Các tiêu đề: Trường ĐHCT, Khoa CNTT  Loại niên luận: Cơ sở ngành KTPM, Tên đề tài  Giáo viên hướng dẫn: chức danh, họ tên  Thông tin sinh viên thực hiện: họ tên, mã số, lớp  Năm thực Bố cục (tối đa 0.25 điểm)  Nhận xét giáo viên hướng dẫn giáo viên chấm  Mục lục: cấu trúc chương, mục tiểu mục  Phụ lục (nếu có)  Tài liệu tham khảo II NỘI DUNG (Tối đa 3,5 điểm) Tổng quan (tối đa 0,5 điểm)  Mơ tả tốn, mục tiêu cần đạt (0,25 điểm)  Hướng giải kế hoạch thực (0,25 điểm) Lý thuyết (tối đa 0,5 điểm)  Các khái niệm sử dụng đề tài  Kết vận dụng lý thuyết vào đề tài Ứng dụng (tối đa 2,0 điểm)  Phân tích yêu cầu toán, xây dựng cấu trúc liệu cần thiết (tối đa 0,5 điểm)  Giải thuật (Lưu đồ-Ngôn ngữ giả) (1,0 điểm)  Giới thiệu chương trình (0,5 điểm) Kết luận (tối đa 0,5 điểm)  Nhận xét kết đạt  Hạn chế  Hướng phát triển III CHƯƠNG TRÌNH DEMO (Tối đa 5,0 điểm) Giao diện thân thiện với người dùng (1.0 điểm) Hướng dẫn sử dụng (0,5 điểm) Kết thực với kết phần ứng dụng (3,5 điểm) Ghi chú: Điểm khung “các sinh viên thực hiện” điểm kết cuối sinh viên trình thực niên luận Nếu sinh viên demo chương trình trả lời vấn đáp khơng đạt u cầu giáo viên hướng dẫn sinh viên nhận điểm F cho học phần Cần Thơ, ngày tháng năm 2017 GIÁO VIÊN CHẤM MỤC LỤC Chương Tổng quan I Mơ tả tốn II Mục tiêu cần đạt III Hướng giải IV Kế hoạch thực .2 Chương Lý thuyết I Các khái niệm .2 2.1.1 Khái niệm xếp thuật toán xếp 2.1.2 Khái niệm thuật toán xếp Kết vận dụng lý thuyết vào đề tài II Chương Kết ứng dụng .4 I Phân tích u cầu tốn II Xây dựng cấu trúc liệu cần thiết 3.2.1 Hàm tạo mảng 3.2.2 Hàm đặt mảng 3.2.3 Hàm xoá mảng .6 3.2.4 Hàm tạo liệu mảng ngẫu nhiên 3.2.5 Hàm nhập liệu mảng tay FormInput.java .6 3.2.6 Hàm ghi tập tin văn lúc mở phần mềm 3.2.7 Mở đọc tập tin văn 3.2.8 Hàm tơ sáng dịng code lúc thuật tốn chạy 3.2.9 Hàm kiểm tra dãy xếp xong hay chưa 3.2.10 Hốn đổi vị trí khung chạy mô 3.2.11 Hàm đặt lại vị trí số khung chạy mô 10 3.2.12 Hàm chờ đợi để dừng thuật toán 10 3.2.13 Hàm dừng trình xếp 11 3.2.14 Thuật toán xếp chọn 11 3.2.15 Thuật toán xếp bọt 12 3.2.16 Thuật toán xếp xen 13 3.2.17 Thuật toán xếp vun đống 14 3.2.18 Thuật toán xếp nhanh 15 3.2.19 Thuật toán xếp trộn 15 III Thiết kế giải thuật (Lưu đồ - Ngôn ngữ giả) 16 IV Giới thiệu chương trình 17 3.4.1 Giao diện 17 3.4.2 Giao diện hướng dẫn sử dụng 18 3.4.3 Giao diện thông tin phần mềm 19 3.4.4 Giao diện nhập liệu mảng tay 20 Chương Kết luận – đánh giá 20 Kết đạt 20 I 4.1.1 Về mặt chuyên môn 20 4.1.2 Về mặt kinh nghiệm 20 II Hạn chế nguyên nhân 21 III Hướng phát triển 21 Phụ Lục 22 Chương Hướng dẫn sử dụng phần mềm 22 Chương Tài liệu tham khảo 24 CHƯƠNG TỔNG QUAN MƠ TẢ BÀI TỐN I Hiện nay, hầu hết hệ thống lưu trữ, quản lý liệu, thao tác tìm kiếm thường thực nhiều để khai thác thơng tin cách nhanh chóng (ví dụ như: tra cứu từ điển, tìm sách thư viện, ) Tuy nhiên, việc tìm kiếm diễn nhanh chóng, xác liệu cần xếp sẵn gọn gàng, ngăn nắp theo trật tự định Khi đó, việc tìm kiếm, truy xuất liệu trở nên dễ dàng Điều có ý nghĩa lớn việc quản lý lưu trữ liệu Tuy biết cần liệu xếp ngăn nắp dễ dàng sử dụng, thực tế, gặp phải rắc rối lớn giới cho đời nhiều cách xếp khác nhau, mà cách xếp lại có ưu, nhược điểm riêng Thế lựa chọn cách phù hợp với nhu cầu người sử dụng? Nắm bắt nhu cầu đó, phần mềm “Mơ thuật toán xếp” đời Phần mềm giúp người sử dụng nhìn thấy cách thức hoạt động thuật toán theo bước cách dễ hiểu Qua đó, phần mềm giúp ta hiểu rõ dịng code cấu trúc liệu tương ứng làm việc Phần mềm sử dụng hình ảnh đồ hoạ trực quan, sinh động nhằm biểu diễn cách thức hoạt động thuật toán cách dễ hiểu mà không nhiều thời gian để cố gắng đọc hiểu code Từ tất lợi ích trên, phần mềm “Mơ thuật tốn xếp” giúp đỡ cho việc học tập cấu trúc liệu giải thuật, phân tích thiết kế thuật toán sinh viên trở nên dễ dàng, hiệu quả, thú vị tính ứng dụng thực tế cao nhiều so với dịng code khơ khan II MỤC TIÊU CẦN ĐẠT ĐƯỢC - Nắm vững kiến thức cấu trúc liệu giải thuật, phân tích thiết kế thuật toán thuật toán xếp cài đặt phần mềm Thể việc xếp thuật toán cách cụ thể giao diện đồ hoạ Thể việc xếp dòng code thực tế diễn Học cách sử dụng Thread, cách tạo chuyển động form Thiết kế logo riêng cho phần mềm Biết cách đóng gói phần mềm ghi đĩa III HƯỚNG GIẢI QUYẾT Trước tiên, cần phải tìm hiểu lại thật kỹ thuật toán xếp học mơn trước Chọn lọc thuật tốn tiêu biểu chia làm nhóm Nhóm gồm thuật tốn xếp đơn giản: Sắp xếp chọn (Selection Sort), Sắp xếp bọt (Bubble Sort) Sắp xếp xen (Insertion Sort) Nhóm gồm thuật toán xếp phức tạp: Sắp xếp vun đống (Heap Sort), Sắp xếp nhanh (Quick Sort) Sắp xếp trộn (Merge Sort) Sau có nhóm thuật tốn, tiến hành tạo mảng số để xếp Mảng tạo cách: tạo ngẫu nhiên (tạo mảng với phần tử có giá trị bất kỳ), nhập tay (cho phép người dùng nhập số lượng phần tử mảng giá trị phần tử mảng), nhập từ tập tin (cho phép người dùng nhập vào giá trị phần tử mảng thông qua tập tin văn tạo lúc mở phần mềm) Bên cạnh đó, cần có thêm chức đặt giá trị tất phần tử trường hợp người dùng muốn khởi tạo lại mảng khác Tiếp theo, cho phép người dùng lựa chọn thuật toán xếp Trong lúc người dùng chọn thuật toán, cần phải có khung code để hiển thị nội dung thuật tốn Người dùng tuỳ chỉnh độ to, nhỏ code Các thuật toán đưa vào nhóm riêng biệt đơn giản phức tạp Chỉ cho phép người dùng chọn thuật tốn để tiến hành mơ cách đưa tên cách thuật tốn vào nhóm radio button Cuối cho phép người dùng chọn thứ tự xếp: tăng dần, giảm dần tiến hành xếp Bên cạnh đó, cần có trượt phép người dùng điều chỉnh tốc độ chạy thuật toán IV KẾ HOẠCH THỰC HIỆN Tuần Tuần – Tuần Cơng việc Tìm hiểu chọn lọc giải thuật xếp Tuần – Tuần Vẽ lưu đồ phần mềm ngôn ngữ giả Tuần Thiết kế giao diện logo Tuần Gửi giao diện cho người dùng cụ thể xem đánh giá để chỉnh sửa lại giao diện theo cảm quang người dùng Tuần – Tuần 11 Code chức năng, giải thuật giao diện đồ hoạ cho giải thuật Tuần 12 Kiểm thử phần mềm Tạo tài liệu hướng dẫn sử dụng phần mềm Tuần 13 Đóng gói phần mềm viết báo cáo CHƯƠNG I LÝ THUYẾT CÁC KHÁI NIỆM 2.1.1 Khái niệm xếp thuật tốn xếp Sắp xếp q trình bố trí lại phần tử tập hợp theo trình tự nhằm mục đích giúp quản lý tìm kiếm phần tử dễ dàng nhanh chóng Thuật tốn xếp thuật toán xếp phần tử danh sách (hoặc mảng) theo thứ tự (tăng giảm) Và để dễ dàng cho việc nghiên cứu học tập người ta thường gán phần tử xếp chữ số 2.1.2 Khái niệm thuật toán xếp Sắp xếp chọn (Selection Sort): phương pháp xếp chọn phần tử nhỏ lớn N phần tử dãy hành Đưa phần tử vị trí đầu dãy hành Xem dãy hành N-1 phần tử dãy ban đầu Bắt đầu từ vị trí thứ Lặp lại trình cho dãy hành dãy hành phần tử Sắp xếp bọt (Bubble Sort): phương pháp xếp xuất phát từ cuối dãy, đổi chỗ cặp phần tử kế cận để đưa phần tử nhỏ lớn cặp phần tử vị trí đứng đầu dãy hành, sau khơng xét đến bước Lặp lại xử lý khơng cịn cặp phần tử để xét Sắp xếp xen (Insertion Sort): phương pháp xếp chèn phần tử xét vào vị trí thích hợp đoạn để có dãy trở nên có thứ tự Lặp lại trình dãy xếp xong Sắp xếp vun đống (Heap Sort): phương pháp xếp chọn Ở bước xếp chọn ta chọn phần tử lớn (hoặc nhỏ nhất) đặt vào cuối (hoặc đầu) danh sách, sau tiếp tục với phần cịn lại danh sách Sắp xếp vun đống chọn cấu trúc liệu cho phép tích lũy thơng tin so sánh giá trị phần tử trình xếp Sắp xếp nhanh (Quick Sort): phương pháp xếp theo tư tưởng chia để trị, dựa thủ tục phân chia sau: để chia dãy ta chọn phần tử gọi "chốt" (pivot), chuyển tất phần tử nhỏ chốt trước chốt, chuyển tất phần tử lớn (hoặc nhỏ hơn) chốt sau (hoặc trước) Tiếp tục phân chia dãy dãy phần tử Sắp xếp trộn (Merge Sort): phương pháp xếp theo tư tưởng chia để trị Thủ tục việc trộn hai danh sách xếp vào danh sách theo thứ tự Nó bắt đầu trộn cách so sánh hai phần tử (chẳng hạn phần tử thứ với phần tử thứ hai, sau thứ ba với thứ tư, ) Sau kết thúc bước chuyển sang bước Ở bước trộn danh sách hai phần tử thành danh sách bốn phần tử Cứ hai danh sách cuối trộn thành II KẾT QUẢ VẬN DỤNG LÝ THUYẾT VÀO ĐỀ TÀI Áp dụng thuật toán xếp để đưa vào phần mềm có giao diện đồ hoạ trực quan, sinh động; Áp dụng Thread để nhìn thấy phần tử di chuyển mượt mà xếp, giúp người dùng kịp nhận thay đổi vị trí phần tử; Bắt kiện kéo trượt để thay đổi tốc độ xếp độ to nhỏ code CHƯƠNG I KẾT QUẢ ỨNG DỤNG PHÂN TÍCH U CẦU BÀI TỐN Phần mềm “Mơ thuật toán xếp” đặt yêu cầu chủ yếu trọng tâm phải minh hoạ trực quan giao diện đồ hoạ cách thức hoạt động thuật toán xếp Dữ liệu đầu vào phần mềm mảng số có giá trị ngẫu nhiên, nhập tay nhập từ tập tin văn tuỳ vào cách tạo liệu mảng người dùng Cụ thể, người dùng nhập số lượng phần tử để tạo mảng (số lượng phần tử từ đến 15 phần tử) Sau đó, người dùng lựa chọn ba cách tạo liệu mảng, bao gồm: tạo ngẫu nhiên, nhập tay nhập từ tập tin văn Tạo ngẫu nhiên: Ở cách này, người dùng cần click chọn nút “Tạo ngẫu nhiên”, phần mềm chọn cách ngẫu nhiên giá trị cho phần tử mảng tương ứng với số lượng phần tử mà người dùng chọn trước Để thực việc này, ta cần thiết kế hàm có tên createRandom() Hàm có tác dụng tạo giá trị ngẫu nhiên truyền vào giá trị phần tử mảng vòng lặp Nhập tay: Với cách này, ta cần tạo thêm Form gọi nút “Bằng tay” cho phép người dùng nhập số lượng phần tử giá trị phần tử vào Sau có số lượng phần tử mà người dùng nhập vào, ta cần có vòng lặp để in tất phần tử ô nhập giá trị phần tử lên Form để người dùng nhập giá trị phần tử Vì số lượng phần tử tối thiểu tối đa 15, nên ta cần thiết kế vị trí hiển thị nhập giá trị phần tử theo cột để người dùng dễ dàng sử dụng Nhập từ tập tin văn bản: Cách giúp người dùng nhập nhanh giá trị phần tử thông qua tập tin văn Với cách này, người dùng tiết kiệm nhiều thao tác chuột hơn, từ giúp cho việc sử dụng phần mềm nhanh hơn, hiệu Để bắt đầu việc sử dụng tập tin, ta cần phải tạo hàm ghiMang() có tác dụng khởi tạo tập tin array.txt chứa đoạn văn mẫu Tập tin xuất cạnh phần mềm đóng gói q trình người dùng mở phần mềm Khi người dùng click chọn nút “Mở file”, phần mềm dùng thư viện Desktop Java để gọi đến hàm open Khi đó, hệ điều hành tự động mở tập tin array.txt người dùng cần chỉnh sửa lại nội dung tập tin phù hợp với nhu cầu Kế tiếp, người dùng cần click vào nút “Đọc file”, phần mềm tiến hành đọc nội dung tập tin nói truyền liệu vào mảng tạo Phần mềm cần cho phép người dùng lựa chọn thuật toán để xem mô phỏng, lựa chọn thứ tự xếp tăng dần hay giảm dần, điều chỉnh tốc độ khung chạy mô phỏng, điều chỉnh độ to nhỏ khung code xem trước dừng thuật toán Dữ liệu đầu phần mềm dãy số xếp theo thứ tự (tăng dần giảm dần) với thông báo xếp xong để người dùng kiểm tra lại dãy số tay II XÂY DỰNG CÁC CẤU TRÚC DỮ LIỆU CẦN THIẾT Để thực việc xếp, ta cần xây dựng cấu trúc liệu, thuật toán xếp cài đặt theo khung chạy mô phỏng, hàm cần thiết sau: 3.2.1 Hàm tạo mảng public void createArrays() { //delete previous arrays and set number elements of array deleteArrays(); num = (Integer)spNum.getValue(); lbArrays = new JLabel[num]; array = new int[num]; for (int i = 0; i < num; i++) { //create label, set text "0" lbArrays[i] = new JLabel("0"); array[i] = 0; pnKhungMoPhong.add(lbArrays[i]); lbArrays[i].setText(String.valueOf(array[i])); //set size label lbArrays[i].setSize(50,50); lbArrays[i].setOpaque(true); lbArrays[i].setForeground(Color.blue); //set location label if (i == 0) lbArrays[i].setLocation(((int) ((18 - num) * 0.5) * 70) + 100, 150); else lbArrays[i].setLocation(lbArrays[i-1].getX() + 70, 150); //set fonts lbArrays[i].setFont(new Font("Tahoma", Font.PLAIN, 30)); //set background color lbArrays[i].setBackground(SystemColor.inactiveCaption); //set text alignment center lbArrays[i].setHorizontalAlignment(SwingConstants.CENTER); lbArrays[i].setVerticalAlignment(SwingConstants.CENTER); } pnKhungMoPhong.add(lbPoint1); pnKhungMoPhong.add(lbPoint2); pnKhungMoPhong.add(lbPointM); pnKhungMoPhong.setVisible(true); pnKhungMoPhong.validate(); pnKhungMoPhong.repaint(); setState(1); } 3.2.2 Hàm đặt mảng public void setZero() { for (int i = 0; i < num; i++) { lbArrays[i].setText("0"); array[i] = 0; } createArrays(); pnKhungMoPhong.revalidate(); pnKhungMoPhong.repaint(); setState(1); } 3.2.3 Hàm xoá mảng public void deleteArrays() { for (int i = 0; i < num; i++) { lbArrays[i].setText("0"); array[i] = 0; lbArrays[i].setVisible(false); pnKhungMoPhong.remove(lbArrays[i]); } lbPoint1.setText(""); lbPoint2.setText(""); lbPointM.setText(""); pnKhungMoPhong.remove(lbPoint1); pnKhungMoPhong.remove(lbPoint2); pnKhungMoPhong.remove(lbPointM); for (int i = 0; i < curT; i++) { try { threads[i].interrupt(); }catch (Exception e) {} } curT = -1; pnKhungMoPhong.revalidate(); pnKhungMoPhong.repaint(); setState(0); } 3.2.4 Hàm tạo liệu mảng ngẫu nhiên public void createRandom() { Random rand = new Random(); for (int i = 0; i < num; i++) { int ranNum = rand.nextInt(101) + 0; lbArrays[i].setText(String.valueOf(ranNum)); lbArrays[i].setForeground(Color.BLUE); array[i] = ranNum; } pnKhungMoPhong.setVisible(true); pnKhungMoPhong.validate(); pnKhungMoPhong.repaint(); setState(2); } 3.2.5 Hàm nhập liệu mảng tay FormInput.java public void createArray() { deleteArrays(); num = (Integer)spNum.getValue(); arrays = new int[num]; lbArrays = new JLabel[num]; txtArrays = new JSpinner[num]; arrays = new int[num]; for (int i = 0; i < num; i++) { lbArrays[i] = new JLabel("A[" + i + "]:"); SpinnerModel smValue = new SpinnerNumberModel(0, 0, 100, 1); txtArrays[i] = new JSpinner(smValue); JFormattedTextField txt = ((JSpinner.NumberEditor) txtArrays[i].getEditor()).getTextField(); ((NumberFormatter) txt.getFormatter()).setAllowsInvalid(false); contentPane.add(lbArrays[i]); contentPane.add(txtArrays[i]); lbArrays[i].setSize(40,30); if (i == || i == || i == 10) lbArrays[i].setLocation(150 * (i + 1)/5 , 40); else lbArrays[i].setLocation(lbArrays[i-1].getX(), lbArrays[i1].getY() + 40); txtArrays[i].setSize(50,30); txtArrays[i].setLocation(lbArrays[i].getX() + 40, lbArrays[i].getY()); } contentPane.setVisible(true); contentPane.validate(); contentPane.repaint(); } 3.2.6 Hàm ghi tập tin văn lúc mở phần mềm public void ghiMang(){ BufferedWriter out = null; try { out = new BufferedWriter(new FileWriter("array.txt")); out.write("8\n" + "1\n" + "2\n" + "3\n" + "4\n" + "5\n" + "1\n" + "5\n" + "8\n"); } catch (IOException e){} finally { try { out.close(); } catch (IOException ex) { Logger.getLogger(FormMain.class.getName()).log(Level.SEVERE, null, ex); } } } 3.2.7 Mở đọc tập tin văn btnOpenFile = new JButton("Mở file"); btnOpenFile.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { Desktop desktop = null; if (Desktop.isDesktopSupported()) { desktop = Desktop.getDesktop(); } desktop.open(file); } catch (IOException ioe) { //file isn't existed ioe.printStackTrace(); } } }); btnReadFile = new JButton("Đọc file"); btnReadFile.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { deleteArrays(); try { Scanner in = new Scanner(file); num = Integer.parseInt(in.nextLine()); array = new int[num]; int pos = 0; while (in.hasNextLine()) { array[pos] = Integer.parseInt(in.nextLine()); pos++; } in.close(); lbArrays = new JLabel[num]; for (int i = 0; i < num; i++) { //create label, set text "0" lbArrays[i] = new JLabel(String.valueOf(array[i])); pnKhungMoPhong.add(lbArrays[i]); //set size label lbArrays[i].setSize(50,50); lbArrays[i].setOpaque(true); lbArrays[i].setForeground(Color.BLUE); //set location label if (i == 0) lbArrays[i].setLocation(((int) ((18 - num) * 0.5) * 70) + 100, 150); else lbArrays[i].setLocation(lbArrays[i-1].getX() + 70, 150); //set fonts lbArrays[i].setFont(new Font("Tahoma", Font.PLAIN, 30)); //set background color lbArrays[i].setBackground(SystemColor.inactiveCaption); //set text alignment center lbArrays[i].setHorizontalAlignment(SwingConstants.CENTER); lbArrays[i].setVerticalAlignment(SwingConstants.CENTER); } pnKhungMoPhong.setVisible(true); pnKhungMoPhong.validate(); pnKhungMoPhong.repaint(); setState(2); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); Hàm tô sáng dịng code lúc thuật tốn chạy public void highLight(int line) { curT++; int cur = curT; threads[cur] = new Thread(new Runnable() { @Override public void run() { try { if (cur != 0) { threads[cur-1].join(); } lsCode.setSelectedIndex(line); lsCode.ensureIndexIsVisible(line); // Tu cuon den dong dang highlight Thread.sleep(time); } catch (Exception e) {} } }); threads[cur].start(); } 3.2.8 Hàm kiểm tra dãy xếp xong hay chưa public boolean isSorted() { if (isIncrease) { for (int i = 0; i < array.length - 1; i++) if (array[i] > array[i+1]) return false; } else { for (int i = 0; i < array.length - 1; i++) if (array[i] < array[i+1]) return false; } return true; } 3.2.9 Hoán đổi vị trí khung chạy mơ public void Swap(JLabel lb1, JLabel lb2) { int x1 = lb1.getX(); int x2 = lb2.getX(); Tải FULL (28 trang): https://bit.ly/3d38T7R curT ++; Dự phòng: fb.com/TaiHo123doc.net int cur = curT; threads[cur] = new Thread(new Runnable() { @Override public void run() { try { if (cur != 0) { threads[cur-1].join();} lb1.setBackground(processingColor); lb2.setBackground(processingColor); while (lb1.getY() > 100) { lb1.setLocation(lb1.getX(), lb1.getY() - 10); lb2.setLocation(lb2.getX(), lb2.getY() + 10); lbPointM.setLocation(x2, lbPointM.getY() + 10); Thread.sleep(time); } while (lb1.getX() < x2) { lb1.setLocation(lb1.getX() + 10, lb1.getY()); lb2.setLocation(lb2.getX() - 10, lb2.getY()); lbPointM.setLocation(lb2.getX(), 250); Thread.sleep(time); } while (lb1.getY() < 140) { lb1.setLocation(lb1.getX(), lb1.getY() + 10); lb2.setLocation(lb2.getX(), lb2.getY() - 10); lbPointM.setLocation(x1, lbPointM.getY() - 10); Thread.sleep(time); } String txtLb1 = lb1.getText(); lb1.setText(lb2.getText()); lb2.setText(txtLb1); lb1.setLocation(x1, 150); lb2.setLocation(x2, 150); lb1.setBackground(SystemColor.inactiveCaption); lb2.setBackground(SystemColor.inactiveCaption); } catch (Exception e) {} } }); threads[cur].start(); } 3.2.10 Hàm đặt lại vị trí số khung chạy mơ public void threadReLocate() { curT++; int cur = curT; threads[cur] = new Thread(new Runnable() { @Override public void run() { try { if (cur != 0) { threads[cur-1].join();} reLocate(); } catch (Exception e) {} } }); threads[cur].start(); } public void reLocate() { for (int i = 0; i < num; i++) { //set location label if (i == 0) lbArrays[i].setLocation(((int) ((18 - num) * 0.5) * 70) + 100, 150); else lbArrays[i].setLocation(lbArrays[i-1].getX() + 70, 150); } } 3.2.11 Hàm chờ đợi để dừng thuật toán public void waitEnd() { curT++; int cur = curT; threads[cur] = new Thread(new Runnable() { @Override public void run() { try { 6709847 10 ... phân tích thiết kế thuật toán thuật toán xếp cài đặt phần mềm Thể việc xếp thuật toán cách cụ thể giao diện đồ hoạ Thể việc xếp dòng code thực tế diễn Học cách sử dụng Thread, cách tạo chuyển động... cho phần mềm Biết cách đóng gói phần mềm ghi đĩa III HƯỚNG GIẢI QUYẾT Trước tiên, cần phải tìm hiểu lại thật kỹ thuật toán xếp học mơn trước Chọn lọc thuật tốn tiêu biểu chia làm nhóm Nhóm gồm thuật. .. chạy mô 10 3.2.12 Hàm chờ đợi để dừng thuật toán 10 3.2.13 Hàm dừng trình xếp 11 3.2.14 Thuật toán xếp chọn 11 3.2.15 Thuật toán xếp bọt 12 3.2.16 Thuật toán

Ngày đăng: 03/02/2023, 17:42

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN