1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo thực hành Kỹ thuật lập trình – IT3040 _Bài 15

119 15 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

Tiêu đề Báo Cáo Thực Hành Kỹ Thuật Lập Trình – IT3040 _Bài 15
Tác giả Nguyễn Xuân Huy
Trường học Trường Đại Học
Chuyên ngành Kỹ Thuật Lập Trình
Thể loại báo cáo thực hành
Năm xuất bản 2018
Thành phố Thành Phố
Định dạng
Số trang 119
Dung lượng 840,61 KB
File đính kèm OneDrive_1_14-06-2023.zip (151 KB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Danh mục hình ảnh 3 Bài thực hành số 1: Con trỏ và cấp phát 5 Phần 1. Thực hành về con trỏ 5 1. Bài tập 1: 5 2. Bài tập 2: 6 3. Bài tập 3: 7 4. Bài tập 4: 8 5. Bài tập 5: 10 6. Bài tập 6: 11 7. Bài tập 7: 13 8. Bài tập 8 15 Phần 2. Bài tập về nhà 18 Bài tập 9 18 Bài tập 10 20 Bài thực hành số 2: Hàm và tối ưu mã nguồn 24 Phần 1. Thực hành về hàm 24 1.1 Truyền tham trị, tham chiếu và tham số ngầm định 24 1.2 Đa năng hóa hàm 28 1.3 Con trỏ hàm và tham số hóa hàm 32 1.4 Biểu thức lamda và hàm nặc danh 35 Phần 2. Thực hành về tối ưu mã nguồn 36 Bài tập 9 :Tính hàm sigmoid 36 Bài tập 10 (bonus): Tính tích hai ma trận vuông 40 Phần 3. Bài tập về nhà 45 Bài tập 11: Tính tích hai đa thức 45 Bài thực hành số 3: Đệ quy và khử đệ quy để giải quyết một số bài toán 48 Phần 1. Thực hành về đệ quy 48 1.1 Đệ quy quay lui 48 1.2 Kỹ thuật nhánh cận 51 1. Đệ quy có nhớ 54 Phần 2. Khử đệ quy 56 Bài tập 5: Tính tổ hợp 56 Bài tập 6: Tìm ước chung lớn nhất 58 Bài tập 7: Liệt kê xâu nhị phân 60 Bài tập 8: Cân đĩa 62 Phần 3. Bài tập về nhà 64 Bài tập 9 : Lập lịch cho y tá 64 Bài tập 10 Khoảng cách Hamming 67 Bài tập 11: Lịch trình chụp ảnh 70 Bài tập 12 : Đếm đường đi 74 Bài thực hành số 4: Thực hành sử dụng các cấu trúc dữ liệu cơ bản để giải quyết các bài toán cụ thể 76 Phần 1. Bài tập thực hành 76 Bài tập 1: Đảo ngược một danh sách liên kết đơn 76 Bài tập 2: Tính diện tích tam giác 78 Bài tập 3: Tính tích có hướng của 2 vector 79 Bài tập 4: Thao tác với vector 81 Bài tập 5: Thực hiện thuật toán DFS không sử dụng đệ quy trên đồ thị biểu diễn bằng danh sách kề. 83 Bài tập 6: Thực hiện thuật toán BFS trên đồ thị biểu diễn bằng danh sách kề. 86 Bài tập 7: Thực hiện các phép giao và hợp của hai tập hợp được biểu diễn bằng set 88 Bài tập 8: Thực hiện các phép giao và hợp của hai tập hợp mờ được biểu diễn bằng map. 90 Bài tập 9 : Cài đặt thuật toán Dijkstra trên đồ thị vô hướng được biểu diễn bằng danh sách kề sử dụng priority_queue 93 Phần 2. Bài tập về nhà 96 Bài tập 10: Search Engine 96 Bài thực hành số 5: Thực hành gỡ rối, kiểm thử và tinh chỉnh mã nguồn 101 Phần 1. Thực hành gỡ rối 101 1.1 Hướng dẫn tìm một số lỗi cú pháp (Syntax Error) thường gặp 101 1.2 Thực hành sửa lỗi cú pháp 101 Bài tập 1: Tìm và sửa các lỗi cú pháp 101 Bài tập 2: Tìm và sửa các lỗi cú pháp 102 1.3 Hướng dẫn tìm một số lỗi thực thi (Runtime Error) 104 1.4 Hướng dẫn tìm một số lỗi logic 104 1.5 Tìm vị trí lỗi bằng trình debug 104 1.6 Tìm vị trí lỗi bằng cách in ra màn hình file log 104 1.7 Thực hành sửa lỗi thực thi và lỗi logic 104 Bài tập 3 : Dãy Ngoặc Đúng 104 Phần 2. Kiểm thử 107 2.1 Hướng dẫn 107 2.2 Thực hành 107 Bài tập 4: Bài toán người du lịch 107 Phần 3. Tinh chỉnh mã nguồn 113 Bài tập 5: Năm nhuận 113 Bài tập 6: Tổng kết 114 Bài tập 7: Chia tiền 116

Trang 1

Danh mục hình ảnh 3

Bài thực hành số 1: Con trỏ và cấp phát 5

Phần 1 Thực hành về con trỏ 5

1 Bài tập 1: 5

2 Bài tập 2: 6

3 Bài tập 3: 7

4 Bài tập 4: 8

5 Bài tập 5: 10

6 Bài tập 6: 11

7 Bài tập 7: 13

8 Bài tập 8 15

Phần 2 Bài tập về nhà 18

Bài tập 9 18

Bài tập 10 20

Bài thực hành số 2: Hàm và tối ưu mã nguồn 24

Phần 1 Thực hành về hàm 24

1.1 Truyền tham trị, tham chiếu và tham số ngầm định 24

1.2 Đa năng hóa hàm 28

1.3 Con trỏ hàm và tham số hóa hàm 32

1.4 Biểu thức lamda và hàm nặc danh 35

Phần 2 Thực hành về tối ưu mã nguồn 36

Bài tập 9 :Tính hàm sigmoid 36

Bài tập 10 (bonus): Tính tích hai ma trận vuông 40

Phần 3 Bài tập về nhà 45

Bài tập 11: Tính tích hai đa thức 45

Bài thực hành số 3: Đệ quy và khử đệ quy để giải quyết một số bài toán 48

Phần 1 Thực hành về đệ quy 48

1.1 Đệ quy - quay lui 48

1.2 Kỹ thuật nhánh cận 51

1 Đệ quy có nhớ 54

Phần 2 Khử đệ quy 56

Trang 2

Bài tập 5: Tính tổ hợp 56

Bài tập 6: Tìm ước chung lớn nhất 58

Bài tập 7: Liệt kê xâu nhị phân 60

Bài tập 8: Cân đĩa 62

Phần 3 Bài tập về nhà 64

Bài tập 9 : Lập lịch cho y tá 64

Bài tập 10 Khoảng cách Hamming 67

Bài tập 11: Lịch trình chụp ảnh 70

Bài tập 12 : Đếm đường đi 74

Bài thực hành số 4: Thực hành sử dụng các cấu trúc dữ liệu cơ bản để giải quyết các bài toán cụ thể 76

Phần 1 Bài tập thực hành 76

Bài tập 1: Đảo ngược một danh sách liên kết đơn 76

Bài tập 2: Tính diện tích tam giác 78

Bài tập 3: Tính tích có hướng của 2 vector 79

Bài tập 4: Thao tác với vector 81

Bài tập 5: Thực hiện thuật toán DFS không sử dụng đệ quy trên đồ thị biểu diễn bằng danh sách kề 83

Bài tập 6: Thực hiện thuật toán BFS trên đồ thị biểu diễn bằng danh sách kề 86

Bài tập 7: Thực hiện các phép giao và hợp của hai tập hợp được biểu diễn bằng set 88

Bài tập 8: Thực hiện các phép giao và hợp của hai tập hợp mờ được biểu diễn bằng map 90

Bài tập 9 : Cài đặt thuật toán Dijkstra trên đồ thị vô hướng được biểu diễn bằng danh sách kề sử dụng priority_queue 93

Phần 2 Bài tập về nhà 96

Bài tập 10: Search Engine 96

Bài thực hành số 5: Thực hành gỡ rối, kiểm thử và tinh chỉnh mã nguồn 101

Phần 1 Thực hành gỡ rối 101

1.1 Hướng dẫn tìm một số lỗi cú pháp (Syntax Error) thường gặp 101

1.2 Thực hành sửa lỗi cú pháp 101

Bài tập 1: Tìm và sửa các lỗi cú pháp 101

Bài tập 2: Tìm và sửa các lỗi cú pháp 102

1.3 Hướng dẫn tìm một số lỗi thực thi (Runtime Error) 104

1.4 Hướng dẫn tìm một số lỗi logic 104

1.5 Tìm vị trí lỗi bằng trình debug 104

1.6 Tìm vị trí lỗi bằng cách in ra màn hình / file log 104

Trang 3

1.7 Thực hành sửa lỗi thực thi và lỗi logic 104

Bài tập 3 : Dãy Ngoặc Đúng 104

Phần 2 Kiểm thử 107

2.1 Hướng dẫn 107

2.2 Thực hành 107

Bài tập 4: Bài toán người du lịch 107

Phần 3 Tinh chỉnh mã nguồn 113

Bài tập 5: Năm nhuận 113

Bài tập 6: Tổng kết 114

Bài tập 7: Chia tiền 116

Danh m c hình nh ục hình ảnh ảnh Hình 1 Bài 1.1 Phép toán & trả về địa chỉ của biến 6

Hình 2 Bài 1.2 Phép toán & trả về địa chỉ của biến 7

Hình 3 Bài 1.3 Phép toán & trả về địa chỉ của biến 8

Hình 4 Bài 1.4 Con trỏ và mảng 9

Hình 5 Bài 1.5 Con trỏ và mảng 11

Hình 6 Bài 1.6 Con trỏ và mảng 13

Hình 7 Bài 1.7 Cấp phát động 15

Hình 8 Bài 1.8 Cấp phát động 18

Hình 9 Bài 1.9 20

Hình 10 Bài 1.10 23

Hình 1 Bài 2.1 Truyền tham trị 24

Hình 2 Bài 2.2 Truyền tham chiếu 26

Hình 3 Bài 2.3 Tham số ngầm định 28

Hình 4 Bài 2.4 Đa năng hóa hàm 29

Hình 5 Bài 2.5 Đa năng hóa toán tử 31

Hình 6 Bài 2.6 Con trỏ hàm 33

Hình 7 Bài 2.7 Khái quát hóa hàm 35

Hình 8 Bài 2.8 Sắp xếp 36

Hình 9 Bài 2.9 Tính hàm sigmoid 40

Hình 10 Bài 2.10 Tích hai ma trận vuông 44

Hình 11 Bài 2.11 Tích hai đa thức 48

Hình 1 Bài 3.1 Dãy Lucas 49

Hình 2 Bài 3.2 Quân mã đi tuần 51

Hình 3 Bài 3.3 Bài toán người du lịch 53

Hình 4 Bài 3.4 LIS 56

Trang 4

Hình 5 Bài 3.5 Tính tổ hợp 58

Hình 6 Bài 3.6 Tính ước chung lớn nhất 60

Hình 7 Bài 3.7 Liệt kê xâu nhị phân 62

Hình 8 Bài 2.8 Sắp xếp 64

Hình 9 Bài 3.9 Lập lịch cho y tá 67

Hình 10 Bài 3.10 Khoảng cách Hamming 70

Hình 11 Bài 3.11 Lịch trình chụp ảnh 74

Hình 12 Bài 3.12 Đếm đường đi 76

Hình 1 Bài 4.1 Danh sách liên kết đơn 78

Hình 2 Bài 4.2 Tính diện tích tam giác 79

Hình 3 Bài 4.3 Tích có hướng của 2 vector 81

Hình 4 Bài 4.4 Thao tác với vector 83

Hình 5 Bài 4.5 DFS 86

Hình 6 Bài 4.6 BFS 88

Hình 7 Bài 4.7 Set 90

Hình 8 Bài 4.8 Map 93

Hình 9 Bài 4.9 Dijkstra 96

Hình 10 Bài 4.10 Search engine 100

Hình 1 Bài 5.1 Tìm và sửa các lỗi cú pháp 102

Hình 2 Bài 5.2 Tìm và sửa lỗi cú pháp 103

Hình 3 Bài 5.3 Tìm dãy ngoặc đúng 107

Hình 4 Bài 5.4 Bài toán người du lịch 113

Hình 5 Bài 5.5 Năm nhuận 114

Hình 6 Bài 5.6 Điểm tổng kết 116

Hình 7 Bài 5.7 Chia tiền 117

Trang 5

Bài th c hành s 1: Con tr và c p phát ực hành số 1: Con trỏ và cấp phát ố 1: Con trỏ và cấp phát ỏ và cấp phát ấp phát

Ph n 1 Th c hành v con tr ần 1 Thực hành về con trỏ ực hành số 1: Con trỏ và cấp phát ề con trỏ ỏ và cấp phát

1 Bài t p 1: ập 1:

Viết một chương trình C nhập vào 3 số nguyên Thiết lập một con trỏ để lần lượt trỏ tới từng số nguyên và hiển thị kết quả giá trị tham chiếu ngược của con trỏ Lưu ý: Phép toán & trả về địa chỉ của biến.

Tên file: 20183555-NguyenXuanHuy_Bai 1_1.cpp

printf("Enter three integers: ");

scanf("%d %d %d", &x, &y, &z);

printf("\nThe three integers are:\n");

Trang 6

Hình 1 Bài 1.1 Phép toán & trả về địa chỉ của biến

2 Bài t p 2: ập 1:

Viết chương trình in ra địa chỉ của 5 phần tử đầu tiên trong mảng được định nghĩa sau đây: int a[7]= {13, -355, 235, 47, 67, 943, 1222}; Lưu ý: Để in địa chỉ con trỏ các bạn sử dụng ký tự định dạng %p

Tên file: 20183555-NguyenXuanHuy_Bai 1_2.cpp

printf("address of first five elements in memory.\n");

for (i=0; i<5;i++)

{

printf("\ta[%d]",i);

printf("\n");

printf("address: %p \n",a+i);

Trang 9

int count =0;

for(i=0;i<size;i++){

if((*(arr+i)%2)==0){ count++; } }

Trang 13

Hình 6 Bài 1.6 Con trỏ và mảng

Viết chương trình nhập vào một mảng các số nguyên với số lượng các phần tử nhập từ bàn phím Sau đósắp xếp mảng theo thứ tự tăng dần Hiển thị danh sách mảng trước và sau khi sắp xếp Yêu cầu chỉ sử dụng con trỏ để truy cập mảng, không truy cập theo index mảng

Tên file: 20183555-NguyenXuanHuy_Bai 1_7.cpp

Trang 14

printf("The sorted array is: \n");

for( i = 0; i < n; i++){ printf("%d ", *(a + i));

printf("\n");

} free(a);

return 0;

}

Trang 15

}

Trang 16

void output(int **mt, int m, int n){

Trang 17

scanf("%d %d", &m, &n);

mt = (int **)malloc(m * sizeof(int *));

Trang 19

free(arr);

return 0;

}

Trang 20

Hình 9 Bài 1.9

Bài t p 10 ập 1:

Viết chương trình nhập vào 2 ma trận vuông cùng kích thước n*n, trong đó n nhập từ bàn phím Sau đó tính tổng và tích của hai ma trận đó và đưa kết quả ra màn hình Yêu cầu sử dụng cấp phát động để cấp phát bộ nhớ cho các ma trận

Tên file: 20183555-NguyenXuanHuy_Bai 1_10.cpp

Trang 22

printf("%d ",*(*(mt1+i)+j)+*(*(mt2+i)+j));

} printf("\n");

} printf("\n");

int **mt1 = (int **)malloc(n * sizeof(int *));

int **mt2 = (int **)malloc(n * sizeof(int *));

for (i = 0; i < n; i++)

{

Trang 23

mt1[i] = (int *)malloc(n * sizeof(int));

mt2[i] = (int *)malloc(n * sizeof(int));

Trang 24

Bài th c hành s 2: Hàm và t i u mã ngu n ực hành số 1: Con trỏ và cấp phát ố 1: Con trỏ và cấp phát ố 1: Con trỏ và cấp phát ưu mã nguồn ồn

Ph n 1 Th c hành v hàm ần 1 Thực hành về con trỏ ực hành số 1: Con trỏ và cấp phát ề con trỏ

1.1 Truy n tham tr , tham chi u và tham s ng m đ nh ề con trỏ ị, tham chiếu và tham số ngầm định ếu và tham số ngầm định ố 1: Con trỏ và cấp phát ần 1 Thực hành về con trỏ ị, tham chiếu và tham số ngầm định

Bài t p 1: Truy n tham tr ập 1: Truyền tham trị ền tham trị ị

Viết hàm tính độ dài cạnh huyền của tam giác theo độ hai cạnh góc vuông

Tên file: 20183555-NguyenXuanHuy_Bai 2_1.cpp

Trang 25

Bài t p 2: Truy n tham chi u ập 1: Truyền tham trị ền tham trị ếu

Viết hàm hoán vị vòng tròn 3 biến a, b, c Sau khi thực hiện hàm, các biến a, b, c tương ứng nhận các giátrị mới b, c, a

Tên file: 20183555-NguyenXuanHuy_Bai 2_2.cpp

Trang 26

Hình 12 Bài 2.2 Truyền tham chiếu

Bài t p 3: Tham s ng m đ nh ập 1: Truyền tham trị ố ngầm định ầm định ị

Viết chương trình yêu cầu nhập giá trị cho số nguyên x nhỏ hơn 100 In ra giá trị ax2 + bx + c với a, b, c định sẵn

Tên file: 20183555-NguyenXuanHuy_Bai 2_3.cpp

Trang 28

Hình 13 Bài 2.3 Tham số ngầm định

1.2 Đa năng hóa hàm

Bài t p 4: Đa năng hóa hàm ập 1: Truyền tham trị

Viết các hàm tính lập phương của số nguyên và số thực

Tên file: 20183555-NguyenXuanHuy_Bai 2_4.cpp

Trang 29

cout << "Double: " << cube(17.1) << endl;

return 0;

}

Hình 14 Bài 2.4 Đa năng hóa hàm

Bài t p 5: Đa năng hóa toán t ập 1: Truyền tham trị ử

Viết các toán tử tính tổng, hiệu, tích và thương của hai số phức Tên file:

Trang 31

ostream& operator << (ostream& out, const Complex &a) {

out << '(' << a.real << (a.imag >= 0 ? '+' : '-') << fabs(a.imag) << 'i' << ')';

Trang 32

1.3 Con tr hàm và tham s hóa hàm ỏ và cấp phát ố 1: Con trỏ và cấp phát

Bài t p 6: Con tr hàm ập 1: Truyền tham trị ỏ hàm

Giả thuyết Collatz: bắt đầu từ số dương n bất kỳ, nếu n chẵn thì chia 2, nếu lẻ thì nhân 3 cộng 1, giả thuyết cho rằng ta luôn đi đến n = 1 Hãy viết chương trình mô phỏng lại quá trình biến đổi để kiếm chứng giả thuyết với một vài giá trị của n

Tên file: 20183555-NguyenXuanHuy_Bai 2_6.cpp

Trang 33

int (*odd)(int) = NULL;

int (*even)(int) = NULL;

Bài t p 7: Khái quát hóa hàm ập 1: Truyền tham trị

Viết hàm tính tổng các phần từ trong hai mảng Yêu cầu sử dụng function template để cho phép hàm làm việc với các mảng số nguyên lẫn số thực

Tên file: 20183555-NguyenXuanHuy_Bai 2_7.cpp

#include <iostream>

using namespace std;

template <typename T>

Trang 34

T arr_sum(T *a,int n,T *b,int m){

Trang 35

Hình 17 Bài 2.7 Khái quát hóa hàm

1.4 Bi u th c lamda và hàm n c danh ểu thức lamda và hàm nặc danh ức lamda và hàm nặc danh ặc danh

Bài t p 8: S p X p ập 1: Truyền tham trị ắp Xếp ếu

Viết hàm so sánh cho thuật toán sắp xếp

Tên file: 20183555-NguyenXuanHuy_Bai 2_8.cpp

Trang 37

Ph n 2 Th c hành v t i u mã ngu n ần 1 Thực hành về con trỏ ực hành số 1: Con trỏ và cấp phát ề con trỏ ố 1: Con trỏ và cấp phát ưu mã nguồn ồn

Dưới đây cung cấp đoạn code đơn giản để tính hàm sigmoid theo công thức trực tiếp Hãy viết hàm tính xấp xỉ sigmoid(x) đến độ chính xác 10−6 và có tốc độ nhanh hơn ít nhất 30% so với code đơn giản Gợi ý:

sử dụng kỹ thuật "chuẩn bị trước" như trong slide

Tên file: 20183555-NguyenXuanHuy_Bai 2_9.cpp

const int LIMIT = 100;

const int NUM_ITER = 100000;

const int NUM_INPUTS = NUM_ITER * 100;

const int PRECISION = 1000000;

const double RANGE = LIMIT / 20.0;

for (int i = 0; i < NUM_INPUTS; ++i) {

x[i] = RANGE * (rand() % PRECISION - rand() % PRECISION) / PRECISION;

}

}

const int N=100000;

double y[N+1];

Trang 38

const double LIM=20; //[-20;20]

static double delta=LIM*2/N;

double benchmark(double (*calc)(double), vector<double> &result) {

const int NUM_TEST = 1000;

double taken = 0;

result = vector<double>();

result.reserve(NUM_ITER);

int input_id = 0;

clock_t start = clock();

for (int t = 0; t < NUM_TEST; ++t) {

double sum = 0;

for (int i = 0; i < NUM_ITER; ++i) {

double v = fabs(calc(x[input_id]));

sum += v;

Trang 39

if (t == 0) result.push_back(v);

if ((++input_id) == NUM_INPUTS) input_id = 0;

}

}

clock_t finish = clock();

taken = (double)(finish - start);

printf("Time: %.9f\n", taken / CLOCKS_PER_SEC);

return taken;

}

bool is_correct(const vector<double> &a, const vector<double> &b) {

const double EPS = 1e-6;

if (a.size() != b.size()) return false;

for (int i = 0; i < a.size(); ++i) {

if (fabs(a[i] - b[i]) > EPS) {

Trang 40

Dưới đây cung cấp đoạn code đơn giản để tính tích của hai ma trận cỡ NxN theo công thức trực tiếp Hãy viết hàm tính tích hai ma trận nhưng có tốc độ nhanh hơn ít nhất 10% so với code đơn giản Gợi ý: hãy để ý đến thứ tự truy cập các phần tử trong ma trận, tối ưu cache hoặc sử dụng thuật toán tốt hơn O(N3 ).

Tên file: 20183555-NguyenXuanHuy_Bai 2_10.cpp

#include <iostream>

#include <cstring>

Trang 41

bool operator == (const Matrix &a, const Matrix &b) {

for (int i = 0; i < N; ++i) {

Trang 43

for (int t = 0; t < NUM_TEST; ++t) {

clock_t start = clock();

for (int i = 0; i < NUM_ITER; ++i) {

a = multiply(a, result);

result = multiply(result, a);

}

clock_t finish = clock();

taken += (double)(finish - start);

Trang 45

Hình 20 Bài 2.10 Tích hai ma trận vuông

Ph n 3 Bài t p v nhà ần 1 Thực hành về con trỏ ập 1: ề con trỏ

Bài t p 11: Tính tích hai đa th c ập 1: ức lamda và hàm nặc danh

Cho 2 đa thức A(x) và B(x) tương ứng có bậc n và m Hãy tính đa thức tích C(x) = A(x) * B(x) có bậc n + m

Tên file: 20183555-NguyenXuanHuy_Bai 2_11.cpp

#include <bits/stdc++.h>

Trang 46

#include<complex>

using namespace std;

using cd = complex<double>;

const double PI = acos(-1);

void fft(vector<cd> & a, bool invert) {

int n = a.size();

if (n == 1)

return;

vector<cd> a0(n / 2), a1(n / 2);

for (int i = 0; 2 * i < n; i++) {

for (int i = 0; 2 * i < n; i++) {

a[i] = a0[i] + w * a1[i];

a[i + n/2] = a0[i] - w * a1[i];

if (invert) {

a[i] /= 2;

a[i + n/2] /= 2;

}

Trang 47

w *= wn;

}

}

vector<int> multiply(vector<int> const& a, vector<int> const& b) {

vector<cd> fa(a.begin(), a.end()), fb(b.begin(), b.end());

Trang 49

Hình 211 Bài 2.11 Tích hai đa thức

Bài th c hành s 3: Đ quy và kh đ quy đ gi i quy t m t s bài toán ực hành số 1: Con trỏ và cấp phát ố 1: Con trỏ và cấp phát ệ quy và khử đệ quy để giải quyết một số bài toán ử đệ quy để giải quyết một số bài toán ệ quy và khử đệ quy để giải quyết một số bài toán ểu thức lamda và hàm nặc danh ảnh ếu và tham số ngầm định ột số bài toán ố 1: Con trỏ và cấp phát

Ph n 1 Th c hành v đ quy ần 1 Thực hành về con trỏ ực hành số 1: Con trỏ và cấp phát ề con trỏ ệ quy và khử đệ quy để giải quyết một số bài toán

1.1 Đ quy - quay lui ệ quy và khử đệ quy để giải quyết một số bài toán

Bài t p 1: Tính dãy Lucas ập 1: Truyền tham trị

Tên file: 20183555-NguyenXuanHuy_Bai 3_1.cpp

Trang 50

Hình 22 Bài 3.1 Dãy Lucas

Bài t p 2: Quân mã đi tu n ập 1: Truyền tham trị ầm định

Trên bàn cờ vua kích thước n×nn×n có một quân mã đang ở ô (1, 1) Hãy đưa ra một dãy các di chuyển của mã sao cho mỗi ô trên bàn cờ đều được đi qua đúng 1 lần (ô (1, 1) được xem là đã đi qua)

Tên file: 20183555-NguyenXuanHuy_Bai 3_2.cpp

#include <bits/stdc++.h>

int n, X[100], Y[100], mark[100][100]={0};

const int hx[] = {1, 1, 2, 2, -1, -1, -2, -2};

const int hy[] = {2, -2, 1, -1, 2, -2, 1, -1};

void process(int i, int x, int y){

Trang 51

exit(0);

}

for(tmp=0;tmp<8;tmp++){

.int u=x+hx[tmp]; int v=y+hy[tmp];

if(u >= 1 && u < n &&v >= 1 && v < n && mark[u][v] == 0)

{

mark[u][v]=i; X[i]=u; Y[i]=v; i++; process(i,u,v); .mark[u][v] = 0; .} }

Ngày đăng: 14/06/2023, 14:11

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w