Sau đó, viếtchương trình nhập một xâu s, kí tự x và y từ bàn phím, gọi hàm trên và cho biết kết quả.- Khai báo hàm thayKiTu:Bước 1: Nhận vào một chuỗi s truyền theo tham chiếu và hai ký
Trang 1Câ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ácchữ số là 3+5 = 8
Bài làm
1.Input: Một số nguyên dương n
2.Output: Số chữ số trong n và tổng của các chữ số trong n
3.Process:
+ Nhập dữ liệu: Nhập số nguyên dương n
+ Đếm chữ số và tính tổng:
o Khởi tạo biến count để đếm số chữ số và biến sum để tính tổng
o Lặp qua từng chữ số trong số n cho đến khi n trở thành 0
o Lấy chữ số cuối cùng của n bằng cách lấy phần dư n % 10
o Cộng chữ số này vào tổng sum
o Tăng biến count lên 1
Trang 2Câu 2 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ố đó
Trang 3Bước 3 : Tính tổng, tích, hiệu và thương của a và b
- Tính tổng a + b và gán vào tong
- Tính tích a * b và gán vào tich
- Tính hiệu a - b và gán vào hieu
- Tính thương float(a) / b và gán vào thuong
Bước 4 : In ra tổng, tích, hiệu và thương của a và b
}
5 Test
Trang 4Câu 3 Viết chương trình in ra trung bình cộng, trung bình nhân của 3
Bước 3 : Tính trung bình cộng và trung bình nhân của a, b, c
- Tính trung bình cộng bằng cách chia tổng ( a + b + c ) cho 3
- Tính trung bình nhân 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
Trang 5tbn = pow (float(a * b * c), 1.0 / 3);
cout << "Trung binh cong cua ba so la: " << tbc << endl;
cout << "Trung binh nhan cua ba so la: " << tbn << endl;
1 Input: Số nguyên dương n (số hạng cần in)
2 Output: Dãy Fibonacci gồm n số hạng đầu tiên in ra màn hình
3 Process:
- Bước 1: Khai báo biến:
+ n: Số hạng cần in
+ f0, f1, fn: Các biến lưu giá trị các số hạng của dãy Fibonacci
- Bước 2: Nhập giá trị của n từ người dùng
- Bước 3: Kiểm tra nếu n <= 0 thì thông báo lỗi và kết thúc chương trình
- Bước 4: Gán giá trị ban đầu cho f0 và f1 là 1 (do F0 và F1 của dãy Fibonacci là 1)
- Bước 5: In ra màn hình giá trị đầu tiên (f0)
- Bước 6: Sử dụng vòng lặp để tính toán và in ra n - 1 số hạng tiếp theocủa dãy Fibonacci:
Trang 6// In giá trị đầu tiên
cout<< "Day Fibonacci gom " << n << " so hang dau tien la: "<< f0
<< " ";
// Tính toán và in ra n - 1 số hạng tiếp theo
for (int i = 2; i <= n; ++i) {
Trang 7Câu 5 Viết hàm đảo ngược chuỗi Viết chương trình nhập vào một
chuỗi bất kỳ, gọi hàm trên và in kết quả ra màn hình
Bài làm
1 Input: Chuỗi cần được đảo ngược
2 Output: Chuỗi sau khi đảo ngược
3 Process:
Bước 1: Khai báo biến:
str: Chuỗi đầu vào
Bước 2: Nhập chuỗi từ người dùng hoặc từ các nguồn khác
Bước 3: Sử dụng hai con trỏ, một ở đầu chuỗi (start) và một ở cuối chuỗi (end)
Bước 4: Di chuyển con trỏ start về phía cuối chuỗi và con trỏ end về phía đầu chuỗi cho đến khi chúng gặp nhau hoặc vượt qua nhau.Bước 5: Trong quá trình di chuyển, đổi chỗ giá trị tại vị trí start và end.Bước 6: Lặp lại bước 4 và 5 cho đến khi con trỏ start và end gặp nhau hoặc vượt qua nhau
Bước 7: Chuỗi đã đảo ngược sẽ được lưu trong biến str
Trang 8// Đảo ngược chuỗi
while (start < end) {
// Đổi chỗ giá trị tại vị trí start và end
char temp = *start;
// In chuỗi đã đảo ngược
cout << "Chuoi sau khi dao nguoc: " << chuoi << endl; return 0;
}
5 Test
Trang 9Câu 6 Viết hàm thay kí tự x trong xâu s bởi kí tự y Sau đó, viết
chương trình nhập một xâu s, kí tự x và y từ bàn phím, gọi hàm trên vàcho biết kết quả
- Khai báo hàm thayKiTu:
Bước 1: Nhận vào một chuỗi s (truyền theo tham chiếu) và hai ký tự x
và y
Bước 2: Dùng vòng lặp để duyệt qua từng ký tự trong chuỗi s
Bước 3: Nếu ký tự tại vị trí i bằng x, thì thay thế nó bằng y
void thayKiTu(std::string &s, char x, char y) {
for (size_t i = 0; i < s.length(); ++i) {
Trang 10o Cho biết giá trị nhỏ nhất của mảng số thực
o Sắp xếp các phần tử của mảng các số thực theo thứ tự giảm dầnViết chương trình chính Áp dụng lần lượt các hàm trên
Trang 11const int MAX_SIZE = 50;
// Ham nhap mang so thuc
void nhapMang(float arr[], int &n) {
do {
std::cout << "Nhap so luong phan tu (0 <= n <= 50): ";
std::cin >> n;
} while (n < 0 || n > MAX_SIZE);
std::cout << "Nhap cac phan tu cua mang:\n";
for (int i = 0; i < n; ++i) {
std::cout << "arr[" << i << "]: ";
std::cin >> arr[i];
}
}
Trang 12// Ham in ra mang so tuc
void inMangSoThuc(const float arr[], int n) { std::cout << "Mang cac so thuc: ";
for (int i = 0; i < n; ++i) {
for (int i = 0; i < n; ++i) {
tong += arr[i];
}
return tong;
}
// Ham dem so am co trong mang
int demSoAm(const float arr[], int n) { int dem = 0;
for (int i = 0; i < n; ++i) {
// Ham tim gia tri nho nhat
float timgiatrinhonhat(const float arr[], int n) { float giatrinhonhat = arr[0];
for (int i = 1; i < n; ++i) {
Trang 13// Ham sap xep mang giam dan
void sapxepgiamdan(float arr[], int n) {
std::sort(arr, arr + n, std::greater<float>());
// Tinh tong cac phan tu trongmang
std::cout << "Tong cac phan tu trong mang: " << tinhtong(arr, n)
<< std::endl;
// Dem so phan tu am trong mang
std::cout << "So phan tu am trong mang: " << demSoAm(arr, n)
<< std::endl;
// Tim gia tri nho nhat
std::cout << "Gia tri nho nhat trong mang: " <<
timgiatrinhonhat(arr, n) << std::endl;
// Sap xep mang giam dan
sapxepgiamdan(arr, n);
// In ra mang sau khi sap xep
std::cout << "Mang sau khi sap xep giam dan: ";
inMangSoThuc(arr, n);
return 0;
}
5.Test
Trang 14Câu 8 Viết các hàm thực hiện công việc sau:
• 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 matrậ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 matrận
Viết chương trình chính Áp dụng lần lượt các hàm trên
+ Hàng có số lượng phần tử âm nhiều nhất
+ Kiểm tra số chính phương
+ Các vị trí của các số chính phương trong ma trận
+ Số lượng phần tử bằng giá trị của phần tử đầu tiên
3 Process:
Trang 15// Ham nhap ma tran
void nhapMaTran(int**& matran, int& n, int& m) {
std::cout << "Nhap kich thuoc ma tran (n m): ";
std::cin >> n >> m;
// Cap phat bo nho cho ma tran
matran = new int*[n];
for (int i = 0; i < n; ++i) {
matran[i] = new int[m];
}
std::cout << "Nhap cac phan tu cua ma tran:\n";
for (int i = 0; i < n; ++i) {
Trang 16// Ham hien thi ma tran
void hienThiMaTran(int** matran, int n, int m) {
std::cout << "Ma tran vua nhap:\n";
for (int i = 0; i < n; ++i) {
// Ham hien thi hang co so phan tu am nhieu nhat
void hienThiHangNhieuAmNhat(int** matran, int n, int m) {
// Ham kiem tra so chinh phuong
bool laSoChinhPhuong(int num) {
int canBacHai = static_cast<int>(std::sqrt(num));
return canBacHai * canBacHai == num;
}
Trang 17// Ham liet ke vi tri cua cac so chinh phuong trong ma tran
void lietKeViTriSoChinhPhuong(int** matran, int n, int m) {
std::cout << "Cac phan tu la so chinh phuong tai cac vi tri (i, j):\n"; for (int i = 0; i < n; ++i) {
// Ham dem so luong phan tu bang pahn tu tai vi tri (0,0)
int demSoLuongBangGiaTriDauTien(int** matran, int n, int m) { int giaTriDauTien = matran[0][0];
int dem = demSoLuongBangGiaTriDauTien(matran, n, m);
std::cout << "So luong phan tu bang gia tri tai vi tri (0, 0): " << dem
<< std::endl;
Trang 18return 0;
}
5 Test
Câ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 liên tiếp 1 dãy số nguyên vào tệp "mang in" (dưới dạng nhịphân) cho đến khi gặp số 0 thì dừng
o đọc nội dung tệp tin "mang in", lưu vào một mảng số nguyên và hiện
+ Nếu số nhập vào là 0, thoát khỏi vòng lặp
+ Ghi số nguyên vào tệp "mang_in.dat"
Trang 19+ Di chuyển các số chia hết cho 3 lên đầu mảng.
+ Sử dụng thuật toán hai con trỏ để đảm bảo rằng số chẵn sẽ đứng trước
+ Hiển thị mảng sau khi sắp xếp
+ Ghi vị trí 2 phần tử lớn nhất và nhỏ nhất vào tệp "vitri_out.dat"
+ Đóng tệp "mang_in.dat" và "vitri_out.dat"
4 Code
#include <iostream>
#include <fstream>
// Hàm nhập dãy số nguyên vào tệp "mang in"
void nhapMang(std::ofstream& outFile) {
// Đọc nội dung tệp "mang in"
while (inFile.read(reinterpret_cast<char*>(&so), sizeof(int))) {
mang[dem++] = so;
}
Trang 20// Sắp xếp mảng theo yêu cầu
for (int i = soChiaHetCho3, j = dem - 1; i < j; ) {
while (i < j && mang[i] % 2 == 0) {
// Hiển thị mảng sau khi sắp xếp
std::cout << "Mang sau khi sap xep:\n";
for (int i = 0; i < dem; ++i) {
}
Trang 21int main() {
std::ofstream outFile("mang_in.dat", std::ios::binary);
std::ifstream inFile("mang_in.dat", std::ios::binary);
std::ofstream outFileVitri("vitri_out.dat", std::ios::binary);
if (!outFile.is_open() || !inFile.is_open() || !outFileVitri.is_open()) {
std::cerr << "Khong mo duoc tep tin.\n";
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 đội bóng gồm tên đội bóng, tên huấn luyện viêntrưởng, tên đội trưởng, số lượng cầu thủ, số bàn thắng được ghi, sốtrận đấu đã tham gia việc nhập sẽ dừng lại nếu tên đội bóng đượcnhập ký tự ***
o hiển thị thông tin các đội bóng vừa nhập ra màn hình với đây đủ cácthông tin
o tính tổng số bàn thắng đã ghi được
o hiện danh sách đội bóng có tỷ lệ giữa tổng số bàn thắng ghi được(gọi chương trình con tính tổng đã viết ở trên) và số trận đấu đã thamgia là ≥ 1.5 ra màn hình (với đầy đủ các thông tin) và lưu các đội bóngnày vào tệp doibong.dat (dưới dạng tệp nhị phân)
o sắp xếp danh sách các đội bóng theo thứ tự tăng dần của số lượngcầu thủ
Trang 22Viết chương trình chính để gọi các chương trình con trên theo trật tựđược viết như trên Nếu có thể tô chức chương trình thông qua menuthì sẽ là một điểm cộng.
- In ra màn hình các thông tin sau khi thực hiện các bước xử lý:
+ Thông tin của từng đội bóng
Trang 23int soCauThu;
int soBanThang;
int soTranDau;
};
// Ham tinh tong so ban thang
int tinhTongBanThang(const DoiBong danhSach[], int soDoi) {
// Ham hien thi thong tin doi bong
void hienThiThongTin(const DoiBong danhSach[], int soDoi) {
for (int i = 0; i < soDoi; ++i) {
std::cout << "Ten doi: " << danhSach[i].tenDoi << std::endl; std::cout << "Huan luyen vien: " << danhSach[i].huanLuyenVien
}
// Ham hien thi va luu cac doi co ti le >= 1.5 vao tep nhi phan
void hienThiVaLuu(const DoiBong danhSach[], int soDoi, const char* tenTep) {
std::ofstream outFile(tenTep, std::ios::binary);
for (int i = 0; i < soDoi; ++i) {
if (danhSach[i].soTranDau >= 1 &&
(double)danhSach[i].soBanThang / danhSach[i].soTranDau >= 1.5) { std::cout << "Ten doi: " << danhSach[i].tenDoi << std::endl;
Trang 24std::cout << "Huan luyen vien: " <<
outFile.write(reinterpret_cast<const char*>(&danhSach[i]), sizeof(DoiBong));
}
}
outFile.close();
}
// Ham so sanh doi bong dua tren so luong cau thu
bool soSanhDoiBong(const DoiBong& doi1, const DoiBong& doi2) { return doi1.soCauThu < doi2.soCauThu;
// Nhap thong tin doi bong
while (soDoi < soDoiToiDa) {
std::cout << "Nhap thong tin doi bong (Nhap *** de ket thuc):"
<< std::endl;
std::cout << "Ten doi: ";
std::cin.getline(danhSachDoi[soDoi].tenDoi,
sizeof(danhSachDoi[soDoi].tenDoi));
Trang 25// Kiem tra dieu kien dung
if (strcmp(danhSachDoi[soDoi].tenDoi, "***") == 0) { break;
}
std::cout << "Huan luyen vien: ";
std::cin.getline(danhSachDoi[soDoi].huanLuyenVien, sizeof(danhSachDoi[soDoi].huanLuyenVien));
std::cout << "Doi truong: ";
// Hien thi thong tin doi bong
std::cout << "\nThong tin doi bong:\n";
hienThiThongTin(danhSachDoi, soDoi);
// Tinh tong so ban thang
tongBanThang = tinhTongBanThang(danhSachDoi, soDoi); std::cout << "\nTong so ban thang: " << tongBanThang << std::endl;
// Ham hien thi va luu cac doi co ti le >= 1.5 vao tep nhi phan hienThiVaLuu(danhSachDoi, soDoi, "doibong.dat");
// Sap xep danh sach doi bong theo so luong cau thu
for (int i = 0; i < soDoi - 1; ++i) {
Trang 26for (int j = i + 1; j < soDoi; ++j) {
if (soSanhDoiBong(danhSachDoi[j], danhSachDoi[i])) { std::swap(danhSachDoi[i], danhSachDoi[j]);
}
}
}
// Hien thi thongtin doi bong sau khi sap xep
std::cout << "\nThong tin doi bong (Sap xep theo so cau thu tang dan):\n";
hienThiThongTin(danhSachDoi, soDoi);
return 0;
}
5.Test