1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

26 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề 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 dạng
Số trang 26
Dung lượng 1,02 MB

Nội dung

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 1

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

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 2

Câ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 3

Bướ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.

cout << "Tong cua a va b la: " << tong << endl; cout << "Tich cua a va b la: " << tich << endl; cout << "Hieu cua a va b la: " << hieu << endl; cout << "Thuong cua a va b la: " << thuong << endl; return 0;

} 5 Test

Trang 4

Câ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 5

tbn = 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 theo của dãy Fibonacci:

Trang 6

cout << "So hang can in phai la mot so nguyen duong." << endl; return 1; // Kết thúc chương trình với mã lỗi

}

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

Câ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 9

Câ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 10

o 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ần Viết chương trình chính Áp dụng lần lượt các hàm trên

Trang 11

a Hàm nhapMang:Thực hiện vòng lặp do-while để đảm bảo rằng người dùng nhập giá trị hợp lệ cho số lượng phần tử n (n >= 0 và n <= 50) Sử dụng vòng lặp for để nhập giá trị cho từng phần tử của mảng từ const 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) {

std::cout << arr[i] << " "; }

std::cout << std::endl; }

// Ham tinh tong cac phan tu co trong mang float tinhtong(const float arr[], int n) {

// Ham dem so am co trong mang int demSoAm(const float arr[], int n) {

// 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 14

Câ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 ma

+ 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

a Hàm nhapMaTran:

Yêu cầu người dùng nhập số hàng (n) và số cột (m) của ma trận Cấp phát bộ nhớ động cho ma trận với kích thước đã nhập Cho phép người dùng nhập giá trị cho từng phần tử của ma trận // 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 18

return 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 ra màn hình

o sắp xếp lại mảng theo yêu cầu, các số chia hết cho 3 lên đầu dãy, các số chẵn đứng sau và đoạn cuối cùng gồm các số còn lại

o ghi vào tệp "vitri out" (dưới dạng tệp nhị phân) vị trí 2 phần tử lớn nhất và nhỏ nhất đầu tiên tìm được trong mảng

Viế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 menu thì sẽ là một điểm cộng.

Bài làm

1 Input: Không có đầu vào từ người dùng Chương trình sẽ nhập dãy số nguyên từ bàn phím và ghi vào tệp "mang_in.dat" + 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) {

// Hàm đọc và sắp xếp mảng theo yêu cầu, và ghi vị trí 2 phần tử lớn nhất và nhỏ nhất void sapXepVaGhiViTri(std::ifstream& inFile, std::ofstream& outFile) {

int so; int mang[100]; int dem = 0;

// Đọ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) {

std::cout << mang[i] << " "; }

std::cout << "\n";

// Ghi vị trí 2 phần tử lớn nhất và nhỏ nhất vào tệp "vitri_out.dat" int max1So = 0, max2So = 1, min1So = dem - 1, min2So = dem - 2; outFile.write(reinterpret_cast<const char*>(&max1So), sizeof(int)); outFile.write(reinterpret_cast<const char*>(&max2So), sizeof(int)); outFile.write(reinterpret_cast<const char*>(&min1So), sizeof(int)); outFile.write(reinterpret_cast<const char*>(&min2So), sizeof(int)); outFile.close();

}

Trang 21

int 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ên trưở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 được nhậ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ác thô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 đã tham gia là ≥ 1.5 ra màn hình (với đầy đủ các thông tin) và lưu các đội bóng nà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ượng cầu thủ.

Trang 22

Viế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 menu thì sẽ là một điểm cộng.

Bài làm

1 Input: Người dùng nhập thông tin về các đội bóng, bao gồm tên đội, huấn luyện viên, đội trưởng, số cầu thủ, số bàn thắng, số trận đấu.

Người dùng có thể nhập thông tin của nhiều đội bóng Việc nhập kết thúc khi người dùng nhập ***.

2.Output :

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

+ Tổng số bàn thắng của tất cả các đội bóng.

+ Thông tin của các đội bóng có tỉ lệ bàn thắng/trận đấu >= 1.5 và ghi vào tệp nhị phân + Thông tin của các đội bóng sau khi được sắp xếp theo số lượng cầu thủ tăng dần.

Duyệt qua danh sách đội bóng và hiển thị thông tin của đội bóng có tỉ lệ như trên, đồng thời ghi vào tệp nhị phân.

Trang 23

int 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 24

std::cout << "Huan luyen vien: " <<

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

// 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) {

Ngày đăng: 08/04/2024, 12:52

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w