Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
1. TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa học & Kỹ thuật Máy tính
KỸ THUẬT LẬP TRÌNH
Bài tập 5 – Tuần 14
Đệ quy, cấp phát động và kiểu con trỏ
Bài tập bắt buộc:
Bài 1. Viết hàm đệ quy để tính tổng các số từ 1 đến n, với n được cho bởi user.
//return the sum 1+ 2+ 3+ ...+ n
int sum(int n)
Bài 2. Viết chương trình nhập một chuỗi ký tự và kiểm tra xem chuỗi đó có đối xứng
không.
Ví dụ : Chuỗi ABCDEDCBA là chuỗi đối xứng.
bool doixung(char *st, int l, int r)
Bài 3. Sử dụng hàm đệ quy để viết chương trình đảo ngược một số nguyên.
// with the parameter 12345, it would return 54321
int reverseDigits(int n)
Bài 4. Trong 1 hệ thống ngân hàng, mỗi khách hàng được lưu trữ bao gồm các
thông tin sau:
struct Account {
int ID; // ID cua khach hang
char Name[100]; // ho va ten
int balance; // account balance
};
Cho các khai báo
#define MAX 1000
Account* accounts = new Account[MAX];
int count_acc= 0;
Trong đó, ID là các số định danh duy nhất không trùng nhau và lớn hơn 0.
Hãy hiện thực các hàm sau:
// nhập 1 thông tin từ bàn phím, trả về:
// true nếu thành công, false nếu ID bị trùng hoặc = 0
// VD sử dụng: bool x = readInput(accounts + i);
bool readInput(Account* acc);
// nhập thông tin của tất cả khách hàng
// dừng khi gặp thông tin không hợp lệ
int main();
Kỹ thuật lập trình 501127 – HK2/2011-2012 1
2. TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa học & Kỹ thuật Máy tính
Bài 5.
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
void output(int** c, int m, int n) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout<<c[i][j]<<" ";
}
cout<<endl;
}
}
void deleteMatrix(int** d, int m) {
for (int i = 0; i < m; i++) {
delete [] d[i];
}
delete []d;
}
void main() {
int m, n;
int** a;
int** b;
cout<<"Input the dimensions of the Matrix : ";
cin>>m>>n;
if (m <= 0 || n <= 0) {
cout<<"Invalid Input !"<<endl;
} else {
init(a, m, n);
cout<<"The random matrix : "<<endl;
output(a, m, n);
transposeMatrix(a, m, n, b);
cout<<"The transposing matrix : "<<endl;
output(b, n, m);
deleteMatrix(a, m);
deleteMatrix(b, n);
}
}
Hãy hiện thực hàm init()và hàm transposeMatrix()thỏa mãn các yêu cầu sau:
• init(): tạo ra ma trận a (m hàng , n cột) chứa các số nguyên bằng cách cấp phát động
chobiến con trỏ a. Sau đó khởi tạo ma trận a chứa các số nguyên ngẫu nhiên từ 0..9 ( Gợi
ý : sửdụng hàm rand() trong thư viện stdlib.h đã được include sẵn).
• transposeMatrix(): tạo ma trận b (n hàng, m cột) chứa các số nguyên bằng cách
cấp phátđộng cho biến con trỏ b. Sau đó, tạo ra ma trận chuyển vị của ma trận a và chứa
vào ma trận b.
Kỹ thuật lập trình 501127 – HK2/2011-2012 2
3. TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa học & Kỹ thuật Máy tính
Bài tập làm thêm
Bài 6.Viết hàm đệ quy sumEvenDigit(intn) thực hiện chức năng sau:
• Trả về -1 nếu n < 0.
• Trả về tổng của các chữ số chẵn của số n nếu n >= 0.
Ví dụ :n = 1468952thì kết quả là : 4 + 6 + 8 + 2 = 20.
Bài 7. Viết hàm đệ quy để viết chương trình tìm giá trị lớn nhất của một mảng số nguyên.
//return the maximum element in a[]
int findmin(int a[], int n)
Bài 8.Cho đoạn chương trình :
#include <iostream.h>
void printCombinations(int m, int n) {
//Coding here
}
void main() {
int m,n;
cout<<"Input two positive integer : ";
cin>>m>>n;
if (m <=0 || n <= 0 || m > n) {
cout<<"Invalid input !"<<endl;
} else {
cout<<"The result is : "<<endl;
printCombinations(m,n);
}
}
Hãy hiện thực hàm printCombinations()để sinh ra tất cả các tổ hợp chập
mcủanphần tử từ 1..n. Yêu cầu trong hàm printCombinations()phải gọi 1 hàm đệ
qui để
thực hiện việc sinh ra tất cả các tổ hợp này.
Ví dụ :m = 2 , n = 4. Kết quả xuất ra màn hình sẽ là:
1 2
1 3
1 4
2 3
2 4
3 4
Bài 9.Viết chương trình xuất tam giác Pascal ra màn hình. Cụ thể như sau:
• Nhập một số nguyên dương từ bàn phím (lưu vào biến n).
Kỹ thuật lập trình 501127 – HK2/2011-2012 3
4. TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
Khoa Khoa học & Kỹ thuật Máy tính
• Tính toán tam giác Pascalđến mức n và lưu vào 1 mảng 2 chiều (Yêu cầu: mảng 2
chiều nàyphải được cấp phát động vừa đủ với kích thước của tam giác Pascal).
• Xuất mảng 2 chiều này ra màn hình.
Định nghĩa: Tam giác Pascal chứa các hệ số khi khai triển nhị thức Newton(x + 1)n.
Ví dụ: n = 4. Kết quả xuất ra màn hình sẽ là:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Bài 10.Viết chương trình xuất ra ma trận xoắn ốc. Cụ thể như sau:
• Nhập kích thước của ma trận từ bàn phím (lưu vào 2 biến m, n).
• Tính toán ma trận xoắn ốc và lưu vào 1 mảng 2 chiều ( Yêu cầu : mảng 2 chiều này
được cấpphát động).
• Xuất ma trận xoắn ốc ra màn hình.
Định nghĩa: Ma trận xoắn ốc là ma trận chứa đựng các số từ 1..(m x n) được sắp xếp có
thứtự tăng dần theo hình xoắn ốc.
Ví dụ :
m = 3, n = 5. Kết quả xuất ra màn hinh sẽ là:
1 2 3 4 5
12 13 14 15 6
11 10 9 8 7
m = 4, n = 4. Kết quả xuất ra màn hình sẽ là:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
Bài 11. Dùng đệ quy để viết chương trình xuất ra một chuỗi mới được tạo thành bởi sao
chép n chuỗicon s.
// with the parameters “Hello” and 2 would return the
string “HelloHello”.
// if n equals zero, the method should return the empty
string.
char* repeat(char* s, int n)
Bài 12. Viết chương trình giải bài toán tháp Hà Nội.
-- Hết -
Kỹ thuật lập trình 501127 – HK2/2011-2012 4