Tải bản đầy đủ (.ppt) (32 trang)

slide bài giảng nhập môn lập trình mảng và mảng một chiều

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (500.16 KB, 32 trang )

www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Nhập Môn Lập Trình
Mảng – Mảng Một Chiều
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Road Map

Khái Niệm Mảng

Mảng một chiều

Khởi tạo mảng 1 chiều

Duyệt mảng 1 chiều

Nhập/ Xuất mảng 1 chiều

Sắp Xếp Mảng

Bubble sort

Cấp Phát Vùng Nhớ Động
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

www.hoasen.edu.vn
3


Array = Mảng: là một tập hợp nhiều phần tử có cùng kiểu và
chung một tên
 Sắp xếp các biến cùng kiểu dữ liệu thành một dãy liên tiếp.

Ví dụ:
int array_int [5];
/* Mảng array_int có 5 phần tử kiểu int xếp liên tiếp*/
float array_float [1000];
/* Mảng array_float có 1000 phần tử kiểu float xếp liên tiếp */
Khái niệm mảng
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

www.hoasen.edu.vn
4

Mảng một chiều là mảng mà những phần tử của nó được xác
định một chỉ số.

Khai báo bien_so kiểu Array <T> :
<T> bien_so [n];
Trong đó:
<T> là kiểu dữ liệu
bien_so : tên biến
n: số phần tử của Array

Khai báo tường minh: int A[10]; float X[20];

Khai báo không tường minh: int A[ ]; float B[ ];
Mảng Một Chiều

www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

www.hoasen.edu.vn
5
7 4 10 15 90 30 3 21 56 80
Mảng B
Phần tử B[3] có giá trị là 15
0 1 2 3 4 5 6 7 8 9
chỉ số
Mảng Một Chiều

Ví dụ: int B[10];
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

www.hoasen.edu.vn
6

Khởi tạo = khai báo + gán giá trị cho mảng
Cú pháp khởi tạo mảng
#include<stdio.h>
#include<conio.h>
#define SIZE 5
void main()
{ clrscr();
int a[SIZE]={4,6,3,8,9};
for(int i=0; i<SIZE; i++)
printf("\na[%d]=%d",i,
a[i]);

getch();
}
Khởi tạo mảng 1 chiều
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

www.hoasen.edu.vn
7

Gán giá trị cho mảng dùng vòng lặp
#include<stdio.h>
#include<conio.h>
#define SIZE 10
void main()
{ clrscr();
int value[SIZE]; /* value is an array of 10 integers */
int i; /* counter */
/* initialise elements of array to 0 */
for( i=0; i< SIZE; i++) {
value[i] = 0;
}
}
Khởi tạo mảng 1 chiều
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

www.hoasen.edu.vn
8

Lỗi thường gặp khi khai báo :

int n[10]; n[0]++; /* quên gán giá trị trước khi dùng */
int b[5] = { 1, 3, 5, 7, 9, 11 }; /* gán nhiều giá trị hơn số phần tử */

int n[10] = { 0 };
/* gán giá trị zero cho phần từ đầu tiên và */
/* đồng thời gán giá trị zero cho tất cả phần tử còn lại vì số giá
trị dùng để gán ít hơn số phần tử của mảng */

int n[] = { 1, 3, 5, 7, 9 } /* Khởi tạo mảng có 5 phần tử số nguyên */

Mảng Một Chiều
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

www.hoasen.edu.vn
9

Xử lý mảng = Xử lý nhóm các phần tử = Xử lý mỗi phần tử trong mảng.

Một phần tử được xác định bởi một chỉ số
for (i=0; i<n; i++) xử lý a[i];
for (i=0; i<n; i++)
if (Điều kiện) xử lý a[i];

Duyệt mảng ngược
for (i=n-1; i>=0; i ) xử lý a[i];
for (i=n-1; i>=0; i )
if (điều kiện) xử lý a[i];

Duyệt mảng xuôi

Duyệt mảng 1 chiều
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

www.hoasen.edu.vn
10
#include <stdio.h>
#include <conio.h>
#define SIZE 5
void main()
{ clrscr();
int a[SIZE]={4,6,3,8,9},S1=0, S2=0, S3=0, i;
printf("noi dung mang:");
for(i=0; i< SIZE; i++)
printf("%3d", a[i]);
for(i=0; i< SIZE; i++)
S1 += a[i];
printf("\nTong mang: %d", S1);
for(i=0; i< SIZE; i++)
if(a[i]%2==0) S2+=a[i];
printf("\nTong mang chan: %d", S2);
for(i= SIZE-1; i>=0; i )
if(a[i]%2) S3+=a[i];
printf("\nTong mang le: %d", S3);
getch();
}
Duyệt mảng ngược
Duyệt mảng có điều kiện
Duyệt mảng không có
điều kiện

18
12
Minh họa duyệt mảng 1 chiều
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

www.hoasen.edu.vn
11
#include <conio.h>
#include <stdio.h>
void main()
{ int a[100],n;
clrscr();
//Nhập các phần tử vào mảng
printf("\n nhap so phan tu cua mang:");
scanf("%d",&n);
for (int i=0;i<n;i++)
{ printf("nhap a[%d]: ",i);
scanf("%d",&a[i]);
}
//Xuất mảng ra màn hình
printf("Noi dung mang:");
for(int i=0;i<n; i++)
printf("%3d",a[i]);
getch();
}
Kết quả
Viết chương nhập n
phần tử kiểu số nguyên vào
mảng và xuất mảng

này ra màn hình.
Nhập/ Xuất mảng 1 chiều
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

12
Sắp Xếp Mảng

Sắp xếp các phần tử của mảng theo 1 thứ tự tăng dần hay
giảm dần

Là bài toán kinh điển trong lập trình trong bất kỳ ngôn ngữ

Có nhiều thuật toán được phát minh để giải quyết bài toán
sắp xếp mảng

Các thuật toán này có độ phức tạp, không gian bô nhớ
được dùng và khoảng thời gian cần để thực hiện khác nhau

Ví dụ các thuật toán: Bubble sort, Insertion sort, Selection
Excange sort, Shell sort …

Thuật toán được đánh giá bởi số lần so sánh và chuyển đổi
phần cần phải thực hiện
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

13
Sắp Xếp Mảng
Bubble Sort:


Ý tưởng chính:

Mảng có N phần tử

Tìm số nhỏ nhất trong N phần tử và đưa về vị trí đầu tiên

Tìm số nhỏ nhất trong N-1 phần tử và đưa về vị trí kế tiếp

Tiếp tục lặp lại đến hết phần tử trong mảng
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

14
Bubble Sort – Ví dụ
2 8 5 1 6 4
1
5
1
2
2 3 4 5 6 7 81
i
j
1
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

15
Bubble Sort – Ví dụ
1

2
2 8 5 4 6
1
5
1
2 3 4 5 6 7 81
i
j
2
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

16
Bubble Sort – Ví dụ
2
1
2
4 8 5 6
1
5
1
2 3 4 5 6 7 81
i
j
4
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

17
Bubble Sort – Ví dụ

2 4
1
2
8 5 6
1
5
1
2 3 4 5 6 7 81
i
j
5
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

18
Bubble Sort – Ví dụ
2 4 5
1
2
8 6
1
5
1
2 3 4 5 6 7 81
i
j
6
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai


19
Bubble Sort – Ví dụ
2 4 5 6
1
2
8
1
5
1
2 3 4 5 6 7 81
i
j
8
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

20
Bubble Sort – Ví dụ
2 4 5 6 8
1
2
1
5
1
2 3 4 5 6 7 81
i
j
1
5
1

2
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

21
Bubble sort – Thuật toán
Mảng
bắt đầu
1
12
2
2
3
8
4
5
5
1
6
6
7
4
8
15
Sau 1
vòng
1
12
2
8

5
4
6
15
Sau 2
vòng
1
2
12
4
8
5
6
15
Sau 3
vòng
1
2
4
12
5
8
6
15
Sau 4
vòng
1
2
4
5

12
6
8
15
Sau 5
vòng
1
2
4
5
6
12
8
15
Sau 6
vòng
1
2
4
5
6
8
12
15
Mảng xếp
theo thứ tự
1
2
4
5

6
8
12
15
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Bài tập tại lớp

Hãy viết mã giả và vẽ lưu đồ cho thuật toán Bubble Sort vừa
trình bày
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Bubble sort
BEGIN
INPUT array A[N] with N elements
FOR i = 0 to N – 1
FOR j = N – 1 to i + 1
IF A[j] < A[j – 1]
tmp = A[j]
A[j] = A[j – 1]
A[j – 1] = tmp
ENDIF
END FOR
END FOR
END
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai


www.hoasen.edu.vn
24
Demo sắp xếp
mảng tăng dần
bằng thuật toán
Bubble Sort
Sắp xếp mảng 1 chiều
#include <stdio.h>
#include <conio.h>
void main()
{ int n=5;
int a[n] = {5,3,4,7,1};
int i,j, t ;
for (i=0; i<n-1; i++)
for (j=n-1; j> i ; j )
if (a[j] < a[j-1])
{ t = a[j];
a[j]= a[j-1];
a[j-1] = t;
}
//Xuất mảng đã sắp xếp tăng
for (i=0; i<n; i++)
printf(“%3d”,a[i]);
getch();
}
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

www.hoasen.edu.vn
25

Bài tập 1: (Giải tại lớp)
Viết chương trình nhập n phần tử số nguyên vào
mảng. Xuất ra màn hình:
- Phần tử max trong mảng
- Phần tử min trong mảng
- Tổng các phần tử của mảng.
Giải một số bài tập mảng 1 chiều

×