You are on page 1of 74

Kiểm tra bài cũ

Câu Hỏi 1: Máy vi tính có mấy phần chính?


Câu Hỏi 2: Cho ví dụ về thiết bị đầu vào, thiết bị đầu ra.

- Máy vi tính có ba phần chính: Thiết bị đầu vào, Bộ xử lí


và Thiết bị đầu ra.

- Thiết bị đầu vào: Bàn phím (Keyboard), chuột (Mouse),


máy quét, …
- Thiết bị đầu ra: Màn hình, loa, máy in, máy chiếu
(projector),…
Bài 4: Bài toán và Thuật toán
(Tiết 1)

GVHD: Thầy Nguyễn Khắc Văn


SVTH: Võ Thị Vân
Bài toán Bài toán
trong toán
- Xét các yêu cầu trong sau: học.
• Giải PT bậc 2: ax^2+bx+c=0. Bài toán
trong tin
• Viết 1 dòng chữ ra màn hình máy tính. học.
• Quản lí cán bộ cơ quan.
• Tìm UCLN của a và b.
• Xếp loại học tập cho hoc sinh trong lớp.

Đâu là bài toán trong tin học, đâu là bài toán


trong toán học?
Bài toán

Khái niệm về bài toán trong Tin học: là một


việc nào đó ta muốn máy tính thực hiện.

Các yếu tố cần quan tâm khi giải một bài toán:
 Toán học: Giả thiết và kết luận (ví dụ lên bảng)
 Tin học:
Đưa vào máy tính thông tin gì? Cần lấy ra thông tin gì?
Input Output
Bài toán

Xác định Input,


Output của bài toán

Ví dụ: Tìm UCLN của a, b.

Input: Hai số a, b.
Output: UCLN(a,b)

 Một bài toán được cấu thành bởi hai thành phần
cơ bản là Input và Output
Bài toán

Bài toán

Input Bằng cách nào Output

Giải bài toán

Hướng dẫn các thao tác cho


máy thực hiên để tìm ra lời giải

Thuật toán
Thuật toán

Bài toán

Input Thuật toán Output


(thao tác 1 → thao tác 2 → … → thao tác n)
Đinh nghĩa:
• Một dãy hữu hạn các thao tác;
• Các thao tác được sắp xếp theo một trình tự xác
định;
• Sau khi thực hiện dãy các thao tác đó từ Input ta
tìm được Output của bài toán.
Dặn dò

1. Học bài và làm bài 1, bài 2 trong SGK và


bài 1.28/17 SBT

2. Đọc sách và chuẩn bị bài cho tiết tiếp


theo.
Bài 4: Bài toán và Thuật toán
(Tiết 2)
Thuật toán

 Làm thế nào để trình bày thuật toán giải quyết


một bài toán cho hợp lý, dễ hiểu và thông qua
thuật toán có thể thu được Output từ Input đã
cho?

 Tìm hiểu về cách mô tả thuật toán và tính chất


của thuật toán).
Cách mô tả thuật toán

1. Mô tả bằng cách liệt kê.


Ví dụ: Tính diện tích hình chữ nhật.
 Xác định công thức tính S=chiều dài * chiều rộng
 Xác định chiều dài chiều rộng  tính diện tích
(học sinh phải làm theo thứ tự và không được đảo
thứ tự giải bài toán)

Một cách mô tả thuật toán phổ biến nhất là liệt kê:


trình bày theo từng bước có thứ tự nhất định.
Cách mô tả thuật toán

Ví du: Tìm số lớn nhất trong hai số a, b


Input: hai số a, b
Output: Max Input, Output?
Thuật toán:

Bước 1: Nhập 2 số a,b;


Bước 2: Max  a;
Bước 3:
Bước 3.1: Nếu b > Max thì Max  b;
Bước 3.2: Ngược lại thì Max  a;
Cách mô tả thuật toán
2. Mô tả bài toán bằng sơ đồ khối

Các khối, đường được sử


dụng:
Hình thoi thể hiện thao
tác so sánh.
Hình chữ nhật thể hiện
các phép tính toán.
Hình ô van thể hiện
thao tác nhập, xuất dữ liệu.
Mũi tên quy định trình
tự các thao tác.
Tính chất của thuật toán

 Tính dừng: Thuật toán phải kết thúc sau một số


hữu hạn lần thực hiện.
 Tính xác định: Sau khi thực hiện một thao tác thì
hoặc là có đúng một thao tác xác định để thực
hiện tiếp theo.
 Tính đúng đắn: Sau khi thuật toán kết thúc, ta
phải nhận được Output cần tìm
Bài 4: Bài toán và Thuật toán
(Tiết 3)
Ví dụ: Kiểm tra tính nguyên tố của một số nguyên dương

1. Xác định bài toán:


- Input: N là một số nguyên dương.
- Output: N là số nguyên tố hoặc N không là số nguyên
tố.
2. Ý tưởng:
- Nếu N=1  N không là số nguyên tố.
- Nếu 1<N<4  N là số nguyên tố.
- Nếu N>=4: Tìm ước i đầu tiên>1 của N.
+ Nếu i<N  N không là số nguyên tố (vì N có ít nhất
3 ước 1, i, N).
+ Nếu i=N  N là số nguyên tố.
Ví dụ: Kiểm tra tính nguyên tố của một số nguyên dương

3. Xây dựng thuật toán:


a. Cách liệt kê:
• Bước 1: Nhập số nguyên dương N;
• Bước 2: Nếu N=1 thì thông báo N; không là số nguyên tố
rồi kết thúc;
• Bước 3: Nếu N<4 thì thông báo N là số nguyên tố rồi kết
thúc;
• Bước 4: i2;
• Bước 5: Nếu i là ước của N thì đến bước 7;
• Bước 6: ii+1 rồi quay lại bước 5; (tăng I lên 1 đơn vị)
• Bước 7: Nếu i=N thì thông báo N là số nguyên tố, ngược
lại thì thông báo N không là số nguyên tố rồi kết thúc;
Ví dụ: Kiểm tra tính nguyên tố của một số nguyên dương

b. Sơ đồ khối
Ví dụ: Kiểm tra tính nguyên tố của một số nguyên dương

• Cải
  tiến thuật toán
Ý tưởng:
Tìm i tăng dần trong phạm vi từ 2 đến phần nguyên
thỏa điều kiện là ước của N:
- Nếu không tìm được  N là số nguyên tố.
- Ngược lại  N không là số nguyên tố.

Xây dựng thuật toán:


Ví dụ: Kiểm tra tính nguyên tố của một số nguyên dương

•Cách
  liệt kê:

Bước 1: Nhập số nguyên dương N;


Bước 2: Nếu N=1 thì thông báo N không là số nguyên tố,
kết thúc chương trình;
Bước 3: i2;
Bước 4: Nếu i<= và I không là ước của N thì ii+1, rồi lặp
lại bước này.
Bước 5: Nếu i> thì thông báo N là số nguyên tố, ngược lại
thì thông báo N không là số nguyên tố, rồi kết thúc.
Ví dụ: Kiểm tra tính nguyên tố của một số nguyên dương

Sơ đồ khối
Nhập
N=25N

Đúng
25
N = 1?
Sai
Đúng
25
N < 4?
Sai
i2 N là số nguyên
tố

Đúng
2>> N5? ?
i5
3
4
Sai
Sai
i i
i+1
3
4
5 25
Ni?
2?
3?
4?
5?

Đúng
25
N không
không phải
phải là

số nguyên tố
Nhập
N=29N

Đúng
29
N = 1?
Sai
Đúng
29
N < 4?
Sai
i2 29
N là
là số
số nguyên
nguyên
tố

Đúng
2>> N5? ?
i6
3
4
5
Sai
Sai
i i
i+1
3
4
5
6 29
Ni?
2?
3?
4?
5?

Đúng
N không phải là
số nguyên tố
Bài 4: Bài toán và Thuật toán
(Tiết 4)
Dãy A chưa được sắp xếp Dãy A được sắp xếp
Ví dụ: Bài toán sắp xếp bằng cách tráo đổi

1. Xác định bài toán:

Input: Dãy A gồm N số nguyên a1, a2, .., an


VD: Dãy A gồm các số nguyên 2 4 8 7 1 5
Output: Dãy A được sắp xếp thành dãy không giảm
Dãy A sau khi sắp xếp: 1 2 4 5 7 8
Ví dụ: Bài toán sắp xếp bằng cách tráo đổi

2. Ý tưởng:

- Với mỗi cặp số hạng đứng liền kề trong dãy, nếu số


trước > số sau, ta đổi chỗ chúng cho nhau. (Các số
lớn sẽ được đẩy dần về vị trí xác định cuối dãy)
- Việc này lặp lại nhiều lượt, mỗi lượt tiến hành
nhiều lần so sánh cho đến khi không có sự đổi chỗ
nào xảy ra nữa.
Ví dụ: Bài toán sắp xếp bằng cách tráo đổi

3. Xây dựng thuật toán:


• Nhập N, các số hạng a1, a2, .., an.
• Đầu tiên gọi M là số hạng cần so sánh, vậy M sẽ chứa
giá trị của N: MN
• Nếu số số hạng cần so sánh < 2 thì dãy đã được sắp
xếp. Kết thúc.
• M chứa giá trị mới là số phép so sánh cần thực hiện
trong lượt: M M-1
• Gọi i là số thứ tự của mỗi lần so sánh, đầu tiên i  0.
• Để thực hiện lần so sánh mới, I tăng lên lần 1 (lần so
sánh thứ i)
Ví dụ: Bài toán sắp xếp bằng cách tráo đổi

3. Xây dựng thuật toán:


• Nếu lần so sánh thứ i > số phép so sánh M: đã
hoàn tất M số phép so sánh của lượt này.
• Lặp lại bước 3, bắt đầu lượt kế tiếp (với số hạng
cần so sánh mới chính là M đã giảm 1).
• So sánh 2 phần tử ở lần thứ I là ai
• và ai+1
• Nếu ai>ai+1 thì tráo đổi 2 phần tử này.
• Quay lại bước 5.
Ví dụ: Bài toán sắp xếp bằng cách tráo đổi

a. Cách liệt kê
• Bước 1: Nhập N, các số hạng a1, a2,..,an;
• Bước 2: M  N;
• Bước 3: Nếu M < 2 thì đưa ra dãy A đã được sắp
xếp, rồi kết thúc;
• Bước 4: M  M-1; i 0;
• Bước 5: i  i-1;
• Bước 6: Nếu i> M thì quay lại bước 3;
• Bước 7: Nếu ai > ai+1 thì tráo đổi ai và ai+1 cho nhau;
• Bước 8: Quay lại bước 5;
Ví dụ: Bài toán sắp xếp bằng cách tráo đổi

b. Sơ đồ khối
Mô phỏng thực hiện thuật toán

Lần duyệt 1

6 1 5 3 7 8 10 7 12 4
Mô phỏng thực hiện thuật toán

Lần duyệt 1

1 6 5 3 7 8 10 7 12 4
Mô phỏng thực hiện thuật toán

Lần duyệt 1

1 5 6 3 7 8 10 7 12 4
Mô phỏng thực hiện thuật toán

Lần duyệt 1

1 5 3 6 7 8 10 7 12 4
Mô phỏng thực hiện thuật toán

Lần duyệt 1

1 5 3 6 7 8 10 7 12 4
Mô phỏng thực hiện thuật toán

Lần duyệt 1

1 5 3 6 7 8 10 7 12 4
Mô phỏng thực hiện thuật toán

Lần duyệt 1

1 5 3 6 7 8 10 7 12 4
Mô phỏng thực hiện thuật toán

Lần duyệt 1

1 5 3 6 7 8 7 10 12 4
Mô phỏng thực hiện thuật toán

Lần duyệt 1

1 5 3 6 7 8 7 10 12 4
Mô phỏng thực hiện thuật toán

Lần duyệt 1

1 5 3 6 7 8 7 10 4 12

Kết quả Lần duyệt 1


Mô phỏng thực hiện thuật toán

Lần duyệt 2

1 5 3 6 7 8 7 10 4 12
Mô phỏng thực hiện thuật toán

Lần duyệt 2

1 3 5 6 7 8 7 10 4 12
Mô phỏng thực hiện thuật toán

Lần duyệt 2

1 3 5 6 7 8 7 10 4 12
Mô phỏng thực hiện thuật toán

Lần duyệt 2

1 3 5 6 7 8 7 10 4 12
Mô phỏng thực hiện thuật toán

Lần duyệt 2

1 3 5 6 7 8 7 10 4 12
Mô phỏng thực hiện thuật toán

Lần duyệt 2

1 3 5 6 7 7 8 10 4 12
Mô phỏng thực hiện thuật toán

Lần duyệt 2

1 3 5 6 7 7 8 10 4 12
Mô phỏng thực hiện thuật toán

Lần duyệt 2

1 3 5 6 7 7 8 4 10 12

Kết quả Lần duyệt 2


Mô phỏng thực hiện thuật toán

Lần duyệt 3

1 3 5 6 7 7 8 4 10 12
Mô phỏng thực hiện thuật toán

Lần duyệt 3

1 3 5 6 7 7 4 8 10 12

Kết quả Lần duyệt 3


Mô phỏng thực hiện thuật toán

Lần duyệt 4

1 3 5 6 7 7 4 8 10 12
Mô phỏng thực hiện thuật toán

Lần duyệt 4

1 3 5 6 7 4 7 8 10 12

Kết quả Lần duyệt 4


Mô phỏng thực hiện thuật toán

Lần duyệt 5

1 3 5 6 7 4 7 8 10 12
Mô phỏng thực hiện thuật toán

Lần duyệt 5

1 3 5 6 4 7 7 8 10 12

Kết quả Lần duyệt 5


Mô phỏng thực hiện thuật toán

Lần duyệt 6

1 3 5 6 4 7 7 8 10 12
Mô phỏng thực hiện thuật toán

Lần duyệt 6

1 3 5 4 6 7 7 8 10 12

Kết quả Lần duyệt 6


Mô phỏng thực hiện thuật toán

Lần duyệt 7

1 3 5 4 6 7 7 8 10 12
Mô phỏng thực hiện thuật toán

Lần duyệt 7

1 3 4 5 6 7 7 8 10 12

Kết quả Lần duyệt 7


Mô phỏng thực hiện thuật toán

Lần duyệt 8

1 3 4 5 6 7 7 8 10 12

Kết quả Lần duyệt 8


Mô phỏng thực hiện thuật toán

Lần duyệt 9

1 3 5 4 6 7 7 8 10 12

Kết quả Lần duyệt 9


Mô phỏng thực hiện thuật toán

Lần duyệt 10

1 3 5 4 6 7 7 8 10 12

Kết quả Lần duyệt 10


Bài 4: Bài toán và Thuật toán
(Tiết 5)
Ví dụ: Bài toán tìm kiếm

1. Xác định bài toán:


• Input: Dãy A gồm N số nguyên khác nhau: a1, a2,…,
an và một số nguyên k (khóa)
VD: Dãy A gồm các số nguyên 5 7 1 4 2 9 8 11
25 51. Và k = 2 (k=6)
• Output: Vị trí I mà ai = k hoặc thông báo không
tìm thấy k trong dãy.
Vị trí của 2 trong dãy là 5 (không tìm thấy 6).
Ví dụ: Bài toán tìm kiếm tuần tự

2. Ý tưởng:
Tìm kiếm tuần tự được thực hiện một cách tự
nhiên: lần lượt đi từ số hạng thứ nhất, ta so sánh
giá trị số hạng đang xét với khóa cho đến khi gặp
một số hạng bằng khóa hoặc dãy đã được xét hết
mà không tìm thấy giá trị của khóa trên dãy.
Ví dụ: Bài toán tìm kiếm tuần tự

3. Xây dưng bài toán


a. Cách liệt kê:
• Bước 1: Nhập N, các số hạng a1, a2, .. ,an và giá trị
khóa k;
• Bước 2: i 1;
• Bước 3: Nếu ai =k thì thông báo chỉ số I, rồi kết thúc;
• Bước 4: i  i+1;
• Bước 5: Nếu I > N thì thông báo dãy A không có số
hạng nào có giá trị bằng k, rồi kết thúc;
• Bước 6: Quay lại bước 3;
Ví dụ: Bài toán tìm kiếm tuần tự

b. Sơ đồ khối
Mô phỏng: Bài toán tìm kiếm tuần tự

k = 2 và N = 10

A[1] =A[2]
5 <>= 2A[3]
7 <>A[4]
=2 1 <>
=A[5]
42 <>=22 = 2
A 5 7 1 4 2 9 8 11 25 51
i 1 2 3 4 5 - - - - -

Với i = 5 thì A[5] = 2 = k


Ví dụ: Bài toán tìm kiếm nhị phân
1. Xác định bài toán:
Input: Dãy A là dãy tăng gồm N số nguyên khác
nhau a1, a2,..,an, và một số nguyên k.
VD:Dãy A gồm các số nguyên 2 4 5 6 9 21 22 30
31 33. Và k = 21 (k=25)
Output: Vị trí i mà ai = k hoặc thông báo không tìm
thấy k trong dãy.
Vị trí của 21 trong dãy là 6 (không tìm thấy 25).
Ví dụ: Bài toán tìm kiếm nhị phân

2. Ý tưởng:
Sử dụng tính chất dãy A đã sắp xếp tăng, ta tìm cách
thu hẹp nhanh vùng tìm kiếm bằng cách so sánh k
với số hạng ở giữa phạm vi tìm kiếm (agiữa), khi đó
chỉ xảy ra một trong ba trường hợp:
- Nếu agiữa = k =>tìm được chỉ số, kết thúc;
- Nếu agiữa > k =>việc tìm kiếm thu hẹp, chỉ xét từ
agiữa+1acuối (phạm vi).
Quá trình trên được lặp lại cho đến khi tìm thấy
khóa trên dãy A hoặc phạm vi tìm kiếm bằng rỗng.
Ví dụ: Bài toán tìm kiếm nhị phân
3. Xây dựng thuật toán:
a. Cách liệt kê:
Bước 1: Nhập N, các số hạng a1, a2,.., an và giá trị khóa k;
Bước 2: Đầu  1; Cuối  N;
Bước 3: Giữa  [(Đầu + Cuối)]/2;
Bước 4: Nếu agiữa = k thì thông báo chỉ số Giữa, rồi kết thúc;
Bước 5: Nếu agiữa > k thì đặt Cuối = Giữa -1 rồi sang bước 7;
Bước 6: Đầu  Giữa + 1;
Bước 7: Nếu Đầu > Cuối thì thông báo không tìm thấy khóa
k trên dãy rồi kết thúc;
Bước 8: Quay lại bước 3.
Ví dụ: Bài toán tìm kiếm nhị phân

b. Sơ đồ khối
Mô phỏng: Bài toán tìm kiếm nhị phân

k = 21 và N = 10
i 1 2 3 4 5 6 7 8 9 10
A 2 4 5 6 9 21 22 30 31 33
Dau 1 6 6
Cuoi 10 10 7
Giua 5 8 6
A[Giua] 9 30 21
Lần 1 2 3
duyệt

Với i = Giua = 6 thì A[Giua] = 21 = k

You might also like