#include <iostream> using namespace std; #define MAX 100 // MẢNG 1 CHIỀU // 1. HÀM NHẬP SỐ PHẦN TỬ void NhapN(int &N) { do { cout << "Moi ban nhap so phan tu cua mang N = "; cin >> N; // 0 < N <= MAX // Điều kiện phải ngược lại if (N <= 0 || N > MAX) cout << "Nhap sai vui long nhap la 0 < N <= " << MAX << "\n"; } while (N <= 0 || N > MAX); } // 2. HÀM NHẬP MẢNG void NhapMang(int A[], int N) { for (int i = 0; i < N; i++) { cout << "A[" << i << "]= "; cin >> A[i]; } } // 3. HÀM XUẤT MẢNG void XuatMang(int A[], int N) { for (int i = 0; i < N; i++) { cout << A[i] << "\t"; } } void Swap_HoanVi(int &a, int &b) { int t = a; a = b; b = t; } //255 Sắp xếp mảng tăng dần void SapXep_Tang(int A[], int N) { for (int i = 0; i < N - 1; i++) { for (int j = i + 1; j < N; j++) { if (A[i] > A[j]) Swap_HoanVi(A[i], A[j]); } } } //256 sắp xếp mảng giảm dần void SapXep_Giam(int A[], int N) { for (int i = 0; i < N - 1; i++) { for (int j = i + 1; j < N; j++) { if (A[i] < A[j]) Swap_HoanVi(A[i], A[j]); } } } void SapXep_Tang_ChiTiet(int A[], int N) { for (int i = 0; i < N - 1; i++) { cout << "\n====================================================\n"; cout << "\nStep i " << i + 1 << "\n"; XuatMang(A, N); for (int j = i + 1; j < N; j++) { if (A[i] > A[j]) { Swap_HoanVi(A[i], A[j]); cout << "\nStep j " << j << " : "; XuatMang(A, N); } } cout << "\n====================================================\n"; } } int main() { int Na = 0; NhapN(Na); int A[MAX]; NhapMang(A, Na); cout << "MANG A BAN DAU\n"; XuatMang(A, Na); cout << "\n"; SapXep_Tang(A, Na); XuatMang(A, Na); cout << "\n"; SapXep_Giam(A, Na); XuatMang(A, Na); cout << "\n"; return 0; }
Lập trình máy tính (gọi tắt là lập trình; tiếng Anh: programming) là kỹ thuật cài đặt một hoặc nhiều thuật toán trừu tượng có liên quan với nhau bằng một hoặc nhiều ngôn ngữ lập trình để tạo ra một chương trình máy tính. Lập trình có các thành tố nghệ thuật, khoa học, toán học, và kỹ nghệ. Lập trình nhiều thì bạn sẽ thấy niềm vui và sự hứng thú torng đó. CNTT lập trình tuyệt vời.
Thứ Sáu, 23 tháng 12, 2016
Bài tập 255-256: Sắp xếp mảng tăng dần | sắp xếp mảng giảm dần
Bài tập 252-253-254 : Hãy viết hàm ktra mảng có sóng hay ko?
#include <iostream> using namespace std; #define MAX 100 // MẢNG 1 CHIỀU // 1. HÀM NHẬP SỐ PHẦN TỬ void NhapN(int &N) { do { cout << "Moi ban nhap so phan tu cua mang N = "; cin >> N; // 0 < N <= MAX // Điều kiện phải ngược lại if (N <= 0 || N > MAX) cout << "Nhap sai vui long nhap la 0 < N <= " << MAX << "\n"; } while (N <= 0 || N > MAX); } // 2. HÀM NHẬP MẢNG void NhapMang(int A[], int N) { for (int i = 0; i < N; i++) { cout << "A[" << i << "]= "; cin >> A[i]; } } // 3. HÀM XUẤT MẢNG void XuatMang(int A[], int N) { for (int i = 0; i < N; i++) { cout << A[i] << "\t"; } } //Kĩ thuật đặt cờ hiệu // KIỂM TRA HOÀN TOÀN - chỉ cần 1 phần tử sai là ==> sai // KIỂM TRA TỒN TẠI - Chỉ cần 1 phần tử đúng là ==> đúng // flag = 0 ==> flag = 1 ==> flag // //252 Ta định nghĩa 1 mảng đc gọi là dạng sóng, //khi ptử có trị số I lớn hơn hoặc nhỏ hơn 2 ptử xung quanh. //Hãy viết hàm ktra mảng có sóng hay ko ? // KIỂM TRA HOÀN TOÀN - chỉ cần 1 phần tử sai là ==> sai int KiemTra_DangSong(int A[], int N) { int flag = 1; // Thỏa mản dạng sóng for (int i = 1; i < N - 1; i++) { if ((A[i - 1] > A[i] && A[i] > A[i + 1]) || (A[i - 1] < A[i] && A[i] < A[i + 1])) { flag = 0; // ko thỏa dạng sóng break; } } return flag; } //253 Hãy cho biết tất cả ptử trong mảng a có nằm trong mảng b ko ? // VD : // A : 1 3 5 // B : 4 5 1 3 2 int KT_MangA_In_MangB(int A[], int B[], int Na, int Nb) { int flag = 0; // Chưa có thỏa int dem = 0; for (int i = 0; i < Na; i++) { for (int j = 0; j < Nb; j++) { if (A[i] == B[j]) dem++; } } if (dem == Na) flag = 1; //Thỏa mản return flag; } //254 hãy đếm giá trị trong mảng thỏa : lớn hơn tất cả các giá trị đứng đằng trước nó // VD : 1 4 6 1 3 5 10 int Dem_GiaTri_Max_Truoc_Do(int A[], int N) { int dem = 0; for (int i = 1; i < N; i++) { int flag = 1; for (int j = 0; j < i; j++) { if (A[i] <= A[j]) // điều điện sai { flag = 0; break; } } if (flag == 1) dem++; } return dem; } int main() { int Na = 0; NhapN(Na); int A[MAX]; NhapMang(A, Na); cout << "MANG A BAN DAU\n"; XuatMang(A, Na); cout << "\n"; int kq_252 = KiemTra_DangSong(A, Na); if (kq_252 == 1) cout << "Bai Tap 252 : la dang SONG"; else cout << "Bai Tap 252 : KO la dang SONG"; cout << "\n"; int kq_254 = Dem_GiaTri_Max_Truoc_Do(A, Na); cout << "Bai Tap 254 : Dem lon hon truoc do la " << kq_254; cout << "\n"; int Nb = 0; NhapN(Nb); int B[MAX]; NhapMang(B, Nb); cout << "MANG B BAN DAU\n"; XuatMang(B, Nb); cout << "\n"; int kq_253 = KT_MangA_In_MangB(A, B, Na, Nb); if (kq_253 == 1) cout << "Bai Tap 253 : Mang A trong Mang B"; else cout << "Bai Tap 252 : KO phai"; cout << "\n"; return 0; }
Bài tập 248-249-250-251:Ktra mảng có tăng dần hay ko?
#include <iostream> using namespace std; #define MAX 100 // MẢNG 1 CHIỀU // 1. HÀM NHẬP SỐ PHẦN TỬ void NhapN(int &N) { do { cout << "Moi ban nhap so phan tu cua mang N = "; cin >> N; // 0 < N <= MAX // Điều kiện phải ngược lại if (N <= 0 || N > MAX) cout << "Nhap sai vui long nhap la 0 < N <= " << MAX << "\n"; } while (N <= 0 || N > MAX); } // 2. HÀM NHẬP MẢNG void NhapMang(int A[], int N) { for (int i = 0; i < N; i++) { cout << "A[" << i << "]= "; cin >> A[i]; } } // 3. HÀM XUẤT MẢNG void XuatMang(int A[], int N) { for (int i = 0; i < N; i++) { cout << A[i] << "\t"; } } //Kĩ thuật đặt cờ hiệu // KIỂM TRA HOÀN TOÀN - chỉ cần 1 phần tử sai là ==> sai // KIỂM TRA TỒN TẠI - Chỉ cần 1 phần tử đúng là ==> đúng // flag = 0 ==> flag = 1 ==> flag //248 Ktra mảng có tăng dần hay ko ? // flag = 1 ==> flag = 0 ==> flag int KiemTra_Tang(int A[], int N) { int flag = 1; // Hoàn toàn tăng for (int i = 0; i < N - 1; i++) { if (A[i] > A[i + 1]) // điều kiện sai { flag = 0; // ko phải tăng break; } } return flag; } //249 Ktra mảng có giảm dần hay ko ? // flag = 1 ==> flag = 0 ==> flag int KiemTra_Giam(int A[], int N) { int flag = 1;// Hoàn toàn giảm for (int i = 0; i < N - 1; i++) { if (A[i] < A[i + 1]) // điều kiện sai { flag = 0; // không phải giảm break; } } return flag; } //250 Hãy cho biết các ptử trong mảng có lập thành cấp số cộng ko ? Nếu có chỉ ra công sai d. // VD1 : 1 3 5 7 9 // VD2 : 2 4 6 8 10 // VD3 : 5 10 15 20 int KiemTra_CapSoCong(int A[], int N, int &d) { d = A[1] - A[0]; int flag = 1; // Luôn có cấp số cộng for (int i = 2; i < N - 1; i++) { if ((A[i] - A[i - 1]) != d) // điều kiện sai { flag = 0; // không tồn tại cấp số cộng break; } } return flag; } //251 Hãy cho biết các ptử trong mảng có bằng nhau ko ? int KiemTra_MangBangNhau(int A[], int N) { int flag = 1; // hoàn toàn bằng nhau for (int i = 0; i < N - 1; i++) { if (A[i] != A[i + 1]) // điều kiện sai { flag = 0; // không bằng nhau break; } } return flag; } int main() { int Na = 0; NhapN(Na); int A[MAX]; NhapMang(A, Na); cout << "MANG A BAN DAU\n"; XuatMang(A, Na); cout << "\n"; int kq_248 = KiemTra_Tang(A, Na); if (kq_248 == 1) cout << "BAI TAP 248 : Tang dan"; else cout << "BAI TAP 248 : Khong tang dan"; cout << "\n"; int kq_249 = KiemTra_Giam(A, Na); if (kq_249 == 1) cout << "BAI TAP 249 : Giam dan"; else cout << "BAI TAP 249 : Khong giam dan"; cout << "\n"; int d = 0; int kq_250 = KiemTra_CapSoCong(A, Na, d); if (kq_250 == 1) cout << "BAI TAP 250 : la cap so cong voi cong sai d = "<<d; else cout << "BAI TAP 250 : Khong phai la cap so cong"; cout << "\n"; int kq_251 = KiemTra_MangBangNhau(A, Na); if (kq_251 == 1) cout << "BAI TAP 251 : Bang nhau"; else cout << "BAI TAP 251 : Khong bang nhau"; cout << "\n"; return 0; }
Bài tập 207-208-209 : Tính tổng các phần tử cực trị
#include <iostream> using namespace std; #define MAX 100 // MẢNG 1 CHIỀU // 1. HÀM NHẬP SỐ PHẦN TỬ void NhapN(int &N) { do { cout << "Moi ban nhap so phan tu cua mang N = "; cin >> N; // 0 < N <= MAX // Điều kiện phải ngược lại if (N <= 0 || N > MAX) cout << "Nhap sai vui long nhap la 0 < N <= " << MAX << "\n"; } while (N <= 0 || N > MAX); } // 2. HÀM NHẬP MẢNG void NhapMang(int A[], int N) { for (int i = 0; i < N; i++) { cout << "A[" << i << "]= "; cin >> A[i]; } } // 3. HÀM XUẤT MẢNG void XuatMang(int A[], int N) { for (int i = 0; i < N; i++) { cout << A[i] << "\t"; } } // Hàm Tính Tổng // 1 Khai báo biến Tổng S = 0 // 2. Duyệt // 2.1 Nếu // Tính tổng // 3 Trả về tổng //207 Tổng các ptử cực trị – Cực trị là ptử khi nó lớn hoặc nhỏ hơn ptử xung quanh // VD : 2 4 6 3 4 1 6 // ==> 2 6 3 4 1 6 int Tong_CucTri(int A[], int N) { int S = 0; for (int i = 1; i < N - 1; i++) { // Xét phần tử thứ i if ((A[i] > A[i - 1] && A[i] > A[i + 1]) || (A[i] < A[i - 1] && A[i] < A[i + 1])) S = S + A[i]; } // Xét phần tử đầu tiên if (A[0] > A[1] || A[0] < A[1]) S += A[0]; // Xét phần tử cuối cùng if (A[N - 1] > A[N - 2] || A[N - 1] < A[N - 2]) S += A[N - 1]; return S; } //208 Tổng các ptử chính phương bool KiemTra_SCP(int N) { for (int i = 1; i <= N / 2; i++) { if (i * i == N) return true; // Là số chính phương } return false; // Không là số chính phương } int Tong_SCP(int A[], int N) { int S = 0; for (int i = 0; i < N; i++) { // Gọi hàm kiểm tra SCP bool kq = KiemTra_SCP(A[i]); if (kq) S += A[i]; } return S; } //209 Tổng các ptử đối xứng // VD : 123 // ==> 3 ==> 0 * 10 + 3 = 3 // ==> 2 ==> 3 * 10 + 2 = 32 // ==> 1 ==> 32 * 10 + 1 = 321 int SoDaoNguoc(int N) { int sdn = 0; while (N > 0) { int dv = N % 10; sdn = sdn * 10 + dv; N = N / 10; } return sdn; } // VD : 1 12 121 321 454 int Tong_SDX(int A[], int N) { int S = 0; for (int i = 0; i < N; i++) { int sdn = SoDaoNguoc(A[i]); if (sdn == A[i]) { S += A[i]; } } return S; } int main() { int N = 0; NhapN(N); int A[MAX]; NhapMang(A, N); cout << "MANG BAN DAU\n"; XuatMang(A, N); cout << "\n"; int kq_207 = Tong_CucTri(A, N); cout << "BAI TAP 207 : tong cuc tri = " << kq_207; cout << "\n"; int kq_208 = Tong_SCP(A, N); cout << "BAI TAP 208 : tong so chinh phuong = " << kq_208; cout << "\n"; int kq_209 = Tong_SDX(A, N); cout << "BAI TAP 209 : tong so doi xung = " << kq_209; cout << "\n"; cout << "\n"; return 0; }
Bài tập 234-235 : Cho 2 mảng a, b.Đếm ptử chỉ xuất hiện 1 trong 2 mảng
#include <iostream> using namespace std; #define MAX 100 // MẢNG 1 CHIỀU // 1. HÀM NHẬP SỐ PHẦN TỬ void NhapN(int &N) { do { cout << "Moi ban nhap so phan tu cua mang N = "; cin >> N; // 0 < N <= MAX // Điều kiện phải ngược lại if (N <= 0 || N > MAX) cout << "Nhap sai vui long nhap la 0 < N <= " << MAX << "\n"; } while (N <= 0 || N > MAX); } // 2. HÀM NHẬP MẢNG void NhapMang(int A[], int N) { for (int i = 0; i < N; i++) { cout << "A[" << i << "]= "; cin >> A[i]; } } // 3. HÀM XUẤT MẢNG void XuatMang(int A[], int N) { for (int i = 0; i < N; i++) { cout << A[i] << "\t"; } } // DẠNG ĐẾM // 1. Khai báo biến đếm // 2. Duyệt // 2.1 Nếu // tăng đếm // 3. Trả về kết quả đếm //234 Cho 2 mảng a, b.Đếm ptử chỉ xuất hiện 1 trong 2 mảng // VD : // A : 1 4 6 // B : 1 4 7 9 8 //==> 6 7 9 8 int Dem_Xuat_Hien_Trong_2_Mang(int A[], int B[], int Na, int Nb) { int i, j, dem = 0, flag; for (i = 0; i < Na; i++) { flag = 1; for (j = 0; j < Nb; j++) { if (A[i] == B[j]) { flag = 0; break; } } if (flag == 1) dem++; } for (i = 0; i < Nb; i++) { flag = 1; for (j = 0; j < Na; j++) { if (B[i] == A[j]) { flag = 0; break; } } if (flag == 1) dem++; } return dem; } //235 Cho 2 mảng a, b.Liệt kê ptử xuất hiện trong 2 mảng void LietKe_Xuat_Hien_Trong_2_Mang(int A[], int B[], int Na, int Nb) { int i, j; for (i = 0; i < Na; i++) { for (j = 0; j < Nb; j++) { if (A[i] == B[j]) { cout << A[i]<<"\t"; break; } } } } int main() { int Na = 0; NhapN(Na); int A[MAX]; NhapMang(A, Na); cout << "MANG A BAN DAU\n"; XuatMang(A, Na); cout << "\n"; int Nb = 0; NhapN(Nb); int B[MAX]; NhapMang(B, Nb); cout << "MANG B BAN DAU\n"; XuatMang(B, Nb); cout << "\n"; int dem = Dem_Xuat_Hien_Trong_2_Mang(A, B, Na, Nb); cout << "Bai Tap 234 : " << dem; cout << "\n"; cout << "Bai Tap 235 : Xuat hien trong ca 2 mang A & B gom\n"; LietKe_Xuat_Hien_Trong_2_Mang(A, B, Na, Nb); return 0; }
Đăng ký:
Nhận xét (Atom)