khái niệm về giả thuật mã giả và lưu đồ mã giả,phát triển giải thuật ,cấu trúc chương trình,mã giả và lưu đồ là những kiến thức mà chúng tôi sẽ cung cấp cho các bạn trong slide bài giang này .hi vọng những kiến thức này sẽ hữu ích đối với các bạn trong học tập và nghiên cứu
Trang 1Nhập Môn Lập Trình
Giải Thuật – Mã Giả – Lưu Đồ Giải Thuật
Cấu trúc If … Else, Switch
Trang 2Road Map
Giải thuật
Các bước lập trình giải quyết vấn đề
Giải thuật là gì?
Đặc tính của giải thuật
Phát triển giải thuật
Phát triển từ trên xuống (Top-down development)
Từng bước tinh chế (step-wise refinement)
Cấu trúc chương trình
Mã giả và lưu đồ
Mã giả (Pseudo Code)
Trang 4Các bước lập trình giải quyết vấn đề
Chúng ta thường gặp phải những bài toán cần giải quyết
Để giải quyết những bài toán đó, chúng ta cần tìm hiểu chúng trước rồi sau đó mới hoạch định các bước cần làm
Giả sử chúng ta muốn đi từ phòng học F103 đến căn tin Ðể
thực hiện việc này chúng ta cần hiểu nó rồi tìm ra các bước
giải quyết trước khi thực thi các bước đó:
BƯỚC 1 : Rời phòng
BƯỚC 2 : Ðến cầu thang
BƯỚC 3 : Xuống cầu thang
BƯỚC 4 : Ði tiếp đến căn tin
Trang 5Các bước lập trình giải quyết vấn đề
Thủ tục trên liệt kê tập hợp các bước thực hiện được xác định
rõ ràng cho việc giải quyết vấn đề
Một tập hợp các bước như vậy gọi là giải thuật
Trang 6Giải thuật là gì?
Giải thuật hay thuật toán là một chuổi hữu hạn các bước cụ thể
rõ ràng cần thiết để giải quyết bài toán nhất định
Một tập hợp có trình tự của các bước rõ ràng thực thi được
dùng diễn giải một quy trình có kết cục
Trong ngữ cảnh lập trình, thuật toán là một chuỗi các câu lệnh được thiết kế theo quy cách mà nếu các câu lệnh được thực hiện theo một trình tự quy định, kết quả mong muốn sẽ đạt được
Các câu lệnh cần phải được cụ thể và rõ ràng
Kết quả phải được thu sau một số hữu hạn các bước thực thi
Một thuật toán phải có kết cục và không có một hoặc nhiều câu lệnh được lập lại một cách vô hạn
Trang 7Giải thuật là gì?
Ví dụ 1: giải thuật tính tổng hai số
Bước 1: Bắt đầu
Bước 2: Đọc hai số A và B
Bước 3: Cộng A và B, lưu kết quả vào C
Bước 4: Hiện thị kết quả C
Bước 5: Kết thúc
Trang 8Giải thuật là gì?
Ví dụ 2: hướng dẫn làm bánh flan
Nguyên liệu: 05 hột gà, 01 hộp sữa đặc, 200gr đường cát, 01 ống vani, 03 chén sữa tươi, 1,5 lon sữa bò nước đun sôi để nguội, 20 khuôn nhựa có nắp đậy
Trang 9Giải thuật là gì?
100gr đường còn lại cho vào nồi thắng hơi vàng Cho vào 01 muỗng nước khuấy đều nhấc xuống để hơi nguội, chia đều nước đường vừa thắng ra 20 khuôn nhựa đã chuẩn bị sẵn
Cuối cùng cho hỗn hợp trứng sữa vào đều khuôn, đậy nắp lại
Cho bánh vào hấp cách thủy, đun lửa vừa để bánh mịn màng không bị rỗ
Trong lúc hấp bánh khoảng 10 phút mở nắp nồi hấp bánh 1 lần, hấp khoảng 15 – 20 phút là chín bánh
Đem ra để nguội, cho vào tủ lạnh hoặc ủ trong đá ăn mới ngon
Trang 10Giải thuật là gì?
So sánh hai ví dụ:
Các câu lệnh trong ví dụ 1 cụ thể và rõ ràng → kết quả không
Một số bước hướng dẫn trong ví dụ 2 không cụ thể, còn mơ hồ
→ phụ thuộc vào người thực hiện kết quả đạt được có thể:
Trang 11Đặc tính của giải thuật
Để hội đủ điều kiện là thuật toán, một chuỗi các câu lệnh cần có các đặc điểm sau:
Các bước sử dụng trong thuật toán phải được rõ ràng và xác định chính xác
Mỗi câu lệnh được xây dựng sao cho nó có thể được thực hiện trong một thời gian hữu hạn
Tránh trường hợp không chắc chắn thực thi câu lệnh nào kế tiếp
Số bước trong thuật toán nên hữu hạn và thuật toán cần phải được chấm dứt,
có nghĩa là, nó không được có kết thúc mở
Việc thi hành của thuật toán được kết thúc sau một số hữu hạn các bước
Sau khi thực hiện các câu lệnh, tức là sau khi kết thúc thuật toán, sẽ có được kết quả mong muốn
Thuật toán cần được tổng quát đủ để đối phó với mọi tình huống
Trang 12Road Map
Giải thuật
Các bước lập trình giải quyết vấn đề
Giải thuật là gì?
Đặc tính của giải thuật
Phát triển giải thuật
Trang 13Phát triển top-down
Top-down là một phương pháp trong đó giải pháp cho một
vấn đề tính toán lớn được phát triển từ một lời giải tổng quát
mơ hồ đến một thuật toán xác định chính xác
Phát triển bằng cách này đưa đến một phương pháp để xử lý
sự phức tạp của vấn đề bằng cách xé nhỏ chúng thành các đun dễ dàng và dễ hiểu hơn
mô- Quá trình liên tục xé nhỏ một nhiệm vụ xuống thành các
nhiệm vụ con sẽ được tiếp tục cho đến khi các nhiệm vụ con này có thể dễ dàng thực hiện
Trang 15Phát triển top-down (tt)
Phương pháp topdown về bản chất là xé nhỏ một hệ thống để
có được cái nhìn sâu sắc về thành phần của tiểu hệ thống
Trong phương pháp topdown, được hình thành trước nhất là cái nhìn tổng quan của hệ thống Nó được quy định cụ thể
nhưng không chứa bất kỳ chi tiết của hệ thống phụ cấp một
Đôi lúc cần phần cấp xuống nhiều mức độ, cho đến khi toàn
bộ các chi tiết kỹ thuật (specification) được chi tiết hóa đến mức cơ bản nhất
Trang 16
Stepwise refinement
Là một kỹ thuật nhằm phân rã một hệ thống từ chi tiết kỹ thuật mức độ cao thành các thành phần cơ bản
Phân rã một vấn đề phức tạp thành một số bước đơn giản
Mỗi bước này có thể được giải quyết bằng một thuật toán nhỏ hơn và đơn giản hơn so với bài toán tổng thể cần giải quyết
Dễ dàng xây dựng hơn và phác thảo chi tiết hơn
Thuật toán phụ có thể được chia thành nhiều phần nhỏ hơn
Thuật toán tiếp tục được cải tiến theo cách phân rã này này
cho đến khi mỗi bước có đầy đủ chi tiết
Cải tiến có nghĩa là thay thế các bước hiện tại / câu lệnh với một phiên bản mới đầy chi tiết hơn
Trang 19Stepwise refinement (tt)
3 Chế nước sôi vào bình
4 Chờ 5 phút (cho ra trà)
5 Rót trà vào tách
1 Rót trà từ bình vào tách cho đến khi tách đầy
5 bước ban đầu đã được cải tiến thành chuổi các bước phụ chi
tiết hơn (bước 4 không cần thiết)
Một vài bước phụ có thể cải tiến thêm nữa Ví dụ như:
Trang 20Stepwise refinement (tt)
Cải tiến lần hai
2 Đun nước
1 Đổ nước vào ấm nước điện
1 Đặt ấm nước dưới vòi nước
2 Mở vòi nước
3 Chờ đến khi ấm nước đầy
4 Tắt vòi nước
Các bước phụ khác có thể cải tiến thêm nữa
Chương trình sẽ được xây dựng bằng cách thông dịch từng
bước (đã được cải tiến cuối cùng) sang câu lệnh của ngôn ngữ lập trình
Trang 21Stepwise refinement (tt)
1 Bỏ trà vào bình 1.1 Mở hộp trà 1.1.1 Lấy hộp trà từ ngăn tủ
1.1.2 Tháo nắp hộp trà 1.2 Xúc đầy 1 muỗng lá trà
1.3 Bỏ trà vào bình 1.4 Đóng nắp hộp trà 1.4.1 Đặt nắp lên hộp trà
1.4.2 Đặt hộp trà về ngăn tủ
2 Đun nước 2.1 Đổ nước vào ấm nước điện 2.1.1 Đặt ấm nước dưới vòi
nước 2.1.2 Mở vòi nước 2.1.3 Chờ đến khi ấm nước đầy
Trang 22Stepwise refinement (tt)
2.1.4 Tắt vòi nước 2.2 Bật công tắc ấm nước
2.3 Chờ nước sôi 2.3.1 Chờ đến khi ấm nước
kêu 2.4 Tắt công tắc ấm nước
Trang 23Road Map
Giải thuật
Các bước lập trình giải quyết vấn đề
Giải thuật là gì?
Đặc tính của giải thuật
Phát triển giải thuật
Trang 24Cấu trúc chương trình
Một chương trình như Microsoft Windows nhìn bề ngoài không
có gì chung với một video game như World of Warcraft
Tuy nhiên, cho dù mục đích có khác nhau, mọi chương trình đều bao gồm các câu lệnh (dòng mã) “biểu” các máy tính phải làm gì, theo từng bước
Trong mỗi chương trình, các câu lệnh tổ chức theo ba cách: tuần
tự, phân nhánh, hoặc vòng lặp
Bằng cách kết hợp chúng với nhau, bạn có thể viết bất cứ loại
chương trình
Trang 25Cấu trúc tuần tự
Các câu lệnh nối tiếp nhau, từ câu
lệnh đầu tiên ở trên cùng đến câu
lệnh cuối cùng ở phía dưới
Mỗi chương trình tổ chức hầu hết các
câu lệnh của nó theo tuần tự
Ít có chương trình tổ chức tất cả các
câu lệnh của chúng theo tuần tự
Lý do là nếu một chương trình tổ
chức tất cả các câu lệnh của nó theo
tuần tự, chương trình có thể chạy qua
câu lệnh của nó đúng một lần trước
Bắt đầu Câu lệnh 1 Câu lệnh 2 Câu lệnh 3 Câu lệnh 4
Trang 26Cấu trúc phân nhánh
Để thực hiện các chương trình hữu ích
hơn và có tính tương tác, chúng cần phải
chấp nhận và phản ứng với dữ liệu bên
ngoài.
Phân nhánh giúp máy tính chạy các câu
lệnh khác nhau tùy thuộc vào giá trị của
dữ liệu nhất định
Khi bạn xóa một tập tin, chương trình hỏi:
Bạn có thực sự muốn xóa các tập tin?
Nếu bạn nhấn nút Yes, chương trình theo
hướng dẫn để xóa các tập tin Nếu bạn
nhấp vào nút No, chương trình này sẽ thực
hiện cậu lệnh khác
Bắt đầu
Kết thúc
Tập tin không bị xóa
Xóa tập tin?
Xóa tập tin
Trang 27Cấu trúc vòng lặp
Để giữ cho một chương trình chạy
cho đến khi bạn muốn nó dừng lại,
bạn cần sử dụng chỉ dẫn vòng lặp
Các câu lệnh vòng lặp làm cho máy
tính lặp lại một hoặc nhiều hướng
dẫn
Bên cạnh việc giữ một chương trình
chạy cho đến khi người dùng muốn
ngưng, Các câu lệnh vòng lặp giúp
bạn tránh phải nhập các câu lệnh gần
như nhau nhiều lần
Kết thúc
Bắt đầu Câu lệnh 1 Câu lệnh 2 Câu lệnh 3 Câu lệnh 4
Trang 29Road Map
Giải thuật
Các bước lập trình giải quyết vấn đề
Giải thuật là gì?
Đặc tính của giải thuật
Phát triển giải thuật
Phát triển từ trên xuống (Top-down development)
Từng bước cải tiến (step-wise refinement)
Cấu trúc chương trình
Mã giả và lưu đồ
Mã giả (Pseudo Code)
Lưu đồ (Flowchart)
Trang 30Mã giả và lưu đồ
Hầu hết các ký hiệu được dùng rộng rãi để phát triển thuật
toán là sơ đồ (flow chart) và mã giả (pseudo code)
Chúng độc lập với các ngôn ngữ lập trình được sử dụng để
thực hiện các thuật toán
Cả hai phương pháp này đều dùng để xác định một tập hợp các bước cần được thi hành để có được lời giải bài toán
Mã giả và lưu đồ chỉ đưa ra những bước cần làm
Lập trình viên phải viết mã cho việc thực thi những bước này qua việc dùng một ngôn ngữ nào đó
Trang 31Mã giả
Mã giả không phải là mã thật
Mã giả sử dụng một tập hợp những từ tương tự như mã thật nhưng nó không thể được biên dịch và thực thi như mã thật
Ví dụ hiển thị câu 'Hello World!'
BEGINDISPLAY 'Hello World!'END
Mỗi đoạn mã giả phải bắt đầu với từ BEGIN hoặc START, và kết thúc với từ END hay STOP
Ðể hiển thị giá trị nào đó, từ DISPLAY hoặc WRITE được
dùng
Trang 32Mã giả
Khi giá trị được hiển thị là một giá trị hằng (không đổi), trong trường hợp này là (Hello World), nó được đặt bên trong dấu nháy
Tương tự, để nhận một giá trị của người dùng, từ INPUT hay READ được dùng
Ví dụ tính tổng hai số
BEGIN
INPUT A, BDISPLAY A + BEND
Trang 33Mã giả
Trong đoạn mã giả này, người dùng nhập vào hai giá trị, hai giá trị này được lưu trong bộ nhớ và có thể được truy xuất như
là A và B theo thứ tự
Những vị trí được đặt tên như vậy trong bộ nhớ gọi là biến
Bước kế tiếp trong đoạn mã giả sẽ hiển thị tổng của hai giá trị trong biến A và B
Để lưu tổng của hai biến trong một biến thứ ba rồi hiển thị giá trị biến này như trong ví dụ sau đây
Trang 34Mã giả
BEGIN
INPUT A, B
C = A + B DISPLAY C
END
Một tập hợp những chỉ thị hay các bước trong mã giả thì được gọi chung là một cấu trúc
Có ba loại cấu trúc : tuần tự, chọn lựa và lặp lại
Trong đoạn mã giả ta viết ở trên, chúng ta dùng cấu trúc tuần tự
Chúng được gọi như vậy vì những chỉ thị được thi hành tuần tự, cái này sau cái khác và bắt đầu từ điểm đầu tiên
Hai loại cấu trúc còn lại sẽ được đề cập trong những chương sau
Trang 35Lưu đồ
Là một hình ảnh minh hoạ cho giải thuật
Vẽ ra biểu đồ của luồng chỉ thị hay những hoạt động trong một tiến trình
Mỗi hoạt động như vậy được biểu diễn qua những ký hiệu
Ví dụ: hiển thị câu 'Hello World!'
S TA RT DIS P L AY 'H ell o W o rld !'
STO P
Trang 36Lưu đồ
Giống với đoạn mã giả là cùng bắt đầu với từ BEGIN hoặc
START, và kết thúc với từ END hay STOP
Từ khóa DISPLAY hay PRINT được dùng để hiển thị giá trị nào đó đến người dùng
Tuy nhiên, ở đây, mọi từ khóa thì nằm trong những ký hiệu
Những ký hiệu khác nhau mang một ý nghĩa tương ứng được trình bày ở bảng sau:
Trang 37Lưu đồ
Ký hiệu trong lưu đồ
Trang 39Lưu đồ
Vài điểm cần thiết khác phải chú ý khi vẽ một lưu đồ :
Lúc đầu chỉ tập trung vào khía cạnh logic của bài toán và vẽ các luồng xử lý chính của lưu đồ
Một lưu đồ có duy nhất một điểm bắt đầu (START) và một
điểm kết thúc (STOP)
Không cần thiết phải mô tả từng bước của chương trình trong lưu đồ mà chỉ cần các bước chính và có ý nghĩa cần thiết
Trang 40Ưu điểm của mã giả trên lưu đồ
Mã giả được ưu chuộng hơn lưu đồ như một công cụ phát triển logic vì lý do sau đây:
Mã giả ít cồng kềnh và ít tốn thời gian để phát triển vì không
có hộp hoặc ký hiệu cần phải vẽ ra như trong lưu đồ
Dễ dàng hơn để thay đổi vì khi chèn một biểu tượng trong lưu
đồ đòi hỏi toàn bộ sơ đồ được vẽ lại
Do ngôn ngữ viết và các quy tắc cú pháp như tiếng Anh, mã giả khá giống với ngôn ngữ lập trình cao cấp và do đó mã lệnh được viết dễ dàng hơn cũng như dễ dịch sang ngôn ngữ lập trình cao cấp
Mã giả dễ dàng đọc và dễ hiểu
Trang 41Lưu đồ, Mã giả: toán tử
Toán tử gán (assignment): = hay ←
Biến = giá_trị (có thể là hằng số hay biến)
Diem = 10 (gán giá trị 10 vào biến Diem)
Diem ← 10 (gán giá trị 10 vào biến Diem)
A = B (gán giá trị của biến B cho biến A)
Biểu thức số học (arithmetic expression)
Trang 42Lưu đồ, Mã giả : toán tử
Toán tử quan hệ (relational operator):
Kiểm tra mối quan hệ giữa hai biến, hay giữa một biến và một hằng
Trang 43Lưu đồ, Mã giả : toán tử
Toán tử luận lý (Logical Operators):
kết hợp hay phủ định biểu thức có chứa các toán tử quan hệ
khi chỉ một trong hai
toán hạng đều true
NOT Chuyển đổi giá trị
của toán hạng duy
nhất từ true thành
false và ngược lại.
Trang 44Lưu đồ, Mã giả : cấu trúc tuần tự
Ví dụ: Viết một đoạn mã giả và vẽ một lưu đồ để nhập một
giá trị là độ 0F (Fahrenheit) và chuyển nó sang độ 0C (Celsius) [Hướng dẫn: C = 5(F-32)/9]
BEGIN
C = 0INPUT F
C = 5 * ( F – 32) / 9DISPLAY C
END
Trang 45Lưu đồ, Mã giả : cấu trúc tuần tự
Trang 46Lưu đồ, Mã giả : cấu trúc tuần tự
/* chuyển nhiệt độ 0F (Fahrenheit) sang độ 0C */
Trang 48Bài tập nhóm – Bài Giải
A = B
B = C Display A,B STOP
Trang 49Bài tập nhóm – Bài Giải
/* Hoan doi gia tri hai bien */
#include <stdio.h>
#include <conio.h>
void main() { int A, B, C printf(“Nhap so thu nhat: ”); /* Nhap A, B */
scanf(“%d”,&A);
printf(“Nhap so thu hai: ”);
scanf(“%d”,&B);
printf(“Gia tri truoc khi hoan doi A = %d, B= %d\n”,A,B);
C = A; /* Hoan doi gia tri */
Trang 51 Một cấu trúc ‘IF’ bắt đầu là IF theo sau là điều kiện
Nếu điều kiện là đúng (điều kiện được thỏa mãn) thì chương trình đi vào phần thân của cấu trúc IF và thực thi các câu lệnh trong phần thân
Nếu điều kiện sai (không thỏa điều kiện), những câu lệnh ở phần thân không được thực thi và chương trình nhảy đến câu lệnh sau END IF (chấm dứt cấu trúc IF)
Cấu trúc IF phải được kết thúc bằng END IF
Trang 55{ int number, result;
printf(“Nhap 1 so: ”); /* INPUT num */
Trang 56Lưu đồ: cấu trúc IF … ELSE
Cấu trúc IF … ELSE
Trong ví dụ trên, nếu ta muốn cho ra thông điệp báo rằng
số đó không là số chẵn tức là số lẻ thay vì chỉ thoát ra
Ðể làm điều này ta có thể thêm câu lệnh IF khác để kiểm tra xem trường hợp số đó không chia hết cho 2
Trang 57Lưu đồ: cấu trúc IF … ELSE
Trang 58Lưu đồ: cấu trúc IF … ELSE
Trong ví dụ trên, phải kiểm tra điều kiện 2 lần cho 2 trường hợp bài trừ (có cái này thì không có cái kia)
Ngôn ngữ lập trình cung cấp cho chúng ta cấu trúc IF…
ELSE
Dùng cấu trúc này sẽ hiệu quả và tốt hơn để giải quyết vấn đề
Cấu trúc IF …ELSE giúp lập trình viên chỉ làm một phép so
sánh và sau đó thực thi các bước tùy theo kết quả của phép so sánh là True (đúng) hay False (sai)
Trang 59Lưu đồ: cấu trúc IF … ELSE
Cấu trúc chung của câu lệnh IF…ELSE như sau:
Trang 60Lưu đồ: cấu trúc IF … ELSE
Khối lệnh 2;
}
…
Trang 61Lưu đồ: cấu trúc IF … ELSE
Trang 62Lưu đồ: cấu trúc IF … ELSE
Trang 63Lưu đồ: cấu trúc IF … ELSE
báo nếu đúng là số chẵn, nếu không hiển thị số lẻ */
#include <stdio.h>
#include <conio.h>
void main()
{ int number, result;
printf(“Nhap 1 so: ”); /* INPUT num */