local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules

4
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 501127 – HK2/2011-2012 1 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();

Upload: tran-van-nam

Post on 25-Jul-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules

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 501127 – HK2/2011-2012 1

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();

Page 2: Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules

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 501127 – HK2/2011-2012 2

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.

Page 3: Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules

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 501127 – HK2/2011-2012 3

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).

Page 4: Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules

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 501127 – HK2/2011-2012 4

• 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 -