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

}

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

Trang 11

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

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

+ 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 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ê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 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 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 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: " <<

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 26

for (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

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