Mỗi ngôn ngữ lập trình có thể được xem như là một tập hợp của các chi tiết kỹ thuật chú trọng đến cú pháp, từ vựng, và ý nghĩa của ngôn ngữ. Những chi tiết kỹ thuật này thường bao gồm: Dữ liệu và cấu trúc dữ liệu. Câu lệnh và dòng điều khiển. Các tên và
Thông tin tuyển sinh trường Ngoại ngữ - Đại học Thái Nguyên năm 2022: Năm 2022, Đại học Ngoại Ngữ Thái Nguyên tuyển sinh theo 3 phương thức (áp dụng cho tất cả các ngành đào tạo): - Phương thức 1: Xét tuyển thẳng. - Phương thức 2: Xét tuyển theo kết quả Kỳ thi tốt nghiệp
- Nguyên lý ngôn ngữ lập trình là môn học bắt buộc thuộc khối kiến thức giáo dục chuyên nghiệp của ngành Khoa học máy tính. Môn học trang bị cho sinh viên những kiến thức cơ bản và chuyên sâu về nguyên lý của các ngôn ngữ lập trình, đồng thời trang bị cho sinh viên cách tiếp cận để có thể giải quyết được các bài toán trong thực tế bằng máy tính.
nguyen-ly-ngon-ngu-lap-trinh_nguyen-hua-phung_quiz5-final - [cuuduongthancong.com] - Read online for free. Scribd is the world's largest social reading and publishing site. Open navigation menu. Close suggestions Search Search. en Change Language. close menu Language. English (selected)
Những ngôn ngữ lập trình bậc cao. Những ngôn ngữ lập trình bậc cao đều có hình thức tồn tại gần với dạng tự nhiên và rất ít khi phải phụ thuộc vào các loại thiết bị khác bởi nó có tính độc lập rất cao. Một số ngôn ngữ lập trình bậc cao được sử dụng phổ
TỰ HỌC LẬP TRÌNH Cẩm nang tự học lập trình cho mọi người. Tự học lập trình là một trong những kỹ năng cần thiết nhất đối với lập trình viên để có thể bắt kịp sự thay đổi liên tục trong lĩnh vực công nghệ.
Giáo trình Ngôn ngữ lập trình các nguyên lý và mô hình 24.000 VND Phân loại được các ngôn ngữ và hiểu được các nguyên lý cơ bản không những giúp chúng ta khai thác được tốt hơn ngôn ngữ đang sử dụng, mà còn nắm bắt nhanh được sự thay đổi của ngôn ngữ đó cũng như các ngôn ngữ mới ra đời.
Tóm tắt Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 3: Cấu trúc điều khiển - Nguyễn Văn Hòa: Giải phỏp ủể giải quyết hiệu ứng lề NNLT khụng cho phộp hàm tham chiếu cỏc biến khụng cục bộ và truyền quy chiếu Ưu ủiểm : dễ thực hiện Khuyết ủiểm : khụng linh hoạt NNLT phải qui ủịnh thứ tự ưu
Vay Tiền Trả Góp Theo Tháng Chỉ Cần Cmnd. Nguyên lý ngôn ngữ lập trình ... môn h c Gi i thi u ngôn ng l p trình Các ki u d li u Các c u trúc ñi u n Chương trình Ngôn ng l p trình hư ng ñ i tư ng Ngôn ng l p trình hàm Ngôn ng l p trình logic Ngôn ng l p trình song song ... hi n chương trình Chi phí cài ñ t chương trình Chi phí b o trì chương trình 29 Phân lo i ngôn ng l p trình Theo ti n trình l ch s phát tri n Ngôn ng máy, H p ng , Ngôn ng c p cao, Ngôn ng c p ... dùng ñ t o nên chương trình khác 11 Ngôn ng l p trình NNLT ngôn ng dùng ñ vi t chương trình cho máy tính NNLT có t v ng, cú pháp ng nghĩa trình biên d ch Ba lo i NNLT Ngôn ng máy nh phân... 44 2,144 5 Nguyên lý Ngôn ngữ lập trình ... vi phạm nguyên lý Open-Closed Khi ta nói hàm “func” vi phạm nguyên lý Thay Liskov Chú ý i Nguyên lý Thay Liskov có mối liên hệ mật thiết với Nguyên lý Open-Closed Sự vi phạm nguyên lý Thay Liskov ... lý ii Việc tuân thủ nguyên lý Open-Closed thực thể phần mềm mang tính tương đối, phụ thuộc vào ngữ cảnh Có thể ngữ cảnh này, thực thể thỏa nguyên lý, ngữ cảnh khác, thực thể không tuân thủ nguyên ... cấp, mở rộng thỏa nguyên lý iii Việc tuân thủ nguyên lý Thay Liskov thực thể phần mềm mang tính tương đối, phụ thuộc vào ngữ cảnh Có thể ngữ cảnh này, thực thể thỏa nguyên lý, ngữ cảnh khác, thực... 21 529 0 nghiên cứu các vấn đề về nguyên lý ngôn ngữ lập trình hướng đối tượng và cài đặt thử nghiệm bài toán tự chọn bằng ngôn ngữ lập trình hướng đối tượng c++ ... hướng đối tượng ? Đâu sở tảng để xây dựng phần mềm theo tư tưởng hướng đối tượng nghĩa ? Bài viết trình bày nguyên lý lập trình hướng đối tượng Đó quy tắc phân tích thiết kế hướng đối tượng bản, ... Do nguyên lý nên có tính trừu tượng cao không vào chi tiết cách thức giải vấn đề cụ thể việc thực hóa nguyên lý lập trình hướng đối tượng đòi hỏi phải xem xét đến Design Patterns I, Nguyên lý ... 2 Nguyên Lí Của Lập Trình Hướng Đối Tượng Phương pháp lập trình hướng đối tượng nghiên cứu phát triển từ lâu việc vận dụng cho hiệu việc xây dựng phần mềm điều mơ hồ nhiều người Thế phần mềm hướng... 22 693 3 Kỹ thuật vi xử lý - ngon ngu lap trinh C trong vi xử lý ... { …/ /C c câu lệnh } void Hàm2 unsigned char x { …/ /C c câu lệnh } 10/04/13 Giáo Vi n Đặng 11 C U TR C CỦA MỘT CHƯƠNG TRÌNH //Hàm bắt bu c chương trình phải c void mainvoid { …/ /C c câu lệnh ... TRÌNH C TRONG VI XỬ LÝ Biến variables Hằng Constant Mảng Array C u tr c chương trình C u lệnh “If” C u lệnh “If…else” C u lệnh “Switch…Case…default” C u lệnh “For” C u lệnh “While” 10 C u ... trị Trong chương trình c đoạn code sau Bit kiemtra If bit==dung { // C c câu lệnh} If bit==sai { // C c câu lệnh} Vi c giúp lập trình dễ sửa lỗi 10/04/13 Giáo Vi n Đặng 10 C U TR C CỦA... 111 1,031 19 Tiểu luận Nguyên lý các ngôn ngữ lập trình Kỹ thuật Garbage Collection ... KẾT Tiểu luận Nguyên lý ngôn ngữ lập trình 13 Nguyễn Mạnh Hà – CB111398 - SPKTTH Quá trình thực dọn dẹp nhớ kỹ thuật Garbage Collector thật khiến cho chương trình chạy chậm so với chương trình ... tốt tiểu luận TÀI LIỆU THAM KHẢO Tiểu luận Nguyên lý ngôn ngữ lập trình 14 Nguyễn Mạnh Hà – CB111398 - SPKTTH TS Nguyễn Hữu Đức - Bài giảng Nguyên lý ngôn ngữ lập trình ... đối tượng có kích thước + Lisp Alg Tiểu luận Nguyên lý ngôn ngữ lập trình 10 Nguyễn Mạnh Hà – CB111398 - SPKTTH Copying Garbage Collection - Giống Mark-Compact, thuật toán di chuyển tất live objects... 15 1,153 3 Đề thi và đáp án môn Nguyên lý những ngôn ngữ lập trình ... + Ngôn ngữ lập trình bậc cao fortran, pascal, C, Cobol… Câu 7 Họ ngôn ngữ lập trình phổ biến là - Ngôn ngữ máy ngôn ngữ ASSEMBLY Ngôn ngữ máy đối tượng thi hành trực tiếp vi xử lý Hợp ngữ ... cao - Ngôn ngữ lập trình bậc thấp ngôn ngữ lập trình liên quan chặt chẽ đến phần cứng máy tính tính khả chuyển Từ "thấp" nghĩa ngôn ngữ ngôn ngữ lập trình bậc cao mà điều nghĩa lệnh gần ngôn ngữ ... điều hành Câu 12 Trình bày khái niệm siêu ngôn ngữ meta language, cho biết vai trò siêu ngôn ngữ trình thi t kế ngôn ngữ lập trình, lấy ví dụ vài siêu ngôn ngữ Khái niệm Ngôn ngữ dùng để xác... 18 1,318 6 ÁP DỤNG CÁC NGUYÊN LÝ SÁNG TẠO TRONG NGÔN NGỮ LẬP TRÌNH C++ ... chương trình, ngôn ngữ để viết chương trình gọi ngôn ngữ lập trình II CÁC NGUYÊN TẮC SÁNG TẠO ĐƯỢC ÁP DỤNG TRONG NGÔN NGỮ LẬP TRÌNH C++ Nguyên tắc phân nhỏ Segmentation Nguyên tắc áp dụng việc ... Phương pháp nghiên cứu khoa học Tin học GVHD GS TSKH Hoàng Văn Kiếm PHẦN II ÁP DỤNG MỘT SỐ NGUYÊN TẮC SÁNG TẠO TRONG NGÔN NGỮ LẬP TRÌNH C++ I KHÁI NIỆM VỀ LẬP TRÌNH VÀ NGÔN NGỮ LẬP TRÌNH Như ... 40 .Nguyên tắc sử dụng vật liệu tổng hợp Composite Structures 19 PHẦN II ÁP DỤNG MỘT SỐ NGUYÊN TẮC SÁNG TẠO TRONG NGÔN NGỮ LẬP TRÌNH C++ 20 I KHÁI NIỆM VỀ LẬP TRÌNH VÀ NGÔN NGỮ... 30 576 0 đề thi và đáp án môn nguyên lý những ngôn ngữ lập trình ... + Ngôn ngữ lập trình bậc cao fortran, pascal, C, Cobol… Câu 7 Họ ngôn ngữ lập trình phổ biến là - Ngôn ngữ máy ngôn ngữ ASSEMBLY Ngôn ngữ máy đối tượng thi hành trực tiếp vi xử lý Hợp ngữ ... cao - Ngôn ngữ lập trình bậc thấp ngôn ngữ lập trình liên quan chặt chẽ đến phần cứng máy tính tính khả chuyển Từ "thấp" nghĩa ngôn ngữ ngôn ngữ lập trình bậc cao mà điều nghĩa lệnh gần ngôn ngữ ... điều hành Câu 12 Trình bày khái niệm siêu ngôn ngữ meta language, cho biết vai trò siêu ngôn ngữ trình thi t kế ngôn ngữ lập trình, lấy ví dụ vài siêu ngôn ngữ Khái niệm Ngôn ngữ dùng để xác... 19 838 3 Quản lý linh kiện của công ty bán máy tính bằng ngôn ngữ lập trình Visual C++ ... Phân tích thiết kế Bài toán quản lý Linh kiện Công ty bán máy tính I Phân tích chi tiết chơng trình quản lý Công ty bán Máy Tính Chơng trình quản lý Công ty bán Máy Tính nhằm vào mục tiêu xác ... khác ngòi dùng yêu cầu II Phân tích chơng trình mặt chức Sơ đồ chức chơng trình quản lý Công ty bán Máy Tính Chơng trình quản lý Linh Kiện Công ty bán Máy Tính Cập Nhập, Thêm ghi Sửa liệu ghi Xoá ... Chơng I Ngôn ngữ lập trình Visual C++ I Giới thiệu ngôn ngữ lập trình Visual C++ Kể từ ngôn ngữ lập trình C đời tới 30 Trải qua giai đoạn phát triển ngỗn ngữ C++, ngời lập trình bớc... 55 1,136 1 Phần mềm quản lý bán hàng dựa trên ngôn ngữ lập trình Visual Basic ... Visual Basic Visual Basic sản phẩm phần mềm hãng Microsoft Visual Basic ngôn ngữ lập trình hớng đối tợng Phiên Visual Basic Visual Basic 1998, Visual Basic cung cấp số tính phục vụ cho lập ... qúa trình quản lý hàng hóa, quản lý số lợng hàng Hỗ trợ cho qúa trình lên báo cáo gửi nhà quản lý Báo cáo tình hình kinh doanh Gồm báo cáo Báo cáo bán hàng hàng ngày, báo cáo bán hàng hàng ... hình bán hàng phận bán hàng tổng hợp tình hình bán hàng theo ngày, tháng gửi đến phận quản lý theo hoá đơn bán hàng phát sinh Trong qúa trình kinh doanh cửa hàng phảI quản lý đối tợng sau + Hàng... 55 3,394 20 Quản lý thu mua chè bằng ngôn ngữ lập trình Visual Basic ... Qun lý ngi s dng chng trỡnh Qun lý thu mua Chố Qun lý cụng n In bỏo cỏo 13 S chng trỡnh CHC NNG CHNG TRèNH QL ngi s dng chng trỡnh Qun lý thu mua Chố Qun lý cụng n Bỏo bỏo cỏo thu mua ... Visual Basic Ngụn ng Visual Basic ngy cng c s dng rng rói cỏc ỏn, chng trỡnh thc hin v ngoi nc Visual Basic c xem l mt cụng c phỏt trin phn mm thụng dng hin Sau phiờn bn Visual Basic l Visual ... chuyn Visual Basic thnh ngụn ng lp trỡnh hng I tng Visual Basic b sung kh nng to cỏc iu khin riờng Visual Basic cú thờm nhiu chc nng mnh nh cỏc ng dng Internet/ Intranet . Visual Basic... 86 955 4 Thiết Kế Hệ Thống Thông Tin Quản Lý dựa trên ngôn ngữ lập trình VisualBase và hệ quản trị cơ sở dữ liệu Access 2003 ... t quc dõn ó tin hc hoỏ hu ht cỏc lnh vc qun lý Trng ó phõn chia nhim v qun lý tng cỏc nhim v nh nh qun lý tuyn sinh ti chc, qun lý th vin, qun lý sinh viờn, qun lý tuyn sinh, qun lý trang thit ... mt phn mm qun lý VisualBase l ngụn ng lp trỡnh c a vo ging dy chớnh ti khoa Tin hc kinh t trng i hc Kinh t quc dõn Access 2003 l h qun tr c s d liu thụng dng nht hin Vi Access 2003 ngi dựng ... trũ ca thụng tin qun lý - Hot ng thụng tin gn cht vi hot ng qun lý - Nguyờn vt liu cng nh sn phm ca lao ng qun lý, nờn khụng cú thụng tin thỡ khụng cú qun lý - Thc t, lao ng qun lý ngy cng phc... 52 898 2 Ngôn ngữ lập trình Visual Basic và ứng dụng vào việc xây dựng hệ thống thông tin quản lý bán hàng ... cơng tác quản lý giúp cho nhà kinh doanh định Trong chun đề em trình bày cách khái qt ngơn ngữ lập trình Visual Basic ứng dụng vào việc xây dựng hệ thống thơng tin quản lý bán hàng Chương trình ... thơng tin Tên dòng liệu Tên tiến trình xử lý Tệp liệu Nguồn đích Dòng liệu Tiến trình xử lý Kho liệu THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Sơ đồ DFD hệ thống thơng tin quản lý bán hàng Khách hàng Khách hàng ... tên hàng, đơn vị tính, đơn giá vào danh mục hàng hóa - Nhập danh sách hàng bán với thơng tin mã hàng, ngày bán, số lượng Xóa/ lưu/ Người sử dụng dùng chức xóa để xóa thơng tin muốn, chương trình... 22 1,006 0 CHƯƠNG TRÌNH VẬT LÝ LỚP 12 NÂNG CAO NGÔN NGỮ LẬP TRÌNH DELPHI ... sau Bắt đầu dự án Chương trình Vật lý lớp 12 nâng cao với Delphi Xây dựng mơ hình cho chương trình Chương trình gồm 148 Form Form 10 Form chương tương ứng với 10 chương sách giáo khoa ... Dephi ngơn ngữ thân thiện với người dùng, phù hợp cho người bắt đầu làm quen với Delphi nhà lập trình chun nghiệp II TỔNG QUAN VỀ NGƠN NGỮ LẬP TRÌNH DELPHI Giới thiệu ngơn ngữ lập trình Delphi Tiền ... nội dung ngơn ngữ lập trình Delphi Dephi ngơn ngữ lập trình cấp cao, có trình biên dịch hồn hảo, hỗ trợ mạnh kiểu liệu có cấu trúc thiết kế hướng đối tượng dựa tảng ngơn ngữ lập trình hướng tới... 62 925 0 Xem thêm
Tài liệu Nguyên lý và phương pháp lập trình bao gồm các kiến thức về nguyên lý các ngôn ngữ lập trình, các phương pháp và kỹ thuật lập trình đệqui, chiến lược tham lam, chia để trị, qui hoạch động, quay lui, các mô thức lập trình lập trình thủ tục, lập trình hướng đối tượng, lập trình hàm, lập trình logic.
Bài 1. Xong1. *Tại sao nói C tỏ ra thích hợp với lập trình hệ thống, có tính tương thích cao, tốc độ cao, nhưng hệthống kiểu không chặt chẽ và khó kiểm soát chương trình lời C là ngôn ngữ lập trình có cấu trúc. Nhưng nói chặt chẽ về mặt kỹ thuật thì C không phải làngôn ngữ lập trình có câu trúc chính cống vì trong C không cho phép các khối giống nhau chẳng hạnbạn không thể khai báo hàm này trong hàm khác.C là ngôn ngữ cấp trung vì nó cho phép thao tác trên các bit, byte, và địa chỉ. C kết hợp các yếu tố mềmdẻo của ngôn ngữ bậc cao và khả năng điều khiển mạnh của ASSEMBLER. Do vậy, C tỏ ra thích hợpvới lập trình hệ đặc điểm nổi bật của C là C có tính tương thích cao. Chương trình viết bằng C cho một loại máyhoặc hệ điều hành này có thể chuyển dễ dàng sang loại máy hoặc hệ điều hành thể nạp nhanh vàtương thích cho các loại chip vi xử lý Hiện nay hầu hết các loại máy tính đều có trình biên dịch chương trình được viết bằng ngôn ngữ lập trình C sẽ tối tối ưu, chạy với tốc độ cao và tiết kiệm ngữ lập trình C có tính mềm dẻo rất cao từ cach khai báo biến có thể trùng lặp trinh cũng mộtchương trình do C có con trỏ nên có thể can thiệp sâu vào các hệ điều hành, các phân vùng dữ liệu quantrọng. do C có tính mềm dẻo như trên lên C cũng có nhược điểm của nó. Khi chạy những chương trìnhlớn cần các thuật toán phức vậy, ngôn ngữ lập trình C chỉ thích hợp với những chương trình hệ thống hoặc những chương trìnhđòi hỏi tốc độ. Còn với những bài toán lớn và phức tạp thì cũng như PASCAL, C rất khó kiểm soátchương *Tại sao nói C++ không phải hướng đối tượng hoàn toàn, mà là đa hướng và C++ là ngôn ngữthích hợp cho việc xây dựng những chương trình lớn nhưng phức tạp và khó kiểm lời C++ không phải là ngôn ngữ hướng đối tượng hoàn toàn mà là ngôn ngữ "đa hướng". Vì C++hỗ trợ cả lập trình hướng hành động và lập trình hướng đối kết hợp những ý tưởng hay nhất của lập trình có cấu trúc với việc phân chia một bài toán thành cácnhóm nhỏ có quan hệ với nhau, mỗi nhóm con đó là một đối tượng chứa các lệnh và dữ liệu riêng đưa vào các khái niệm hàm ảo, quá tải hàm, quá tải toán tử cho phép tạo ra các kiểu dữ liệu trừutượng, hỗ trợ thừa kế tiêu của C++ là tiếp cận những ý tưởng của phương pháp luận hướng đối tượng và trừu tượng đặc tính của C ++ cho phép người lập trình xây dựng những thư viện phần mềm có chất lượng caophục vụ những đề án là ngôn ngữ thích hợp cho việc xây dựng những chương trình lớn như các hệ soạn thảo, chươngtrình dịch, các hệ quản trị cơ sở dữ liệu, các hệ truyền *Tại sao nói Java là ngôn ngữ hướng đối tượng hoàn toàn, đơn giản, độc lập với cấu trúc máy, dễchuyển mang, an toàn. Lý do chương trình Java chậm, các cách khắc phục để tăng tốc lời Hướng đối tượng trong Java tương tự như C++ nhưng Java là một ngôn ngữ lập trình hướng đốitượng hoàn toàn. Tất cả mọi thứ đề cập đến trong Java đều liên quan đến các đối tượng được định nghĩatrước, thậm chí hàm chính của một chương trình viết bằng Java đó là hàm main cũng phải đặt bêntrong một lớp. Hướng đối tượng trong Java không có tính đa kế thừa multi inheritance như trong C++mà thay vào đó Java đưa ra khái niệm interface để hỗ trợ tính đa kế đơn giản java đơn giản vì, mặc dù dựa trên cơ sở C++ nhưng Sun đã cẩn thận lược bỏ các tính năng khó nhất củaC++ để làm cho ngôn ngữ này dễ sử dụng hơn. Là một ngôn ngữ lập trình hoàn toàn mới, nó buộc phảicó dáng vẻ và sự cảm nhận tương tự như các ngôn ngữ phổ biến hiện hành đồng thời đòi hỏi khoảng thờigian huấn luyện lại tối thiểu và thân thiện hơn với người giản, ngôn ngữ này cũng rất nhỏ - nên nhớ rằng từ đầu nó đã được xây dựng để dùng cho điện tửdân dụng như đầu chạy bằng video và hộp điều khiển từ xa, những thiết bị có không gian lưu trữ rất lập với cấu trúc máy Đây là thuộc tính đặc sắc nhất của Java. Java được tạo ra với tiêu chí "Viếtcode một lần, thực thi khắp nơi" "Write Once, Run Anywhere" WORA. Tính năng biên dịch mộtlần và chạy nhiều nền có thể đạt được nhờ just-in-time compiler JIT, chuyển mã bytecode của Javasang mã máy khi chương trình đang chạy. Chương trình phần mềm viết bằng Java có thể chạy trên mọinền tảng platform khác nhau thông qua một môi trường thực thi với điều kiện có máy ảo java thích hợphỗ trợ nền tảng đó. Môi trường thực thi của Sun Microsystems hiện hỗ trợ Sun Solaris, Linux, Mac OS,FreeBSD, Windows và nhiều hệ thống cài đặt trên các thiết bị di độngDễ chuyển mạng Java được lập ra để hoạt động trên mạng và có các thủ tục để có thể quản lý các giaothức mạng như TCP/IP, FTP và HTTP. Nói cách khác, Java được xây dựng để thực hiện hoàn toàn thíchhợp trên Internet. Chương trình Java thậm chí có thể xâm nhập vào các đối thượng khác thông quaInternet bằng cách sử dụng URL địa chỉ Web để định vị Toàn Khả năng hướng mạng của Java tự động đưa ra yêu cầu về an toàn. Đặc tính an toàn của ngônngữ lập trình này bắt nguồn từ việc nó có những phần hạn chế được cài sẵn nhằm đề phòng các chươngtrình Java thực hiện những chức năng như ghi vào ổ cứng của người dùng hay cho phép virus từ mạnghoặc từ môi trường phân tán thâm nhập do chương trình java chậm Do phải hoạt động thông qua máy tính ảo JVM nên tốc độ thực hiệnứng dụng của Java khá chậm. Điều này lý giải tại sao Java vẫn chưa thực sự được sử dụng như một ngônngữ lập trình chính hiện *Họ các ngôn ngữ dot net có ưu nhược điểm gì có nhiều công cụ hỗ trợ, có dễ dàng tích hợp vớinhau được không, vai trò của CRL như thế nào, có phụ thuộc nền tảng lời Ưu điểm ngôn ngữ lập trình .NETMã nguồn rõ ràng, trong .NET mã nguồn tách biệt với giao diện nhanh hơn PHP?!Visual Studio có thể sinh mã, tiết kiệm thời gian viết thể dùng C, VB hoặc Managed C++.Đi cặp MSSQL, điểm ngôn ngữ lập trình .NETKo thể chạy trên Linux mặc dù đã có thể nhưng thiết nghĩ ứng dụng lớn sẽ có sơ xuất?!Nếu ko có Visual Studio thì khó viết code!Ứng dụng tìm kiếm, tuy nhiên vẫn ko có cơ sở chắc chắn!5. *Bạn cho ví dụ truyền tham số hàm trong setFocustf{var element = eval *Bạn cho ví dụ trả về hàm trong lời gọi hàm trong hamCha{var bCha='Biến của cha';//Khai báo inner-fuctionfunction hamCon{alertbCha; //->'Biến của cha'}//trả về hàm con chứ không gọi hàm conreturn hamCon;}//ham sẽ tham chiếu đến hamCon inner-functionvar ham = hamCha;ham;Bài 2. XongCâu 2 *Một đặc tính là C có khả năng khắc phục lỗi kiểu. Cho ví dụ minh họa. Đây là ưu điểm hay nhượcđiểm của được tạo ra từ các ngôn ngữ không có tương thích ngược với code C đã tồn tại đã ngăn cản cáchạn chế kiểu mạnh. hầu hết lập trình viên C đều coi việc kiểm tra kiểu yếu của nhiều chương trình dịch C làmột nhược điểm. Trên thực tế, một trong những ưu điểm của C++ đối với C là C++ cung cấp việc kiểm trakiểu tốt dù có những đặc điểm nêu trên, nhưng C hiển nhiên đáp ứng yêu cầu là ngôn ngữ cài đặt hệ thống đủhiệu quả để thay thế ngôn ngữ Assembly, cũng khá khái quát và uyển chuyển để thể hiện các thuật toán vàtương tác trong nhiều môi trường khác từng trường hợp mà có thể xét đấy là ưu hay nhược điểm của Ccâu 4. *Bạn cho biết đặc tính của ngôn ngữ lập trình ML. Tại sao nói nó là ngôn ngữ lập trình có thể gọi gần như là ngôn ngữ lập trình hàm với các đặc trưng mệnh lệnh hoặc có thể là ngôn ngữmệnh lệnh hướng hàm số. ML có các đặc trưng hàm linh hoạt, tương tự như LISP, cho phép tạo hàm trên cùnghàng như một phần của biểu thức, hàm số được truyền như đối số cho hàm và trả về như kết quả hàm số. MLcũng được mở rộng song song, làm cho nó phù hợp với việc phát triển các hệ thống song song và có cả mở rộnghướng đối trong những đặc tính quan trọng của ML là hệ thống kiểu của nó được mở rộng từ hệ thống kiểu rấtthành công của Pascal. Không giống như C mà có nhiều kẽ hở, hệ thống kiểu ML là được chứng minh theonghĩa toán học chính biệt, nếu bộ kiểm tra kiểu của ML xác định biểu thức có một kiểu nào đó, thì mọi tính toán của biểuthức sẽ đảm bảo rằng sẽ tạo ra giá trị hợp lệ của kiểu đó. Chẳng hạn, biểu thức có kiểu con trỏ đến xâu’, thì giátrị của biểu thức đó được đảm bảo là con trỏ đến bộ nhớ được cấp phát cho xâu. Nó không thể là con trỏ đuđưa’ đến vị trđược cấp để lưu một giá trị nào khác ngoài 5. *Cho biết khai báo kiểu danh sách trong ML như thế nào. Cho ví dụ hàm trên danh danh sách là một tập hợp có thứ tự các giá trị cùng cách để tạo một danh sách là một chuỗi những giá trị trong những dấu móc sách các số nguyên[1, 2, 3];val it = [1,2,3] int listDanh sách chuỗi- ["just", "a", "test"];val it = ["just","a","test"] string list6*Cho biết khai báo hàm trong ML như thế nào? Sử dụng mẫu ra sao, cho ví có thể được khai báo với từ khóa fun thay cho val. Dạng tổng quát của đầu vào người sử dụng vàđầu ra của chương trình dịch làNó khai báo hàm có tên là identifier. Kiểu đối được xác định bởi dạng và kiểu kết quảđược xác định bởi dạng của .Sau đây là ví dụ Khai báo này gắn giá trị hàm với định danh f. Giá trị của f là một hàm số từ số nguyên vào số hàm đó có thể khai báo bởi khai báo val như sau Bài 3. xong1. *Thế nào là an toàn kiểu. Bạn có thể nói gì về an toàn kiểu của C, C++, ML và toàn kiểuMột ngôn ngữ lập trình là an toàn kiểu nếu không có chương trình nào được cho phép vi phạm sựkhác biệt kiểu của nó. Đôi khi điều này là không rõ ràng hiểu khác biệt kiểu là gì trong một ngôn ngữlập trình cụ thể nào đó. Tuy nhiên, có một số sự khác biệt kiểu mà có ý nghĩa và quan trọng trong tấtcả các ngôn ngữ. Chẳng hạn, hàm có kiểu khác với số nguyên. Như vậy, bất cứ ngôn ngữ nào mà chophép số nguyên được sử dụng như hàm là không an toàn kiểu. Một hành động khác mà chúng ta luônxem xét là lỗi kiểu là truy cập bộ nhớ mà không cấp cho chương *Kiểm tra kiểu thời gian dịch và kiểm tra kiểu thời gian chạy khác nhau như thế nào, ưu nhượcđiểm của chúng. Cho ví dụ minh tra thời gian các ngôn ngữ lập trình có kiểm tra kiểu trong thời gian chạy, chương trình dịch sinh ra mã sao chokhi mã được thực hiện, sẽ kiểm tra để tin tưởng rằng các toán hạng có kiểu đúng điểm của kiểm tra kiểu thời gian chạy là nó bắt được lỗi điểm là thời gian chạy dành cho các kiểm tra tra thời gian dịch. Nhiều ngôn ngữ lập trình hiện đại được thiết kế sao cho có khả năng kiểm tra các biểuthức có tiềm năng lỗi kiểu. Trong các ngôn ngữ này, nói chung là từ chối các chương trình không qua đượckiểm tra kiểu thời gian điểm của kiểm tra kiểu thời gian dịch là nó bắt lỗi sớm hơn so với kiểm tra kiểu thời gian chạy người pháttriển chương trình được cảnh báo về lỗi trước khi chương trình được đưa cho người khác hoặc chuyển giao nhưsản phẩm. Vì kiểm tra kiểu trong thời gian chạy có thể loại bỏ sự cần thiết để kiểm tra một số lỗi trong thời gianchạy, kiểm tra thời gian dịch làm cho nó tạo mã hiệu quả hơn. Chẳng hạn, mã dịch ML là nhanh hơn Lisp từ haiđến bốn lần. Lý do chính tăng tốc độ này là kiểm tra kiểu tĩnh của chương trình ML giảm đáng kể sự cần thiếtphải kiểm tra thời gian thận trọng của Kiểm tra kiểu thời gian dịch. Tính chất của kiểm tra kiểu thời gian dịch là chương trìnhdịch cần thận trọng. Điều đó có nghĩa là kiểm tra kiểu thời gian dịch sẽ tìm mọi câu lệnh và biểu thức mà sinhra lỗi thời gian chạy, nhưng nó cũng đánh dấu các lệnh và biểu thức có lỗi ngay cả nếu chúng không gây ra lỗithời gian chạy. Cụ thể hơn, đa số bộ kiểm tra đề sound và conservative. Bộ kiểm tra được gọi là sound, nếukhông có chương trình nào có lỗi được xem là đúng đắn. Bộ kiểm tra được gọi là conservative, nếu có một sốchương trình không có lỗi vẫn được coi là có lý do cho việc đa số bộ kiểm tra là conservative Đối với mọi ngôn ngữ lập trình Turing - đầy đủ, tập cácchương trình có thể gây ra lỗi thời gian chạy là không giải được. Điều đó suy ra từ tính không giải được của bàitoán dừng. Để xem tại sao, xét đoạn chương trình sauKhông giải được bài toán, biểu thức này có sinh ra lỗi thời gian chạy hay không, vì chỉ có một cách cho biểuthức có lỗi kiểu được tính toán là biểu thức phức tạp mà có thể chạy mãi mãi’ phải dừng. Do đó, việc giảiquyết biểu thức có gây ra lỗi thời gian chạy không’ bao gồm cả việc giải quyết biểu thức phức tạp có thể chạymãi mãi’ có dừng hay tập các chương trình có lỗi thời gian chạy là không giải được, nên không có bộ kiểm tra kiểu thời gian dịchcó thể tìm được lỗi kiểu một cách chính xác. Vì mục đích của kiểm tra kiểu là ngăn chặn lỗi, nên các bộ kiểmtra kiểu của ngôn ngữ có kiểu an toàn là conservative. Sẽ có ích nếu kiểm tra kiểu tìm ra lỗi kiểu, và như hệ quảcủa việc không giải được bài toán dừng’ một số chương trình mà có thể được thực hiện không có lỗi thời gianchạy sẽ không vượt qua được kiểm tra kiểu thời gian dịch3. *ML có thuật toán suy luận kiểu dựa trên cơ sở nào? Cho ví dụ suy luận kiểu của hàm trong MLSuy luận kiểu là quá trình xác định kiểu của biểu thức dựa trên các kiểu đã biết của các ký hiệu xuất hiện trongcác biểu thức đó. Sự khác nhau giữa suy luận kiểu và kiểm tra kiểu thời gian dịch là ở mức độ. Thuật toán kiểmtra kiểu duyệt qua chương trình kiểm tra các kiểu khai báo bởi lập trình viên có phù hợp với các yêu cầu củangôn ngữ không. Trong suy luận kiểu, ý tưởng đưa ra là một số thông tin không cần đặc tả, và một số dạng suydiễn logic sẽ được dùng để xác định kiểu của các biến dựa theo cách chúng được sử dụng. Suy diễn kiểu đượcphát triển bới Robin Milner cho ngôn ngữ lập trình ML. Các ý tưởng tương tự được phát triển độc lập bởi Curryvà Hindley trong khi nghiên cứu tính toán dù các suy diễn kiểu thực tế đã được phát triển cho ML, nhưng suy diễn kiểu có thể được áp dụng cho rấtnhiều ngôn ngữ lập trình. Chẳng hạn, về mặt nguyên tắc suy diễn kiểu có thể áp dụng cho C hoặc cho các ngônngữ khác. Chúng ta tìm hiểu suy diễn kiểu tương đối chi tiết, vì nó thể hiện các vấn đề trọng tâm của kiểm trakiểu và vì suy diễn kiểu cũng thể hiện một số vấn đề quan trọng của thuật toán tìm các kiểu lỗi của vào đó, để cung cấp dạng kiểm tra kiểu thời gian dịch linh hoạt, suy diễn kiểu ML cũng hỗ trợ đa chúng ta đã thấy, khi xem xét kỹ thuật toán suy diễn kiểu, thuật toán này sẽ nhận biết mọi kiểu của cácbiến và xác định chúng cần phải bằng một kiểu chuyên biệt nào đó như int, bool hoặc string. Trong trường hợpkhác, kiểu của một hàm nào đó có thể chứa các biến kiểu mà không ràng buộc theo cách mà hàm được địnhnghĩa. Trong các trường hợp này, hàm đó có thể được áp dụng cho các đối số mà kiểu của chúng sánh với dạngđược cho bởi biểu thức kiểu chứa các biến dù suy diễn kiểu và đa hình là các khái niệm độc lập, chúng ta sẽ bàn về đa hình trong bối cảnh suy diễnkiểu, vì đa hình được nảy sinh một cách tự nhiên theo cách các biến kiểu được sử dụng trong suy diễn kiểu. Vídụ Hàm f1 cộng 2 cho đối số của nó. Trong ML, 2 là hằng nguyên; số thực 2 cần phải viết dạng Phép toán +được tải đè; nó có thể là phép cộng nguyên hoặc phép cộng thực. Trong hàm này, tuy nhiên, phép cộng cầnphải là cộng nguyên, vì 2 là số nguyên. Do đó, đối số của hàm x cần phải là số nguyên. Tập hợp tất cả cácquan sát này, chúng ta nhận được f1 cần phải có kiểu int -> int4. *Nêu cách sử dụng đa hình tham số kiểu trong ML. Cho ví dụ cài đặt swap trong trưng chính của đa hình tham số là tập các kiểu gắn kết với hàm hoặc một giá trị khác được cho trước bởibiểu thức kiểu mà chứa biến kiểu. Chẳng hạn, hàm ML mà sắp xếp các danh sách có thể có kiểu MLDiễn tả bằng lời, sắp xếp có thể áp dụng cho một cặp bất kỳ bao gồm một hàm và một danh sách, hàm có kiểua * a -> bool, trong đó kiểu a cần phải là kiểu của các phần tử của danh sách. Đối số hàm là thao tác nhỏ hơnđược sử dụng để xác định thứ tự trên danh sách được sắp đa hình tham số, hàm có thể có vô hạn kiểu, sẽ có vô hạn cách thay các biến kiểu bằng các biến thực hạn, hàm sắp xếp có thể được dùng để sắp xếp danh sách số nguyên, danh sách các danh sách số nguyênhoặc danh sách các danh sách các danh sách số nguyên, ...Đa hình tham số có thể là ẩn hoặc tường minh. Trong đa hình tham số tường minh, văn bản chương trình chứacác biến kiểu mà xác định cách hàm hoặc các gía trị khác có thể được coi như đa hình. Thêm vào đó, đa hìnhtường minh thường bao gồm việc khởi tạo tường minh hoặc áp dụng kiểu để chỉ ra biến kiểu được thay thế nhưthế nào vào các kiểu nào đó trong khi dùng giá trị đa hình. Các templates C++ là các ví dụ phổ cập về đa hìnhtường minh. Đa hình ML được gọi là đa hình ẩn, vì chương trình mà khai báo và sử dụng hàm đa hình khôngcần chứa kiểu – thuật toán kiểm tra kiểu tính toán khi hàm là đa hình và tính toán khởi tạo biến kiểu nếu cầnVí dụ5. *Thế nào là đa hình ghi đè. Cho ví dụ trong cách khai báo kiểu và nhiều cách đồng nhất kiểu đã có trong các ngôn ngữ lập trình trước đây. Nguyênnhân tại sao khai báo kiểu và đồng nhất kiểu lại liên quan đến nhau là, khi tên kiểu được khai báo, điều quantrọng là quyết định xem đây có phải là kiểu mới không, nó có khác mọi kiểu khác không hoặc tên mới nhưngvề ý nghĩa nó đồng nhất với một kiểu nào đó mà đã được sử dụng ở đau đó trong chương số ngôn ngữ lập trình đã dùng một số dạng đồng nhất kiểu tương đối phức tạp dẫn đến một số dạng khaibáo kiểu không rõ *Sắp xếp đa hình là gì? Cho ví dụ cài đặt sắp xếp đa hình trong ML. Chúng ta có thể thấy nó làm việc như thế nào bằng việc xem xét hàm sắp xếp ML sort mà tương tự với hàmsắp xếp C++ sort khai báo trước đâyĐể sort là đa hình, thao tác nhỏ hơn cần phải được truyền như đối số của hàm cho sort. Các kiểu của insert vàsort được suy ra bằng thuật toán suy luận kiểu như các kiểu trên, biến kiểu a có thể được khởi tạo là kiểu bất kỳ, nếu cần thiết. Kết quả, các hàm nàyđược coi như chúng là các “templates”. Bằng việc sử dụng kết hợp template C++, các hàm ML, cú phápkiểu, các hàm được định nghĩa trước đây có thể được viết như sauCác khai báo trên là các phương án khai báo kiểu tường minh của các hàm ML đa hình ẩn. Nói cách khác,thuật toán suy luận kiểu ML có thể được hiểu chương trình tiền xử lý mà chuyển biểu thức ML không cóthông tin kiểu về biểu thức trong ngôn ngữ trung gian nào đó có kiểu tường minh với các templates. Từ gócđộ này, sự khác biệt giữa đa hình tường minh và ẩn là chương trình tiền xử lý của ngôn ngữ lập trình nhưchương trình dịch ML dùng cú pháp ẩn đơn giản hơn và tự động chèn các thông tin kiểu tường minh,chuyển từ dạng ẩn sang tường minh, trước khi chương trình được dịch và thực thúc ví dụ này, giả sử ta khai báo hàm nhỏ hơn cho số nguyênTrong áp dụng sau của hàm sắp xếp đa hình, sort template được tự động khởi tạo thành kiểu int, như vậy sortcó thể được dùng để sắp xếp danh sách 4. Thiếu câu Xong1. *Hãy trình bày mô hình máy tính đơn giản. Nêu cách thức hoạt động của nó, khi thực thi mộtchương ta sử dụng mô hình máy tính đơn giản trên Hình sau để xem xét việc quản trị bộ nhớ trong cácngôn ngữ cấu trúc vẽ Ngăn xếp chương trìnhMô hình máy trên Hình tách bộ nhớ code khỏi bộ nhớ dữ liệu. Bộ đếm chương trình lưu trữ địa chỉ củachỉ lệnh hiện tại của chương trình và được tăng một cách bình thường sau mỗi chỉ lệnh. Khi chương trìnhvào một block mới, một bản ghi kích hoạt activation record chứa bộ nhớ cho các biến cục bộ khai báo trongblock được bổ sung thêm vào ngăn xếp thời gian chạy run-time stack – được vẽ trên đỉnh bộ nhớ dữ liệu,và con trỏ môi trường được thiết lập đến bản ghi mới này. Khi chương trình thoát khỏi khối, bản ghi kíchhoạt đó được xóa khỏi ngăn xếp và con trỏ môi trường sẽ được đặt lại vị trí cũ. Chương trình có thể lưu lạidữ liệu, mà có thể tồn tại lâu hơn sau khi thực hiện khối hiện thời, trên đống heap. Trên thực tế, bản ghi kíchhoạt được cấp mới nhất là cái đầu tiên sẽ bị thu hồi, thường được gọi là stack discipline. Mặc dù hầu hết cácngôn ngữ cấu trúc khối được cài đặt bởi ngăn xếp, các hàm bậc cao có thể làm cho stack discipline bị lỗi2. *Nêu cấu tạo của bản ghi kích hoạt. Lấy ví dụ bản ghi kích hoạt của các chương trình đang chạy đến khối in-line, không gian cần được cấp cho các biến khai báo trong khối. Chúngta làm điều đó bằng cách cấp bộ nhớ được gọi là bản ghi kích hoạt activation record trên ngăn xếp thời gianchạy. Bản ghi kích hoạt đôi khi được gọi là khung ngăn xếp stack frame.Để thấy rõ nó làm việc như thế nào, xét ví dụ đoạn code sau. Nếu code này là một phần của chương trình lớnhơn, ngăn xếp này có thể chứa không gian cho các biến khác, trước khi khối này được thực hiện. Khi bắt đầuvào khối ngoài, bản ghi kích hoạt chứa không gian cho x và y được đẩy vào ngăn xếp. Khi các lệnh đặt giá trịcho x và y sẽ được thực hiện, làm cho các giá trị của x và y được lưu trên thanh ghi kích hoạt. Khi bắt đầu vàokhối trong, bản ghi kích hoạt khác chứa không gian cho z được bổ sung vào ngăn xếp. Sau khi giá trị của z gán,bản ghi kích hoạt chứa giá trị này sẽ được lấy ra khỏi ngăn xếp. Cuối cùng, khi thoát khỏi khối ngoài, bản ghikích chứa không gian cho x và y được lấy ra khỏi ngăn *Nêu khái niệm phạm vi và thời gian sống của các biến. Cho ví dụ chỉ rõ sự khác biệt của trọng là cần phân biệt phạm vi khai báo và thời gian sống của vị trí cấp.•Phạm vi vùng văn bản mà ở đó khai báo được nhìn thấy.•Thời gian sống là quãng thời gian trong khi chạy chương trình, ở đó vị trí bộ nhớ được cấpnhư kết quả của một khai báo nào ta có thể so sánh thời gian sống và phạm vi qua ví dụ sau, các gạch dọc được sử dụng để chỉra điểm vào và điểm ra của từng ví dụ này, khai báo bên trong của x giấu khai báo bên ngoài của nó. Khối bên trong được gọilà lỗ hổng trong phạm vi của khai báo bên ngoài của x, vì x bên ngoài không thể truy cập được ởtrong khối bên trong. Ví dụ này chỉ ra rằng thời gian sống không trùng với phạm vi, vì thời gian sốngcủa c bên ngoài bao gồm cả thời gian khi khối bên trong được thực hiện, nhưng phạm vi của x bênngoài không bao gồm phạm vi của cái bên 5 Hai cơ chế truyền tham số cho lời gọi hàm là truyền tham trị và truyền tham chiếu khác nhau nhưthế nào. Cho ví dụ minh họa. Lợi thế của mỗi cơ tham số được sử dụng trong khai báo hàm được gọi là tham số hình thức. Khi hàm được gọi, biểu thức gọitham số thực tế được sử dụng để tính giá trị tham số cho lời gọi đó. Sự khác biệt giữa tham số hình thức vàthực tế được mô tả trong đoạn code định danh x và y là các tham số hình thức của thủ tục p. Các tham số thực tế trong lời gọi đến p là z và4*z+ mà các tham số thực tế được tính toán và truyền cho hàm phụ thuộc vào ngôn ngữ lập trình và cơ chếtruyền tham số mà nó sử dụng. Sự khác biệt chính giữa các cơ chế truyền tham số là•Thời điểm mà tham số thực tế được tính toán•Vị trí được sử dụng để lưu giá trị tham sốHầu hết các ngôn ngữ lập trình tính toán các tham số thực tế trước khi thực hiện thân hàm, nhưng cũng có mộtsố ngoại lệ. Một nguyên nhân là tối ưu ngôn ngữ hoặc chương trình có thể muốn trì hoãn việc tính toán tham sốhình thức, vì việc tính toán này có thể lâu và có thể không được sử dụng trong một số lời gọi. Trong số các cơchế mà tính toán các tham số thực tế trước khi thực hiện thân hàm, thông thường là•Truyền tham chiếu truyền L-giá trị địa chỉ của tham số thực tế•Truyền tham trị truyền R-giá trị nội dung của địa chỉ của tham số thực tếNhắc lại là chúng ta đã bàn luận về L-giá trị và R-giá trị trong mục phần liên quan đến ô tham chiếu MLvị trí gán được và phép gán. Chúng ta sẽ bàn truyền tham chiếu và truyền tham trị làm việc như thế nào chitiết hơn dưới đây. Một cơ chế khác là truyền kết quả giá trị pass-by-value-result được xét đến trong phần khác nhau giữa truyền tham trị và truyền tham chiếu là rất quan trọng đối với người lập trình bởi một số lýdo sau• Tác động phụ việc gán bên trong thân hàm có thể thể có các tác động phụ khác nhau khi truyền tham trịhay truyền tham chiếu•Bí danh bí danh xảy ra khi hai tên tham chiếu đến cùng một đối tượng hoặc cùng một vị trí. Bí danh cóthể xảy ra khi hai tham số được truyền tham chiếu hoặc một tham số được truyền tham chiếu có cùng vị trínhư biến tổng thể của thủ tục.• Tính hiệu quả Truyền tham trị có thể không hiệu quả đối với các cấu trúc lớn, nếu giá trị của cấu trúclớn cần sao lưu. Truyền tham chiếu có thể kém hiệu quả hơn truyền tham trị đối với các cấu trúc nhỏ mà có thểđẩy trực tiếp vào ngăn xếp, vì khi tham số truyền tham chiếu, chúng ta cần lần theo con trỏ để lấy giá trị đây có hai cách giải thích ngữ nghĩa của lời gọi theo tham chiếu và theo tham trị. Một là vẽ ra bức tranh bộnhớ máy tính và ngăn xếp chương trình thời gian chạy, chỉ ra ngăn xếp có chứa bản sao của tham số thực tếhay tham chiếu đến nó. Cách giải thích khác thể hiện bằng cách dịch mã sang ngôn ngữ mà phân biệt giữa Lgiá trị và R-giá trị. Chúng ta sẽ dùng cách thứ hai ở đây, vì vậy phần còn lại của chương sẽ cho bạn cơ hội làmviệc với một số hình ảnh về ngăn xếp thời gian dụ đây là ví dụ, viết trên ngôn ngữ tựa Algol, mà kết hợp truyền tham chiếu và truyền tham đoạn mã trên sang ML ta cóCâu 6 Thế nào là phạm vi tĩnh và phạm vi động. Cho ví dụ nêu sự khác biệt giữa hai loại phạm vi.•Phạm vi tĩnh định danh tổng thể tham chiếu đến tên đó mà được khai báo trong phạm vi đóng gần nhấtcủa văn bản chương trình.•Phạm vi động định danh tổng thể tham chiếu đến định danh đó được gắn kết với bản ghi kích hoạt mớinhất+ Ví dụSự khác biệt giữa phạm vi tĩnh và động được thể hiện qua đoạn mã sau, mà chứa hai khai báo của gọi f3 dẫn đến lời gọi g12 bên trong hàm f. Điều này buộc biểu thức x+z trong thân của g cầnđược tính toán. Sau khi gọi đến g, ngăn xếp thời gian chạy sẽ chứa các bản ghi kích hoạt cho các khaibáo bên ngoài của x, khởi tạo của f, và khởi tạo của g, như chỉ ra trong thể hiện điểm này, hai số nguyên tên x được lưu trên ngăn xếp, một của khối ngoài và một của khai báo xở bên trong f. Trong phạm vi động, định danh x trong biểu thức x+z sẽ được biên dịch như một biếntừ trong bản ghi kích hoạt tạo mới nhất, ở đó x = 4. Trong phạm vi tĩnh, đinh danh x+4 sẽ tham chiếuđến khai báo x từ khối chương trình gần nhất, tìm trở lên từ chỗ x+z xuất hiện trong văn bản chươngtrình. Trong phạm vi tĩnh, khai báo liên quan đó của x là khai báo của khối ngoài, với x = 9Thế nào là đệ qui đuôi. Đối với đệ qui đuôi việc tái sử dụng ngăn xếp được thực hiện như thếnào cho ví dụ minh họaKhái niệm ngôn ngữ lập trình chính mà chúng ta cần, là khái niệm lời gọi đuôi. Giả sử hàm f gọi hàm g. Hàm fvà g có thể là các hàm khác nhau hoặc f và g có thể là cùng một hàm. Lời gọi hàm f trong thân hàm g được gọilà gọi đuôi tail call nếu g trả về kết quả của lời gọi f mà không cần bất cứ tính toán nào nữa. Chẳng hạn,trong hàmLời gọi thứ nhất của f trong g là lời gọi đuôi, vì nó trả về giá trị của g chính bằng giá trị của lời gọi f. Lời gọithứ hai đến f trong thân của g không phải là lời gọi đuôi, vì g thực hiện tính toán gồm giá trị trả về của f trướckhi g trả về kết f được gọi là đệ qui đuôi, nếu mọi lời gọi đệ qui trong thân hàm f đều là lời gọi đuôi đến dụ đây là hàm đệ qui đuôi tính toán giai thừaCụ thể hơn, đối với mọi số nguyên n, tlfactn,a trả về n!. Chúng ta có thể thấy tlfact là hàm đệ qui đuôi, vì lờigọi duy nhất trong thân hàm tlfact đó là lời gọi điểm của đệ qui đuôi là chúng ta có thể sử dụng cùng bản ghi kích hoạt cho mọi lời gọi đệ qui. Xét lời gọitlfact3,1. Hình chỉ ra các phần liên quan đén tính toán nói bên trênHình Ba lời gọi đệ qui đuôi đến tlfact chưa tối lời gọi thứ ba kết thúc, nó truyền kết quả trả lại lời gọi thứ hai, mà sau đó truyền kết quả trả lại lời gọi thứnhất. Chúng ta đơn giản hóa quá trình bằng cách cho lời gọi thứ ba trả kết quả về bản ghi kích hoạt mà tạo nênlời gọi từ đầu, tlfact3,1. Khi thực hiện phương án này, lời gọi thứ ba kết thúc, ta có thể gỡ bản ghi kích hoạtcho lời gọi thứ hai, vì ta không cần nó nữa. Trên thực tế vì bản ghi kích hoạt cho lời gọi thứ nhất không cầnnữa khi lời gọi thứ hai bắt đầu, ta có thể gỡ bỏ bản ghi kích hoạt thư nhất ra khỏi ngăn xếp trước khi cấp bảnghi thứ hai. Sẽ tốt hơn, thay vì thu hồi bản ghi thứ nhất và sau đó cấp bản ghi thứ hai đồng nhất với bản ghithứ nhất, ta sử dụng một bản ghi kích hoạt cho cả ba lời chỉ ra cùng một bản ghi kích hoạt có thể được sử dụng ba lần cho ba lời gọi liên tiếp đến tlfact đệ quiđuôi như thế nào. Hình vẽ này chỉ ra nội dung bản ghi kích hoạt cho từng lời gọi. Khi lời gọi thứ nhất,tlfact3,1 bắt đầu, bản ghi kích hoạt với tham số 1,3 được tạo ra. Khi lời gọi thứ hai tlfact2,3 bắt đầu, giátrị tham số thay đổi sang 2,3. Khử đệ qui đuôi tái sử dụng bản ghi kích hoạt duy nhất cho mọi lời gọi hàm, sửdụng phép gán thay đổi giá trị các tham số của hàm cho mỗi lời Ba lời gọi đến tlfact đệ qui đuôi có tối ưu11. *Thế nào là truyền tham số hàm. Cho ví dụ trong MLTrả lờiTên tham số được sử dụng trong khai báo hàm được gọi là tham số hình thức. Khi hàm được gọi, biểu thức gọitham số thực tế được sử dụng để tính giá trị tham số cho lời gọi đó. Sự khác biệt giữa tham số hình thức vàthực tế được mô tả trong đoạn code định danh x và y là các tham số hình thức của thủ tục p. Các tham số thực tế trong lời gọi đến p là z và4*z+ mà các tham số thực tế được tính toán và truyền cho hàm phụ thuộc vào ngôn ngữ lập trình và cơ chếtruyền tham số mà nó sử dụng. Sự khác biệt chính giữa các cơ chế truyền tham số là• Thời điểm mà tham số thực tế được tính toán• Vị trí được sử dụng để lưu giá trị tham số12. *Thế nào là trả về hàm trong lời gọi hàm. Cho ví dụ trong ML. Theo bạn nghĩ nó đem lại nhữnglợi ích gì?Trả lờiMột vấn đề liên quan nhưng phức tạp hơn là đôi khi được gọi là upward funnarg problem, mặc dù có thể gọichính xác hơn là vấn đề kết quả - hàm phía trên, vì nó xảy ra khi trả về giá trị hàm từ phạm vi lồng nhau, nóichung như giá trị trả về của hàm dụ đơn giản của hàm mà trả về hàm là mã ML sau cho việc hợp hàmCho hai đối số hàm số f và g, phép hợp hàm trả về hàm hợp của f và g. Thân của phép hợp là mã yêu cầu thamsố hàm x và sau đó tính toán gfx. Mã này có ích chỉ khi nó gắn kết với cơ chế nào đó để tìm giá trị của f vàg. Do đó, bao đóng được sử dụng để thể hiện phép hợp hàm f,g. Con trỏ mã của bao đóng này trỏ tới mã dịch“để nhận tham số x của hàm và sau đó tính toán gfx” và con trỏ bản ghi kích hoạt của bao đóng này trỏ đếnbản ghi kích hoạt của phép hợp lời gọi f,g vì vậy bản ghi kích hoạt này cho mã để tìm các hàm thực tế f và gcần thiết để tính hợp hàm của *Cho ví dụ hàm map trên danh sách trong ML hàm tác động đến từng phần tử của danh sách.Trả lờiĐây là ví dụ hàm ML mà yêu cầu một đối số hàmHàm map nhận hàm f và danh sách m như các đối số, áp dụng f lần lượt cho mỗi phần tử của m. Kết quả củamapf, m là danh sách các kết quả fx cho các phần tử x trong danh sách m. Hàm này được sử dụng trongnhiều tình huống lập trình ở đó danh sách được sử dụng. Chẳng hạn, ta có danh sách các thời gian hết hạn củacác sựu kiện và ta muốn tăng mỗi thời gian hết hạn, chúng ta có thể áp dụng hàm tăng cho ta sẽ thấy tại sao bao đóng là cần thiết bằng cách xét tương tác giữa phạm vi tĩnh và các đối số của hàmvà giá trị trả về. C và C++ không hỗ trợ bao đóng vì nó kèm theo trả giá cài đặt. Tuy nhiên, việc cài đặt các đốitượng trong C++ và các ngôn ngữ khác liên quan đến cài đặt các giá trị hàm sẽ được bàn trong chương này. Lýdo là bao đóng và đối tượng cả hai đều kết hợp dữ liệu với mã của 5. xong5* Nêu cách sử dụng C++ function templates. Cho ví dụ dùng template như tham số kiểu trong C++. sử dụng C++ function là khai báo một tên kiểu T thông qua từ khóa “template”, một kiểu tổng quát để thay thế và khi sử dụngcùng một hàm hàm có thể truyền tham số dùng cho một kiểu cụ thể nào đó như “int, float, double,..”Templates C++ được khởi tạo khi link chương trình. Cụ thể hơn, giả sử template hàm swap được lưu ở mộtfile và được dịch, và một chương trình gọi swap được lưu trong file khác và được dịch riêng rẽ. Các tệp đượcgọi là đối tượng tái định vị được tạo ra khi chương trình gọi được dịch sẽ bao gồm cả thông tin chỉ ra rằngcode được dịch gọi hàm swap của một kiểu nào đó. Chương trình linker được thiết kế để kết nối hai phầnchương trình bằng việc gắn kết lời gọi hàm swap trong chương trình gọi đến định nghĩa của swap trong phầndịch riêng. Nó thực hiện như vậy bằng việc khởi tạo code được dịch cho swap ở dạng mà tạo ra code phù hợpvới lời gọi đến swap. Nếu chương trình gọi swap với một số kiểu khác nhau, thì một số bản sao khởi tạo khácnhau sẽ được tạo ra. Mỗi bản sao khác nhau cần cho mỗi kiểu của lời gọi vì swap khai báo biến cục bộ tmpkiểu T. Không gian cho tmp cần được cấp trên bản ghi kích hoạt của swap. Do đó code dịch đối với swap cầnđược chỉnh sửa cho phù hợp với kích thước của biến kiểu T. Chẳng hạn, nếu T là cấu trúc hoặc đối tượng, thìkích thước là tương đối lớn. Mặt khác, nếu t là int, thì kích thước sẽ nhỏ. Trong mọi trường hợp, code dịch cầnbiết kích thước của dữ liệu để việc tham chiếu đến bản ghi kích hoạt được thực hiện Ví dụ 1 sử dụng template cho hàm hoán vịVí dụ 2 sử dụng template cho hàm so sánh tìm giá trị lớn nhấtTemplate T GetMax T a, T b{Return a >b ? ab;}6*.Nêu sự khác biệt giữa cơ chế tham số kiểu trong C++ và trong ML. Cho ví dụ minh ví dụ với C++Hàm swap là hàm tổng quát mà làm việc tốt đối với nhiều kiểu của các đối số. Templates cho phép ta coi swaplà hàm với đối số kiểu. Khi thực hiệnNhư vậy với cơ chế tham số kiểu trong C++ ta có thể định nghĩa nó là bất cứ loại đối tượng nào. Khi sử dụngta chỉ cần khai báo kiểu tương ứng khi đó đối tượng Template hàm đã định nghĩa tự động gán tham số kiểutương với MLTrong đa hình ML, thuật toán suy luận kiểu đưa ra kết luận kiểu của hàm và kiểu áp dụng hàm. Khi hàm là đahình, các hành động của thuật toán suy luận kiểu có thể được hiểu như việc chèn tự động khai báo template“template declarations” và khởi tạo template “template installation” vào chương trìnhNhư vậy ta có thể hình dung rằng với ML , chương trình suy luận tự động gán và khai dụ hàm sắp xếp Để sort là đa hình, thao tác nhỏ hơn cần phải được truyền như đối số của hàm cho sort. Các kiểu của insert vàsort được suy ra bằng thuật toán suy luận kiểu như các kiểu trên, biến kiểu a có thể được khởi tạo là kiểu bất kỳ, nếu cần thiết. giống việc định nghĩatemplate trong c++ Kết quả, các hàm này được coi như chúng là các “templates”. Bằng việc sử dụng kết hợptemplate C++, các hàm ML, cú pháp kiểu, các hàm được định nghĩa trước đây có thể được viết như sauCác khai báo trên là các phương án khai báo kiểu tường minh của các hàm ML đa hình ẩn. Nói cáchkhác, thuật toán suy luận kiểu ML có thể được hiểu chương trình tiền xử lý mà chuyển biểu thức MLkhông có thông tin kiểu về biểu thức trong ngôn ngữ trung gian nào đó có kiểu tường minh với vậy sự khác nhau chính là việc ngôn ngữ ML có cơ chế tự động suy luận kiểu,tự động thực hiệnđịnh nghĩa các hàm như ví dụ mô tả sự định nghĩa tường minh việc suy luận kiểu bên trên thay cho vìphải định nghãi tường minh trên C++7*.Nêu đặc trưng và cho ví dụ dùng thư viện template chuẩn C++ STL. Cho ví dụ minh họa. C++Standard Template Library được viết tắt là STL••••••Thư viện chuẩn C++ dùng lại thư viện chuẩn C với một số điều chỉnh nhỏ để giúp nó hoạt động tốt hơn vớingôn ngữ C++. Một bộ phận lớn khác của thư viện C++ dựa trên Thư viện tiêu bản chuẩn hay còn gọi là STL- viết tắt từ chữ Standard Template Library. Thư viện này có nhiều công cụ hữu dụng như là các thùngchứa thí dụ như vector, danh sách liên kết và biến lặp tổng quát hóa từ khái niệm con trỏ để cung cấp nhữngthùng chứa này sự truy cập giống như là truy cập mảng. Xa hơn nữa, bảng đa ánh xạ mảng kết hợp và đatập, tất cả được cung cấp để có thể xuất ra các giao diện tương thích. Do đó, có thể dùng tiêu bản để viết cácthuật toán tổng quát mà chúng làm việc được với bất kì thùng chứa nào hay với bất kì dãy nào được địnhnghĩa bởi biến lặp. Giống như C, các tính năng của thư viện này thì được truy cập bởi việc sử dụng lệnh dẫnhướnginclude để bao gồm một tập tin tiêu đề chuẩn. C++ cung ứng 69 tiêu đề chuẩn, trong đó có 19 tiêu đềkhông còn hiệu lực đặc trưng ấn tượng của STL là tính hiệu quả thời gian chạy của mã được tạo ra. STL không chỉ làmcho dễ dàng viết một chương trình bằng việc cung cấp các cấu trúc hữu dụng, mà STL còn làm cho có thể viếtcode dựa trên thư viện mà chạy nhanh hoặc nhanh hơn so với code mà bạn có thể viết, nếu bạn bỏ ra nhiềucông sức hơn và không sử dụng STL. Một lý do để STL hiệu quả là templates C++ được triển khai trong thờigian dịch/link, với các code riêng biệt được sinh và tối ưu cho mỗi khởi tạo. Lý do khác là việc sử dụng tảichồng, mà được hóa giải trong thời gian dịch, cũng cho phép compiler tối ưu code mà được chọn chính xáccho kiểu dữ liệu được sử dụng trong chương trình. Mặt khác, vì việc lặp code là kết quả của việc triển khaitemplate, mã dịch của chương trình sử dụng STL có thể rất sáu loại thực thể trong STLContainers, mỗi cái là một họ các đối tượng mà cho truy cập đến các đối tượng trong container. Về trực quan, iterator là khái quát của con trỏhoặc cho địa chỉ đến một vị trí nào đó trong mà cho chuyển đổi giữa một dạng của thực thể và dạng khác. Ví dụ là iterator ngược, mà duyệtngược hướng của một tượng hàm Function objects mà là dạng closure mã hàm và môi trường gắn kết. Chúng được sử dụngnhiều dưới dạng cho phép các đối số hàm cho template ở dạng in-line. Cụ thể hơn, đối tượng hàm được truyềnnhư hai đối số riêng biệt, đối số template mang code và đối số run-time mang trạng thái của hàm. Hệ thốngkiểu được sử dụng để tin tưởng rằng code và trạng thái phù hợp với mà đóng gói vùng bộ nhớ. Các allocators khác nhau có thể cung cấp bộ nhớ có khả năng dọn rác,bộ nhớ tham chiếu đếm, bộ nhớ bền,…Ví DụSử dụng template vecter, để làm việc với vector, chúng ta sử dụng một class đã được định nghĩa sẵn cótên cũng là "vector". Class này nằm trong namespace std nên chúng ta cần có câu lệnh sử dụng namespace nàyhoặc gọi trực tiếp stdvector mỗi khi cần thiết. Ngoài ra, các thao tác xử lý vector được định nghĩa trong thưviện của C++ nên chúng ta phải khai báo trước khi sử dụnginclude using namespace std;//Bây giờ chúng ta sẽ khai báo một vector, và chỉ rõ là vector đó dùng để lưu trữ các đối tượng loạigìvector name_of_vector;//Để thêm một phần tử vào vị trí sau cùng của vector bỏ đi phần tử cuối cùng của vector bỏ đi tất cả các phần tử của vector lấy ra phần tử đầu tiên của vector lấy ra phần tử cuối cùng của vector lấy ra phần tử vị trí thứ n của vector đếm từ 0 biết số lượng phần tử của vector biết vector có phần tử hay không duyệt vector bằng iterator//Khai báo con trỏ để duyệtvectoriterator iter_name;for iter_name = iter_name != iter_name++{cout methodparametersThuộc tính orptr->field
NGUYÊN LÝ NGÔN NG L P TRÌNH Gi ng viên Nguy n Văn Hòa Khoa KT-CN-MT – H An Giang 1 Thông tin c n thi t a ch email nvhoa Ch liên l c qua ñi n tho i n u th t c n thi t Tài li u c a môn h c Qui ñ nh trong l p 2 M c tiêu c a môn h c N m ñư c các nguyên lý NL c a ngôn ng l p trình NNLT Tìm hi u s phát tri n c a NNLT N m ñư c các ki u d li u và các c u trúc ñi u khi n Hi u ñư c các phương th c paradigm l p trình LT như hư ng ñ i tư ng, hàm, logic và song song 3 Yêu c u môn h c L p trình b ng Pascal, C và C++, Java, C Sinh viên ph i d l p ñ y ñ Tham gia nh ng l n ki m tra t i l p 4 ánh giá môn h c D l p 10% Ki m tra 40% Thi h t môn 50% Question & discussion!!! 5
1NGUYÊN LÝ NGÔN NGỮ LẬP TRÌNHGiảng viên Nguyễn Văn HòaKhoa KT-CN-MT – H An Giang2Thông tin cần thiết ịa chỉ email Chỉ liên lạc qua ñiện thoại nếu thật cần thiết Tài liệu của môn học /> Qui ñịnh trong lớp3Mục tiêu của môn học Nắm ñược các nguyên lý NL của ngôn ngữ lậptrình NNLT Tìm hiểu sự phát triển của NNLT Nắm ñược các kiểu dữ liệu và các cấu trúc ñiềukhiển Hiểu ñược các phương thức paradigm lập trình LT như hướng ñối tượng, hàm, logic và songsong4Yêu cầu môn học Lập trình bằng Pascal, C và C++, Java, C Sinh viên phải dự lớp ñầy ñủ Tham gia những lần kiểm tra tại lớp5ánh giá môn học Dự lớp 10% Kiểm tra 40% Thi hết môn 50% Question & discussion!!!6Nội dung môn học Giới thiệu ngôn ngữ lập trình Các kiểu dữ liệu Các cấu trúc ñiều khiển Chương trình con Ngôn ngữ lập trình hướng ñối tượng Ngôn ngữ lập trình hàm Ngôn ngữ lập trình logic Ngôn ngữ lập trình song song7Tài liệu tham khảo Giáo trình Ngôn ngữ lập trình, Nguyễn Văn Linh, 2003, HCT Ngôn ngữ lập trình các nguyên lý và mô hình, Cao Hoàng Trụ, H QG HCM, 2004 Concept of Programming Languages, Robert W. Sebesta, Sixth Edition, 20048Chương 1 Giới thiệu9Nội dung Giới thiệu Lịch sử phát triển của máy tính Lịch sử phát triển của NNLT Vai trò của NNLT Lợi ích của việc học NNLT Các tiêu chuẩn ñánh giá NNLT10Giới thiệu Lập trình máy tính Lập trình máy tính là một cách nghĩ về các vấn ñề Biên dịch thành những chỉ thị ñể máy tính thực thi Sản phẩm là các chương trình Chương trình Một tập hợp riêng biệt các hoạt ñộng có thứ tự cho một máy tính thực hiện Chương trình bao gồm một chuỗi các chỉ thị lần lượt mà máy tính phải tuân theo11Giới thiệu tt Lập trình Thao tác nhằm kiến tạo nên các chương trình máy tính thông qua các ngôn ngữ lập trình Còn gọi là quá trình mã hoá thông tin tự nhiên thành ngôn ngữ máy Quá trình này còn ñược gọi là là "viết mã“ Mã nguồn chương trình Những chỉ thị góp phần tạo nên chương trình ñược gọi là mã nguồn của chương trình Mỗi NNLT cũng chính là một chương trình, ñược dùng ñể tạo nên các chương trình khác12Ngôn ngữ lập trình NNLT là ngôn ngữ dùng ñể viết các chương trìnhcho máy tính NNLT có từ vựng, cú pháp và ngữ nghĩa trìnhbiên dịch Ba loại NNLT Ngôn ngữ máy nhị phân Hợp ngữ NN cấp thấp Ngôn ngữ cấp cao Pascal, C, C++, Java,…13ặc tính của ngôn ngữ máy Mã lệnh nhị phân ñể thực thi tác vụ Dòng ñiều khiển control flow dựa trên labels vàrẽ nhánh có ñiều kiện conditional branches Tường minh về ñịa chỉ location, registers, cho các biến và kết quả trung gian Tường minh về quản lý bộ nhớ stack14ặc tính của NNLT Diễn ñạt ở mức phức tạp toán học, logic Có cấu trúc ñiều khiển Loops, Selection, Cases Sự kết hợp kiểu cơ bản array, record, etc Khai báo và kiểm tra kiểu Hỗ trợ nhiều cách lưu trữ global/local/heap Procedure/function Kiểu dữ liệu trù tượng, module, object, etc15Lịch sử phát triển của máy tínhMáy tính của Babbage•Năm 1837•ặc ñiểmStore memoryMill CPULoopingConditional=> Không thành công16Lịch sử phát triển của máy tính ttENIAC plug and play circa 194517Lịch sử phát triển của NNLTSự phát triển của NNLT gắng liền với khoa học máy tính1920’s computer ~ person»1936 Church’s Lambda Calculus = PL!1937 Shannon’s digital circuit design1940’s first digital computers1950’s FORTRAN = PL!1958 LISP LISt Processing language1960’s Unix1972 C Programming Language1981 TCP/IP1985 Microsoft Windows18Bạn biết ñược những NNLT nào? FORTRAN, COBOL, RPG, Visual BASIC, ALGOL-60, ALGOL-68, PL/I, C, C++, Java, C, Pascal, Modula, Oberon, Lisp, Scheme, ML, Haskell, Ada, Prolog, Goedel, Curry, Snobol, ICON, . . .1920Tại sao có rất nhiều NNLT Sự ña dạng về ñặc ñiểm goto vs if-then, swich-case, while-do Quản lý bộ nhớ programmer C,C++ vs. languageJava through garbage collection Sự ưa thích của lập trình viên procedure vs. function Sự phát triển của phần cứng Mục tiêu ñặc biệt của từng NNLT21Lãnh vực ứng dụng của NNLT Nghiên cứu khoa học Fortran, C, Matlab Lập trình hệ thống C, C++ Tính toán trong kinh doanh Java, C Trí tuệ nhân tạo LISP Xử lý văn bản Perl, Python Mục ñích ñặc biệt cho NNLT make, sh-shell22Mô hình của NNLT Lập trình mệnh lệnh Imperative Fortran, C, Pascal, etc Hàm Lisp, scheme Hướng ñối tượng C++, Java, C, etc Logic Prolog Nhu cầu ñặc biệt Tex, Shell, make, HTML23Vai trò của NNLT Các giai ñoạn ñể xây dựng 1 phần mềm Xác ñịnh mục ñích Phân tích Thiết kế Cài ñặt coding Tích hợp và kiểm thử Vận hành và khai thác24Lợi ích của việc nghiên cứu NNLT Cho phép lựa chọn một NNLT phù hợp với dự ánthực tế Sử dụng một cách có hiệu quả các công cụ củangôn ngữ lập trình Hiểu sâu sắc hơn ý nghĩa của các cài ñặt bên trong NNLT Dễ dàng ñể học một ngôn ngữ lập trình mới Tăng vốn kinh nghiệm cho lập trình viên Thiết kế một NNLT mới ngôn ngữ ñơn giản25Các tiêu chí ñánh giá NNLT Dễ ñọc là sự dễ dàng ñọc hiểu một chương trình Sự giản dị ngôn ngữ có ít thành phần cơ sởVD count = count + 1, count += 1, count++, ++count Cấu trúc ñiều khiển sáng sủa, dễ dọc, dễ hiểu Kiểu và cấu trúc dữ liệu góp phần ñánh giá một ngôn ngữ có dễ ñọc hay không. VD TRUE, FALSE Cú pháp ảnh hưởng ñến tính dễ ñọc hiểu, VD ñộ dàitối ña của danh biểu, từ khóa
nguyen ly ngon ngu lap trinh