Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
471,93 KB
Nội dung
Chương Giải thuật xử lý thông tin ngôn ngữ lập trình Học phần: LẬP TRÌNH CƠ BẢN Tài liệu tham khảo Giáo trình tin học sở, Hồ Sỹ Đàm, Đào Kiến Quốc, Hồ Đắc Phương Đại học Sư phạm, 2004 – Chương 7, Giải thuật xử lý thông tin ngôn ngữ lập trình NỘI DUNG Khái niệm toán giải thuật Đặc trưng (yêu cầu) giải thuật Các phương pháp diễn đạt giải thuật Sơ lược đánh giá giải thuật Ngôn ngữ lập trình mức khác ngôn ngữ lập trình Quá trình thực chương trình ngôn ngữ bậc cao Giải thuật xử lý thông tin ngôn ngữ lập trình Input Yêu cầu KHÁI NIỆM BÀI TOÁN Output Cho số tự nhiên n n có phải số nguyên tố hay không “có” hay “không” Cho hồ sơ điểm sinh viên Tìm tất sinh viên có điểm trung bình Danh sách sv thoả mãn Thiết kế hình học, tải trọng Tính sức bền Đ ộ bền Cho toán nghĩa cho input, yêu cầu để tìm (tính) output Giải thuật xử lý thông tin ngôn ngữ lập trình KHÁI NIỆM THUẬT TOÁN Thuật toán (algorithm) trình gồm dãy hữu hạn thao tác thực xếp theo trình tự xác định dùng để giải toán Ví dụ : thuật toán Euclid tìm ước số chung lớn hai số tự nhiên Thay phải tính toán theo định nghĩa làm rõ cấu trúc USCLN (tích ước số chung với số mũ nhỏ nhất) thuật toán Euclid dựa tính chất sau: USCLN(a,b) = USCLN (b,a)) Nếu a> b, USCLN(a,b) = USCLN (a-b,b) USCLN(a,a)= a Giải thuật xử lý thông tin ngôn ngữ lập trình THUẬT TOÁN EUCLID TIM USCLN CỦA HAI SỐ TỰ NHIÊN Bài toán: Cho hai số m, n tìm d = USCLN(m,n) Bước 1: Kiểm tra m= n bước 5, không thực tiếp bước 2 Bước 2: Nếu m> n bước không thực tiếp bước 3 Bước 3: m n m n Bớt m lượng n ỉ ị c Nếu ngượ lại Bớt n lượng m Điều ch nh lại giá tr Cho tới m = n tuyên bố USCLN giá trịcủa chung m m n n read(m,n); while m n if m>n m=m-n else n= n-m; write(m); 13 Giải thuật xử lý thông tin ngôn ngữ lập trình TÍNH NGHIỆM XẤP XỈ VỚI ĐỘ CHÍNH XÁC ε = 0.000001 CỦA PHƯƠNG TRÌNH f(x)= ex- x3 = Sử dụng thuật toán chia đôi dựa vào tính chất: hàm f liên tục đoạn [a,b] có f(a) f(b) phương trình f(x) = định thừa nhận nghiệm c nằm [a,b] Phương trình có hai nghiệm hình vẽ Ta vây nghiệm nhỏ đoạn [1,4] 14 Giải thuật xử lý thông tin ngôn ngữ lập trình TÍNH NGHIỆM XẤP XỈ VỚI ĐỘ CHÍNH XÁC ε = 0.000001 CỦA PHƯƠNG TRÌNH f(x)= ex- x3 = Ta có f(a)>0, f(b) thay a c, sau bước c Thực Nếuthực f(c) ε, quay 1, không làm tiếp Dừng, lấy c làm nghiệm 15 Giải thuật xử lý thông tin ngôn ngữ lập trình TÍNH NGHIỆM XẤP XỈ VỚI ĐỘ CHÍNH XÁC ε = 0.000001 CỦA PHƯƠNG TRÌNH f(x)= ex- x3 = a:= 1; b:= 4; ε = 0.00001 c:= (a+b)/2 + a:= c 16 f(c) >0 ? b:= c b-a < ε + c Giải thuật xử lý thông tin ngôn ngữ lập trình BIỂU DIỄN BẰNG GIẢ MÃ Cho ε = 0.000001, a=1 b=4 Lặp lại khối sau: Tính c:= (a+b)/2 Tính f(c) Nếu f(c) > thực khối Thay a c Nếu ngược lại thực khối Thay b c Cho tới b-a < ε lấy c làm nghiệm xấp xỉ 17 a=1; b= 4; epsi= 0.000001; c= (a+b)/2; if (epx(c)-sin(c) > 0) a=c else b= c while (b-a < epsi) printf(c); Giải thuật xử lý thông tin ngôn ngữ lập trình HIỆU QUẢ CỦA THUẬT TOÁN Với toán có nhiều thuật toán khác Tuy nhiên chúng khác hiệu Trong tin học người ta quan tâm nhiều đến độ phức tạp thời gian: giải toán cần thời gian, vấn đề quy số Độ phức tạpbản không tiêuhiện tốn không gian phép tính cầngian: đượcsự thực nhớ Vấn đề hiệu thời gian vấn đề nghiên cứu nhiều 18 Giải thuật xử lý thông tin ngôn ngữ lập trình VÍ DỤ HIỆU QUẢ TÌM KIẾM Ví dụ toán tìm kiếm: cho dãy n số khác a1,a2 an số x.Hãy cho biết x có dãy số hay không vị trí thứ Thuật Bước Cho i = 1toán tìm kiếm sau: Bước Nếu = x chuyển tới bước 5, không thực tiếp bước Bước Tăng i lên kiểm tra i > n Nếu bước Nếu sai quay bước Bước Tuyên bố số x Kết thúc Bước Tuyên bố số x số thứ i Kết thúc Số bước tìm trung bình n/2 Nếu có triệu phần tử phải khoảng 500.000 phép so sánh 19 Giải thuật xử lý thông tin ngôn ngữ lập trình HIỆU QUẢ CỦA THUẬT TOÁN Nếu xếp dãy số theo thứ tự tăng dần tìm thuật toán tìm kiếm nhị phân, với tư tưởng thu hẹp dần vùng tìm kiếm Bước Cho d := 1, c:=n (d: đầu, c: cuối, g: giữa) Bước Tính g := [(d+c)/2] Bước So x với ag Nếu x=ag chuyển tới bước Nếu khác tiếp tục thực bước Bước Nếu d=c tuyên bố số x kết thúc Nếu không thực bước tiếp theo Bước Nếu x < ag thay c ag quay bước Nếu không thực bước Bước Thay d ag quay bước Bước Tuyên bố số x số thứ g Kết thúc Cứ lần không tìm ta lại giảm độ dài vùng tìm kiếm hai lần Số bước tìm trung bình log2n Nếu có triệu phần tử khoảng 20 lần tìm, nhỏ so với tìm 20 Giải thuật xử lý thông tin ngôn ngữ lập trình 10 NGÔN NGỮ LẬP TRÌNH Ngôn ngữ lập trình (programming language) ngôn ngữ biểu diễn thuật toán dùng để điều khiển máy tính thực công việc định Các quy tắc viết gọi cú pháp (syntax) ngôn ngữ ý nghĩa mà ngôn ngữ chuyển tải gọi ngữ nghĩa (semantic) Một chương trình máy tính (program)phải thể ngôn ngữ xác định Như thuật toán diễn đạt nhiều chương trình khác ngôn ngữ khác 21 Giải thuật xử lý thông tin ngôn ngữ lập trình CÁC MỨC CỦA NGÔN NGỮ LẬP TRÌNH Ngôn ngữ máy: ngôn ngữ thể trực tiếp hệ lệnh máy Nói chung ngôn ngữ máy ngôn ngữ mức bít, nên gọi ngôn ngữ nhị phân Hợp ngữ (assembly) loại ngôn ngữ gần với ngôn ngữ nhị phân, lệnh ngôn ngữ máy có lệnh tương ứng hợp ngữ hợp ngữ sử dụng mã chữ Ngôn ngữ bậc cao – gọi ngôn ngữ thuật toán (Algorithmic language) ngôn ngữ biểu diễn thuật toán độc lập với hệ lệnh máy Mỗi ngôn ngữ xác định kiểu diễn đạt kịch điều khiển máy tính Mỗi kịch điều khiển máy viết ngôn ngữ lập trình gọi chương trình (program) 22 Giải thuật xử lý thông tin ngôn ngữ lập trình 11 NGÔN NGỮ MÁY Chính ngôn ngữ viết lệnh máy hệ nhị phân hệ 16 Ưu điểm, tận dụng khả máy, tối ưu thời gian chạy Nhược điểm: khó viết, khó chữa lỗi, phụ thuộc vào loại máy Mã máy nhị phân Mã hexa Ý nghĩa Nói chung chi phí cao 1001 0001 0110 0000 0001 0000 A1 60 10 Nạp 1060 lên TG AX 0000 0011 0110 0110 0001 0000 03 66 10 Cộng AX với 1066 -> AX 1010 0011 0000 0000 0010 1011 A3 00 2B Ghi từ AX 2B00 23 Giải thuật xử lý thông tin ngôn ngữ lập trình HỢP NGỮ (ASSEMBLY) Về bản, lệnh hợp ngữ tương tự với lệnh máy – dùng mã chữ nên dễ hiểu, dễ sửa Phải dịch ngôn ngữ máy (thay mã lệnh địa chỉ) Có lệnh macro, cho phép thay hiệu Ưu điểm: dễ lập trình dễ sửa lỗi ngôn ngữ máy 24 Hợp Mã máy Nhượcngữ điểm: phức tạp phụ thuộc vàotrong máy hệ hexa MOV AX CHIEU_DAI A1 64 10 ADD AX CHIEU_RONG 03 66 10 MOV NUA_CHU_VI AX A3 00 2B Giải thuật xử lý thông tin ngôn ngữ lập trình 12 DỊCH HỢP NGỮ (ASSEMBLY) Để máy chạy phải dịch chương trình hợp ngữ thành chương trình ngôn ngữ máy -> nhờ phần mềm có tên hợp dịch (assembler) lệnh chỉsẽ số đầumã tiên hợpđịa dịch phảicác bố mã trí không gian nhớ cho đối tượng, sau thay Thay thực với lệnh macro, lệnh tương đương với nhiều lệnh Kết bước dịch tạo mô đun đối tượng, đoạn chương trình dạng nhị phân chưa có cấu trúc hoàn chỉnh để sẵn sàng chạy thành chương trình nhị phân hoàn chỉnh Sau nạp chương trình vào Thường thực bước khác liên kết, để kết hợp nhiều mô đun đối tượng thi hành 25 Giải thuật xử lý thông tin ngôn ngữ lập trình NGÔN NGỮ BẬC CAO Ngôn ngữ máy hợp ngữ phụ thuộc vào máy, lại khó dùng, buộc người đếndiễn mứctả lệnh Ngườilập ta trình muốnphải viết ngôntinh ngữtếchỉ thuậtmáy toán mà thôi, không liên quan đến hệ lệnh đặc thù máy tính cụ thể Các ngôn ngữ gọi ngôn ngữ bậc cao (high level language) hay gọi ngôn ngữ thuật toán (algorithmic language) Ngôn ngữ thuật toán có hình thức giống với ngôn ngữ tự nhiên ngôn ngữ toán học nên dễ diễn đạt nhiều so với ngôn ngữ máy hợp ngữ 26 Giải thuật xử lý thông tin ngôn ngữ lập trình 13 VÍ DỤ VỀ NGÔN NGỮ BẬC CAO Ví dụ giải phương trình bậc PASCAL DELTA := B*B - 4*A*C; IF DELTA >= THEN BEGIN X1 := (- B + SQRT(DELTA)) /(2*A); X2 := (- B - SQRT(DELTA))/(2*A); WRITE (X1,X2); END ELSE WRITE(‘Vô nghiệm) 27 FORTRAN DELTA = B*B - 4* A* C IF DELTA < GOTO 10 X1= (- B + SQRT(DELTA))/(2*A) X2 =(- B - SQRT(DELTA))/(2*A) WRITE (3,20) X1, X2 20 FORMAT ('NGHIEM 1= ', F8.3, NGHIEM = ', F8.3) GOTO 30 10 WRITE(3,40) 40 FORMAT('VO NGHIEM') 30 END Giải thuật xử lý thông tin ngôn ngữ lập trình DỊCH NGÔN NGỮ BẬC CAO Máy tính thi hành trực tiếp ngôn ngữ nhị phân, phải dịch cách để máy tính thực Có hai cách thực hiện: - Sử dụng chương trình mô (phần mềm mã nhị phân gọi chương trình thông dịch - interpreter) Chương trình đọc thi hành lệnh ngôn ngữ bậc cao Do chương trình thông dịch thực đóng vai trò máy ảo Trong chế độ thông dịch, không sinh chương trình tương ứng mã nhị phân - Dịch chương trình ngôn ngữ thuật toán thành chương trình ngôn ngữ máy bảo toàn ngữ nghĩa nhờ chương trình biên dịch (compiler) 28 Giải thuật xử lý thông tin ngôn ngữ lập trình 14 THỰC HIỆN CHƯƠNG TRÌNH TRÊN NGÔN NGỮ BẬC CAO Soạn thảo chương trình nhờ soạn thảo Phân tích từ vựng (lexical analys): tạo hồ sơ tất đối tượng chương trình phục vụ cho việc phân phối không gian nhớ sau Phân tích cú pháp (syntax analys): Cú pháp (syntax): quy tắc viết câu lệnh (statement) đảm bảo rõ nghĩa, không nhập nhằng Nếu không tạo mã Tất lỗi cú pháp phát dịch Tạo mã, tối ưu mã (code generation, optimalization) Liên kết: (link) kết nối mô đun đối tượng thành chương trình hoàn chỉnh Thực hiện, tải chương trình nạp liệu để chạy Khi chạy có lỗi ngữ nghĩa Lỗi ngữ nghĩa phát chạy chương trình 29 Giải thuật xử lý thông tin ngôn ngữ lập trình DỊCH SANG NGÔN NGỮ MÁY Phần mềm soạn thảo Chương trình nguồn Chương trình dịch Các mô đun đối tượng Lỗi cú pháp Soạn thảo 30 Dịch Chương trình liên kết Chương trình chạy Lỗi liên kết Liên kết Dữ liệu Kết xử lý Lỗi thi hành Thực Giải thuật xử lý thông tin ngôn ngữ lập trình 15 MÔI TRƯỜNG PHÁT TRIỂN PHẦN MỀM 1985: với xuất phát triển Turbo Pascal hình thành khuynh Development hướng vềEnvironment) việc tạo các->môi toàn trường phát quátriển trìnhtích soạn hợp thảo, IDEdịch, liên kết , (Intergated thi hành gỡ lỗi thực mối trường liên hệ chặt chẽ bước phát triển tiếp IDE việc phát triển hướng đối tượng, phát triển theo mẫu, lập trình hướng tới thành phần (liên kết động thành phần có sẵn mã nhị phân) làm việc sinh mã chương trình trở nên hiệu nhiều Các hệ CASE (Computer Aided Software Engineering) cho phép phát sinh mã thiết kế bước tiến theo khuynh hướng khác 31 Giải thuật xử lý thông tin ngôn ngữ lập trình Tóm tắt nội dung Ngôn ngữ lập trình phương tiện diễn tả thuật toán để máy tính sử dụng trực tiếp gián tiếp Theo mức trừu tượng hoá có mức ngôn ngữ máy, hợp ngữ ngôn ngữ thuật toán Đối với hợp ngữ phải sử dụng phần mềm hợp dịch, với ngôn ngữ thuật toán phải dùng phần mềm biên dịch để tạo phần mềm tương ứng ngôn ngữ máy – ngôn ngữ mà máy chạy trực tiếp Các bước để dịch từ chương trình nguồn sang mã nhị phân soạn thảo, phân tích từ vựng, phân tích cú pháp, dịch, tối ưu hoá, liên kết mã Trong môi trường tích hợp khâu khâu gỡ lỗi tích hợp vào tổng thể 32 Giải thuật xử lý thông tin ngôn ngữ lập trình 16 THẢO LUẬN Sự khác biệt mức ngôn ngữ lập trình, nguyên tắc phân biệt mức NNLT Đánh giá hiệu thuật toán khác giải toán Phân tích ưu, nhược điểm phương pháp biểu diễn giải thuật? 33 Giải thuật xử lý thông tin ngôn ngữ lập trình CÂU HỎI VÀ BÀI TẬP Thuật toán gì? Cho ví dụ Xác định input output cho thuật toán sau đây: a Rút gọn phân số b Kiểm tra xem ba số cho trước a, b c độ dài ba cạnh tam giác hay không? 34 Trình bày tính chất xác định thuật toán nêu rõ nghĩa tính chất Cho tam giác ABC có góc vuông A cho biết cạnh a góc B Hãy viết thuật toán để tính góc C, cạnh b cạnh c Hãy phát biểu thuật toán để giải toán sau: "Có số táo Dùng cân hai đĩa (không có cân) để xác định táo nặng nhất" Chỉ dùng phép cộng, tính bình phương số Giải thuật xử lý thông tin ngôn ngữ lập trình 17 CÂU HỎI VÀ BÀI TẬP So sánh ngôn ngữ thuật toán với ngôn ngữ máy hợp ngữ Kể tên số ngôn ngữ lập trình mà bạn biết Nếu bước thực chương trình ngôn ngữ 10 11 thuật giải Phân biệt lỗi cú pháp lỗi ngữ nghĩa Trình bày môi trường phát triển tích hợp 35 Giải thuật xử lý thông tin ngôn ngữ lập trình HỎI VÀ ĐÁP Máy tính điện tử xử lý thông tin 18 [...]... vậy chương trình thông dịch thực sự đóng vai trò một máy ảo Trong chế độ thông dịch, không sinh chương trình tương ứng trong mã nhị phân - Dịch chương trình trong ngôn ngữ thuật toán thành một chương trình ở ngôn ngữ máy bảo toàn ngữ nghĩa nhờ chương trình biên dịch (compiler) 28 Giải thuật xử lý thông tin và ngôn ngữ lập trình 14 THỰC HIỆN CHƯƠNG TRÌNH TRÊN NGÔN NGỮ BẬC CAO Soạn thảo chương trình. .. một chương trình hoàn chỉnh và duy nhất Thực hiện, tải chương trình và nạp dữ liệu để chạy Khi chạy vẫn còn có thể có lỗi ngữ nghĩa Lỗi ngữ nghĩa chỉ có thể phát hiện khi chạy chương trình 29 Giải thuật xử lý thông tin và ngôn ngữ lập trình DỊCH SANG NGÔN NGỮ MÁY Phần mềm soạn thảo Chương trình nguồn Chương trình dịch Các mô đun đối tượng Lỗi cú pháp Soạn thảo 30 Dịch Chương trình liên kết Chương trình. .. 30 10 WRITE(3 ,40 ) 40 FORMAT('VO NGHIEM') 30 END Giải thuật xử lý thông tin và ngôn ngữ lập trình DỊCH NGÔN NGỮ BẬC CAO Máy tính chỉ có thể thi hành trực tiếp ngôn ngữ nhị phân, do đó phải dịch bằng một cách nào đó để máy tính có thể thực hiện được Có hai cách thực hiện: - Sử dụng một chương trình mô phỏng (phần mềm này đã ở mã nhị phân gọi là chương trình thông dịch - interpreter) Chương trình này đọc... ngôn ngữ thuật toán (Algorithmic language) là ngôn ngữ biểu diễn thuật toán độc lập với hệ lệnh của máy Mỗi ngôn ngữ xác định một kiểu diễn đạt kịch bản điều khiển máy tính Mỗi một kịch bản điều khiển máy viết trên một ngôn ngữ lập trình gọi là một chương trình (program) 22 Giải thuật xử lý thông tin và ngôn ngữ lập trình 11 NGÔN NGỮ MÁY Chính là ngôn ngữ được viết bằng lệnh máy trong hệ nhị phân... thuật xử lý thông tin và ngôn ngữ lập trình 17 CÂU HỎI VÀ BÀI TẬP 7 So sánh ngôn ngữ thuật toán với ngôn ngữ máy và hợp ngữ 8 Kể tên một số ngôn ngữ lập trình mà bạn biết 9 Nếu các bước thực hiện một chương trình trên ngôn ngữ 10 11 thuật giải Phân biệt lỗi cú pháp và lỗi ngữ nghĩa Trình bày môi trường phát triển tích hợp 35 Giải thuật xử lý thông tin và ngôn ngữ lập trình HỎI VÀ ĐÁP Máy tính điện tử... ngôn ngữ lập trình HỢP NGỮ (ASSEMBLY) Về cơ bản, mỗi lệnh hợp ngữ tương tự với một lệnh máy – nhưng dùng mã chữ nên dễ hiểu, dễ sửa Phải dịch ra ngôn ngữ máy (thay mã lệnh và địa chỉ) Có các lệnh macro, cho phép thay thế hiệu quả hơn Ưu điểm: dễ lập trình dễ sửa lỗi hơn ngôn ngữ máy 24 Hợp Mã máy Nhượcngữ điểm: vẫn còn phức tạp và phụ thuộc vàotrong máy hệ hexa MOV AX CHIEU_DAI A1 64 10 ADD... triển theo mẫu, lập trình hướng tới thành phần (liên kết động các thành phần có sẵn trong mã nhị phân) làm việc sinh mã chương trình trở nên hiệu quả hơn rất nhiều Các hệ CASE (Computer Aided Software Engineering) còn cho phép phát sinh mã trên nền thiết kế là một bước tiến theo một khuynh hướng khác 31 Giải thuật xử lý thông tin và ngôn ngữ lập trình Tóm tắt nội dung Ngôn ngữ lập trình là phương... tiên là tạo ra các mô đun đối tượng, là các đoạn chương trình dưới dạng nhị phân nhưng chưa có cấu trúc hoàn chỉnh để sẵn sàng chạy ngay thành một chương trình nhị phân hoàn chỉnh Sau đó mới nạp chương trình này vào Thường thực hiện một bước khác là liên kết, để kết hợp nhiều mô đun đối tượng thi hành 25 Giải thuật xử lý thông tin và ngôn ngữ lập trình NGÔN NGỮ BẬC CAO Ngôn ngữ máy và hợp ngữ phụ... LẬP TRÌNH Ngôn ngữ lập trình (programming language) là ngôn ngữ biểu diễn thuật toán dùng để điều khiển máy tính thực hiện các công việc đã định Các quy tắc viết được gọi là cú pháp (syntax) của ngôn ngữ ý nghĩa mà ngôn ngữ chuyển tải gọi là ngữ nghĩa (semantic) Một chương trình máy tính (program)phải được thể hiện trên một ngôn ngữ xác định Như vậy một thuật toán có thể diễn đạt bằng nhiều chương. .. toán có thể diễn đạt bằng nhiều chương trình khác nhau trên những ngôn ngữ khác nhau 21 Giải thuật xử lý thông tin và ngôn ngữ lập trình CÁC MỨC CỦA NGÔN NGỮ LẬP TRÌNH Ngôn ngữ máy: ngôn ngữ thể hiện trực tiếp trong hệ lệnh của máy Nói chung ngôn ngữ máy là ngôn ngữ ở mức các bít, nên cũng được gọi là ngôn ngữ nhị phân Hợp ngữ (assembly) là loại ngôn ngữ về cơ bản là gần với ngôn ngữ nhị phân, mỗi ... Dịch chương trình ngôn ngữ thuật toán thành chương trình ngôn ngữ máy bảo toàn ngữ nghĩa nhờ chương trình biên dịch (compiler) 28 Giải thuật xử lý thông tin ngôn ngữ lập trình 14 THỰC HIỆN CHƯƠNG... lược đánh giá giải thuật Ngôn ngữ lập trình mức khác ngôn ngữ lập trình Quá trình thực chương trình ngôn ngữ bậc cao Giải thuật xử lý thông tin ngôn ngữ lập trình Input Yêu cầu KHÁI NIỆM BÀI... tượng thành chương trình hoàn chỉnh Thực hiện, tải chương trình nạp liệu để chạy Khi chạy có lỗi ngữ nghĩa Lỗi ngữ nghĩa phát chạy chương trình 29 Giải thuật xử lý thông tin ngôn ngữ lập trình DỊCH