** Trình bày thuật toán bao gồm: input - output - process – bộ dữ liệu test thực hiện bài toán Nhập vào một số nguyên n.. ** Viết chương trình nhập vào từ bàn phím n số nguyên và in ra m
Trang 1TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
-BÁO CÁO BÀI TẬP LỚN
MÔN CƠ SỞ LẬP TRÌNH
ĐỀ SỐ 32
Giáo viên HD: Ths Mai Thị Thuý Hà
Sinh viên thực hiện: Nguyễn Đăng Hùng Ngày sinh : 24/04/2004
Mã sinh viên : 23B1001P0162
Lớp: 2310B01
1
Trang 2Hà Nội, năm 2023 Mục Lục
Table of Contents
Câu 1 ** Trình bày thuật toán (bao gồm: input - output - process – bộ dữ liệu test) thực hiện bài toán Nhập vào một số nguyên n Đếm xem số đó có bao nhiêu chữ số và tính tổng của các chữ số đó Ví dụ: n = 35, Số có 2 chữ số và tổng các chữ số là 3+5 = 8.
Câu 2 ** Viết chương trình in ra trung bình cộng, trung bình nhân của 3 số bất kỳ được nhập vào từ bàn phím.
Câu 3 ** Viết chương trình nhập hai số nguyên từ bàn phím In ra tổng, tích, hiệu và thương của 2 số đó.
Câu 4 ** Viết chương trình nhập vào từ bàn phím n số nguyên và in ra màn hình giá trị lớn nhất trong các số vừa nhập vào (Không sử dụng mảng).
Câu 5 ** Viết hàm liệt kê các ước số của n Viết chương trình nhập số nguyên dương n, gọi hàm trên và cho biết kết quả.
Câu 6 ** Viết hàm thực hiện xóa tất cả những ký tự x nào đó trong chuỗi Viết chương trình nhập vào một chuỗi bất kỳ và ký tự x c ần xóa, gọi hàm trên và in ra kết quả Không sử dụng thư viện có sẵn của C/C++
Câu 7 ** Viết các hàm thực hiện:
o Nhập vào 1 mảng các số nguyên gồm n phần tử (0<=n<=50)
o In ra màn hình 1 mảng các số nguyên
o Đếm số phần tử lẻ trong mảng các số nguyên
o Cho biết giá trị nhỏ nhất của mảng số nguyên
o Tìm kiếm một phần tử x nào đó trong mảng các số nguyên
o Sắp xếp các phần tử của mảng các số nguyên theo thứ tự giảm dần Viết chương trình chính Áp dụng lần lượt các hàm trên
Câu 8 ** Viết các hàm thực hiện công việc sau:
o Nhập ma trận số nguyên kích thước n*m
o Hiện ma trận vừa nhập ra màn hình
o Hiện ra hàng có số lượng phần tử âm nhiều nhất
o Kiểm tra một số chính phương
o Liệt kê vị trí (dạng (i,j)) của các phần tử là số chính phương trong ma trận
o Đếm số lượng phần tử có giá trị bằng phần tử tại vị trí (0,0) của ma trận Viết chương trình chính Áp dụng lần lượt các hàm trên
Câu 9 ** viết các chương trình con thực hiện các công việc sau:
2
Trang 3o nhập danh sách các sách gồm các thông tin: tên sách, tên tác giả, nhà xuất bản, năm xuất bản và lưu vào tệp sach.dat;
o hiện danh mục sách từ tệp sạch.dat với đầy đủ các thông tin;
o nhập tên sách từ bàn phím, tìm sách vừa nhập và in các thông tin chi tiết ra màn hình;
o thống kê số lượng sách của thập niên 80
o cho biết tên các quyển sách đã xuất bản cách đây 30 năm
Viết chương trình chính để gọi các chương trình con đã được viết theo trật tự như trên Nếu có thể tổ chức chương trình thông qua menu thì sẽ là một điểm cộng.
Câu 10 ** viết các chương trình con thực hiện các công việc sau: o nhập danh sách sinh viên gồm các thông tin: mã sinh viên, tên sinh viên, ngày sinh, giới tính, điểm trung bình; việc nhập sẽ dừng khi nhập mã sinh viên là 0 o hiện danh sách vừa nhập ra màn hình; o sắp xếp danh sách sinh viên theo thứ tự alphabet của tên sinh viên và ghi vào tệp sv.dat (dạng nhị phân); o tìm sinh viên nữ có điểm trung bình thấp nhất o đếm số sinh viên nam Viết chương trình chính để gọi các chương trình con theo trật tự trên Nếu có thể tổ chức chương trình thông qua menu thì sẽ là một điểm cộng.
3
Trang 4Câu 1: ** Trình bày thuật toán (bao gồm: input - output - process – bộ dữ liệu test) thực hiện bài toán Nhập vào một số nguyên n Đếm xem số đó có bao nhiêu chữ số và tính tổng của các chữ số đó Ví dụ: n = 35, Số có 2 chữ số và tổng các chữ số là 3+5 = 8.
Thuật toán đếm chữ số và tính tổng:
+ Input: Một số nguyên dương n
+ Output: Số chữ số trong n và tổng của các chữ số trong n
+ Process:
Nhập dữ liệu: Nhập số nguyên dương n từ người dùng
Đếm chữ số và tính tổng:
Khởi tạo biến count để đếm số chữ số và biến sum để tính tổng
Lặp qua từng chữ số trong số n cho đến khi n trở thành 0
Lấy chữ số cuối cùng của n bằng cách lấy phần dư n % 10
Cộng chữ số này vào tổng sum
Tăng biến count lên 1
Cắt chữ số cuối cùng của n bằng cách chia n cho 10 và lấy phần nguyên: n =
n / 10
Hiển thị kết quả: Hiển thị số chữ số count và tổng các chữ số sum
Bộ dữ liệu test thực hiện:
3.1 Sơ đồ thuật toán
Bước 1 : Khai báo biến chương trình
Trang 5- Tính tổng của a, b, c và gán vào biến sum.
- Tính trung bình cộng (average) bằng cách chia tổng cho 3
- Tính trung bình nhân (product) bằng cách nhân a, b, c lại và lấy căn bậc ba.Bước 4 : In ra màn hình kết quả rồi kết thúc
// Bước 4: Hiển thị kết quả
cout << "Trung binh cong cua a, b, c la: " << average << endl;
cout << "Trung binh nhan cua a, b, c la: " << product << endl;
2 4 6 Trung binh cong cua a, b, c la: 4
Trung binh nhan cua a, b, c la: 3.301927
5 10 15 Trung binh cong cua a, b, c la: 10
Trung binh nhan cua a, b, c la: 8.65974
Câu 3: ** Viết chương trình nhập hai số nguyên từ bàn phím In ra tổng, tích,hiệu và thương của 2 số đó.
1 Input: Hai số nguyên a và b
2 Output:
- Tổng của a và b
- Tích của a và b
5
Trang 6- Hiệu của a và b.
- Thương của a và b
3 Process:
3.1 Sơ đồ thuật toán
Bước 1 : Khai báo biến chương trình
- Tính hiệu a - b và gán vào difference
- Tính thương static_cast<float>(a) / b và gán vào quotient
Bước 4 : In ra tổng, tích, hiệu và thương của a và b
// Bước 4: Hiển thị kết quả
cout << "Tong cua a va b la: " << sum << endl;
cout << "Tich cua a va b la: " << product << endl;
cout << "Hieu cua a va b la: " << difference << endl;
cout << "Thuong cua a va b la: " << quotient << endl;
// Bước 5: Kết thúc
return 0;
6
Trang 74 Test:
10 5 Tong cua a va b la: 15
Tich cua a va b la: 50Hieu cua a va b la: 5Thuong cua a va b la: 2
7 3 Tong cua a va b la: 10
Tich cua a va b la: 21Hieu cua a va b la: 4Thuong cua a va b la: 2.33333
Câu 4: ** Viết chương trình nhập vào từ bàn phím n số nguyên và in ra mànhình giá trị lớn nhất trong các số vừa nhập vào (Không sử dụng mảng).
3.1 Sơ đồ thuật toán
Bước 1 : Khai báo biến chương trình
- int n, num, maxNumber;
Bước 2 : Nhập dữ liệu
- Nhập số nguyên dương n từ bàn phím
Bước 3: Tìm giá trị lớn nhất trong các số
- Khởi tạo biến maxNumber bằng giá trị đầu tiên nhập
- Lặp i từ 2 đến n:
- Nhập số nguyên num từ bàn phím
- Nếu num lớn hơn maxNumber, gán maxNumber bằng num
Bước 4 : In ra giá trị lớn nhất trong các số vừa nhập
Trang 8cout << "Nhap " << n << " so nguyen: ";
// Bước 4: Hiển thị kết quả
cout << "Gia tri lon nhat trong cac so la: " << maxNumber << endl;
Gia tri lon nhat trong cac so la: 20
Câu 5: ** Viết hàm liệt kê các ước số của n Viết chương trình nhập sốnguyên dương n, gọi hàm trên và cho biết kết quả.
1 Input: - Số nguyên dương n
2 Output:
- Các ước số của n
3 Process:
3.1 Sơ đồ thuật toán
Bước 1 : Khai báo biến chương trình
- Khai báo hàm liệt kê ước số void lietKeUocSo(int n);
- Khai báo biến n
Trang 9// Định nghĩa hàm liệt kê ước số
void lietKeUocSo(int n) {
cout << "Uoc so cua " << n << " la: ";
for (int i = 1; i <= n; i++) {
12 Uoc so cua 12 la: 1 2 3 4 6 12
17 Uoc so cua 17 la: 1 17
Câu 6: ** Viết hàm thực hiện xóa tất cả những ký tự x nào đó trong chuỗi.Viết chương trình nhập vào một chuỗi bất kỳ và ký tự x c ần xóa, gọi hàm trên và in ra kết quả Không sử dụng thư viện có sẵn của C/C++
3.1 Sơ đồ thuật toán
Bước 1 : Khai báo biến chương trình
- char s[100], x;
Bước 2 : Nhập dữ liệu
- Nhập chuỗi ký tự s từ bàn phím
- Nhập ký tự x từ bàn phím
Bước 4: Gọi hàm xóa ký tự trong chuỗi
Duyệt từng ký tự trong chuỗi:
9
Trang 10- Nếu ký tự khác x, gán ký tự đó vào vị trí của ký tự xóa.
- Kết thúc chuỗi bằng ký tự NULL để đảm bảo kết thúc chuỗi
Bước 5: Hiển thị kết quả
a In ra chuỗi s sau khi xóa ký tự x
3.2 Cài đặt chương trình
#include <iostream>
using namespace std;
// Định nghĩa hàm xóa ký tự
void xoaKyTu(char* str, char x) {
int len = strlen(str);
// Bước 5: Hiển thị kết quả
cout << "Chuoi sau khi xoa ky tu " << x << ": " << s << endl;
1
Trang 11Câu 7: ** Viết các hàm thực hiện:
o Nhập vào 1 mảng các số nguyên gồm n phần tử (0<=n<=50)
o In ra màn hình 1 mảng các số nguyên
o Đếm số phần tử lẻ trong mảng các số nguyên
o Cho biết giá trị nhỏ nhất của mảng số nguyên
o Tìm kiếm một phần tử x nào đó trong mảng các số nguyên
o Sắp xếp các phần tử của mảng các số nguyên theo thứ tự giảm dần Viết chương trình chính Áp dụng lần lượt các hàm trên
3.1 Sơ đồ thuật toán
Bước 1: Khai báo các hàm thực hiện yêu cầu
- void nhapMang(int arr[], int n);
- void inMang(int arr[], int n);
- int demSoLe(int arr[], int n);
- int giaTriNhoNhat(int arr[], int n);
- bool timKiem(int arr[], int n, int x);
- void sapXepGiamDan(int arr[], int n);
Bước 2: Khai báo biến chương trình
- Gọi hàm timKiem(arr, n, x) để tìm kiếm
- Gọi hàm sapXepGiamDan(arr, n) để sắp xếp mảng giảm dần
Bước 5: Kết thúc
3.2 Cài đặt chương trình
#include <iostream>
1
Trang 12using namespace std;
// Định nghĩa các hàm
void nhapMang(int arr[], int n) {
cout << "Nhap " << n << " phan tu: ";
for (int i = 0; i < n; i++) {
int giaTriNhoNhat(int arr[], int n) {
int minVal = arr[0];
for (int i = 1; i < n; i++) {
bool timKiem(int arr[], int n, int x) {
for (int i = 0; i < n; i++) {
Trang 13return false;
}
void sapXepGiamDan(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
cout << "So phan tu le trong mang: " << demSoLe(arr, n) << endl;
cout << "Gia tri nho nhat trong mang: " << giaTriNhoNhat(arr, n) << endl;
cout << "Nhap gia tri x can tim: ";
Trang 14Câu 8: ** Viết các hàm thực hiện công việc sau:
o Nhập ma trận số nguyên kích thước n*m
o Hiện ma trận vừa nhập ra màn hình
o Hiện ra hàng có số lượng phần tử âm nhiều nhất
o Kiểm tra một số chính phương
o Liệt kê vị trí (dạng (i,j)) của các phần tử là số chính phương trong ma trận
o Đếm số lượng phần tử có giá trị bằng phần tử tại vị trí (0,0) của ma trận Viết chương trình chính Áp dụng lần lượt các hàm trên
- Hiển thị hàng có số lượng phần tử âm nhiều nhất
- Hiển thị kết quả kiểm tra số chính phương
- Liệt kê vị trí các phần tử là số chính phương
- Số lượng phần tử có giá trị bằng phần tử tại vị trí (0,0) của ma trận
3 Process:
3.1 Sơ đồ thuật toán
Bước 1: Khai báo các hàm thực hiện yêu cầu
- void nhapMaTran(int mat[50][50], int n, int m);
- void inMaTran(int mat[50][50], int n, int m);
- void hienHangAmNhieuNhat(int mat[50][50], int n, int m);
- bool laSoChinhPhuong(int x);
- void lietKeViTriSoChinhPhuong(int mat[50][50], int n, int m);
- int demPhanTuGiaTriBangPhanTuGoc(int mat[50][50], int n, int m);Bước 2: Khai báo biến chương trình
- int n, m, mat[50][50];
Bước 3 : Nhập dữ liệu
- Nhập số hàng n từ bàn phím
1
Trang 15- Nhập số cột m từ bàn phím.
- Gọi hàm nhapMaTran(mat, n, m)
Bước 4: Gọi và hiển thị kết quả các hàm
a Gọi hàm inMaTran(mat, n, m) để hiển thị ma trận
b Gọi hàm hienHangAmNhieuNhat(mat, n, m) để hiển thị hàng có số lượngphần tử âm nhiều nhất
c Gọi hàm laSoChinhPhuong(x) để kiểm tra số chính phương
d Gọi hàm lietKeViTriSoChinhPhuong(mat, n, m) để liệt kê vị trí các phần tử là
void nhapMaTran(int mat[50][50], int n, int m) {
cout << "Nhap ma tran " << n << "x" << m << ":\n";
for (int i = 0; i < n; i++) {
void inMaTran(int mat[50][50], int n, int m) {
cout << "Ma tran " << n << "x" << m << ":\n";
for (int i = 0; i < n; i++) {
Trang 16void lietKeViTriSoChinhPhuong(int mat[50][50], int n, int m) {
cout << "Vi tri cac phan tu la so chinh phuong:\n";
for (int i = 0; i < n; i++) {
Trang 17for (int i = 0; i < n; i++) {
Trang 18Câu 9: ** viết các chương trình con thực hiện các công việc sau:
o nhập danh sách các sách gồm các thông tin: tên sách, tên tác giả, nhà xuất bản, năm xuất bản và lưu vào tệp sach.dat;
o hiện danh mục sách từ tệp sạch.dat với đầy đủ các thông tin;
o nhập tên sách từ bàn phím, tìm sách vừa nhập và in các thông tin chi tiết ra màn hình;
o thống kê số lượng sách của thập niên 80
o cho biết tên các quyển sách đã xuất bản cách đây 30 năm
Viết chương trình chính để gọi các chương trình con đã được viết theo trật tự như trên Nếu có thể tổ chức chương trình thông qua menu thì sẽ là một điểm cộng.
- Hiển thị thông tin chi tiết về sách cần tìm
- Thống kê số lượng sách của thập niên 80
- Hiển thị tên các quyển sách đã xuất bản cách đây 30 năm
3 Process:
3.1 Sơ đồ thuật toán
Bước 1: Khai báo các chương trình con
Bước 3: Hiển thị menu và chọn chức năng
a Hiển thị menu chức năng:
- 1 Nhap danh sach sach
- 2 Hien danh muc sach
- 3 Tim sach theo ten
- 4 Thong ke so luong sach thap nien 80
1
Trang 19- 5 Sach xuat ban cach day 30 nam
- 6 Thoat
b Nhập lựa chọn từ người dùng
Bước 4: Thực hiện chương trình con tương ứng với lựa chọn
a Nếu luaChon = 1, gọi nhapSach();
b Nếu luaChon = 2, gọi hienDanhMucSach();
c Nếu luaChon = 3, gọi timSachTheoTen();
d Nếu luaChon = 4, gọi thongKeSachThapNien80();
e Nếu luaChon = 5, gọi sachXuatBanCachDay30Nam();
f Nếu luaChon = 6, thoát khỏi chương trình
cout << "Nhap thong tin sach:\n";
cout << "Ten sach: ";
Trang 20cout << "Danh muc sach:\n";
for (size_t i = 0; i < danhSachSach.size(); i++) {
const Sach& sach = danhSachSach[i];
cout << "Ten sach: " << sach.tenSach << endl;
cout << "Ten tac gia: " << sach.tenTacGia << endl;
cout << "Nha xuat ban: " << sach.nhaXuatBan << endl;
cout << "Nam xuat ban: " << sach.namXuatBan << endl;
bool timThay = false;
for (size_t i = 0; i < danhSachSach.size(); i++) {
const Sach& sach = danhSachSach[i];
if (sach.tenSach == tenSach) {
cout << "Thong tin chi tiet cua sach:\n";
cout << "Ten sach: " << sach.tenSach << endl;
cout << "Ten tac gia: " << sach.tenTacGia << endl;
cout << "Nha xuat ban: " << sach.nhaXuatBan << endl;
cout << "Nam xuat ban: " << sach.namXuatBan << endl;
Trang 21}
}
void thongKeSachThapNien80() {
int count = 0;
for (size_t i = 0; i < danhSachSach.size(); i++) {
const Sach& sach = danhSachSach[i];
if (sach.namXuatBan >= 1980 && sach.namXuatBan <= 1989) {
cout << "Cac sach xuat ban cach day 30 nam:\n";
for (size_t i = 0; i < danhSachSach.size(); i++) {
const Sach& sach = danhSachSach[i];
size_t pos2 = line.find(",", pos1);
sach.tenSach = line.substr(pos1, pos2 - pos1);
pos1 = pos2 + 1;
pos2 = line.find(",", pos1);
sach.tenTacGia = line.substr(pos1, pos2 - pos1);
pos1 = pos2 + 1;
pos2 = line.find(",", pos1);
sach.nhaXuatBan = line.substr(pos1, pos2 - pos1);