nhập môn lập trình c07 mang1chieu

46 47 0
nhập môn lập trình c07 mang1chieu

Đ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

Trường Đại học Khoa học Tự nhiên Khoa Công nghệ thơng tin NHẬP MƠN LẬP TRÌNH MẢNG MỘT CHIỀU VC & BB Nội dung Khái niệm Khai báo Truy xuất liệu kiểu mảng Một số toán mảng chiều NMLT - Mảng chiều VC & BB Đặt vấn đề Ví dụ  Chương trình cần lưu trữ số nguyên? => Khai báo biến int SoNguyen1, SoNguyen2, SoNguyen3;  Chương trình cần lưu trữ 100 số nguyên? => Khai báo 100 biến kiểu số nguyên!  Người dùng muốn nhập n số nguyên? => Không thực được! Giải pháp  Kiểu liệu cho phép lưu trữ dãy số nguyên dễ dàng truy xuất NMLT - Mảng chiều VC & BB Dữ liệu kiểu mảng Khái niệm  Là kiểu liệu có cấu trúc người lập trình định nghĩa  Biểu diễn dãy biến có kiểu Ví dụ: dãy số nguyên, dãy ký tự…  Kích thước xác định khai báo không thay đổi  NNLT C định khối nhớ liên tục cho biến kiểu mảng NMLT - Mảng chiều VC & BB Khai báo biến mảng Tường minh []; Lưu ý  Phải xác định cụ thể (hằng) khai báo  Bộ nhớ sử dụng = * sizeof()  Bộ nhớ sử dụng phải 64KB (65535 Bytes)  Một dãy liên tục có số từ đến -1 NMLT - Mảng chiều VC & BB Khai báo biến mảng Ví dụ int Mang1Chieu[10]; Mang1Chieu NMLT - Mảng chiều VC & BB Số phần tử mảng Phải xác định cụ thể số phần tử lúc khai báo, không sử dụng biến thường int MAX1 = 10; int Mang1C_1[MAX1]; const int MAX2 = 20; int Mang1C_2[MAX2]; int Mang1C_3[100];  Số phần tử thực dùng: nM1, nM2 Nên sử dụng thị tiền xử lý #define để định nghĩa số phần tử mảng #define MAX1 10 int Mang1C[MAX1]; int nM; //  int a[10]; NMLT - Mảng chiều VC & BB Khởi tạo giá trị cho mảng lúc khai báo Gồm cách sau  Khởi tạo giá trị cho phần tử mảng int a[4] = {2912, 1706, 1506, 1904}; a 2912 1706 1506 1904  Khởi tạo giá trị cho số phần tử đầu mảng int a[4] = {2912, 1706}; a 2912 1706 0 NMLT - Mảng chiều VC & BB Khởi tạo giá trị cho mảng lúc khai báo Gồm cách sau  Khởi tạo giá trị cho phần tử mảng int a[4] = {0}; a 0 0  Tự động xác định số lượng phần tử int a[] = {2912, 1706, 1506, 1904}; a 2912 1706 1506 1904 NMLT - Mảng chiều 10 VC & BB Truy xuất đến phần tử Thông qua số [] Ví dụ  Cho mảng sau int Mang1C[4];  Các truy xuất • Hợp lệ: Mang1C[0], Mang1C[1], Mang1C[2], Mang1C[3] • Khơng hợp lệ: Mang1C[-1], Mang1C[4],… => Cho kết thường không mong muốn! NMLT - Mảng chiều 11 VC & Hàm Tách Mảng BB void TachSNT2(int a[], int na, int b[], int &nb, int c[], int &nc) { nb = 0; nc = 0; for (int i = 0; i < na; i++) if (LaSNT(a[i]) == 1) { b[nb] = a[i]; nb++; } else { c[nc] = a[i]; nc++; } } NMLT - Mảng chiều 33 VC & BB Gộp mảng thành mảng Yêu cầu  Cho trước mảng a, số lượng phần tử na mảng b số lượng phần tử nb Gộp mảng theo tứ tự thành mảng c, số lượng phần tử nc Ý tưởng  Chuyển phần tử mảng a sang mảng c => nc = na  Tiếp tục đưa phần tử mảng b sang mảng c => nc = nc + nb NMLT - Mảng chiều 34 VC & Hàm Gộp Mảng BB void GopMang(int a[], int na, int b[], int nb, int c[], int &nc) { nc = 0; for (int i = 0; i < na; i++) { c[nc] = a[i]; nc++; // c[nc++] = a[i]; } for (int i = 0; i < nb; i++) { c[nc] = b[i]; nc++; // c[nc++] = b[i]; } } NMLT - Mảng chiều 35 VC & BB Tìm giá trị lớn mảng Yêu cầu  Cho trước mảng a có n phần tử Tìm giá trị lớn a (gọi max) Ý tưởng  Giả sử giá trị max giá trị phần tử a[0]  Lần lượt kiểm tra phần tử lại để cập nhật max max ? n–1 … MAX - … … NMLT - Mảng chiều 36 VC & Hàm tìm Max BB int TimMax(int a[], int n) { int max = a[0]; for (int i = 1; i < n; i++) if (a[i] > max) max = a[i]; return max; } NMLT - Mảng chiều 37 VC & BB Sắp xếp mảng thành tăng dần Yêu cầu  Cho trước mảng a kích thước n Hãy xếp mảng a cho phần tử có giá trị tăng dần Ý tưởng  Sử dụng biến i j để so sánh tất cặp phần tử với hoán vị cặp nghịch (sai thứ tự) tạm 1 … j j j j i n–1 MAX - … … NMLT - Mảng chiều 38 VC & Hàm Sắp Xếp Tăng BB void SapXepTang(int a[], int n) { int i, j; for (i = 0; i < n – 1; i++) { for (j = i + 1; j < n; j++) { if (a[i] > a[j]) HoanVi(a[i], a[j]); } } } NMLT - Mảng chiều 39 VC & BB Thêm phần tử vào mảng Yêu cầu  Thêm phần tử x vào mảng a kích thước n vị trí vt Ý tưởng  “Đẩy” phần tử bắt đầu vị trí vt sang phải vị trí  Đưa x vào vị trí vt mảng  Tăng n lên đơn vị x chèn? n–1 n a b c … z … vt MAX - … NMLT - Mảng chiều 40 VC & Hàm Thêm BB void Them(int a[], int &n, int vt, int x) { if (vt >= && vt vt; i ) a[i] = a[i - 1]; a[vt] = x; n++; } } NMLT - Mảng chiều 41 VC & BB Xóa phần tử mảng Yêu cầu  Xóa phần tử mảng a kích thước n vị trí vt Ý tưởng  “Kéo” phần tử bên phải vị trí vt sang trái vị trí  Giảm n xuống đơn vị xóa? a x b vt n-2 n–1 … z MAX - … … NMLT - Mảng chiều 42 VC & Hàm Xóa BB void Xoa(int a[], int &n, int vt) { if (vt >= && vt < n) { for (int i = vt; i < n – 1; i++) a[i] = a[i + 1]; n ; } } NMLT - Mảng chiều 43 VC & BB Bài tập thực hành Các thao tác nhập xuất a Nhập mảng b Xuất mảng Các thao tác kiểm tra a Mảng có phải mảng tồn chẵn b Mảng có phải mảng tồn số ngun tố c Mảng có phải mảng tăng dần NMLT - Mảng chiều 44 VC & BB Bài tập thực hành Các thao tác tính tốn a Có số chia hết cho không chia hết cho b Tổng số ngun tố có mảng Các thao tác tìm kiếm a Vị trí cuối phần tử x mảng b Vị trí số nguyên tố mảng có c Tìm số nhỏ mảng d Tìm số dương nhỏ mảng NMLT - Mảng chiều 45 VC & BB Bài tập thực hành Các thao tác xử lý a Tách số nguyên tố có mảng a đưa vào mảng b b Tách mảng a thành mảng b (chứa số nguyên dương) c (chứa số lại) c Sắp xếp mảng giảm dần d Sắp xếp mảng cho số dương đứng đầu mảng giảm dần, số âm tăng dần, cuối số NMLT - Mảng chiều 46 VC & BB Bài tập thực hành Các thao tác thêm/xóa/sửa a Sửa số nguyên tố có mảng thành số b Chèn số đằng sau số nguyên tố mảng c Xóa tất số nguyên tố có mảng NMLT - Mảng chiều 47 ... Mảng chiều 18 VC & BB Nhập mảng Yêu cầu  Cho phép nhập mảng a, số lượng phần tử n Ý tưởng  Cho trước mảng có số lượng phần tử MAX  Nhập số lượng phần tử thực n mảng  Nhập phần tử cho mảng... Chương trình cần lưu trữ số nguyên? => Khai báo biến int SoNguyen1, SoNguyen2, SoNguyen3;  Chương trình cần lưu trữ 100 số nguyên? => Khai báo 100 biến kiểu số nguyên!  Người dùng muốn nhập n... có số từ đến -1 NMLT - Mảng chiều VC & BB Khai báo biến mảng Ví dụ int Mang1Chieu[ 10]; Mang1Chieu NMLT - Mảng chiều VC & BB Số phần tử mảng Phải xác định cụ thể số phần tử lúc

Ngày đăng: 22/09/2020, 09:06

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan