báo cáo bài tập lớn môn học cấu trúc dữ liệu và giải thuật 2

34 0 0
Tài liệu đã được kiểm tra trùng lặp
báo cáo bài tập lớn môn học cấu trúc dữ liệu và giải thuật 2

Đ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

Thuộc tính: - capacity kích thước hiện tại của vector - num số lượng phần tử thực tế trong vector - mảng chứa các phần tử của vectorvt Phương thức: - Vector: Khởi tạo một vector rỗng.. -

Trang 1

BÁO CÁO BÀI TẬP LỚNMÔN HỌC:

CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

Sinh viên thực hiện: Nguyễn Đình Tuấn AnhMã sinh viên: 221231039

Lớp: Công nghệ thông tin 4 – K63Người hướng dẫn: TS Hoàng Văn thông

Trang 2

1.3.2 Lập trình xây dựng quản lý một cửa hàng bán tạp hoá 19

CHƯƠNG 2 BÀI 2( BÀI SỐ 22) 30

2.1 Đề bài 30

2.2 Phân tích bài toán 30

2.2.1 Xây dựng cây nhị phân trừu tượng (cụ thể là max-heap) 30

2.2.2 Áp dụng cấu trúc cây để giải quyết bài toán 31

2.3 Cài đặt các lớp và hàm main bằng C++ 31

2.3.1 Lập trình xây dựng cây heap 31

2.3.2 Giải quyết bài toán bằng heap 34

Trang 3

LỜI CẢM ƠN

Với lòng kính trọng và biết ơn sâu sắc,chúng tôi xin chân thành cảm ơn TS.Hoàng Văn Thông, thầy đã tận tình chỉ bảo, hướng dẫn và tạo mọi điều kiện giúp đỡem trong suốt quá trình tìm hiểu và nghiên cứu thực hiện bài tập lớn.

Hà Nội, tháng 11 năm 2023 Sinh viên thực hiện.

Nguyễn Đình Tuấn Anh

Trang 4

MỞ ĐẦU

Để nắm vững những kiến thức từ môn cấu trúc dữ liệu và giải thuật, em đã tìmhiểu và vận dụng kiến từ ngôn ngữ C++ và lập trình hướng đối tượng cùng với cácthuật toán để giải quyết các yêu cầu của đề bài đưa ra Nội dung bài tập em đã giảiquyết là bài 20 và bài 22 trong danh sách bài tập.

Cấu trúc bài tập lớn bao gồm:Mở đầu

Nội dung:

Chương 1: Bài 1( Bài 20 trong danh sách bài tập)Chương 2: Bài 2( Bài 22 trong danh sách bài tập)Tài liệu tham khảo

Trang 5

CHƯƠNG 1 BÀI 1(BÀI SỐ 20) 1.1 Đề bài

Ngày mua bán, Giá mua bán.Với các phương thức:

a Đọc danh thông tin quản lý của cửa hàng từ file vào chương trìnhb Ghi thông tin quản lý của cửa hàng vào file

c Nhập xuất các mặt hàng

d Hiển thị toàn bộ danh sách mặt hàng hiện cóe Thống kê số lượng mặt hàng tồn của mỗi mặt hàng2 Viết hàm main thực hiện các chức năng trên1.2 Phân tích bài toán

1.2.1 Xây dựng lớp Vector- Yêu Cầu của Bài Toán:

Xây dựng cấu trúc dữ liệu vector và các chức năng của vector.

Xác định các lớp: bài này gồm file ‘setup_vector.cpp’ có lớp Vector và file iterator cólớp ‘vector_reverse’ ‘vector_iterator’,

- Mô tả thuộc tính, chức năng của từng lớp và phương thức:File: setup_vector.cpp

Lớp Vector:

Trang 6

Thuộc tính:

- capacity (kích thước hiện tại của vector) - num (số lượng phần tử thực tế trong vector) - (mảng chứa các phần tử của vector)vt Phương thức:

- Vector(): Khởi tạo một vector rỗng.

- Vector(int k, T x = 0): Khởi tạo vector với k phần tử, mỗi phần tử có giá trị x - ~Vector(): Hủy bỏ vector và giải phóng bộ nhớ.

- size() -> size_t: Trả về số lượng phần tử thực tế trong vector - get_capacity() -> size_t: Trả về kích thước hiện tại của vector - front() -> T: Trả về giá trị của phần tử đầu tiên.

- back() -> T: Trả về giá trị của phần tử cuối cùng.

- &operator[]( int k) -> T: Trả về giá trị của phần tử tại vị trí k - empty() -> bool: Kiểm tra xem vector có rỗng hay không - pop_back(): Loại bỏ phần tử cuối cùng của vector - extend(new_capacity): Mở rộng kích thước của vector.

- resize(size_t newsize,T x): Thay đổi kích thước của vector và gán giá trị x chocác phần tử mới.

- push_back(T x): Thêm một phần tử vào cuối vector - insert(size_t k,T val): Chèn giá trị val vào vector tại vị trí k.

- begin() -> iterator: Trả về iterator bắt đầu từ phần tử đầu tiên.(có hàm sử dụngconst trong code)

- end() -> iterator: Trả về iterator kết thúc sau phần tử cuối cùng .(có hàm sửdụng const trong code)

- rbegin() -> reverse_iterator: Trả về iterator bắt đầu từ phần tử cuối cùng .(cóhàm sử dụng const trong code)

- rend() -> reverse_iterator: Trả về iterator kết thúc trước phần tử đầu tiên .(cóhàm sử dụng const trong code)

- erase(size_t k): Loại bỏ phần tử tại vị trí k.

Trang 7

- erase(iterator first, iterator last): Loại bỏ các phần tử từ first đến last - clear(): Xóa toàn bộ vector.

- find(value) -> iterator: Tìm kiếm giá trị trong vector và trả về iterator nếu tìmthấy, ngược lại trả về iterator end().

File: iterator.cpp

- Chức năng chính của các lớp này là cung cấp các phương thức để thao tác với con trỏtrong vector, đặc biệt là để thực hiện các phép tăng/giảm, cộng/trừ giá trị, và truy xuấtđến giá trị mà con trỏ đang trỏ đến Các phương thức này có thể hữu ích trong việcduyệt qua một vector theo chiều ngược lại và thực hiện các thao tác khác liên quan đếnvị trí của con trỏ.

1 Lớp reverse_iterator:Thuộc tính:

- T *pointer: Con trỏ kiểu T sử dụng để theo dõi vị trí hiện tại trong dãy.Phương thức và chức năng:

- reverse_iterator(T *pointer = nullptr): Constructor với tham số mặc định lànullptr.

- operator=(const reverse_iterator<T> &it): Phương thức gán giá trị từ mộtreverse_iterator khác.

- operator*(): Phương thức trả về giá trị mà con trỏ đang trỏ đến.- operator++(): Phương thức tăng con trỏ lên một đơn vị (tiền tố).

- operator++(int): Phương thức tăng con trỏ lên một đơn vị và trả về giá trịtrước khi tăng (hậu tố).

- operator (): Phương thức giảm con trỏ đi một đơn vị (tiền tố).

- operator (int): Phương thức giảm con trỏ đi một đơn vị và trả về giá trị trướckhi giảm (hậu tố).

- Các phương thức so sánh (>=, >, <=, <, !=): So sánh hai reverse_iterator, làcác phương thức so sánh, cho phép so sánh giá trị của pointer với giá trị củamột iterator khác, trả về giá trị kiểu bool.

- operator+(long long val) const: Phương thức trả về một reverse_iterator với vịtrí nằm sau val phần tử so với vị trí hiện tại.

Trang 8

- operator-(long long val) const: Phương thức trả về một reverse_iterator với vịtrí nằm trước val phần tử so với vị trí hiện tại.

- operator-(const reverse_iterator<T> &it) const: Phương thức trả về khoảngcách giữa hai reverse_iterator.

2 Lớp vector_iterator:Thuộc tính:

- T *pointer: Con trỏ kiểu T sử dụng để theo dõi vị trí hiện tại trong dãy.Phương thức và chức năng:

- vector_iterator(T *pointer = nullptr): Constructor với tham số mặc định lànullptr.

- operator=(const vector_iterator<T> &it): Phương thức gán giá trị từ mộtvector_iterator khác.

- operator*(): Phương thức trả về giá trị mà con trỏ đang trỏ đến.- operator++(): Phương thức tăng con trỏ lên một đơn vị (tiền tố).

- operator++(int): Phương thức tăng con trỏ lên một đơn vị và trả về giá trịtrước khi tăng (hậu tố).

- operator (): Phương thức giảm con trỏ đi một đơn vị (tiền tố).

- operator (int): Phương thức giảm con trỏ đi một đơn vị và trả về giá trị trướckhi giảm (hậu tố).

- Các phương thức so sánh (>=, >, <=, <, !=): So sánh hai vector_iterator, làcác phương thức so sánh, cho phép so sánh giá trị của pointer với giá trị củamột iterator khác, trả về giá trị kiểu bool.

- operator+(long long val) const: Phương thức trả về một vector_iterator với vịtrí nằm sau val phần tử so với vị trí hiện tại.

- operator-(long long val) const: Phương thức trả về một vector_iterator với vịtrí nằm trước val phần tử so với vị trí hiện tại.

- operator-(const vector_iterator<T> &it) const: Phương thức trả về khoảngcách giữa hai vector_iterator.

- operator+(const vector_iterator<T> &it) const: Phương thức trả về tổng củavị trí hiện tại và vị trí của vector_iterator khác.

Trang 9

1.2.2 Xây dựng quản lý một cửa hàng bán tạp hóa, thông tin quản lýcủa cửa hàng.

1.File: hoadon.cppLớp HoaDon:Thuộc tính:

- string maHoaDon: Mã hóa đơn.- string maHang: Mã hàng.

- string loaiHoaDon: Loại hóa đơn (Mua hoặc Bán).- int soLuong: Số lượng hàng.

- string ngayMuaBan: Ngày mua hoặc bán hàng.- double giaMuaBan: Giá mua hoặc bán hàng.Phương thức:

- HoaDon(string maHoaDon = "Unknown", string maHang = "Unknown",string loaiHoaDon = "Unknown", int soLuong = 0, string ngayMuaBan ="Unknown", double giaMuaBan = 0): Hàm khởi tạo mặc định, đặt giá trị mặcđịnh cho các thuộc tính.

- string getMaHoaDon(): Trả về mã hóa đơn.

Trang 10

- void setMaHoaDon(string maHoaDon): Thiết lập mã hóa đơn.- string getMaHang(): Trả về mã hàng.

- void setMaHang(string maHang): Thiết lập mã hàng.- string getLoaiHoaDon(): Trả về loại hóa đơn.

- void setLoaiHoaDon(string loaiHoaDon): Thiết lập loại hóa đơn.- int getSoLuong(): Trả về số lượng hàng.

- void setSoLuong(int soLuong): Thiết lập số lượng hàng.- string getNgayMuaBan(): Trả về ngày mua hoặc bán hàng.

- void setNgayMuaBan(string ngayMuaBan): Thiết lập ngày mua hoặc bánhàng.

- double getGiaMuaBan(): Trả về giá mua hoặc bán hàng.

- void setGiaMuaBan(double giaMuaBan): Thiết lập giá mua hoặc bán hàng.- friend istream &operator>>(istream &cin, HoaDon &hoaDon): Phương

thức nhập thông tin từ người dùng.

- friend ostream &operator<<(ostream &cout, const HoaDon &hoaDon):Phương thức xuất thông tin ra màn hình.

Lớp HoaDon thường được sử dụng để biểu diễn thông tin của một hóa đơn trong quảnlý cửa hàng bán tạp hóa.

2.File: danhmuc_sanpham.cppLớp Danhmuc:

Thuộc tính:

- string maHang: Mã hàng.- string ten_sp: Tên sản phẩm.- string ten_nsx: Tên nhà sản xuất.Phương thức:

- Danhmuc(){string maHang = "Unknown", string ten_sp = "Unknown",string ten_nsx = "Unknown"}: Hàm khởi tạo mặc định, đặt giá trị mặc địnhcho các thuộc tính.

Trang 11

- Danhmuc(string maHang, string ten_sp, string ten_nsx): Hàm khởi tạo vớicác giá trị cụ thể cho mã hàng, tên sản phẩm, và tên nhà sản xuất.

- void setTen_nsx(string ten_nsx): Thiết lập tên nhà sản xuất.

Lớp Danhmuc thường được sử dụng để lưu trữ thông tin về danh mục mặthàng trong quản lý của cửa hàng bán tạp hóa Mỗi đối tượng của lớp này biểu diễn mộtmặt hàng cụ thể với các thuộc tính như mã hàng, tên sản phẩm, và tên nhà sản xuất.

3.File: quanlycuahang.txt

Lớp này dùng để lưu trữ số lượng,danh mục các sản phẩm và số lượng, danhmục hoá đơn mua bán của cửa hàng.

4.File: cuahang.cppLớp CuaHang:Thuộc tính:

- vector<Danhmuc> danhSachMatHang: Vector chứa danh sách các mặt hàngtrong cửa hàng.

- vector<HoaDon> danhSachHoaDon: Vector chứa danh sách các hóa đơntrong cửa hàng.

dùng.

Trang 12

- void XuatDanhSachMatHang(): Hiển thị toàn bộ danh sách các mặt hàng hiệncó.

- void ThongKeTonKho(): Thống kê số lượng mặt hàng tồn kho.1.3 Cài đặt các lớp và hàm main bằng C++

1.3.1 Lập trình xây dựng lớp vector1.3.1.1 File iterator.cpp

#ifndef iterator cpp#define iterator cpp

template class < T>

class reverse_iterator { T *pointer;

reverse_iterator(T pointer = * nullptr) : pointer(pointer) {}

void operator=(const reverse_iterator<T> it) {&

pointer = it.pointer; }

T operator*() {&

return *pointer; }

const & T operator*() const { return *pointer; }

reverse_iterator<T> operator++() { // ++pointer pointer;

return this * ; }

reverse_iterator<T> operator++( ) {int // pointer++ reverse_iterator<T> tmp = *this; pointer;

return tmp; }

reverse_iterator<T> operator () { // pointer ++pointer;

return this * ; }

Trang 13

reverse_iterator<T> operator ( ) {int // reverse_iterator<T> tmp = *this; ++pointer;

return tmp; }

bool operator>=(const reverse_iterator<T> it) & const { return pointer <= it.pointer;

template class < T>

class vector_iterator { T *pointer;

vector_iterator(T pointer = * nullptr) : pointer(pointer) {}

void operator=(const vector_iterator<T> it) {&

pointer = it.pointer;

Trang 14

}

T operator*() {&

return *pointer; }

const & T operator*() const { return *pointer; }

vector_iterator<T> operator++() { // ++pointer ++pointer;

return this * ; }

vector_iterator<T> operator++( ) {int // pointer++ vector_iterator<T> tmp = *this; ++pointer;

return tmp; }

vector_iterator<T> operator () { // pointer pointer;

return this * ; }

vector_iterator<T> operator ( ) {int // vector_iterator<T> tmp = *this; pointer;

return tmp; }

bool operator>=(const vector_iterator<T> it) & const { return pointer >= it.pointer;

Trang 15

return pointer != it.pointer; }

vector_iterator<T> operator+(long long val) const { return pointer + val;

capacity = ;1 num = ;0 vt = new T[capacity]; }

Vector( k, T x = )int 0 {

capacity = num = k; for size_t ( i = ; i < k; i++)0 {

vt[i] = x;

Trang 16

} } ~Vector() { (vt)if

delete[] vt; }

size_t size() const return { num; } size_t get_capacity() const return { capacity; } T front() { & return vt[ ]; }0

T back() { & return vt[num - ]; }1 T &operator[](int k) { return vt[k]; } bool empty()

{

(num == )if 0 {

returntrue; }

returnfalse; }

void pop_back() {

(num > )if 0 num ; }

void extend(size_t new_capacity) {

(new_capacity <= capacity)if

{ return; }

capacity = new_capacity; T *temp = new T[capacity]; for int ( i = ; i < num; i++)0 temp[i] = vt[i]; (vt)if

delete[] vt; vt = temp; }

void resize(size_t newsize, T x) {

(newsize <= num)if

{

num = newsize; return; }

(capacity < newsize)if

extend(newsize);

for size_t ( i = num; i < newsize; i++)

Trang 17

{ vt[i] = x; }

num = newsize; }

void push_back(T x) {

(num == capacity)if

extend(capacity * 2); (vt == if NULL) vt = new T(1); vt[num++] = x; }

void insert(size_t k, T val) {

(num == capacity)if

{

extend(capacity * 2); }

for size_t ( i = num + ; i > k; i )1 {

vt[i] = vt[i - 1]; }

vt[k] = val; num++; }

typedef vector_iterator<T> iterator;

typedef const vector_iterator<T> const_iterator;

typedef vector_iterator<T> reverse_iterator;

typedef const vector_iterator<T> const_reverse_iterator;

//

iterator begin() { return iterator(vt); }

const_iterator begin() const return { const_iterator(vt); }iterator end() { return iterator(vt + num); }

const_iterator end() const return { const_iterator(vt + num); }reverse_iterator rbegin() { return reverse_iterator(vt + num - ); }1const_reverse_iterator rbegin() const return {

const_reverse_iterator(vt + num - ); }1

reverse_iterator rend() { return reverse_iterator(vt - ); }1const_reverse_iterator rend() const return { const_reverse_iterator(vt - ); }1

//

void erase(size_t k) {

(k < || k >= num)if 0

Trang 18

return;

for size_t ( i = k - ; i < num - ; i++)1 1 {

vt[i] = vt[i + 1]; }

num ; }

void erase(iterator first, iterator last) {

(first >= end() || last >= end())if

return; T *pos = first; while (pos != last) {

*pos = *(pos + (last - first)); pos++;

}

num -= last - first; }

void clear() { (vt)if

{

delete[] vt; }

num = ;0 vt = nullptr; }

iterator find(iterator first, iterator last, const & T value) {

while (first != last) {

(*first == value)if

{

return first; }

++first; } return last; }

int main(){

Vector< > a;int

for int ( i = ; i <= ; i++)1 5 a.push_back(i);

// zVector<int>::reverse_iterator it = a.rbegin();

Ngày đăng: 14/05/2024, 16:06

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

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

Tài liệu liên quan