2/19/2011 1 PHẦN I GIỚI THIỆU VỀ CẤU TRÚC DỮ LIỆU & GIẢI THUẬT ¡ Từ bài toán đến chương trình ¡ Giải thuật § Khái niệm giải thuật § Các đặc trưng của giải thuật § Ngôn ngữ biểu diễn giải thuật § Một v[.]
Trang 1PHẦN I: GIỚI THIỆU VỀ CẤU TRÚC DỮ LIỆU & GIẢI THUẬT
¡ Giải thuật
§ Khái niệm giải thuật
§ Các đặc trưng của giải thuật
§ Ngôn ngữ biểu diễn giải thuật
§ Một vài ví dụ về giải thuật
§ Các cấu trúc suy luận cơ bản của giải thuật
Trang 2¡ Các bước giải bài toán bằng máy tính
§ Mô tả các bước giải bài toán
§ Vẽ sơ đồ xử lý
§ Viết chương trình xử lý bằng ngôn ngữ giả
§ Chọn ngôn ngữ lập trình và chuyển chương trình
từ ngôn ngữ giải sang ngôn ngữ lập trình
§ Thực hiện chương trình: chạy chương trình à
nhập dữ liệu à nhận kết quả
¡ Khái niệm giải thuật
¡ Các đặc trưng của giải thuật
¡ Ngôn ngữ biểu diễn giải thuật
¡ Một vài ví dụ về giải thuật
¡ Các cấu trúc suy luận cơ bản của giải thuật
Trang 3¡ Ví dụ: Hoán đổi chất lỏng trong 2 bình A
(nước mắm) và B (rượu):
§ Cần có thêm một bình thứ 3 gọi là bình C
§ Bước 1: đỗ nước mắm từ A à C
§ Bước 2: đỗ rượu từ B à A
§ Bước 3: đỗ nước mắm từ C à B
¡ Giải thuật là một dãy các thao tác trên
những dữ liệu vào sao cho sau một số hữu
hạn bước ta thu được kết quả của bài toán”.
¡ Tính kết thúc
§ Số bước là hữu hạn
§ Máy phải thực hiện được
§ Cho cùng kết quả trên các máy khác nhau
§ “Vét” hết mọi trường hợp của bài toán
§ Áp dụng được cho các bài toán cùng loại
§ Thực hiện nhanh
§ Ít tốn tài nguyên
Trang 4¡ Ngôn ngữ tự nhiên
¡ Ngôn ngữ sơ đồ
¡ Ngôn ngữ giả
ax + b = 0
§ Bước 1: Nhận vào giá trị của các tham số a, b
§ Bước 2: Xét giá trị của a xem có bằng 0 hay không
▪ Nếu a = 0 thì thực hiện bước 3
▪ Nếu a khác 0 thì thực hiện bước 4
§ Bước 3:
▪ Nếu b bằng 0 à pt vô số nghiệm
▪ Nếu b khác 0 à pt vô nghiệm
§ Bước 4: Phương trình có nghiệm x = -b/a
Trang 5¡ Mô tả giải thuật bằng các sơ đồ khối đã
được qui ước trước
Bắt đầu / Kết thúc Đường đi Nhập / Xuất Chương trình con
Lựa chọn Lời chú thích
¡ Ví dụ: dùng lưu đồ biểu diễn giải thuật tìm
ước chung lớn nhất của hai số a và b
Bắt đầu
Nhập a, b
a < b
UCLN = b UCLN = a
A
A
a và b chia hết cho UCLN
Xuất UCLN
Kết thúc UCLN = UCLN - 1
Trang 6¡ Ngôn ngữ kết hợp giữa ngôn ngữ tự nhiên với
các cấu trúc câu lệnh của một ngôn ngữ lập
trình
¡ Ví dụ: Giải thuật giải pt bậc nhất ax + b = 0
§ Nhập vào a, b
§ IF (a == 0) THEN
IF (b == 0) THEN
Kết luận pt có vô số nghiệm
ELSE
Kết luận pt vô nghiệm
ELSE
Kết luận pt có nghiệm x = -b/a
¡ Ví dụ 1: Yêu cầu
§ Nhập vào 1 dãy có n số
hạng a1, a2, a3, …, an
§ Tính tổng S:
S = a1 + a2 + a3 + … + an
§ Xuất S ra màn hình
Bắt đầu Nhập số các số hạng n
S = 0
i = 1
i <= n
Xuất S
Kết thúc
Sai
Nhập số ai
S = S + ai
i = i + 1
Đúng
Trang 7¡ Ví dụ 2: Yêu cầu
§ Nhập vào hai hệ số a, b
của pt: ax + b = 0
§ Cho biết nghiệm của pt
Bắt đầu Nhập a, b
a = 0
Nghiệm
x = -b/a
Kết thúc
Sai
PT vô nghiệm
Đúng
b = 0
PT vô số nghiệm
¡ 3 cấu trúc suy luận cơ bản:
§ Tuần tự (Sequential)
▪ Các công việc được thực hiện tuần tự, công việc này nối
tiếp công việc kia
§ Cấu trúc lựa chọn (Selection)
▪ Lựa chọn một công việc để thực hiện căn cứ vào một
điều kiện nào đó
▪ Cấu trúc 1: Nếu <Điều kiện> (Đúng) thì thực hiện <Công việc>
▪ Cấu trúc 2: Nếu <Điều kiện> (Đúng) thì thực hiện <Công việc 1>
ngược lại (Điều kiện sai) thì thực hiện <Công việc 2>
▪ Cấu trúc 3: Trường hợp <i> thực hiện <Công việc i>
Trang 8¡ 3 cấu trúc suy luận cơ bản (tt):
§ Cấu trúc lặp (Repeating)
▪ Lặp lại thực hiện một công việc không hoặc nhiều lần
căn cứ vào một điều kiện nào đó
▪ Có 2 dạng như sau:
▪ Lặp với số lần xác định
▪ Lặp với số lần không xác định
¡ Tập hợp các giá trị có cùng một tính chất và
tập hợp các phép toán thao tác trên các giá
trị đó
¡ Ví dụ:
int x, y;
float diem_trung_binh = 8.25;
¡ Có 2 loại:
§ Kiểu dữ liệu sơ cấp
§ Kiểu dữ liệu có cấu trúc
Trang 9¡ Kiểu dữ liệu có giá trị đơn nhất
¡ Ví dụ: Kiểu int trong ngôn ngữ C
§ Là kiểu số nguyên
§ Phạm vi biểu diễn: -32768 đến 32767
§ Các phép toán: +, -, *, /, %
¡ Kiểu dữ liệu có giá trị là sự kết hợp của các
giá trị khác
¡ Ví dụ: Kiểu chuỗi trong C
§ Là một dãy liên tiếp các ký tự
§ Ví dụ: Hello World
‘H’, ‘E’, ‘L’, ‘L’, ‘O’, ‘W’, ‘O’, ‘R’, ‘L’, ‘D’
Trang 10¡ Ngôn ngữ dùng để viết chương trình cho
máy tính
¡ Phân loại:
§ Ngôn ngữ máy (machine language)
§ Hợp ngữ (assemply language)
§ Ngôn ngữ cấp cao (high-level language)
¡ Các chỉ thị dưới dạng
nhị phân, can thiệp
trực tiếp vào trong các
mạch điện tử
¡ Có thể được thực hiện
ngay
¡ Dễ sai sót, cồng kềnh,
Machine Language
10100110 01110110
00100110 00000000
01001110 10100110
11001110 00101110
10100110 01001110
01001110 10000110
etc
Trang 11¡ Bao gồm tên các câu lệnh và quy tắc viết các câu
lệnh đó
¡ Tên câu lệnh bao gồm 2 phần:
§ Phần mã lệnh: chỉ phép toán cần thực hiện
§ Phần địa chỉ: chứa toán hạng của phép toán
¡ Để máy thực hiện được chương trình viết bằng
hợp ngữ thì chương trình đó phải được dịch sang
ngôn ngữ máy bằng công cụ gọi là Assembler
¡ Ví dụ: INPUT a
ànhập giá trị cho a từ bàn phím
¡ Gần gũi với ngôn ngữ
của con người
¡ Một chương trình được
viết bằng ngôn ngữ cấp
cao được gọi là chương
trình nguồn ( source
program )
¡ Để máy tính thực hiện
được chương trình
nguồn thì nó phải được
dịch thành dạng chương
trình có khả năng thực
thi bằng cách dùng công
cụ gọi là chương trình
dịch
#include “stdio.h”
int main() {
printf(“Hello World!”);
return 0;
}
00001101 10101010
00111001 10101010
00111111 00000011
High-level
Executable Code
Chương trình dịch (Compiler)
Trang 12¡ Chương trình dùng để chuyển chương trình
nguồn sang chương trình đích
§ Thông dịch ( interpret ): dịch từng câu lệnh, dịch đến
đâu thực thi đến đó
§ Biên dịch ( compile ): dịch toàn bộ chương trình
nguồn sang chương trình đích rồi mới thực thi
¡ Ví dụ:
§ Thông dịch: ngôn ngữ PHP, Python, LISP
§ Biên dịch: ngôn ngữ C, Pascal
§ Kết hợp cả hai: Net, Java