lOMoARcPSD| 61570513
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
BÀI 5: Thực hành gỡ rối, kiểm thử và tinh chỉnh mã nguồn
Thực hành gỡ lỗi ........................................................................................................... 3
Bài 5.1: Tìm và sửa các lỗi cú pháp......................................................................... 3
1. Ảnh báo cáo .................................................................................................. 3
2. Source code: ..................................................................................................
5
Bài 5.2: Tìm và sửa các lỗi cú pháp........................................................................ 7
1. Ảnh báo cáo .................................................................................................. 7
2. Source code ...................................................................................................
9
Bài 5.3: Dãy ngoặc đúng ......................................................................................... 12
1. Ảnh báo cáo ................................................................................................ 12
2. Source code .................................................................................................
14
Kiểm thử .......................................................................................................................
18
Bài 5.4: Bài toán người du lịch .............................................................................. 18
1. Ảnh báo cáo ................................................................................................ 18
2. Source code .................................................................................................
19
Tinh chỉnh phần mềm ................................................................................................. 24
Bài 5.5: Năm nhuận ................................................................................................ 24
1. Ảnh báo cáo ................................................................................................ 24
2. Source code .................................................................................................
24
Bài 5.6: .....................................................................................................................
26
1. Ảnh báo cáo ................................................................................................ 26
lOMoARcPSD| 61570513
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
2. Source code .................................................................................................
27
Bài 5.7: Chia tiền..................................................................................................... 30
1. Ảnh báo cáo ................................................................................................ 30
2. Source code .................................................................................................
31
Bài tập về nhà .............................................................................................................. 34
Bài 5.8: Cắt hình chữ nhật ..................................................................................... 34
1. Ảnh báo cáo ................................................................................................ 34
Mã lớp thực hành: 750830
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
2. Source code ................................................................................................. 36
Bài 5.9: Xây tháp .................................................................................................... 39
1. Ảnh báo cáo ................................................................................................ 39
2. Source code ................................................................................................. 43
lOMoARcPSD| 61570513
Mã lớp thực hành: 750830
Thực hành gỡ lỗi
Bài 5.1: Tìm và sửa các lỗi cú pháp
Đoạn code sau liệt kê tất cả các hoán vị nn số. Hãy tìm và sửa các lỗi cú pháp n
hướng dẫn ở trên.
1. Ảnh báo cáo
Hình 1- lỗi chạy chương trình
lOMoARcPSD| 61570513
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
Hình 2- phần sửa lỗi
lOMoARcPSD| 61570513
Hình 3- kết quả sau khi sửa lỗi
2. Source code:
#include <stdio.h> int
x[100], mark[100], n;
//# in ra 1 hoán vị hợp lệ void
print(){
/***************************
lOMoARcPSD| 61570513
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
Họ và tên : Phùng Đắc Cường
MSSV : 20235288
**************************/
for (int i = 1; i <= n; ++i) printf("%d ", x[i]);
/********************************************************************
*************/
//print("\n"); //sai cú pháp câu lệnh
printf("\n"); // sửa đúng hàm in xuống dòng
/********************************************************************
*************/
}
//# Hàm đệ quy sinh các hoán vị của 1..n void
process(int i) {
/***************************
Họ và tên : Phùng Đắc Cường
MSSV : 20235288
**************************/
if (i > n){
/********************************************************************
*************/
// printf(); //sai lời gọi hàm print(); //sửa: in
ra hoán vị khi đã chọn đủ n phần tử
/********************************************************************
lOMoARcPSD| 61570513
*************/
Mã lớp thực hành: 750830
lOMoARcPSD| 61570513
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242 return;
}
for (int j = 1; j <= n; ++j) // thử tất cả các giá trị j chưa được chọn
if (!mark[j] ){
mark[j] = 1; // đánh dấu j đã được chọn
x[i] = j; // gán j vào vị trí i process(i+1);
// đệ quy xử lý vị trí tiếp theo mark[j] = 0; // quay lui:
bỏ đánh dấu để thử giá trị khác
}
}
int main() { printf("Họ và tên: Phùng
Đắc Cường\n");
printf("MSSV:20235288\n");
n = 5; // số phần tử cần hoán vị
process(1); // bắt đầu từ vị trí đầu tiên return
0;
}
Bài 5.2: Tìm và sửa các lỗi cú pháp
Bài toán cái túi: Cho một cái túi có sức chứa M và n đồ vật. Đồ vật thứ i có khối lượng
m
i
và giá trị v
i
. Cần chọn ra một số đồ vật để bỏ vào túi sao cho tổng khối lượng không
quá M và tổng giá trị là lớn nhất có thể. Đoạn code sau đây giải bài toán cái túi bằng
phương pháp duyệt nhánh cận. Hãy tìm và sửa các lỗi cú pháp
lOMoARcPSD| 61570513
1. Ảnh báo cáo
Mã lớp thực hành: 750830
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
Hình 4- Lỗi chạy chương trình
lOMoARcPSD| 61570513
Hình 5- Phần sửa lỗi
Mã lớp thực hành: 750830
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
Hình 6 - Phần sửa lỗi
Hình 7- Kết quả sau khi sửa lỗi
lOMoARcPSD| 61570513
2. Source code
#include
<iostream> using
namespace std;
int n, M, m[100], v[100]; // n: số đồ vật, M: trọng lượng ti đa
int x[100], best, sumV, sumM; // best: lời giải(giá trị lớn nhất) , sumV: tổng giá tr
hiện tại, sumM: tổng khối lượng hiện tại
int All[100]; // All[i]: tổng giá trị các vật từ i đến n
Mã lớp thực hành: 750830
lOMoARcPSD| 61570513
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
void init(){
/***************************
Họ và tên : Phùng Đắc Cường
MSSV : 20235288
**************************/
for (int i = n; i >= 1; --i){
/********************************************************************
*************/
//all[i] = all[i+1] + v[i]; //sai tên mảng cần truy cập
All[i] = All[i+1] + v[i];
/********************************************************************
*************/
}
}
//# hiển thị kết quả
void print() {
cout << best;
}
//# hàm quay lui nhánh cận để chọn đồ vật void
process(int i){
/***************************
lOMoARcPSD| 61570513
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
Họ và tên : Phùng Đắc Cường
MSSV : 20235288
**************************/
// Cắt nhánh nếu tổng giá trị tối đa còn lại <= best hoặc vượt quá khối lượng
/********************************************************************
*************/
// if (sumV + all[i] <= best || sumM > M) return 0; //sai tên mảng cần truy cập
if (sumV + All[i] <= best || sumM > M) return ; // sửa lại
/********************************************************************
*************/
if (i > n){ best = sumV; // cập nhật giá trị tốt
nhất nếu đi hết
return ;
}
process(i+1); // nhánh không chọn đồ vật i
// nhánh chọn đồ vật i
sumM += m[i]; sumV += v[i];
process(i+1); // thử tiếp trường sumM -=
m[i]; // quay lui: cập nhật lại giá tr sumV -=
v[i];
lOMoARcPSD| 61570513
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
}
int main() { cout << "Họ và tên: Phùng Đắc
Cường" <<endl; cout <<
"MSSV:20235288"<<endl;
cin >> n >> M;
for (int i = 1; i <= n; ++i)
cin >> m[i] >> v[i];
init();
process(1);
print();
return 0;
}
Bài 5.3: Dãy ngoặc đúng
Viết một chương trình nhận vào một dãy dấu ngoặc và kiểu tra xem dãy dấu ngoặc
đóng mở đúng chưa.
Mã nguồn dưới đây là của mt sinh viên, khi submit bị lỗi runtime (Exit code is -
1073741819). Sử dụng công cụ debug ở trên, hãy tìm và sửa các lỗi trong mã nguồn
1. Ảnh báo cáo
lOMoARcPSD| 61570513
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
Hình 8- Lỗi chạy chương trình
Hình 9- Phần sửa lỗi
lOMoARcPSD| 61570513
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
Mã lớp thực hành: 750830
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
Hình 10- Phần sửa lỗi
Hình 11- Kết quả sau khi sửa lỗi
2. Source code
#include
<iostream> using
namespace std;
#include <string.h>
#include <stack>
//# Hàm kiểm tra chuỗi ngoặc có hợp lệ không
int par(string str){
int a = str.length();
lOMoARcPSD| 61570513
stack<char> S; // dùng stack để kiểm tra tính hợp lệ
char x, y;
Mã lớp thực hành: 750830
for (int i=0; i<a; i++){
x = str[i]; if (x == '(' || x
== '[' || x == '{'){
S.push(x); // nếu là ngoặc mở thì đẩy vào stack
}
else {
/***************************
Họ và tên : Phùng Đắc Cường
MSSV : 20235288
**************************/
/*************************** bổ sung
***********************************************/
if (S.empty()) return 0; // nếu gặp ngoặc đóng mà stack rỗng thì sai
/********************************************************************
*************/
if (x == ')') {
if (S.top() == '('){
S.pop(); // khớp ngoặc: lấy ra
}
else return 0; // không khớp thì sai
}
lOMoARcPSD| 61570513
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
else if (x == ']') {
if (S.top() == '['){
S.pop(); // khớp ngoặc: lấy ra
lOMoARcPSD| 61570513
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
}
else return 0; // không khớp thì sai
}
else if (x == '}') {
if (S.top() == '{'){
S.pop(); // khớp ngoặc: lấy ra
}
else return 0; // không khớp thì sai
}
}
}
/***************************
Họ và tên : Phùng Đắc Cường
MSSV : 20235288
**************************/
/********************************************************************
*************/
// if (S.top() != NULL){//ngoại lệ xảy ra khi so sánh giữa ký tự với con trỏ
// return 0;
// }
// else return 1;
return S.empty(); // giải pháp
/********************************************************************
*************/
}
lOMoARcPSD| 61570513
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242
int main(){ cout << "Họ và tên: Phùng Đắc
Cường" <<endl; cout <<
"MSSV:20235288"<<endl;
int n; //số lượng chuỗi cần kiểm tra
string str; cin >> n;
for(int i=0; i<n; i++){
cin >> str; cout <<
par(str) << endl;
}
return 0;
}
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242

Preview text:

lOMoAR cPSD| 61570513
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242
BÀI 5: Thực hành gỡ rối, kiểm thử và tinh chỉnh mã nguồn
Thực hành gỡ lỗi ........................................................................................................... 3
Bài 5.1: Tìm và sửa các lỗi cú pháp......................................................................... 3 1.
Ảnh báo cáo .................................................................................................. 3 2.
Source code: .................................................................................................. 5
Bài 5.2: Tìm và sửa các lỗi cú pháp........................................................................ 7 1.
Ảnh báo cáo .................................................................................................. 7 2.
Source code ................................................................................................... 9
Bài 5.3: Dãy ngoặc đúng ......................................................................................... 12 1.
Ảnh báo cáo ................................................................................................ 12 2.
Source code ................................................................................................. 14
Kiểm thử ....................................................................................................................... 18
Bài 5.4: Bài toán người du lịch .............................................................................. 18 1.
Ảnh báo cáo ................................................................................................ 18 2.
Source code ................................................................................................. 19
Tinh chỉnh phần mềm ................................................................................................. 24
Bài 5.5: Năm nhuận ................................................................................................ 24 1.
Ảnh báo cáo ................................................................................................ 24 2.
Source code ................................................................................................. 24
Bài 5.6: ..................................................................................................................... 26 1.
Ảnh báo cáo ................................................................................................ 26 lOMoAR cPSD| 61570513
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242 2.
Source code ................................................................................................. 27
Bài 5.7: Chia tiền..................................................................................................... 30 1.
Ảnh báo cáo ................................................................................................ 30 2.
Source code ................................................................................................. 31
Bài tập về nhà .............................................................................................................. 34
Bài 5.8: Cắt hình chữ nhật ..................................................................................... 34
1. Ảnh báo cáo ................................................................................................ 34
Mã lớp thực hành: 750830
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242
2. Source code ................................................................................................. 36
Bài 5.9: Xây tháp .................................................................................................... 39 1.
Ảnh báo cáo ................................................................................................ 39 2.
Source code ................................................................................................. 43 lOMoAR cPSD| 61570513
Mã lớp thực hành: 750830 Thực hành gỡ lỗi
Bài 5.1: Tìm và sửa các lỗi cú pháp
Đoạn code sau liệt kê tất cả các hoán vị nn số. Hãy tìm và sửa các lỗi cú pháp như hướng dẫn ở trên. 1. Ảnh báo cáo
Hình 1- lỗi chạy chương trình lOMoAR cPSD| 61570513
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242 Hình 2- phần sửa lỗi lOMoAR cPSD| 61570513
Hình 3- kết quả sau khi sửa lỗi 2. Source code: #include int x[100], mark[100], n;
//# in ra 1 hoán vị hợp lệ void print(){ /*************************** lOMoAR cPSD| 61570513
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242
Họ và tên : Phùng Đắc Cường MSSV : 20235288 **************************/
for (int i = 1; i <= n; ++i) printf("%d ", x[i]);
/******************************************************************** *************/
//print("\n"); //sai cú pháp câu lệnh
printf("\n"); // sửa đúng hàm in xuống dòng
/******************************************************************** *************/ }
//# Hàm đệ quy sinh các hoán vị của 1..n void process(int i) { /***************************
Họ và tên : Phùng Đắc Cường MSSV : 20235288 **************************/ if (i > n){
/******************************************************************** *************/
// printf(); //sai lời gọi hàm print(); //sửa: in
ra hoán vị khi đã chọn đủ n phần tử
/******************************************************************** lOMoAR cPSD| 61570513 *************/
Mã lớp thực hành: 750830 lOMoAR cPSD| 61570513
20235288- Phùng Đắc Cường Báo cáo thực hành – IT3040- 20242 return; }
for (int j = 1; j <= n; ++j) // thử tất cả các giá trị j chưa được chọn if (!mark[j] ){
mark[j] = 1; // đánh dấu j đã được chọn
x[i] = j; // gán j vào vị trí i process(i+1);
// đệ quy xử lý vị trí tiếp theo mark[j] = 0; // quay lui:
bỏ đánh dấu để thử giá trị khác } }
int main() { printf("Họ và tên: Phùng Đắc Cường\n"); printf("MSSV:20235288\n");
n = 5; // số phần tử cần hoán vị
process(1); // bắt đầu từ vị trí đầu tiên return 0; }
Bài 5.2: Tìm và sửa các lỗi cú pháp
Bài toán cái túi: Cho một cái túi có sức chứa M và n đồ vật. Đồ vật thứ i có khối lượng
mi và giá trị vi. Cần chọn ra một số đồ vật để bỏ vào túi sao cho tổng khối lượng không
quá M và tổng giá trị là lớn nhất có thể. Đoạn code sau đây giải bài toán cái túi bằng
phương pháp duyệt nhánh cận. Hãy tìm và sửa các lỗi cú pháp lOMoAR cPSD| 61570513 1. Ảnh báo cáo
Mã lớp thực hành: 750830
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242
Hình 4- Lỗi chạy chương trình lOMoAR cPSD| 61570513 Hình 5- Phần sửa lỗi
Mã lớp thực hành: 750830
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242 Hình 6 - Phần sửa lỗi
Hình 7- Kết quả sau khi sửa lỗi lOMoAR cPSD| 61570513 2. Source code #include using namespace std;
int n, M, m[100], v[100]; // n: số đồ vật, M: trọng lượng tối đa
int x[100], best, sumV, sumM; // best: lời giải(giá trị lớn nhất) , sumV: tổng giá trị
hiện tại, sumM: tổng khối lượng hiện tại
int All[100]; // All[i]: tổng giá trị các vật từ i đến n
Mã lớp thực hành: 750830 lOMoAR cPSD| 61570513
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242 void init(){ /***************************
Họ và tên : Phùng Đắc Cường MSSV : 20235288 **************************/
for (int i = n; i >= 1; --i){
/******************************************************************** *************/
//all[i] = all[i+1] + v[i]; //sai tên mảng cần truy cập All[i] = All[i+1] + v[i];
/******************************************************************** *************/ } } //# hiển thị kết quả void print() { cout << best; }
//# hàm quay lui nhánh cận để chọn đồ vật void process(int i){ /*************************** lOMoAR cPSD| 61570513
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242
Họ và tên : Phùng Đắc Cường MSSV : 20235288 **************************/
// Cắt nhánh nếu tổng giá trị tối đa còn lại <= best hoặc vượt quá khối lượng
/******************************************************************** *************/
// if (sumV + all[i] <= best || sumM > M) return 0; //sai tên mảng cần truy cập
if (sumV + All[i] <= best || sumM > M) return ; // sửa lại
/******************************************************************** *************/
if (i > n){ best = sumV; // cập nhật giá trị tốt nhất nếu đi hết return ; }
process(i+1); // nhánh không chọn đồ vật i
// nhánh chọn đồ vật i sumM += m[i]; sumV += v[i];
process(i+1); // thử tiếp trường sumM -=
m[i]; // quay lui: cập nhật lại giá trị sumV -= v[i]; lOMoAR cPSD| 61570513
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242 }
int main() { cout << "Họ và tên: Phùng Đắc
Cường" <"MSSV:20235288"< cin >> n >> M;
for (int i = 1; i <= n; ++i)
cin >> m[i] >> v[i]; init(); process(1); print(); return 0; } Bài 5.3: Dãy ngoặc đúng
Viết một chương trình nhận vào một dãy dấu ngoặc và kiểu tra xem dãy dấu ngoặc đóng mở đúng chưa.
Mã nguồn dưới đây là của một sinh viên, khi submit bị lỗi runtime (Exit code is -
1073741819). Sử dụng công cụ debug ở trên, hãy tìm và sửa các lỗi trong mã nguồn 1. Ảnh báo cáo lOMoAR cPSD| 61570513
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242
Hình 8- Lỗi chạy chương trình Hình 9- Phần sửa lỗi lOMoAR cPSD| 61570513
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242
Mã lớp thực hành: 750830
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242 Hình 10- Phần sửa lỗi
Hình 11- Kết quả sau khi sửa lỗi 2. Source code #include using namespace std; #include #include
//# Hàm kiểm tra chuỗi ngoặc có hợp lệ không int par(string str){ int a = str.length(); lOMoAR cPSD| 61570513
stack S; // dùng stack để kiểm tra tính hợp lệ char x, y;
Mã lớp thực hành: 750830
for (int i=0; i x = str[i]; if (x == '(' || x == '[' | x == '{'){
S.push(x); // nếu là ngoặc mở thì đẩy vào stack } else { /***************************
Họ và tên : Phùng Đắc Cường MSSV : 20235288 **************************/
/*************************** bổ sung
***********************************************/
if (S.empty()) return 0; // nếu gặp ngoặc đóng mà stack rỗng thì sai
/******************************************************************** *************/ if (x == ')') { if (S.top() == '('){
S.pop(); // khớp ngoặc: lấy ra }
else return 0; // không khớp thì sai } lOMoAR cPSD| 61570513
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242 else if (x == ']') { if (S.top() == '['){
S.pop(); // khớp ngoặc: lấy ra lOMoAR cPSD| 61570513
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242 }
else return 0; // không khớp thì sai } else if (x == '}') { if (S.top() == '{'){
S.pop(); // khớp ngoặc: lấy ra }
else return 0; // không khớp thì sai } } } /***************************
Họ và tên : Phùng Đắc Cường MSSV : 20235288 **************************/
/******************************************************************** *************/
// if (S.top() != NULL){//ngoại lệ xảy ra khi so sánh giữa ký tự với con trỏ // return 0; // } // else return 1;
return S.empty(); // giải pháp
/******************************************************************** *************/ } lOMoAR cPSD| 61570513
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242
int main(){ cout << "Họ và tên: Phùng Đắc
Cường" <"MSSV:20235288"<
int n; //số lượng chuỗi cần kiểm tra string str; cin >> n;
for(int i=0; i cin >> str; cout << par(str) << endl; } return 0; }
20235288- Phùng Đắc Cường
Báo cáo thực hành – IT3040- 20242