hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Cấu trúc dữ liệu và giải thuật
    • Lập Trình C# Cơ Bản
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Học C căn bản
Lược đồ giải thuật và mã giả để biểu diễn thuật toán bằng hình học và cú pháp và các cấu trúc luồng chạy trong lập trình

Lược đồ giải thuật và mã giả để biểu diễn thuật toán bằng hình học và cú pháp và các cấu trúc luồng chạy trong lập trình

  • 31-01-2022
  • Toanngo92
  • 1 Comment

Mục lục

  • Khái niệm mã giả (pseudo code):
      • Ví dụ cơ bản nhất về viết mã giả:
      • Luồng chạy ( tuần tự thực thi ) của mã giả:
      • Một số từ khóa thường gặp khi biểu diễn mã giả:
      • Ví dụ cơ bản mã giả với một bài toán tính tổng 2 số do người dùng nhập vào:
  • Khái niệm lược đồ giải thuật (algorithm diagram):
  • Các cấu trúc luồng chạy nâng cao trong lập trình
      • Cấu trúc IF (nếu), IF – ELSE (nếu thì – nếu không thì), IF – ELSE IF – ELSE (chia luồng chương trình thành nhiều nhánh dựa theo điều kiện)
      • Cấu trúc AND/OR ( kiểm tra cùng lúc nhiều điều kiện kết hợp)
      • Cấu trúc NESTED IF (IF lồng nhau)
      • Cấu trúc LOOP (vòng lặp)

Khái niệm mã giả (pseudo code):

Đây là một khái niệm mã nguồn nhưng không phải mã nguồn thật của bất cứ ngôn ngữ lập trình nào cả, để dễ hình dung, chúng ta sẽ hiểu như sau: Hãy hình dung trong cuộc sống, với ngôn ngữ thực tế một từ xin chào bằng tiếng Việt có thể dịch sang các ngôn ngữ khác nhau ví dụ tiếng anh là hello, tiếng Pháp là bonjour …., cùng để mô tả một lời chào. Trong lập trình cũng vậy, mỗi ngôn ngữ lập trình sẽ hiểu và biên dịch cùng một công việc, nhưng có sự khác biệt về mặt cú pháp tùy theo đặc điểm và cấu trúc của mỗi ngôn ngữ. Vì thế, khi tiếp cận lập trình, chúng ta có thể sử dụng khái niệm mã giả để mô tả chung một nội dung công việc theo phong cách viết code nhưng ngắn gọn và dễ hiểu hơn. Và ngôn ngữ này trình biên dịch trên máy tính không thể biên dịch được mà chủ yếu để giao tiếp giữa các lập trình viên với nhau. ( Trong thực tế, khi trao đổi chuyên môn lập trình, lập trình viên cũng ít khi viết mã giả để giao tiếp mà chủ yếu sẽ nói chuyện để mô tả và hiểu vấn đề, tuy nhiên trong một vài trường hợp vấn đề phức tạp hoặc với các lập trình viên mới, các viết mã giả để mô tả vấn đề cũng được áp dụng).

Các bạn đã có một chút kĩ năng về lập trình hoặc đã tiếp cận một vài ngôn ngữ lập trình rồi thì có thể không cần tham khảo bài viết này.

Ví dụ cơ bản nhất về viết mã giả:

BEGIN
DISPLAY "hello world"
END

Đây là một ví dụ cơ bản về việc ra lệnh cho máy tính nhưng với phong cách sử dụng mã giả (pseudo code), cách viết này sẽ ngắn gọn, dễ hiểu và nhiệm vụ của lập trình viên là sẽ dựa theo cú pháp của từng ngôn ngữ lập trình cụ thể để viết dòng lệnh yêu cầu máy tính in ra dòng chữ “hello world” .

Luồng chạy ( tuần tự thực thi ) của mã giả:

  1. BEGIN : bắt đầu chương trình
  2. DISPLAY “hello world” : in ra màn hình dòng chữ “hello world”
  3. END : Kết thúc chương trình

Các từ khóa của mã giả có thể thay đổi linh hoạt tùy theo khẩu vị của mỗi người, nhưng chúng ta có thể hiểu START hay BEGIN hay thậm chí có thể việt hóa thành BATDAU cũng là mã giả để biểu diễn cú pháp bắt đầu chương trình mà thôi. Tương tự với END/STOP/KETTHUC, và cặp từ khóa này thường đi kèm với nhau vì trong lập trình, có bắt đầu phải có kết thúc.

Một số từ khóa thường gặp khi biểu diễn mã giả:

  • BEGIN/START => Bắt đầu chương trình
  • END/STOP => Kết thúc chương trình
  • INPUT => Yêu cầu người dùng nhập liệu và lưu vào bộ nhớ (tương tác với bàn phím)
  • DISPLAY/WRITE => In ra màn hình
  • IF/ELSE => Nếu/thì sử dụng để rẽ nhánh luồng chạy ( tuần tự thực thi chương trình dựa theo một điều kiện đã được tính toán)
  • BEGIN LOOP/END LOOP => bắt đầu và kết thúc vòng lặp ( một khái niệm trong lập trình sẽ được đề cập ở phần sau bài viết)

Ví dụ cơ bản mã giả với một bài toán tính tổng 2 số do người dùng nhập vào:

BEGIN
INPUT A
INPUT B
C = A + B
DISPLAY C
END

Đoạn mã giả trên yêu cầu máy tính thực thi tuần tự các công việc:

  1. Bắt đầu chương trình
  2. Yêu cầu người dùng nhập liệu 2 số và đặt tên 2 tài nguyên lưu trữ A,B để lưu giá trị người dùng nhập liệu,
  3. Ngoài ra cần một tài nguyên C, được tính toán bằng phép tính tổng của A và B
  4. sau đó hiển thị giá trị của tài nguyên có tên C ra màn hình.
  5. Kết thúc chương trình

Khái niệm lược đồ giải thuật (algorithm diagram):

Đây là một dạng biểu diễn giải thuật dưới dạng hình học, khi đọc lược đồ giải thuật, lập trình viên sẽ hình dung được luồng chạy của chương trình, và mỗi hành động trong tiến trình thực thi sẽ được biểu diễn bằng một ký hiệu tương ứng.

Bảng mô tả các ký hiệu trong lược đồ giải thuật:

Ký hiệuMô tả khái niệm
Bắt đầu/ kêt thúc chương trình (Terminator)
Nhập vào, xuất/in ra màn hình (Input/Output)
Các bước tính toàn (processing)
Quyết định rẽ nhánh chương trình theo điều kiện (Decision)
Kết nối trong trang, sử dụng để kết nối với thành phần lược đồ khác khi lược đồ quá dài hoặc phức tạp (On-page connector)
Kết nối ngoài trang, sử dụng để kết nối với thành phần lược đồ khác khi lược đồ quá dài hoặc phức tạp (Off-page connector)

Duới đây là lược đồ giải thuật với bài toán tính tổng 2 số do người dùng nhập vào:

Lược đồ giải thuật trên yêu cầu máy tính thực thi tuần tự các công việc:

  1. Bắt đầu chương trình (Terminator)
  2. Yêu cầu người dùng nhập liệu 2 số và đặt tên 2 tài nguyên lưu trữ A,B để lưu giá trị người dùng nhập liệu. (Input)
  3. Ngoài ra cần một tài nguyên C, được tính toán bằng phép tính tổng của A và B (Processing)
  4. sau đó hiển thị giá trị của tài nguyên có tên C ra màn hình. (Output)
  5. Kết thúc chương trình (Terminator)

Các cấu trúc luồng chạy nâng cao trong lập trình

Như mô tả ở phần trên, chương trình chạy theo cấu trúc tuần tự, luồn chạy sẽ đi từ trên xuống, nâng cao hơn một chút, ta thử hình dung:

  • Giải quyết bài toán kiểm tra dữ liệu người dùng nhập liệu vào số chẵn hay lẻ.
  • Giải quyết bài toán in 1000 lần một nội dung “dong 1′, ‘dong 2’ … ‘dong 100’ ra màn hình.

Với các bài toán này, chúng ta sẽ cần tiếp cận một vài khái niệm cấu trúc nâng cao hơn trong lập trình, cấu trúc này áp dụng cho hầu hết tất cả các ngôn ngữ lập trình, và các lập trình viên đều nằm lòng.

Để giải quyết bài toán số 1, chúng ta sử dụng cấu trúc IF (nếu), chúng ta có thể hình dung giống thực tế nếu thỏa mãn điều kiện thì làm một công việc gì đó.

Cấu trúc IF (nếu), IF – ELSE (nếu thì – nếu không thì), IF – ELSE IF – ELSE (chia luồng chương trình thành nhiều nhánh dựa theo điều kiện)

Cấu trúc IF luôn đi kèm cùng 1 điều kiện để kiểm tra, máy tính sẽ dựa theo điều kiện kiểm tra để rẽ nhánh chương trình theo ý đồ của lập trình viên. Nếu điều kiện đúng, luồng chạy chương trình sẽ nhảy vào các câu lệnh của phần thân bên trong cấu trúc IF để thực thi, chương trình sẽ xác định phần thân bằng từ khóa ENDIF. Một cấu trúc IF luôn phải kết thúc bằng từ khóa ENDIF

Mã giả đầu tiên sử dụng cấu trúc IF cho bài toán kiểm tra dữ liệu người dùng nhập liệu vào số chẵn hay lẻ:

BEGIN
DISPLAY "Nhap vao so can kiem tra"
INPUT A
RES = A MOD 2
IF (RES == 0)
DISPLAY "So vua nhap vao la so chan"
ENDIF
END

Mã giả rút gọn hơn khi kiểm tra trực tiếp biểu thức A MOD 2 có bằng 0 hay không, không cần thông qua một tài nguyên RES để lưu trữ giá trị

BEGIN
DISPLAY "Nhap vao so can kiem tra"
INPUT A
IF (A MOD 2 == 0)
DISPLAY "So vua nhap vao la so chan"
ENDIF
END

Cấu trúc IF ELSE (nếu – thì / nếu không – thì)

Ở ví dụ mã giả phía trên, chúng ta thấy nếu như điều kiện không thỏa mãn, chương trình sẽ kết thúc mà không in ra dòng “So vua nhap la so le”, để xử lý vấn đề này, nếu chỉ dùng IF thì cách làm bằng mã giả sẽ là:

BEGIN
DISPLAY "Nhap vao so can kiem tra"
INPUT A
IF (A MOD 2 == 0)
DISPLAY "So vua nhap vao la so chan"
ENDIF
IF (A MOD 2 !=0)
DISPLAY "So vua nhap vao la so le"
ENDIF
END

Tuy nhiên chúng ta có thể sử dụng giả pháp bổ sung thêm từ khóa ELSE bên trong cấu trúc IF để rẽ nhánh chương trình khi kết quả của phép chia lấy dư khác 0, mã giả như sau:

BEGIN
DISPLAY "Nhap vao so can kiem tra"
INPUT A
IF (A MOD 2 == 0)
DISPLAY "So vua nhap vao la so chan"
ELSE
DISPLAY "So vua nhap vao la so le"
ENDIF
END

Ngoài ra, với tình huống này chúng ta hoàn toàn có thể làm cấu trúc IF như sau, kết quả in ra vẫn tương tự

BEGIN
DISPLAY "Nhap vao so can kiem tra"
INPUT A
IF (A MOD 2 != 0)
DISPLAY "So vua nhap vao la so le"
ELSE
DISPLAY "So vua nhap vao la so chan"
ENDIF
END

Với cấu trúc IF ELSE, mã giả sẽ có phần ngắn gọn và dễ đọc dễ hiểu, và nếu xét theo góc độ logic, cách làm IF phía trên chương trình phải 1 lần nữa kiểm tra với điều kiện khác 0, còn với IF ELSE , chúng ta chỉ cần kiểm tra 1 lần, khi điều kiện không thỏa mãn chương trình sẽ lập tức rẽ nhánh vào khối lệnh phần thân bên trong else , và thông thường, lập trình viên hay lựa chọn cách làm này.

Lược đồ giải thuật cho bài toán trên:

Lược đồ giải thuật bài toán kiểm tra số người dùng nhập vào là lẻ hay số chẵn

Cấu trúc IF ELSE IF ELSE

Với cấu trúc này, bạn có thể rẽ nhánh chương trình thành nhiều hơn 2 luồng chạy dựa theo điều kiện chương trình, tham khảo mã giả sau:

BEGIN
IF ( DIEUKIEN1 )
// LAM GI DO
ELSEIF ( DIEUKIEN2)
// LAM GI DO
ELSE
// TRUONG HOP CON LAI
ENDIF
END

Cấu trúc AND/OR ( kiểm tra cùng lúc nhiều điều kiện kết hợp)

Chúng ta mới tiếp cận cấu trúc IF ở phần trước, tuy nhiên chỉ mới sử dụng cho bài toán kiểm tra 1 điều kiện là kết phép chia lấy dư có bằng 0 hay không, ở phần giới thiệu này, chúng ta đến với giải khái niệm sử dụng AND/OR để kiểm tra cùng lúc nhiều điều kiện trong chương trình.

Ví dụ mã giả máy tính giải quyết bài toán sau để giải thích về cấu trúc AND:

Kiểm tra một sinh viên do người dùng nhập vào bao gồm tên, tuổi, điểm số, dựa vào thang điểm để xếp hạng. Thang điểm như sau:

  • Hạng A: 8<=điểm<=10
  • Hạng B: 6<=điểm<=8
  • Hạng C: <6
BEGIN
DISPLAY "NHAP VAO SINH VIEN"
DISPLAY "NHAP VAO TEN";
INPUT NAME
DISPLAY "NHAP VAO TUOI";
INPUT AGE
DISPLAY "NHAP VAO DIEM";
INPUT MARK
IF (MARK >= 8 AND MARK <= 10)
DISPLAY "SINH VIEN " + NAME + " XEP HANG A"
ELSE IF(MARK >= 6 AND MARK <=8)
DISPLAY "SINH VIEN " + NAME + " XEP HANG B"
ELSE
DISPLAY "SINH VIEN " + NAME + " XEP HANG C"
ENDIF
END

Ví dụ mã giả máy tính giải quyết bài toán sau để giải thích về cấu trúc OR:

Kiểm tra dữ liệu người dùng nhập vào sinh viên do người dùng nhập vào bao gồm tên, tuổi, kiểm tra xem tuổi người dùng nhập vào, nếu lớn hơn 0 và nhỏ hơn 18 thì in ra là không hợp lệ

BEGIN
DISPLAY "NHAP VAO SINH VIEN"
DISPLAY "NHAP VAO TEN";
INPUT NAME
DISPLAY "NHAP VAO TUOI";
INPUT AGE
IF(AGE < 0 OR AGE > 18)
DISPLAY "TUOI NHAP VAO KHONG HOP LE"
ENDIF
// DO SOMETHING
END

Cấu trúc NESTED IF (IF lồng nhau)

Ví dụ mã giả giải quyết bài toán về cấu trúc IF lồng nhau

Giải quyết bài toán kiểm tra dữ liệu sinh viên do người dùng nhập vào bao gồm tên, tuổi và điểm số,

Bước 1: nếu tên không thỏa mãn in ra chưa nhập tên và kết thúc

Bước 2: nếu tên thỏa mãn, yêu cầu nhập tuổi nếu tuổi không thỏa mãn lớn hơn 0 và nhỏ hơn 18 thì in ra màn hình không hợp lệ và kết thúc

Bước 3: nếu thỏa mãn thì yêu cầu nhập điểm số, tiếp tục kiểm tra điểm số để xếp hạng

  • Hạng A: 8<=điểm<=10
  • Hạng B: 6<=điểm<=8
  • Hạng C: <6
BEGIN
DISPLAY "NHAP VAO TEN SINH VIEN"
INPUT NAME
IF ( COUNTCHARACTERS(NAME) => 0 )
 DISPLAY "NHAP VAO TUOI SINH VIEN"
 INPUT AGE
   IF (AGE < 0 OR AGE > 18)
     DISPLAY "TUOI KHONG THOA MAN YEU CAU"
   ELSE
     INPUT MARK
       IF(MARK >= 8 AND MARK =< 10)
         DISPLAY "SINH VIEN XEP HANG A"
       ELSE IF(MARK >= 6 And MARK <= 8)
         DISPLAY "SINH VIEN XEP HANG B"
       ELSE
         DISPLAY "SINH VIEN XEP HANG C"
       ENDIF
   ENDIF
ELSE
 DISPLAY "CHUA NHAP TEN SINH VIEN"
ENDIF
END

Cấu trúc LOOP (vòng lặp)

Như các cấu trúc chúng ta đã học phía trên, đến đây chúng ta có thể hiểu cơ bản chương trình máy tính sẽ thực thi các câu lệnh một cách tuần tự, nâng cao hơn, để chương trình mạnh mẽ hơn, khái niệm vòng lặp mang tới giải pháp thực hiện một công việc tương tự nhau nhiều lần. Nói dễ hiểu hơn là bảo máy tính thực thi liên tục và lặp lại một công việc cho tới khi chúng ta đưa ra tín hiệu dừng lại, trong ngữ cảnh này, chúng ta sử dụng kết quả kiểm tra điều kiện làm tín hiệu trên.

Xét mã giả bài toán phía trên với giải pháp sử dụng vòng lặp để hiểu rõ hơn. Với bài toán phía trên, khi người dùng nhập liệu, chúng ta nên yêu cầu người dùng nhập lại khi người dùng nhập liệu không thỏa mãn chứ không nên ngắt chương trình luôn, mã giả biểu diễn như sau:

BEGIN
NAME = ""
WHILE (COUNTCHARACTERS(NAME) <= 0)
DO LOOP
DISPLAY "NHAP VAO TEN SINH VIEN"
INPUT NAME
ENDLOOP
AGE = 0
WHILE (AGE < 0 OR AGE > 18)
DO LOOP
DISPLAY "NHAP VAO TUOI SINH VIEN"
INPUT AGE
ENDLOOP
// THUC THI NHAP VAO VA KIEM TRA DIEM
END

Dưới đây là tổng hợp những cấu trúc luồng chạy trong lập trình web888 giới thiệu cùng bạn đọc, nếu cảm thấy hay, hãy chia sẻ nó dùm tác giả, cảm ơn quý bạn đọc, chúc bạn học tập tốt !

Bài tập

Thực hành:

1. Vẽ lược đồ giải thuật và mã giả mô phỏng chương trình sau:

Chương trình yêu cầu người dùng nhập vào điểm thi học phần của sinh viên, bao gồm 3 điểm toán, văn, anh. Sau đó tính toán điểm trung bình và in ra màn hình

2. Vẽ lược đồ giải thuật và mã giả mô phỏng chương trình sau:

Chương trình tìm nghiệm của phương trình bậc 2 (ax2 + bx + c = 0) dựa vào 3 số a,b,c do người dùng nhập vào (không tính trường hợp delta phẩy) .

Hướng dẫn nhanh:
- Y/c người dùng nhập vào a,b,c.
- kiểm tra điều kiện xác định của a,b,c và tính delta để bẻ luồng chương trình

- x được tính toán ( pt vô nghiệm, 2 nghiệm hay nghiệm kép).

- in ra màn hình kết quả.

3. Vẽ lược đồ giải thuật và mã giả y/c người dùng nhập vào 2 số, tính toán kết quả phép cộng 2 số và kiểm tra có nhỏ hơn 10 hay không, nếu không thỏa mãn yêu cầu người dùng nhập lại
4. Vẽ lược đồ giải thuật + mã giả phép tính 2 số + với nhau, nếu kq nhỏ hơn 10 in ra "tong nho hon 10", ngược lại in ra "tong lon hon 10"

Bài viết liên quan:

Kiểu dữ liệu Struct và một số thuật toán sắp xếp
Xử lý tệp tin (File Handling)
Hàm trong C (Functions)
Chuỗi trong C (String)
Con trỏ trong C (Pointers)
Mảng trong C – Mảng một chiều và mảng đa chiều
Các lệnh rẽ nhánh vô điều kiện trong C – return, goto, break, continue, hàm exit
Vòng lặp trong C – các cấu trúc vòng lặp for, while, do while
Điều kiện trong C – các cấu trúc điều kiện if/else, switch case
Các toán tử và biểu thức trong C
Thao tác Input / Output trong C
Các kiểu dữ liệu cơ bản trong C

1 Comments

  1. Pingback: Biến và hằng số trong C - Web888 chia sẻ kiến thức lập trình, kinh doanh, mmo

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

4. KIỂM THỬ VÀ TRIỂN KHAI HỆ THỐNG

2. PHÂN TÍCH VÀ ĐẶC TẢ HỆ THỐNG

5. VIẾT BÁO CÁO VÀ THUYẾT TRÌNH DỰ ÁN

3. THIẾT KẾ HỆ THỐNG

1. TỔNG QUAN KIẾN THỨC THỰC HÀNH TRIỂN KHAI DỰ ÁN CÔNG NGHỆ THÔNG TIN

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×