Chương này bào gồm các khái niệm về thuật toán, ngôn ngữ lập trình, môi trường lập trình vàcác phương pháp lập trình Ngôn ngữ lập trình (programming language): Là ngôn ngữ dùng để viết các chương trình máy tính Bao gồm một hệ thống các ký hiệu, các từ khóa, các từ dành riêng (hay từ vựng), và các quy tắc để viết chương trình (hay cú pháp)
BÀI GIẢNG HỌC PHẦN KỸ THUẬT LẬP TRÌNH CHƯƠNG 1: TỔNG QUAN VỀ KỸ THUẬT LẬP TRÌNH Nội dung 1.1 Chương trình máy tính bước xây dựng chương trình 1.2 Thuật tốn 1.3 Ngơn ngữ lập trình 1.4 Mơi trường lập trình 1.5 Các phương pháp lập trình 1.1 Chương trình máy tính bước xây dựng chương trình • Phương pháp giải vấn đề máy tính • Chương trình máy tính • Các bước lập trình Phương pháp giải vấn đề máy tính (1) • Một chức máy tính xử lý thơng tin theo chương trình lập sẵn Để giải vấn đề/bài tốn máy tính cần phải xây dựng chương trình máy tính tương ứng Phương pháp giải vấn đề máy tính (2) • Phương pháp chung để giải vấn đề/bài tốn máy tính: BÀI TỐN THUẬT TỐN CHƯƠNG TRÌNH NGƠN NGỮ MÁY Cho tốn nghĩa phải xác định liệu cần nhập vào máy tính tìm đầu Tìm cách xử lý liệu đầu vào Viết chương trình ngơn ngữ lập trình Biên dịch chương trình sang ngơn ngữ máy MÁY THỰC HIỆN Chương trình máy tính • Chương trình máy tính: Là tập hợp câu lệnh thị (Instruction) viết nhiều ngơn ngữ lập trình theo trật tự xác định, kết hợp với liệu hay tài liệu liên quan nhằm tự động thực số nhiệm vụ, chức giải vấn đề cụ thể Các bước lập trình (1) • Bước 1: Soạn thảo chương trình: - Sử dụng ngơn ngữ lập trình trình soạn thảo chun dụng để nhập nội dung chương trình - Lưu tệp chương trình (tệp mã nguồn - source code) với phần mở rộng phù hợp với ngơn ngữ lập trình sử dụng, ví dụ: phần mở rộng tên tệp pas, c, cpp, … Các bước lập trình (2) • Bước 2: Biên dịch chương trình: - Sử dụng trình biên dịch (compiler) thích hợp để biên dịch tệp chương trình nguồn sang tệp mã máy tương ứng (tệp đối tượng hay object code) Nếu chương trình nguồn có số lỗi mặt cú pháp trình biên dịch thơng báo danh sách tất lỗi, cần quay lại bước 1, sử dụng trình soạn thảo để chỉnh sửa chương trình nguồn - Khi tệp đối tượng tạo, liên kết (linker) thực việc liên kết đối tượng thành phần với tạo tệp thực thi (executable code) cho chương trình Các bước lập trình (3) • Bước 3: Chạy thử chương trình: - Chạy chương trình (kích hoạt tệp thực thi), nhập liệu đầu vào (các liệu mẫu dùng để kiểm tra) kiểm tra kết đưa Nếu kết thu khơng có lỗi thực thi chương trình cần kiểm tra, chỉnh sửa lại thuật toán, quay lại bước để chỉnh sửa lại chương trình 1.2 Thuật tốn • Khái niệm thuật tốn • Các tính chất thuật tốn • Cách diễn đạt thuật tốn • Thiết kế thuật tốn • Độ phức tạp thuật tốn 10 Độ phức tạp thuật tốn (5) • Độ phức tạp tính tốn thuật tốn thuộc dạng (được xếp theo mức độ tăng dần): T(n) = O(1): độ phức tạp cấp số T(n) = O(log2n): độ phức tạp cấp hàm lograrit T(n) = O(n): độ phức tạp cấp hàm tuyến tính T(n) = O(nlog2n): độ phức tạp cấp hàm nlog2n T(n) = O(n2), O(n3), …, O(nk): độ phức tạp cấp hàm đa thức T(n) = O(2n), O(n!), O(nn): độ phức tạp cấp hàm mũ •Một thuật tốn có độ phức tạp tính tốn từ cấp hàm đa thức trở xuống thường chấp nhận 31 Độ phức tạp thuật toán (6) • Xác định độ phức tạp thuật tốn: Quy tắc cộng: Nếu T1(n) = O(f(n)), T2(n) = O(g(n)), T1(n) + T2(n) = O(max{f(n),g(n)}) Ví dụ: Trong thuật tốn có bước, bước có độ phức tạp tính tốn T1(n) = O(n3), T2(n) = O(n), T3(n) = O(nlog2n) thời gian thực bước là: T1(n) + T2(n) + T3(n) = O(max{n3,n,nlog2n}) = O(n3) 32 Độ phức tạp thuật toán (7) • Xác định độ phức tạp thuật toán: Quy tắc nhân: Nếu T1(n) = O(f(n)), T2(n) = O(g(n)) thì: T1(n) T2(n) = O(f(n).g(n)) Ví dụ: - Câu lệnh For j:=1 to n x:=x+1; có thời gian thực T(n) = O(n.1) = O(n) - Câu lệnh For i:=1 to n For j:=1 to n x:=x+1; có thời gian thực T(n) = O(n.n) = O(n2) 33 Độ phức tạp thuật tốn (8) • Xác định độ phức tạp thuật toán: Quy tắc bỏ số: O(c.f(n)) = O(f(n)) c số Ví dụ: O(n2/2) = O(n2) • Lưu ý: Khi đánh giá độ phức tạp tính tốn thuật tốn ta cần quan tâm đến số lần thực phép tốn tích cực (active operation - phép tốn mà số lần thực khơng số lần thực phép toán khác thuật tốn) 34 1.3 Ngơn ngữ lập trình • Khái niệm ngơn ngữ lập trình • Lịch sử phát triển ngơn ngữ lập trình • Trình biên dịch trình thơng dịch 35 Khái niệm ngơn ngữ lập trình • Ngơn ngữ lập trình (programming language): - Là ngôn ngữ dùng để viết chương trình máy tính - Bao gồm hệ thống ký hiệu, từ khóa, từ dành riêng (hay từ vựng), quy tắc để viết chương trình (hay cú pháp) 36 Lịch sử phát triển ngơn ngữ lập trình (1) Chia loại chính: • Ngôn ngữ máy: - Là ngôn ngữ mà Bộ vi xử lý nhận biết thực trực tiếp, chương trình máy tính viết ngôn ngữ khác phải dịch sang ngôn ngữ máy trước thực thi - Lệnh máy viết dạng số nhị phân biến thể chúng hệ 16 - Các chương trình thực nhanh chóng, lệnh máy dài khó nhớ, chương trình cồng kềnh, thời gian viết gây khó khăn cho việc đọc, phát lỗi hiệu chỉnh chương trình 37 Lịch sử phát triển ngơn ngữ lập trình (2) • Hợp ngữ: - Ra đời từ năm 1950 ngơn ngữ lập trình bậc thấp - Cấu trúc lệnh giống với ngôn ngữ máy cho phép viết lệnh dạng mã chữ, thường từ tiếng Anh viết tắt có ý nghĩa rõ ràng, dễ nhớ - Cho phép định địa hình thức - Các chương trình hợp ngữ chuyển sang mã máy thơng qua trình hợp dịch (assembler) - Gần với tầng thiết kế máy tính, chương trình viết ln có liên quan chặt chẽ đến kiến trúc máy tính - Hiện dùng cần lập trình thao tác trực tiếp với phần cứng máy tính làm cơng việc khơng thường xuyên (trình điều khiển (driver), hệ nhúng bậc thấp, hệ thống thời gian thực, …) 38 Lịch sử phát triển ngơn ngữ lập trình (3) • Ngơn ngữ lập trình bậc cao: - Là ngơn ngữ gần với ngơn ngữ tự nhiên ngơn ngữ tốn học - Thường sử dụng hệ thống ký hiệu phong phú với ký hiệu số, ký hiệu chữ, ký hiệu tốn học nhiều ký hiệu thơng dụng khác, với từ khóa tiếng Anh đơn giản, cấu trúc lệnh chặt chẽ, rõ ràng mang ý nghĩa thực tế - Dễ học, dễ đọc, dễ viết hiệu chỉnh chương trình cho phép thể xác thuật tốn, có tính độc lập cao, phụ thuộc vào phần cứng máy tính - Cịn gọi ngơn ngữ thuật tốn - Các chương trình muốn máy tính thực thi cần phải dịch sang ngôn ngữ máy nhờ chương trình dịch - Ví dụ: Fortran, Pascal, C, C++, Java, PHP, … 39 Lịch sử phát triển ngôn ngữ lập trình (4) • Hiện nay, việc phân loại ngơn ngữ lập trình mang tính tương đối Tùy theo mục đích, phân loại ngơn ngữ lập trình theo cách khác Ví dụ: - Phân loại theo mức trừu tượng: có nhóm ngơn ngữ lập trình bậc thấp nhóm ngơn ngữ lập trình bậc cao - Phân loại theo hình thức lập trình: có nhóm ngơn ngữ khai báo (LIST, PROLOG, …) nhóm ngôn ngữ mệnh lệnh (PASCAL, C, …) - Phân loại theo họ, có họ ngơn ngữ máy hợp ngữ, họ ngôn ngữ cổ điển (ALGOL, PASCAL, C, …), họ ngôn ngữ hàm (LISP, …), họ ngôn ngữ logic (PROLOG, …), họ ngôn ngữ hướng đối tượng (C++, JAVA, …), họ ngơn ngữ truy vấn (SQL, …) 40 Trình biên dịch trình thơng dịch (1) • Máy tính hiểu ngôn ngữ ngôn ngữ máy Trước thực thi, chương trình viết ngơn ngữ lập trình khơng phải ngơn ngữ máy (chương trình nguồn) phải dịch sang ngơn ngữ máy nhờ chương trình dịch • Các chương trình dịch chia làm hai loại: - Trình thơng dịch - Trình biên dịch 41 Trình biên dịch trình thơng dịch (2) • Trình thơng dịch: Sử dụng kỹ thuật thông dịch, dịch câu lệnh chương trình nguồn viết ngơn ngữ lập trình bậc cao sang ngơn ngữ máy để máy tính “hiểu” thực thi câu lệnh mà khơng lưu lại đoạn mã máy tương ứng, sau chuyển sang dịch câu lệnh Không tạo tệp mã đối tượng (tệp mã máy tương ứng với chương trình nguồn) Mỗi lần thực chương trình lần thông dịch lại Cho phép dịch, thực câu lệnh mà không cần phải đợi dịch xong tồn chương trình, cho phép dị tìm lỗi dễ dàng thích hợp mơi trường cần có đối thoại người hệ thống Một số ngơn ngữ lập trình có sử dụng trình thơng dịch như: BASIC, VISUAL BASIC, PERL, PYTHON, 42 Trình biên dịch trình thơng dịch (3) • Trình biên dịch (Compiler): Sử dụng kỹ thuật biên dịch, dịch toàn chương trình nguồn sang ngơn ngữ máy tạo tệp mã đối tượng tương ứng Trong trình biên dịch, trình biên dịch phân tích từ vựng cú pháp câu lệnh, thông báo danh sách tất lỗi để lập trình viên chỉnh sửa Tệp mã đối tượng tạo chương trình nguồn khơng cịn lỗi cú pháp Mỗi lần thực chương trình cần sử dụng chương trình thực thi tạo trước mà khơng cần phải tiến hành biên dịch lại chương trình nguồn thích hợp với chương trình có tính ổn định thực nhiều lần Thơng thường, ngơn ngữ lập trình bậc cao có trình biên dịch tương ứng, ví dụ: PASCAL, C, C++, 43 1.4 Mơi trường lập trình • Mơi trường phát triển tích hợp (IDE – Integrated Development Environment): Tích hợp trình soạn thảo, trình biên dịch, liên kết, trình gỡ rối, … cho phép chạy thử chương trình • Người lập trình sử dụng trình soạn thảo chuyên dụng, độc lập để soạn thảo chương trình nguồn (Notepad++, …); sau sử dụng trình biên dịch thích hợp để biên dịch chạy chương trình cách kích hoạt tệp thực thi tạo 44 1.5 Các phương pháp lập trình • Lập trình tuyến tính • Lập trình hướng cấu trúc • Lập trình hướng đối tượng 45 ... O(n2/2) = O(n2) • Lưu ý: Khi đánh giá độ phức tạp tính tốn thuật tốn ta cần quan tâm đến số lần thực phép tốn tích cực (active operation - phép toán mà số lần thực khơng số lần thực phép toán khác... viết ln có liên quan chặt chẽ đến kiến trúc máy tính - Hiện dùng cần lập trình thao tác trực tiếp với phần cứng máy tính làm cơng việc khơng thường xun (trình điều khiển (driver), hệ nhúng bậc... (Instruction) viết nhiều ngơn ngữ lập trình theo trật tự xác định, kết hợp với liệu hay tài liệu liên quan nhằm tự động thực số nhiệm vụ, chức giải vấn đề cụ thể Các bước lập trình (1) • Bước 1: Soạn