BÁO cáo môn điện tử số đề tài thuật toán quine MCcluskey

19 15 0
BÁO cáo môn điện tử số đề tài thuật toán quine MCcluskey

Đ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 ĐIỆN TỬ - VIỄN THÔNG - BÁO CÁO MÔN ĐIỆN TỬ SỐ Đề tài: Thuật tốn Quine-MCcluskey GVHD: Hồng Mạnh Thắng SINH VIÊN THỰC HIỆN: Lê Trần Huy (70%) 20182581 Điện tử - Phạm Tuấn Hùng (30%) 20182559 Điện tử - I Tóm tắt giải thuật dạng sơ đồ Bắt đầu Nhập số biến: n Nhập số minterm: m Chuyển phần tử dạng nhị phân xếp theo thứ tự tăng dần Tạo class QM chứa thuộc tính:minterm,xau,sobit1 Tạo class PI chứa thuộc tính:index,xau,biến check Tạo danh sách chứa đối tượng class QM,DSPI để lưu PI So sánh cặp nhị phân với S Khác bit END Đ Lập thành nhóm mới, giữ lại biến giống nhau, biến lại thay dấu “_” Tạo biến so PI để đếm prime implicant,có giá trị kích thước DSPI Lập bảng lựa chọn hàm Tìm essential PI cần thiết để hàm tối ưu Hàm fmin Tạo danh sách tên esential để chứa essential,tạo mảng chiều arrPI để lưu vị trí minterm DSPI.Duyệt mảng hàng mà phần tử có giá trị cột tương ứng essential,thêm PI vừa tìm đc vào danh sách esential,tại có giá trị PI gán tất giá trị cột chứa II Kết thực 1.Nhập đầu vào biến 2.Nhập đầu vào biến III Nhận xét: + Thuật toán chưa thực với trạng thái don’t care + Thuật toán chưa tối ưu dài + Thuật toán thực minterm + Thuật tốn thực với nhiều biến IV CODE C++ QUINE MSCLUSKEY #include #include #include #include #include using namespace std; // Ham de chuyen tu thap phan sang he nhi phan string decToBin(int n, int sobien) { string nhiphan = ""; while (n != 0) { int i = n % 2; if (i == 0) nhiphan = "0" + nhiphan; else nhiphan = "1" + nhiphan; n = n / 2; } int so_bit_thieu = sobien - nhiphan.length(); while (so_bit_thieu != 0) { nhiphan = "0" + nhiphan; so_bit_thieu ; } return nhiphan; } class QM { public: int minterm; string xau; int Sobit1(); QM() {}; // Day la ham tao ~QM() {}; // Day la ham huy }; int QM::Sobit1() { int dem = 0; for (int i = 0; i < xau.length(); i++) { if (xau[i] == '1') dem++; } return dem; } bool Sosanh(QM a, QM b) { return (a.Sobit1() < b.Sobit1()); } string Ghep_2_xau(string a, string b) { for (int i = 0; i < a.length(); i++) { if (a[i] != b[i]) a[i] = '-'; } return a; } // Ham de kiem tra xem chuoi khac may bit int Kiemtra(string a, string b) { int ktra = 0; for (int i = 0; i < a.length(); i++) { if (a[i] != b[i]) ktra++; } return ktra; } // Ham tinh tong tat ca phan tu ma tran int sum_matrix(int** arr, int m, int n) { int sum = 0; for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) sum += arr[i][j]; return sum; } string In_ra_dang_xau(string s) { string xau = ""; int dodai = s.length(); for (int i = 0; i < dodai; i++) { if (s[i] == '1') { char c = 'a' + i; string x(1, c); xau += x; } else if (s[i] == '0') { char c = 'a' + i; string x(1, c); xau = xau + x + "'"; } else continue; } return xau; } int Tim_he_so_max(int* arr, int m) { int index = 0; int max = arr[0]; for (int i = 0; i < m; i++) { if (arr[i] > max) { max = arr[i]; index = i; } } return index; } class PI { public: vector index; string xau; int check; nhom chua // bien de kiem tra xem minterm da duoc cho vao PI() { check = 0; } }; void Tao_nhom(int sominterm, vector& DSPI, vector List, int& so_PI) { // Nhom cac minterm, tim PI bool ktrasophantuconlai = true; vector DScacnhom; vector DScopy; nhung o dang PI // tao danh sach moi lay tat ca thong tin tu danh sach QM ban dau for (int i = 0; i < sominterm; i++) { PI pi; pi.index.push_back(List[i].minterm); // Them chi so minterm vao danh sach moi pi.xau = List[i].xau; DScopy.push_back(pi); } // Tim cac doi tuong ma chi khac phan tu, Ghep xau va them vao danh sach cac nhom while (ktrasophantuconlai) { for (int i = 0; i < DScopy.size() - 1; i++) { for (int j = i + 1; j < DScopy.size(); j++) { if (Kiemtra(DScopy[i].xau, DScopy[j].xau) == 1) { PI b; b.xau = Ghep_2_xau(DScopy[i].xau, DScopy[j].xau); DScopy[i].check++; DScopy[j].check++; for (int k = 0; k < DScopy[i].index.size(); k++) { b.index.push_back(DScopy[i].index[k]); } for (int l = 0; l < DScopy[j].index.size(); l++) { b.index.push_back(DScopy[j].index[l]); } DScacnhom.push_back(b); } } } // Nhung doi tuong chua duoc danh dau se la PI for (int i = 0; i < DScopy.size(); i++) { if (DScopy[i].check == 0) { PI pi = DScopy[i]; DSPI.push_back(pi); } } DScopy.clear(); // Xoa het du lieu danh sach copy va gan gia tri moi = danh sach cac nhom for (int i = 0; i < DScacnhom.size(); i++) { PI bienmoi = DScacnhom[i]; // chep du lieu tu DScacnhom[i] sang bienmoi DScopy.push_back(bienmoi); } // Kiem tra xem dai danh sach cac nhom co rong hay khong if (DScacnhom.size() == 0) { ktrasophantuconlai = false; } DScacnhom.clear(); // Xoa het du lieu danh sach cac nhom de tao lai tu dau } // Xoa cac phan tu bi trung danh sach PI for (int i = 0; i < DSPI.size() - 1; i++) { for (int j = i + 1; j < DSPI.size(); j++) { if (DSPI[i].xau == DSPI[j].xau) { DSPI.erase(DSPI.begin() + j); j ; } } } // in danh sach PI so_PI = DSPI.size(); cout

Ngày đăng: 24/04/2022, 21:52

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan