TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI BÀI TẬP MÔN KỸ THUẬT LẬP TRÌNH CƠ SƠ TRUNG TÂM ĐÀO TẠO ELEARNING YÊU CẦU: Nhập vào từ bàn phím dãy số gồm n số nguyên (n>0) và thực hiện các yêu cầu sau đây a. Hiển thị dãy số ra màn hình b. Nhập vào từ bàn phím số nguyên x. Hãy cho biết x xuất hiện trong dãy số bao nhiêu lần và các vị trí xuất hiện của x c. Xoá các số có giá trị bằng 0 có trong dãy Sắp xếp các số nguyên tố về đầu dãy, các số không phải là số nguyên tố về cuối dãy d. Tính trung bình cộng các số chia hết cho 3 có trong dãy BÀI LÀM
Trang 1TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI BÀI TẬP MÔN KỸ THUẬT LẬP TRÌNH CƠ SƠ TRUNG TÂM ĐÀO TẠO ELEARNING
YÊU CẦU: Nhập vào từ bàn phím dãy số gồm n số nguyên
(n>0) và thực hiện các yêu cầu sau đâya Hiển thị dãy số ra màn hìnhb Nhập vào từ bàn phím số nguyên x Hãy cho biết x xuất hiện trong dãy số bao
nhiêu lần và các vị trí xuất hiện của xc Xoá các số có giá trị bằng 0 có trong dãySắp xếp các số nguyên tố về đầu dãy, các số không phảilà số nguyên tố về cuối dãy
d Tính trung bình cộng các số chia hết cho 3 có trong dãyBÀI LÀM
Code phần a #include <iostream>#include <vector> // Sử dụng thư viện vector để dễ quản lý dãy sốusing namespace std;
int main() { int n; // Nhập số lượng phần tử n do {
cout << "Nhap so luong phan tu n (n > 0): "; cin >> n;
Trang 2} while (n <= 0); // Đảm bảo n > 0 vector<int> array(n); // Khai báo dãy số với n phần tử // Nhập dãy số từ bàn phím
for (int i = 0; i < n; i++) { cout << "Nhap so thu " << i + 1 << ": "; cin >> array[i];
} // a Hiển thị dãy số ra màn hình cout << "Day so vua nhap: "; for (int i = 0; i < n; i++) { cout << array[i] << " "; }
cout << endl; return 0;}
Code phần a và b#include <iostream>
Trang 3#include <vector> // Sử dụng thư viện vector để dễ quản lý dãy sốusing namespace std;
int main() { int n; // Nhập số lượng phần tử n do {
cout << "Nhap so luong phan tu n (n > 0): "; cin >> n;
} while (n <= 0); // Đảm bảo n > 0 vector<int> array(n); // Khai báo dãy số với n phần tử // Nhập dãy số từ bàn phím
for (int i = 0; i < n; i++) { cout << "Nhap so thu " << i + 1 << ": "; cin >> array[i];
} // a Hiển thị dãy số ra màn hình cout << "Day so vua nhap: ";
Trang 4for (int i = 0; i < n; i++) { cout << array[i] << " "; }
cout << endl; // b Nhập số nguyên x và tìm số lần xuất hiện, vị trí của x int x;
cout << "Nhap so nguyen x can tim: "; cin >> x;
int count = 0; // Đếm số lần xuất hiện của x vector<int> viTri; // Lưu trữ các vị trí xuất hiện của x for (int i = 0; i < n; i++) {
if (array[i] == x) { count++; // Tăng số lần xuất hiện viTri.push_back(i); // Lưu vị trí xuất hiện }
} // Hiển thị kết quả tìm kiếm
Trang 5if (count > 0) { cout << "So " << x << " xuat hien " << count << " lan o cac vi tri: "; for (int i = 0; i < viTri.size(); i++) {
cout << viTri[i] << " "; }
cout << endl; } else {
cout << "So " << x << " khong xuat hien trong day so." << endl; }
return 0;}
*** Code phần a,b,c#include <iostream>#include <vector>#include <algorithm> // Sử dụng cho hàm removeusing namespace std;
// Hàm kiểm tra số nguyên tố
Trang 6bool KiemTraNguyenTo(int n) { if (n < 2) {
return false; }
for (int i = 2; i <= n / 2; i++) { if (n % i == 0) {
return false; }
} return true;}
int main() { int n; // Nhập số lượng phần tử n do {
cout << "Nhap so luong phan tu n (n > 0): "; cin >> n;
Trang 7} while (n <= 0); // Đảm bảo n > 0 vector<int> array(n); // Khai báo dãy số với n phần tử // Nhập dãy số từ bàn phím
for (int i = 0; i < n; i++) { cout << "Nhap so thu " << i + 1 << ": "; cin >> array[i];
} // a Hiển thị dãy số ra màn hình cout << "Day so vua nhap: "; for (int i = 0; i < n; i++) { cout << array[i] << " "; }
cout << endl; // b Nhập số nguyên x và tìm số lần xuất hiện, vị trí của x int x;
cout << "Nhap so nguyen x can tim: "; cin >> x;
Trang 8int count = 0; // Đếm số lần xuất hiện của x vector<int> viTri; // Lưu trữ các vị trí xuất hiện của x for (int i = 0; i < n; i++) {
if (array[i] == x) { count++; // Tăng số lần xuất hiện viTri.push_back(i); // Lưu vị trí xuất hiện }
} // Hiển thị kết quả tìm kiếm if (count > 0) {
cout << "So " << x << " xuat hien " << count << " lan o cac vi tri: "; for (int i = 0; i < viTri.size(); i++) {
cout << viTri[i] << " "; }
cout << endl; } else {
cout << "So " << x << " khong xuat hien trong day so." << endl;
Trang 9} // c Xóa các số có giá trị bằng 0 array.erase(remove(array.begin(), array.end(), 0), array.end()); // Sắp xếp số nguyên tố lên đầu, các số không phải nguyên tố về cuối vector<int> MangNguyenTo;
vector<int> MangKhongNguyenTo; for (int i = 0; i < array.size(); i++) { if (KiemTraNguyenTo(array[i])) { MangNguyenTo.push_back(array[i]); // Lưu số nguyên tố } else {
MangKhongNguyenTo.push_back(array[i]); // Lưu số không phải nguyên tố
} } // Ghép 2 mảng lại: số nguyên tố lên đầu, số không phải nguyên tố về cuối array.clear();
array.insert(array.end(), MangNguyenTo.begin(), MangNguyenTo.end());
Trang 10array.insert(array.end(), MangKhongNguyenTo.begin(), MangKhongNguyenTo.end());
// Hiển thị dãy số sau khi sắp xếp cout << "Day so sau khi sap xep so nguyen to ve dau va cac so khac ve cuoi: "; for (int i = 0; i < array.size(); i++) {
cout << array[i] << " "; }
cout << endl; return 0;}
***Code phần a,b,c,d#include <iostream>#include <vector>#include <algorithm> // Sử dụng cho hàm removeusing namespace std;
// Hàm kiểm tra số nguyên tốbool KiemTraNguyenTo(int n) { if (n < 2) {
Trang 11return false; }
for (int i = 2; i <= n / 2; i++) { if (n % i == 0) {
return false; }
} return true;}
int main() { int n; // Nhập số lượng phần tử n do {
cout << "Nhap so luong phan tu n (n > 0): "; cin >> n;
} while (n <= 0); // Đảm bảo n > 0 vector<int> array(n); // Khai báo dãy số với n phần tử
Trang 12// Nhập dãy số từ bàn phím for (int i = 0; i < n; i++) { cout << "Nhap so thu " << i + 1 << ": "; cin >> array[i];
} // a Hiển thị dãy số ra màn hình cout << "Day so vua nhap: "; for (int i = 0; i < n; i++) { cout << array[i] << " "; }
cout << endl; // b Nhập số nguyên x và tìm số lần xuất hiện, vị trí của x int x;
cout << "Nhap so nguyen x can tim: "; cin >> x;
int count = 0; // Đếm số lần xuất hiện của x vector<int> viTri; // Lưu trữ các vị trí xuất hiện của x
Trang 13for (int i = 0; i < n; i++) { if (array[i] == x) { count++; // Tăng số lần xuất hiện viTri.push_back(i); // Lưu vị trí xuất hiện }
} // Hiển thị kết quả tìm kiếm if (count > 0) {
cout << "So " << x << " xuat hien " << count << " lan o cac vi tri: "; for (int i = 0; i < viTri.size(); i++) {
cout << viTri[i] << " "; }
cout << endl; } else {
cout << "So " << x << " khong xuat hien trong day so." << endl; }
// c Xóa các số có giá trị bằng 0
Trang 14array.erase(remove(array.begin(), array.end(), 0), array.end()); // Sắp xếp số nguyên tố lên đầu, các số không phải nguyên tố về cuối vector<int> MangNguyenTo;
vector<int> MangKhongNguyenTo; for (int i = 0; i < array.size(); i++) { if (KiemTraNguyenTo(array[i])) { MangNguyenTo.push_back(array[i]); // Lưu số nguyên tố } else {
MangKhongNguyenTo.push_back(array[i]); // Lưu số không phải nguyên tố
} } // Ghép 2 mảng lại: số nguyên tố lên đầu, số không phải nguyên tố về cuối array.clear();
array.insert(array.end(), MangNguyenTo.begin(), MangNguyenTo.end()); array.insert(array.end(), MangKhongNguyenTo.begin(),
MangKhongNguyenTo.end());
Trang 15// Hiển thị dãy số sau khi sắp xếp cout << "Day so sau khi sap xep so nguyen to ve dau va cac so khac ve cuoi: "; for (int i = 0; i < array.size(); i++) {
cout << array[i] << " "; }
cout << endl; // d Tính trung bình cộng các số chia hết cho 3 int tong = 0;
int dem = 0; for (int i = 0; i < array.size(); i++) { if (array[i] % 3 == 0) {
tong += array[i]; // Cộng dồn các số chia hết cho 3 dem++; // Đếm số lượng các số chia hết cho 3 }
} if (dem > 0) { float tbc = (float)tong / dem;
Trang 16cout << "Trung binh cong cac so chia het cho 3 la: " << tbc << endl; } else {
cout << "Khong co so nao chia het cho 3 trong day so." << endl; }
return 0;}
*** Giải thích các bước
Phần a
Giải thích:Nhập số lượng phần tử: Người dùng được yêu cầu nhập số nguyên n lớn hơn 0 Nếu n <= 0, chương trình sẽ yêu cầu nhập lại
Khai báo mảng: vector<int> array(n) được dùng để lưu trữ dãy số với kích thước n.Nhập giá trị cho mảng: Dãy số được nhập từ bàn phím thông qua vòng lặp
Hiển thị dãy số: Sử dụng vòng lặp để in từng phần tử của dãy số ra màn hình
Phần b
Giải thích phần b:Nhập số nguyên x: Người dùng nhập số nguyên x cần tìm.Tìm số lần xuất hiện của x: Sử dụng vòng lặp để duyệt qua dãy số, nếu số x xuất hiện trong mảng, biến count sẽ tăng lên
Lưu trữ các vị trí của x: Vị trí xuất hiện của x được lưu trong vector viTri
Trang 17Hiển thị kết quả:Nếu x xuất hiện ít nhất một lần, chương trình sẽ hiển thị số lần xuất hiện và các vị trí.
Nếu không tìm thấy, chương trình sẽ thông báo rằng x không xuất hiện trong dãy số
Phần c
Giải thích phần c:Sử dụng hàm remove: Hàm remove từ thư viện <algorithm> sẽ di chuyển các phần tử không bằng 0 lên đầu mảng và trả về một con trỏ tới vị trí mới của phần tử cuối cùng
Sử dụng erase: Kết hợp với erase để loại bỏ tất cả các phần tử 0 khỏi vector array.Hiển thị dãy sau khi xóa: Sau khi xóa các số 0, dãy số được hiển thị lại
Giải thích phần sắp xếp số nguyên tố:Hàm KiemTraNguyenTo: Hàm này kiểm tra xem một số có phải là số nguyên tố không Nếu là nguyên tố, hàm trả về true, nếu không thì trả về false
Sắp xếp các số nguyên tố và không phải nguyên tố:MangNguyenTo: Lưu trữ tất cả các số nguyên tố trong dãy.MangKhongNguyenTo: Lưu trữ các số không phải là số nguyên tố.Sau đó, chúng ta ghép 2 mảng lại với nhau, với số nguyên tố được đưa lên đầu dãy và các số không phải nguyên tố ở cuối
Giải thích phần d
Trang 18Giải thích phần d:Tính tổng và đếm các số chia hết cho 3:Sử dụng vòng lặp để duyệt qua dãy số Nếu một số chia hết cho 3, chúng ta cộng sốđó vào biến tong và tăng biến dem để đếm số lượng các số chia hết cho 3.
Tính trung bình cộng:Nếu có số chia hết cho 3 (dem > 0), tính trung bình cộng bằng cách lấy tong chia cho dem
Nếu không có số nào chia hết cho 3, thông báo rằng không có số nào chia hết cho 3trong dãy
Kết quả:Chương trình sẽ nhập dãy số, hiển thị dãy, tìm số nguyên x, xóa các số 0, sắp xếp số nguyên tố về đầu và tính trung bình cộng các số chia hết cho 3