Please enable JavaScript.
Coggle requires JavaScript to display documents.
CHƯƠNG 1: TỔNG QUAN VỀ KỸ THUẬT LẬP TRÌNH - Coggle Diagram
CHƯƠNG 1: TỔNG QUAN VỀ KỸ THUẬT LẬP TRÌNH
1.1. CHƯƠNG TRÌNH MÁY TÍNH
Phương pháp giải quyết vấn đề bằng máy tính
Máy tính xử lý thông tin theo chương trình lập sẵn
Mỗi bài toán cần xây dựng chương trình tương ứng
Xác định dữ liệu cần nhập và kết quả đầu ra
Tìm cách xử lý dữ liệu đầu vào
Viết chương trình bằng ngôn ngữ lập trình
Biên dịch sang ngôn ngữ máy
Máy tính thực hiện
Chuỗi giải quyết bài toán
BÀI TOÁN → GIẢI THUẬT → CHƯƠNG TRÌNH → NGÔN NGỮ MÁY → MÁY THỰC HIỆN
Chương trình máy tính
Tập hợp các câu lệnh hoặc chỉ thị
Viết bằng một hoặc nhiều ngôn ngữ lập trình
Có trật tự xác định
Kết hợp với dữ liệu hoặc tài liệu liên quan
Tự động thực hiện nhiệm vụ / chức năng
Giải quyết một vấn đề cụ thể
1.2. GIẢI THUẬT
Khái niệm giải thuật
Dãy hữu hạn các thao tác / phép toán
Thực hiện theo trình tự xác định
Tác động lên một số đối tượng dữ liệu
Mục tiêu đạt được kết quả mong muốn
Thao tác phải rõ ràng, đơn giản, thực hiện được
Phải xác định dữ liệu mà giải thuật tác động lên
Ví dụ: Giải thuật Euclid tìm UCLN
Input: a, b nguyên dương
Output: (a,b)
Bước 1: So sánh a và b
Nếu a = b → dừng, UCLN = b
Nếu a ≠ b → sang bước 2
Nếu a > b → a := a - b
Nếu a < b → b := b - a
Quay lại bước 1
Các tính chất của giải thuật
Đầu vào
Đầu ra
Tính hữu hạn
Kết thúc sau một số hữu hạn bước
Tính xác định
Mỗi bước được xác định chính xác
Thao tác rõ ràng, chặt chẽ
Cùng dữ liệu đầu vào → một kết quả
Tính hiệu quả
Đơn giản, dễ cài đặt
Không gây tốn bộ nhớ
Thực hiện nhanh
Cách diễn đạt giải thuật
Cách 1: Ngôn ngữ tự nhiên
Liệt kê từng bước thực hiện
Quy tắc và thao tác cụ thể
Cách 2: Lưu đồ
Dùng các hình khối cơ bản
Bắt đầu / Kết thúc
Input / Output
Điều kiện
Thao tác
Dùng cung thể hiện trình tự
Cách 3: Giả mã
Kết hợp cấu trúc điều khiển
Kết hợp ngôn ngữ tự nhiên
Dùng ký hiệu toán học đơn giản
Gần với ngôn ngữ lập trình
Thiết kế giải thuật
Mô-đun hóa bài toán
Chia bài toán lớn thành các bài toán nhỏ
Mô-đun chính → mô-đun con
Tinh chỉnh từng bước
Ban đầu dùng ngôn ngữ tự nhiên
Bổ sung thao tác và phép toán chi tiết
Chuyển dần sang giả ngôn ngữ
Tiến gần đến ngôn ngữ lập trình
Quá trình chuyển đổi
Ngôn ngữ tự nhiên → Giả ngôn ngữ → Ngôn ngữ lập trình
Ví dụ: Bài toán sắp xếp
Dãy n phần tử
Sắp xếp tăng hoặc giảm dần
Chọn phần tử nhỏ nhất
Đưa vào vị trí đầu tiên
Lặp lại với phần còn lại
Đổi chỗ phần tử
Độ phức tạp của giải thuật
Đánh giá giải thuật
Thời gian thực hiện
Dung lượng bộ nhớ
Tính đúng đắn
Mức độ đơn giản
Khả năng thích ứng
Độ phức tạp tính toán
Phụ thuộc kích thước dữ liệu đầu vào
Không phụ thuộc máy tính
T(n) là số phép toán sơ cấp
Các cấp độ phức tạp
O(1) – hằng số
O(log₂n) – logarit
O(n) – tuyến tính
O(nlog₂n)
O(n²), O(n³), …, O(nᵏ) – đa thức
O(2ⁿ), O(n!), O(nⁿ) – hàm mũ
Đa thức trở xuống thường chấp nhận được
Quy tắc cộng
T1(n)=O(f(n)), T2(n)=O(g(n))
T1(n)+T2(n)=O(max{f(n),g(n)})
Quy tắc nhân
T1(n)·T2(n)=O(f(n)·g(n))
Vòng lặp lồng nhau → nhân độ phức tạp
Quy tắc bỏ hằng số
O(c·f(n)) = O(f(n))
Ví dụ: O(n²/2)=O(n²)
Phép toán tích cực
Quan tâm phép toán có số lần thực hiện lớn nhất
1.3. NGÔN NGỮ LẬP TRÌNH
Khái niệm
Ngôn ngữ dùng để viết chương trình máy tính
Hệ thống ký hiệu
Từ khóa / từ dành riêng
Từ vựng
Cú pháp
Các loại ngôn ngữ
Ngôn ngữ máy
Ngôn ngữ bộ vi xử lý nhận biết trực tiếp
Lệnh dạng nhị phân hoặc hệ 16
Thực hiện nhanh
Lệnh dài, khó nhớ
Chương trình cồng kềnh
Khó đọc, phát hiện lỗi, hiệu chỉnh
Hợp ngữ
Ra đời khoảng năm 1950
Ngôn ngữ bậc thấp
Lệnh gần giống ngôn ngữ máy
Dùng mã chữ / từ tiếng Anh viết tắt
Dễ nhớ hơn ngôn ngữ máy
Có định địa chỉ hình thức
Dịch bằng Assembler
Gần kiến trúc máy tính
Dùng cho phần cứng, driver, hệ nhúng, thời gian thực
Ngôn ngữ lập trình bậc cao
Gần ngôn ngữ tự nhiên và toán học
Ký hiệu phong phú
Từ khóa tiếng Anh đơn giản
Cấu trúc lệnh rõ ràng
Dễ học, dễ đọc, dễ viết
Dễ hiệu chỉnh
Thể hiện chính xác giải thuật
Ít phụ thuộc phần cứng
Còn gọi là ngôn ngữ giải thuật
Phải dịch sang ngôn ngữ máy
Ví dụ: Fortran, Pascal, C, C++, Java, PHP
Phân loại ngôn ngữ lập trình
Theo mức trừu tượng
Bậc thấp
Bậc cao
Theo hình thức lập trình
Ngôn ngữ khai báo: LIST, PROLOG, …
Ngôn ngữ mệnh lệnh: PASCAL, C, …
Theo họ ngôn ngữ
Họ ngôn ngữ máy và hợp ngữ
Họ cổ điển: ALGOL, PASCAL, C, …
Họ hàm: LISP
Họ logic: PROLOG
Họ hướng đối tượng: C++, JAVA
Họ truy vấn: SQL
Trình biên dịch và trình thông dịch
Chương trình nguồn
Không phải ngôn ngữ máy
Phải được dịch trước khi thực thi
Trình thông dịch
Dịch từng câu lệnh
Dịch và thực hiện ngay
Không lưu đoạn mã máy tương ứng
Không tạo tệp mã đối tượng
Mỗi lần chạy → thông dịch lại
Dễ dò tìm lỗi
Phù hợp môi trường đối thoại
Ví dụ: BASIC, Visual Basic, Perl, Python
Trình biên dịch
Dịch toàn bộ chương trình nguồn
Tạo tệp mã đối tượng
Phân tích từ vựng và cú pháp
Thông báo danh sách lỗi
Chỉ tạo mã đối tượng khi hết lỗi cú pháp
Linker liên kết các đối tượng
Tạo tệp thực thi
Chạy nhiều lần không cần biên dịch lại
Phù hợp chương trình ổn định, thực hiện nhiều lần
Ví dụ: PASCAL, C, C++
1.4. MÔI TRƯỜNG LẬP TRÌNH VÀ CÁC BƯỚC XÂY DỰNG CHƯƠNG TRÌNH
Môi trường lập trình
IDE – Integrated Development Environment
Trình soạn thảo
Trình biên dịch
Bộ liên kết
Trình gỡ rối
Chạy thử chương trình
Có thể dùng trình soạn thảo độc lập như Notepad++
Các bước xây dựng chương trình
Bước 1: Soạn thảo chương trình
Sử dụng ngôn ngữ lập trình
Dùng trình soạn thảo
Nhập nội dung chương trình
Lưu mã nguồn
Ví dụ phần mở rộng: .pas, .c, .cpp
Bước 2: Biên dịch chương trình
Compiler dịch source code
Tạo object code
Có lỗi cú pháp → thông báo lỗi
Quay lại bước 1 để sửa
Linker liên kết các đối tượng
Tạo executable code
Bước 3: Chạy thử chương trình
Kích hoạt tệp thực thi
Nhập dữ liệu mẫu
Kiểm tra kết quả
Nếu kết quả sai / lỗi thực thi
Kiểm tra và chỉnh sửa giải thuật
Quay lại bước 1
1.5. CÁC PHƯƠNG PHÁP LẬP TRÌNH
Lập trình tuyến tính
Còn gọi là lập trình phi cấu trúc
Mọi dữ liệu là dữ liệu toàn cục
Câu lệnh nằm trong chương trình chính
Tác động trực tiếp dữ liệu toàn cục
Không có cấu trúc rõ ràng
Chương trình cồng kềnh
Không sử dụng lại được lệnh
Dữ liệu dùng chung khó kiểm soát
Lập trình hướng cấu trúc
Chia chương trình thành chương trình con
Hàm, thủ tục
Mỗi chương trình con thực hiện một nhiệm vụ
Chương trình chính gọi chương trình con
Phân định dữ liệu toàn cục / cục bộ
Cấu trúc rõ ràng
Dễ xây dựng
Dễ phát hiện lỗi
Dễ hiệu chỉnh
Chương trình con có thể dùng nhiều lần
Kiểm soát tốt dữ liệu
Lập trình hướng đối tượng
Nền tảng lập trình cấu trúc
Kết hợp trừu tượng hóa dữ liệu
Sử dụng cấu trúc dữ liệu không cần biết chi tiết bên trong
Tập trung vào đối tượng
Kết hợp dữ liệu với thao tác trên dữ liệu
Tạo kiểu dữ liệu trừu tượng gọi là Lớp
Có tính kế thừa cao
Dễ sử dụng lại code
Dễ bảo trì
Dễ hiệu chỉnh
Dễ mở rộng tính năng