BÀI TẬP THỰC HÀNH MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG *PHẦN I: NGÔN NGỮ C++ Bài 01(lthdtbai01.cpp): Tính diện tích và chu vi hình tam giác có 3 cạnh a,b,c. Ba cạnh a,b,c đọc vào từ tệp văn bản "tamgiac.txt". Bài 02(lthdtbai02.cpp): Tính gần đúng sinx với độ chính xác 10^-4 theo công thức sau: sinx = x - x^3/3! + x^5/5! + ... + (-1)^n * x^(2*n+1)/(2*n+1)! + ... Bài 03(lthdtbai03.cpp): Cho tệp văn bản chứa dãy số nguyên dương a1,a2,a3...,an. Đọc vào dãy số, đưa các số lẻ về đầu dãy, các số chẵn về cuối dãy. Ghi dãy số sau khi thay đổi ra tệp "ketqua-lthdtbai01.txt". Y/c sử dụng mạng động chứa dãy số. Bài 04(lthdtbai04.cpp): Tính tổng 2 ma trận nguyên có kích thước mxn. Đưa các ma trận ra màn hình theo định dạng hàng, cột. Y/c sử dụng mảng động chứa các ma trận. Bài 05(lthdtbai05.cpp): Nhập vào xâu ký tự số nhị phân có tối đa 16 bit. Tính và đưa ra giá trị của số nhị phân đó. Y/c sử dụng biến xâu động. Bài 06(lthdtbai06.cpp): Nhập vào một số nguyên dương. Đưa ra màn hình xâu ký tự số hex. Y/c sử dụng biến xâu động. Bài 07(lthdtbai07.cpp): Nhập vào xâu ký tự số nhị phân. Đưa ra màn hình xâu ký tự số hex. Y/c sử dụng biến xâu động. Bài 08(lthdtbai08.cpp):Tìm USCLN của hai số nguyên dương. Y/c viết hàm tìm và trả về USCLN của hai số nguyên dương. Bài 09(lthdtbai09.cpp):Sắp xếp danh sách n họ tên theo vần ABC, nếu trùng tên thì sắp xếp theo họ, nếu trùng cả họ thì sắp xếp theo tên đệm. Danh sách họ tên đọc vào từ tệp văn bản "dsten.txt", danh sách tên đã sắp xếp ghi ra tệp văn bản "ketquabai07.txt". Y/c viết 1 hàm đưa ra danh sách tên, 1 hàm sắp xếp danh sách tên, 1 hàm tách tên, 1 hàm tách họ đệm và 1 hàm hoán đổi nội dung 2 biến xâu chứa tên. Bài 10(lthdtbai10.cpp):Nhập vào một danh sách n mặt hàng; mỗi mặt hàng có tên hàng, số lượng, đơn giá.Tính tổng tiền của n mặt hàng. Y/c viết hàm nhận vào danh sách n mặt hàng, tính và trả về tổng tiền. Bài 11(lthdtbai11.cpp):Nhập vào một dãy n số nguyên. Sắp xếp dãy số giảm dần theo giải thuật sủi bọt. Y/c viết 1 hàm sắp xếp và 1 hàm hoán đổi nội dung 2 ô nhớ. Bài 12(lthdtbai12.cpp):Chuyển đổi xâu số nhị phân thành xâu số hex tương ứng. Y/c viết hàm nhận vào xâu số nhị phân và trả về xâu số hex. Bài 13(lthdtbai13.cpp):Cho 2 dãy số nguyên đã sắp xếp tăng dần a1,a2,...,an và b1,b2,...,bn. Viết hàm nhận vào 2 dãy số này, trộn 2 dãy số và trả về dãy số kết quả. Y/c dùng mảng động. Bài 14(lthdtbai14.cpp):Cộng 2 ma trận nguyên kích thước mxn. Y/c viết hàm cộng 2 ma trận và trả về ma trận tổng; sử dụng mảng động lưu trữ ma trận. *PHẦN II: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài 15(lthdtbai15.cpp): Tính tổng 2 phân số, đưa các phân số ra màn hình ở dạng chưa rút gọn và đã rút gọn. Bài 16(lthdtbai16.cpp): Cho điểm A(x1,y1) và điểm B(x2,y2). Tính khoảng cách AB. Bài 17(lthdtbai17.cpp): Cho ma trận nguyên Amxn. Tính tổng và trung bình cộng các phần tử của ma trận. Đưa ra ma trận chuyển vị của A. Ma trận Amxn đọc từ tệp văn bản "matran.txt". Bài 18(lthdtbai18.cpp): Nhập vào một danh sách n mặt hàng; mỗi mặt hàng có tên hàng, số lượng, đơn giá. Tính tổng tiền của n mặt hàng. Bài 19(lthdtbai19.cpp): Nhập vào xâu ký tự số nhị phân có tối đa 16 bit. Tính và đưa ra giá trị của số nhị phân đó. Đưa ra màn hình số hex tương ứng với số nhị phân. Bài 20(lthdtbai20.cpp): Viết chương trình nhập vào một thời gian có giờ và phút. Tính và đưa ra màn hình thời gian sau n phút nhập vào từ bàn phím. Bài 21(lthdtbai21.cpp): Viết chương trình nhập vào n số phức. Đưa các số phức đã nhập ra màn hình. Yêu cầu trong chương trình phải tạo đối tượng động. Bài 22(lthdtbai22.cpp): Viết chương trình nhập vào danh sách n sinh viên, mỗi sinh viên có thông tin về mã sinh viên, tên và điểm tbc. Mã SV là các số nguyên được lấy tự động có giá trị từ 11 trở đi. Đưa ra màn hình số lượng (không dùng n) và danh sách sinh viên đã nhập. Yêu cầu trong chương trình có sử dụng biến tĩnh và hàm tĩnh; sử dụng mảng đối tượng động. Bài 23(lthdtbai23.cpp): Nhập vào một số nguyên dương, đưa ra số nhị phân tương ứng. Y/c trong chương trình có sử dụng ngăn xếp để chuyển từ số thập phân sang nhị phân. Bài 24(lthdtbai24.cpp): Nhập vào một số nguyên dương, đưa ra số hex tương ứng. Y/c trong chương trình có sử dụng ngăn xếp để chuyển từ số thập phân sang hex. Ngăn xếp sử dụng cấu trúc lưu trữ phân tán. Bài 25(lthdtbai25.cpp): Nhập vào một dãy số nguyên. Lưu dãy số trong danh sách liên kết đơn. Đưa dãy số trong DSLKD ra màn hình theo thứ tự đã nhập. Tìm xem trong dãy số có phần tử nào bằng x không. Xóa một phần tử có giá trị bằng x. Bài 26(lthdtbai26.cpp): Tính tổng n số phức. Yêu cầu dùng toán tử + để cộng hai số phức, dùng toán tử nhập >> nhập vào số phức, dùng toán tử xuất << để đưa ra số phức ở dạng a + bi, có thể khởi tạo giá trị ban đầu cho phần thực và phần ảo. Bài 27(lthdtbai27.cpp): Tạo lớp đối tượng xâu ký tự có các đặc điểm giống như xâu ký tự trong Pascal: Có thể khởi tạo đối tượng xâu bằng một hằng xâu; có thể gán hằng xâu hoặc đối tượng xâu cho đối tượng xâu; có thể dùng phép toán + để nối xâu; có thể dùng các phép toán so sánh để so sánh xâu; có thể dùng cin và cout để nhập vào và đưa ra đối tượng xâu. Bài 28(lthdtbai28.cpp): Tạo lớp đối tượng mảng an toàn chứa phần tử là các số nguyên có các đặc điểm sau: Có thể xác định kích thước mặc định là 50; có thể xác định kích thước khi tạo mảng; có thể truy nhập trực tiếp các phần tử bằng toán tử [] và kiểm tra được sự hợp lệ của chỉ số truy nhập; có thể nhập vào, đưa ra mảng bằng toán tử cin và cout; từ bên ngoài có thể biết được kích thước mảng và số phần tử hiện đang chứa trong mảng; có thể gán 2 đối tượng mảng. Bài 29(lthdtbai29.cpp): Một nhân sự luôn có họ tên và ngày sinh. Sinh viên là một loại nhân sự có thêm mã sinh viên và điểm tbc. Nhập vào thông tin của một sinh viên. Đưa ra màn hình các thông tin về sinh viên có kèm theo đánh gia, nếu điểm TBC >=8.0 thì đánh giá là sinh viên giỏi. Bài 30(lthdtbai30.cpp): Một nhân sự nói chung có họ tên và ngày sinh. Nhân viên trong một công ty là một loại nhân sự nhưng có thêm mã nhân viên và hệ số lương. Lãnh đạo trong công ty là một loại nhân viên có thêm chức vụ. Nhập vào thông tin của một số nhân viên và lãnh đạo trong công ty. Đưa ra các thông tin đã nhập. Bài 31(lthdtbai31.cpp): Thời điểm là một loại ngày tháng và cũng là một loại thời gian. Ngày tháng có ngày, tháng, năm. Thời gian có giờ và phút. Nhập vào một thời điểm, đưa ra ngày và thời gian của thời điểm đó ở dạng dd/mm/yy - h:mm. Bài 32(lthdtbai32.cpp): Tính diện tích và chu vi các hình: Hình chữ nhật biết 2 cạnh, hình tam giác biết 3 cạnh, hình tròn biết bán kính. Nhập vào một số hình trong đó có cả hình chữ nhật, hình tam giác và hình tròn. Đưa ra diện tích và chu vi các hình đã nhập. Y/c cài đặt đa hình động và lớp trừu tượng; viết 1 hàm lựa chọn hình, nhập kích thước cho hình và trả về hình đã nhập; viết 1 hàm đưa ra diện tích và chu vi một hình truyền vào qua đối số. Bài 33(lthdtbai33.cpp): Viết chương trình quản lý nhân sự của một trường học; nhân sự gồm có giảng viên và sinh viên; giảng viên có mã gv, họ tên và số bài báo; sinh viên có mã sv, họ tên và điểm tbc. Nhập vào một số nhân sự trong đó có cả giảng viên và sinh viên. Đưa ra thông tin của các nhân sự đã nhập kèm theo đánh giá: giảng viên đánh giá là giỏi nếu số bài báo >=5, sinh viên đánh giá là giỏi nếu điểm TBC>=8.0. Y/c cài đặt đa hình động. Bài 34(lthdtbai34.cpp): Đọc vào một dãy số nguyên từ tệp văn bản, trong đó có cả số dương và số âm. Sử dụng hàng đợi lưu trữ kế tiếp theo kiểu quay vòng để tách, đưa ra màn hình đồng thời ghi ra tệp văn bản dãy các số dương và dãy các số âm. Bài 35(lthdtbai35.cpp): Đọc vào một dãy số nguyên từ tệp văn bản. Lưu dãy số trong danh sách liên kết kép (DSLKK). Đưa dãy số trong DSLKK ra màn hình theo thứ tự từ trái sang phải và từ phải sang trái. Cho biết số phần tử có trong DSLKK. Chèn phần tử x vào sau nút trỏ bởi M. Xóa nút trỏ bởi M.