Bài giảng Cơ sở lập trình - Chương 5: Mảng một chiều

ppt 30 trang phuongnguyen 2331
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cơ sở lập trình - Chương 5: Mảng một chiều", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_co_so_lap_trinh_chuong_5_mang_mot_chieu.ppt

Nội dung text: Bài giảng Cơ sở lập trình - Chương 5: Mảng một chiều

  1. 7/5/2021 *CHƯƠNG 5 MẢNG MỘT CHIỀU 1
  2. * *Mang̉ thực chât́ la ̀ môṭ biêń được câṕ phat́ bô ̣ nhớ liên tuc̣ va ̀ bao gôm̀ nhiêù biêń thanh̀ phân.̀ *Cać thanh̀ phâǹ cuả mang̉ la ̀ tâp̣ hợp cać biêń co ́ cung̀ kiêủ dữ liêụ va ̀ cung̀ tên. Do đo ́ đê ̉ truy xuât́ cać biêń thanh̀ phân,̀ ta dung̀ cơ chê ́ chi ̉ muc.̣ Giá trị 0 1 2 3 4 5 6 7 8 9 Vị trí Vị trí được tính từ 0 2 7/5/2021
  3. * [ ] ; *int a[100]; //Khai bao mang so nguyen a gom 100 phan tu *float b[50]; //Khai bao mang so thuc b gom 50 phan tu *char str[30]; //Khai bao mang ky tu str gom 30 ky tu Nhằm thuận tiện cho việc viết chương trình, ta nên định nghĩa hằng số MAX ở đầu chương trình – là kích thước tối đa của mảng - như sau: #define MAX 100 void main() { int a[MAX], b[MAX]; //Các lệnh } 3 7/5/2021
  4. * Gán từng phần tử int a[5] = {3, 6, 8, 1, 12}; Giá trị 3 6 8 1 12 Vị trí 0 1 2 3 4 Gán toàn bộ phần tử có cùng giá trị int a[8] = {3}; Giá trị 3 3 3 3 3 3 3 3 Vị trí 0 1 2 3 4 5 6 7 4 7/5/2021
  5. * TênMảng [vị trí cần truy xuất] void main() { Vị trí 3 int a[5] = {3, 6, 8, 11, 12}; cout<<“Giá trị mảng tại vị trí 3 = “<<a[3]; } Kết quả: Giá trị mảng tại vị trí 3 = 11 5 7/5/2021
  6. * *Nhập *Xuất (liệt kê) *Tìm kiếm *Đếm *Sắp xếp *Kiểm tra mảng thỏa điều kiện cho trước *Tách/ ghép mảng *Chèn / xóa 6 7/5/2021
  7. * #define MAX 100 void NhapMang (int a[], int n) { for (int i = 0; i >a[i]; } } 7 7/5/2021
  8. void XuatMang (int a[], int n) { for (int i = 0; i >n; NhapMang (a,n); cout<<“Cac gia tri cua mang vua nhap: ”<<endl; XuatMang (a,n); } 8 7/5/2021
  9. * Mẫu 1: void LietKeXXX(int a[], int n) { for (int i = 0; i<n; i++) if (a[i] thỏa điều kiện) Xuất a[i]; } Mẫu 2: void LietKeXXX(int a[], int n, int x) { for (int i = 0; i<n; i++) if (a[i] thỏa điều kiện so với x) Xuất a[i]; } 9 7/5/2021
  10. Ví dụ 1: Liệt kê các phần tử có giá trị chẵn trong mảng void LietKeChan(int a[], int n) { for (int i = 0; i x) cout<<a[i]<<“\t”; } 10 7/5/2021
  11. *Ví dụ 3: Chương trình nhập vào mảng một chiều số nguyên a, kích thước n. In ra các phần tử có giá trị lớn hơn x có trong mảng #define MAX 100 void NhapMang(int a[], int n); void XuatMang(int a[], int n); void LietKeLonHonX(int a[], int n, int x); void NhapMang(int a[], int n) { for(int i=0; i >a[i]; } } void XuatMang(int a[], int n) { for(int i=0; i<n; i++) cout<<a[i]<<"\t"; } 11 7/5/2021
  12. void LietKeLonHonX(int a[], int n, int x) { for (int i = 0; i x) cout >n; NhapMang(a, n); cout >x; cout<<"Cac phan tu co gia tri lon hon "<<x<<endl; LietKeLonHonX(a, n, x); } 12 7/5/2021
  13. * Mẫu 1: int DemXXX(int a[], int n) { int d = 0; for (int i = 0; i<n; i++) if (a[i] thỏa điều kiện) d++; return d; } 13 7/5/2021
  14. Mẫu 2: int DemXXX(int a[], int n, int x) { int d = 0; for (int i = 0; i<n; i++) if (a[i] thỏa điều kiện so với x) d++; return d; } 14 7/5/2021
  15. Ví dụ 1: Đếm các phần tử có giá trị là số nguyên tố bool LaSNT(int k) int DemSNT(int a[], int n) { { int d = 0; int d = 0; for (int i = 1; i <= k; i++) for (int i = 0; i<n; i++) if (k % i == 0) if (LaSNT(a[i]) ==true) d++; d++; return (d == 2); } return d; } 15 7/5/2021
  16. Ví dụ 2: Đếm các phần tử có giá trị nhỏ hơn x có trong mảng int DemNhoHonX(int a[], int n, int x) { int d = 0; for (int i = 0; i<n; i++) if (a[i] < x) d++; return d; } 16 7/5/2021
  17. *Ví dụ 3: Chương trình nhập vào mảng một chiều số nguyên a, kích thước n. Đếm số lượng các phần tử là số nguyên tố có trong mảng #define MAX 100 void NhapMang(int a[], int n); void XuatMang(int a[], int n); int DemSNT(int a[], int n); bool LaSNT(int k); void NhapMang(int a[], int n) { for(int i=0; i >a[i]; } } void XuatMang(int a[], int n) { for(int i=0; i<n; i++) cout<<a[i]<<"\t"; } 17 7/5/2021
  18. bool LaSNT(int k) int DemSNT(int a[], int n) { { int d = 0; for (int i = 1; i <= k; i++) int d = 0; if (k % i == 0) for (int i = 0; i<n; i++) d++; if (LaSNT(a[i]) ==true) return (d == 2); d++; } return d; } 18 7/5/2021
  19. void main() { int a[MAX], n, kq; cout >n; NhapMang(a, n); cout<<"Cac phan tu cua mang:"<<endl; XuatMang(a, n); kq = DemSNT(a, n); if(kq==0) cout<<"Khong co so nguyen to trong mang"; else cout<<"So luong so nguyen to la: "<<kq; } 19 7/5/2021
  20. * Mẫu 1: Tìm và trả về vị trí phần tử có giá trị lớn nhất int TimVTMax(int a[], int n) { int vtmax = 0; for (int i = 0; i a[vtmax]) vtmax = i; return vtmax; } 20 7/5/2021
  21. Mẫu 2: Tìm vị trí phần tử có giá trị x (nếu x không xuất hiện trong mảng trả về -1) int TimVTX(int a[], int n, int x) { for (int i = 0; i < n; i++) if (a[i] == x) return i; return -1; } 21 7/5/2021
  22. * *TH1: kiểm tra tồn tại một phần tử trong mảng thỏa điều kiện nào đó cho trước tìm phần tử thỏa điều kiện để kết luận. *TH2: kiểm tra tất cả các phần tử thỏa điều kiện nào đó cho trước tìm phần tử không thỏa điều kiện để kết luận mảng không thỏa điều kiện. 22 7/5/2021
  23. Mẫu TH1: bool KiemTraTonTaiXXX(int a[], int n) { for (int i = 0; i<n; i++) if (a[i] thỏa điều kiện) return true; return false; } Mẫu TH2: bool KiemTraXXX(int a[], int n) { for (int i = 0; i<n; i++) if (a[i] không thỏa điều kiện) return false; return true; } 23 7/5/2021
  24. Ví dụ 1: Kiểm tra xem mảng có tồn tại số lẻ không? bool KiemTraTonTaiLe(int a[], int n) { for (int i = 0; i < n; i++) if (a[i] % 2 != 0) return true; return false; } 24 7/5/2021
  25. Ví dụ 2: Kiểm tra xem mảng có toàn giá trị âm không? (true: có/ false: không) bool KiemTraToanAm(int a[], int n) { for (int i = 0; i = 0) return false; return true; } 25 7/5/2021
  26. * Mẫu tính tổng: int TongXXX(int a[], int n) { int s = 0; for (int i = 0; i<n; i++) if (a[i] thỏa điều kiện) s += a[i]; return s; } 26 7/5/2021
  27. Mẫu tính trung bình: float TrungBinhXXX(int a[], int n) { int s = 0; int d = 0; for (int i = 0; i<n; i++) if (a[i] thỏa điều kiện) { s += giatri; d ++; } if (d==0) return 0; return (float) s / d; } 27 7/5/2021
  28. Ví dụ 1: Tính tổng các phần tử có giá trị lẻ trong mảng int TongLe(int a[], int n) { int s = 0; for (int i = 0; i<n; i++) if (a[i] %2!=0) s += a[i]; return s; } 28 7/5/2021
  29. Ví dụ 2: Tính giá trị trung bình các phần tử có giá trị âm trong mảng float TrungBinhAm(int a[], int n) { long s = 0; int d = 0; for (int i = 0; i<n; i++) if (a[i] < 0) { s += a[i]; d++; } if (d == 0) return 0; return (float)s / d; } 29 7/5/2021
  30. *SẮP XẾP Mẫu phương thức sắp thứ tự tăng: void SapTang(int a[], int n) { for (int i = 0; i a[j]) HoanVi(a[i], a[j]); } void HoanVi(int &a, int &b) { int tam = a; a = b; b = tam; } 30 7/5/2021