Bài giảng Lập trình cho máy tính điện tử - Chương 4: Lập trình bằng Pascal

pdf 138 trang ngocly 2520
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình cho máy tính điện tử - Chương 4: Lập trình bằng Pascal", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_cho_may_tinh_dien_tu_chuong_4_lap_trinh.pdf

Nội dung text: Bài giảng Lập trình cho máy tính điện tử - Chương 4: Lập trình bằng Pascal

  1. 4.1 TỔNG QUAN VỀ LẬP TRÌNH CHO MÁY TÍNH ĐIỆN TỬ • 4.1.1 Giới thiệu về thuật toán • a. Khái niệm Thuật toán là một bảng hướng dẫn gồm hữu hạn các mệnh lệnh, quy định chính xác các thao tác hay phép toán mà máy tính điện tử cần thực hiện một cách máy móc theo trình tự vạch sẵn để giải quyết bài toán hay nhiệm vụ nào đó.
  2. • Ví dụ để giải bài toán ax2 + bx + c = 0. Dù a, b, c nhận giá trị như thế nào, có thể là các hằng số, biểu thức hay đa thức thì người giải chỉ cần thực hiện theo 3 bước sau: 1/ Tính giá trị delta 2/ Xét giá trị delta : nếu delta âm thì kết luận bài toán vô nghiệm ngược lại bài toán có 02 nghiệm 3/ Tính nghiệm của bài toán theo công thức Với 3 bước thao tác trên, người ta gọi đó là thuật toán giải phương trình bậc 2.
  3. • b. Tính chất của thuật toán Thuật toán có nhiều tính chất nhưng để xây dựng một thuật toán cần phải tuân thủ 03 tính chất cơ bản của thuật toán sau :
  4. - Tính chính xác: Một thao tác của thuật toán phải rõ ràng, không gây nhầm lẫn làm hiểu theo nhiều nghĩa khác nhau. Hay nói cách khác là trong cùng một điều kiện nếu thực hiện cùng một thao tác thì phải cho ra cùng một kết quả
  5. - Tính phổ dụng: Thuật toán được xây dựng đảm bảo dùng để giải quyết một lớp bài toán chứ không xây dựng để giải quyết một bài toán cụ thể
  6. Tính kết thúc: Các thao tác của thuật toán phải đảm bảo dừng lại và cho ra kết quả sau một số hữu hạn các bước thực hiện
  7. c. Biểu diễn thuật toán bằng sơ đồ khối Sơ đồ khối là công cụ để biểu diễn thuật toán một cách trực quan, cho phép tiện theo dõi các tiến trình và tránh các sai sót nhầm lẫn.
  8. Để biểu diễn thuật toán bằng sơ đồ khối người ta sử dụng các ký pháp sau: - Đường mũi tên: Để chỉ hướng tiến trình của thuật toán - Khối bắt đầu hay kết thúc: Chỉ ra điểm bắt đầu hay kết thúc thuật toán
  9. Ví dụ về lập sơ đồ khối thuật toán. Bài toán : Cho dãy số a1,a2, ,an Hãy lập sơ đồ khối thuật toán tìm và in ra giá trị Max và Min trong dãy. Trang bên là sơ đồ khối thuật toán tìm và in Max, Min của dãy số.
  10. Sơ đồ khối thuật toán tìm Max và Min
  11. 4.1.2 Giới thiệu về ngôn ngữ lập trình Ngôn ngữ lập trình (Programing Language) Ngôn ngữ lập trình là một hệ thống được ký hiệu hóa để miêu tả những tính toán (qua máy tính) trong một dạng mà cả con người và máy đều có thể đọc và hiểu được.
  12. • Theo khái niệm ở trên thì một ngôn ngữ lập trình phải thỏa mãn được hai điều kiện cơ bản là: - phải dễ hiểu và dễ sử dụng đối với người lập trình, để con người có thể dùng nó giải quyết các bài toán khác nhau - phải miêu tả một cách đầy đủ và rõ ràng các tiến trình (tiếng Anh: process), để có thể chạy được trên các máy tính khác nhau
  13. • Một tập hợp các chỉ thị được biểu thị nhờ ngôn ngữ lập trình để thực hiện các thao tác máy tính nào đó thông qua một chương trình. • Như vậy, theo khái niệm, mỗi ngôn ngữ lập trình cũng chính là một chương trình, nhưng có thể được dùng để tạo nên các chương trình khác. Một chương trình máy tính được viết bằng một ngôn ngữ lập trình thì những chỉ thị (của riêng ngôn ngữ ấy) 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 ấy.
  14. Thao tác chuyển dạng từ mã nguồn sang thành chuỗi các chỉ thị máy tính được thực hiện hoàn toàn tương tự như là việc chuyển dịch giữa các ngôn ngữ tự nhiên của con người. Các thao tác này gọi là biên dịch (hay ngắn gọn hơn là dịch).
  15. Người ta còn phân việc biên dịch làm hai loại tùy theo quá trình dịch xảy ra trước quá trình thực thi các tính toán hay nó xảy ra cùng lúc với quá trình tính toán:
  16. • + Thông dịch: Một phần mềm thông dịch là một phần mềm có khả năng đọc, chuyển dịch mã nguồn của một ngôn ngữ và ra lệnh cho máy tính tiến hành các tính toán dựa theo cú pháp của ngôn ngữ.
  17. • + Biên dịch: Một phần mềm biên dịch hay ngắn gọn hơn trình dịch là phần mềm có khả năng chuyển dịch mã nguồn của một ngôn ngữ ban đầu sang dạng mã mới thuộc về ngôn ngữ cấp thấp hơn.
  18. • Ngôn ngữ cấp thấp nhất là một chuỗi các chỉ thị máy tính mà có thể được thực hiện trực tiếp bởi chính máy tính (thông qua các thao tác trên vùng nhớ).
  19. • Trước đây, hầu hết các trình dịch cũ thường phải thông dịch từ mã nguồn sang bộ mã phụ (các tệp có dang *.obj), rồi sau đó, mới biên dịch tiếp sang các tập tin thi hành. Ngày nay, hầu hết các trình dịch đều có khả năng biên dịch mã nguồn trực tiếp sang thành các tập tin thi hành hay biên dịch sang các dạng mã khác thấp hơn tuỳ theo yêu cầu của người lập trình.
  20. • Điểm khác nhau giữa thông dịch và biên dịch là: Trình thông dịch sẽ dịch từng câu lệnh một và chương trình đích sẽ không được lưu lại. Còn trình biên dịch sẽ dịch toàn bộ chương trình, cho ra chương trình đích được lưu lại trong máy tính rồi mới thực hiện chương trình. Một chương trình máy tính có thể được thực thi bằng cách tổ hợp của việc biên dịch và thông dịch.
  21. 4.1. 2 GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH PASCAL • a/ Sơ lược sự hình thành và phát triển của ngôn ngữ lập trình Pascal • PASCAL là ngôn ngữ lập trình được giáo sư Niklaus Wirth ở trường Đại học Zurich, Thụy Sỹ phát minh ra vào những năm 70 của thế kỷ 20. Ông đặt tên ngôn ngữ này là PASCAL để tưởng nhớ nhà toán học người Pháp ở thế kỷ 17 Blaise Pascal
  22. • Ngôn ngữ PASCAL được hình thành với mục đích ban đầu nhằm hướng dẫn sinh viên trong các trường đại học một thói quen viết chương trình có cấu trúc sáng sủa, rõ ràng, dễ đọc và dễ hiểu cho những người khác.
  23. • Trong quá trình phát triển, nó đã hình thành các nhánh ngôn ngữ khác nhau nhưng phổ biến hơn cả là: • - ISO PASCAL được gọi là PASCAL chuẩn (International Standard Organization) • - ANSI PASCAL (Amerrican National Satandard Institute) • - TURBO PASCAL • - IBM PASCAL • - FREE PASCAL
  24. Trong khuôn khổ của môn học, bài giảng đề cập đến TURBO PASCAL với phiên bản 7.0. Để sử dụng được ngôn ngữ lập trình này, người sử dụng cần tối thiểu 02 tệp tin là TURBO.EXE và TURBO.TPL, được lưu trong cùng một thư mục. Trong đó tập tin TURBO.EXE chứa hệ soạn thảo cho phép người sử dụng biên tập chương trình dưới dạng một tệp văn bản .PAS, và tệp TURBO.TPL là một tệp thư viện chứa các hàm, các thủ tục và các đơn vị chương trình chuẩn của PASCAL.
  25. Ngoài ra để dịch chương trình viết bằng ngôn ngữ thuật toán PASCAL sang thành tệp chương trình viết bằng ngôn ngữ máy người sử dụng cần phải có thêm tệp TPC.EXE (Turbo Pascal Compile).
  26. b/ Các yếu tố cơ sở của ngôn ngữ Pascal + Bộ ký tự • Bộ ký tự trong TURBO PASCAL bao gồm • - Các chữ cái: Là các chữ cái trong bảng chữ cái tiếng Anh từ A đến Z và từ a đến z • - Các chữ số: Là các chữ số hệ thập phân từ 0 đến 9 • - Các ký hiệu đặc biệt: Là các ký tự đặc biệt có trên bàn phím ký tự của máy tính điện tử
  27. • + Tên: Là một dãy các ký tự, gồm các chữ cái, chữ số và dấu gạch nối. Tên bắt đầu bởi chữ cái và không chứa các ký tự toán tử hay dấu khoảng trống. • Tên dùng để chỉ một đối tượng được sử dụng trong chương trình, do người sử dụng đặt ra. Khi đặt tên cho đối tượng, người sử dụng cần lưu ý:
  28. • Tên phải là duy nhất, dãy ký tự đã dùng đặt cho đối tượng này thì không đặt được cho đối tượng khác. Trong Pascal, các ký tự trong dãy được dùng đặt tên không phân biệt chữ hoa hay chữ thường • Dãy ký tự được dùng đặt tên chỉ có 63 ký tự đầu là có ý nghĩa. Nếu dãy quá dài thì từ ký tự thứ 64 trở đi, Pascal sẽ tự loại bỏ • Tên đặt cho đối tượng phải khác với từ khóa của Pascal
  29. • Ví dụ, có các dãy ký tự sau: • a. Baitapso1 • b. Bai tap so 1 c. 1sobaitap • d. Bai_tap_so_1 e. Bai-tap-so-1 • f. Baitap1&2 g. Baitap1+2
  30. • Trong số các dãy trên thì dãy b là không sử dụng để đạt được tên vì chứa các dấu khoảng trống, dãy c không sử dụng được vì bắt đầu bằng chữ số, dãy e và g không sử dụng được vì chứa dấu toán tử (dấu gạch dưới _ khác với dấu toán tử -)
  31. • Ngoài ra, Pascal có những tên chuẩn dùng để chỉ các đối tượng đã được Pascal định nghĩa sẵn (kiểu dữ liệu, như thủ tục xuất, nhập dữ liệu, như các hàm có sẵn, ) bao gồm
  32. • Boolean, Char, Integer, Word, Byte, Real, Text • False, True, Maxint • Abs, Arctan, Chr, Cos, Sin, Eof, Eoln, Exp, Ln, Odd, Ord, Round, Trunc, Sqr, Sqrt, Pred, Succ • Dispose, New, Get, Put, Read, Readln, Write,Writeln, Reset, Rewrite
  33. • + Lời giải thích: là các dòng văn bản hoặc đoạn chương trình không được thi hành khi chương trình thực hiện.
  34. • Như để ghi chú cho công việc của một dòng lệnh hoặc một đoạn chương trình, người sử dụng có thể diễn tả bằng ngôn ngữ tự nhiên nhưng phải đảm bảo để máy tính nhận biết và không thi hành nó bằng cách đặt vào trong cặp “{ .}” hoặc cặp “(* .*)”. Lúc này trong cửa sổ soạn thảo chương trình của Pascal, dòng chú thích sẽ bị mờ đi và chúng ta hiểu rằng đó là phần mà máy tính sẽ không kiểm soát và thực hiện chúng
  35. • + Dấu “;”: Được dùng làm dấu ngăn cách giữa các câu lệnh trong ngôn ngữ Pascal. Không hiểu theo nghĩa là dấu kết thúc lệnh. • Có những ngôn ngữ lập trình quy định mỗi câu lệnh phải viết trên một dòng, nhưng với ngôn ngữ Pascal trên một dòng có thể viết nhiều câu lệnh và một câu lệnh có thể viết trên nhiều dòng. Vậy để máy tính có thể phân biệt câu lệnh này với câu lệnh khác, Pascal sử dụng dấu “;” để ngăn cách chúng với nhau.
  36. • c/ Cấu trúc chương trình Pascal + Phần tên chương trình: Bắt đầu bởi từ khóa Program theo quy cách Ví dụ: Program ; Program Baitap1;
  37. • + Phần khai báo: các đại lượng, các đối tượng được sử dụng trong chương trình đều phải được khai báo trước tại phần này. Trừ các đại lượng chuẩn đã được Pascal định nghĩa sẵn. • Phần khai báo trong Pascal thường có các khai báo sau: User : Khai báo các đơn vị chương trình Const : Khai báo các hằng
  38. • Type : Định nghĩa các kiểu dữ liệu • Var : Khai báo các biến • Label : Khai báo các nhãn chương trình • Procedure : Khai báo các chương trình con • Function : Khai báo các hàm do người lập trình định nghĩa Khi khai báo người sử dụng khai báo hết các đại lượng cùng nhóm, loại rồi mới chuyển sang nhóm, loại mới. Chứ không khai báo một nhóm các đối tượng cùng loại bởi nhiều từ khoá
  39. • Ví dụ: Const M=5; • N = 10; Var • Ten : Array [1 N] of String[25]; Tuoi: Array [1 N] of Integer;
  40. • Phần thân chương trình: được bắt đầu bằng từ khóa “Begin” và kết thúc bởi từ khóa “End.” Giữa cặp từ khóa này là các lệnh tương ứng với các thao tác của thuật toán.
  41. • Mỗi chương trình Pascal chỉ có duy nhất một từ khóa “End.”, từ khóa này báo cho máy tính biết rằng mọi công việc giao cho chương trình đã hoàn tất, các lệnh ghi sau từ khóa này sẽ không có ý nghĩa gì.
  42. • Ví dụ: BEGIN • Write (' I like Pascal '); • Readln; END.
  43. • d/ Soạn thảo và chạy thử nghiệm chương trình Pascal • Để đưa một chương trình vào máy tính điện tử qua hệ thống các quy tắc của ngôn ngữ lập trình Pascal, người sử dụng thực hiện tệp tin TURBO.EXE. Trên cửa sổ soạn thảo của Pascal, ngưởi sử dụng nhập các lệnh vào theo đúng quy tắc của ngôn ngữ lập trình.
  44. • Trước khi dịch chương trình đã được soạn thảo thành một tệp thi hành (tệp chương trình có phần mở rộng EXE), người sử dụng cần thử nghiệm để kiểm tra các kết quả đạt được bằng cách ấn tổ hợp phím CTRL +F9 tại cửa sổ soạn thảo chương trình (hoặc vào thực đơn thanh ngang – chọn Run, trong thực đơn đổ xuống chọn mục Run)
  45. 4.2 SỬ DỤNG CƠ BẢN NGÔN NGỮ LẬP TRÌNH PASCAL (Hướng dẫn sử dụng cơ bản ngôn ngữ lập trình Pascal) • a/ Hằng • Hằng là đại lượng nhận một giá trị và nó không thay đổi trong suốt quá trình chương trình thực hiện. Các hằng phải được khai báo trước khi sử dụng, trừ các hằng chuẩn đã được Pascal định nghĩa sẵn. • Trong Pascal, có các hằng được định nghĩa sẵn:
  46. • + Kiểu dữ liệu (kiểu biến): là quy định về cấu trúc và miền giá trị mà một biến thuộc kiểu đó có thể nhận được cùng tập hợp các phép toán xác định trên miền giá trị đó. • Trong Pascal các kiểu dữ liệu được phân thành 4 nhóm: • + Kiểu dữ liệu vô hướng (còn gọi là kiểu giản đơn) • - Kiểu đơn giản chuẩn bao gồm:
  47. • Kiểu Logic • Kiểu số nguyên • Kiểu số thực • Kiểu ký tự • Kiểu vô hướng do người lập trình tự định nghĩa • Kiểu khoảng con • Kiểu liệt kê
  48. • + Kiểu dữ liệu có cấu trúc: - Kiểu mảng - Kiểu tập hợp - Kiểu bản ghi - Kiểu tệp • + Kiểu dãy ký tự • + Kiểu dữ liệu con trỏ
  49. • Kiểu dữ liệu logic (Boolean) Dữ liệu kiểu logic là dữ liệu chỉ nhận các giá trị logic là True và False. Kiểu logic được định nghĩa bởi từ khóa Boolean Các biến nhận giá trị logic được gọi là biến logic, và biến có giá trị True sẽ “>” biến có giá trị False.
  50. • Một số toán tử liên quan đến biến logic bao gồm: - Toán tử quan hệ: = (bằng); > (lớn hơn); >= (lớn hơn hoặc bằng); (khác) - Toán tử logic: And (hội); Or (tuyển); Not (phủ định hay còn gọi là đảo) và Xor (hoặc triệt tiêu)
  51. Bảng kết quả của các phép toán lô-gic:
  52. Var Gioitinh : Boolean; Tuy nhiên, cũng cần lưu ý rằng, biến logic không nhận giá trị thông qua việc nhập trực tiếp qua bàn phím. • Kiểu dữ liệu số nguyên (Integer) Dữ liệu kiểu số nguyên là tập hợp các số nguyên nằm trong khoảng – 32768 đến +32767. Kiểu dữ liệu nguyên được định nghĩa bởi từ khóa Integer. Các biến kiểu số nguyên được khai báo thông qua từ khóa Var Một số toán tử liên quan đến dữ liệu kiểu nguyên:
  53. Toán tử quan hệ: = (bằng); > (lớn hơn); >= (lớn hơn hoặc bằng); (khác) • Toán tử nguyên: + (cộng); - (trừ); * (nhân); DIV (chia lấy phần nguyên) và MOD (chia lấy phần dư) • Ví dụ:
  54. • (13 mod 3): sẽ cho kết quả là một số nguyên chính là phần dư của việc chia 13 cho 3 và có giá trị là 1 • (13 div 4): sẽ cho kết quả là một số nguyên chính là • thương nguyên của việc chia 13 cho 4 và có giá trị là 3 • Khi viết các phép toán thuộc kiểu nguyên trong Pascal cần chú ý • đến miền giá trị của nó. Ví dụ:
  55. • Bên cạnh cách biểu diễn số nguyên như ở trên (biểu diễn bằng 2 byte), Pascal còn có thêm một kiểu đơn giản chuẩn là kiểu biểu diễn số nguyên bằng một byte. Phạm vi biểu diễn số nguyên khi này là từ 0 đến 255 và được gọi là kiểu Byte. • Ngoài ra, Turbo Pascal từ Version 4.0 trở đi và một số Pascal khác đã đưa thêm vào các định nghĩa kiểu số nguyên mới với các từ khoá Word, ShortInt (Short Integer), LongInt (Long Integer).
  56. LongInt -2147483648 3147483647 4
  57. • Kiểu dữ liệu số thực (Real) • Dữ liệu kiểu số thực là tập hợp các giá trị có thể biểu diễn được trong máy tính điện tử. Kiểu dữ liệu thực được định nghĩa bởi từ khóa Real. • Dữ liệu kiểu số thực trong Pascal có thể được biểu diễn bằng hai cách:
  58. • - Số thực dấu phảy tĩnh: Được biểu diễn bởi 02 phần: phần nguyên và phần thập phân, ngăn cách với nhau bởi dấu chấm • Ví dụ: 3.0; 3.14; -5.12 • - Số thực dấu phẩy động: Được biểu diễn bởi 02 phần: Phần định trị là một số thực dấu phẩy tĩnh và phần bậc là một số nguyên nằm trong khoảng -39 đến + 38, ngăn cách giữa 2 phần là chữ E. • Ví dụ: -1.732E-05. Với cách biểu diễn này thì 1.732 là phần định trị còn -5 là phần bậc và giá trị này được xác định là -1.7 * 10-5.
  59. • Để khai báo biến dữ liệu thuộc kiểu số thực, dùng từ khóa Real Ví dụ, để khai báo về dân số, mức thu nhập bình quân/đầu người của một quốc gia. • Var • Danso, ThunhapBQ : Real; • Một số toán tử liên quan đến dữ liệu kiểu số thực: • - Toán tử quan hệ: = (bằng); > (lớn hơn); >= (lớn hơn • hoặc bằng); (khác) • - Toán tử thực: + (cộng); - (trừ); * (nhân) và / (chia)
  60. • Kiểu dữ liệu ký tự (Char) • Dữ liệu kiểu ký tự là một ký tự bất kỳ có trong tập hợp các ký tự của bẳng mã ASCII. Kiểu dữ liệu ký tự được định nghĩa bởi từ khóa Char. • Giá trị của các biến ký tự khi viết trong Pascal được đặt trong cặp dấy nháy đơn („ „). Biến ký tự nào có giá trị là ký tự đứng trước trong bảng mã ASCII thì biến đó nhỏ hơn so với biến ký tự có giá trị là ký tự đứng sau trong bảng mã ASCII.
  61. • Ví dụ: „A‟ (lớn hơn); >= (lớn hơn hoặc bằng); • (khác) • Biến dữ liệu thuộc kiểu ký tự được khai bảo bởi từ khóa Char
  62. • Kiểu dữ liệu dãy ký tự (String) • Dữ liệu kiểu dãy ký tự là một dãy gồm các ký tự bất kỳ có trong bảng mã ASCII. Kiểu dữ liệu dãy ký tự được định nghĩa bởi từ khóa String.
  63. • Cũng giống như biến dữ liệu thuộc kiểu ký tự, giá trị của biến dãy ký tự khi viết trong Pascal sẽ được đặt trong cặp dấu nháy đơn („ „) • Để khai báo biến dữ liệu thuộc kiểu dãy ký tự có thể khai báo theo quy cách: • Var • : String; {cách khai báo 1} • :String[n]; {cách khai báo 2} • Với cách khai báo 1 thì sẽ nhận được tối đa 32767 ký tự
  64. • Với cách khai báo 2, giá trị n là một số nguyên, dương nó sẽ giới hạn số ký tự tối đa trong dãy mà có thể nhận được. • Ví dụ: khai báo biển số xe, địa chỉ của một cơ quan • Var • Bienso: String[9]; Diachi:String; • Ở đây biển số xe hiện tại chỉ nhận được một dãy gồm tối đa là 9 ký tự còn địa chỉ thì có thể nhận một dãy có độ dài lên tới 32767 ký tự. Nhưng việc không giới hạn độ dài tối đa cho biến dữ liệu sẽ làm cho chương trình chiếm dụng bộ nhớ một cách không cần thiết.
  65. • Một số toán tử liên quan đến biến dữ liệu kiểu dãy ký tự: • - Toán tử quan hệ: = (bằng); > (lớn hơn); >= (lớn hơn hoặc bằng); (khác) • - Toán tử thực: + (cộng, dùng để ghép các dãy ký tự lại với nhau) • Ví dụ: biến A nhận giá trị là „Dai hoc‟ và biến B nhận giá trị là dãy ký tự „Kinh te quoc dan‟
  66. • c/ Biểu thức • Biểu thức (Expression) là một công thức tính toán để có một giá trị theo một quy tắc toán học nào đó. Một biểu thức bao gồm: toán tử (operator) và toán hạng (operand). Toán tử được viết ra bằng dấu phép toán. Toán hạng có thể là hằng, hàm hoặc biến. Các phần tử của biểu thức có thể được phân thành số hạng, thừa số, biểu thức đơn giản. • Ví dụ: 3 + PI * Sin ( x) ; • Trong ví dụ này, các toán tử (các phép toán) là phép cộng (+) và phép nhân (*). Các toán hạng là hằng số 3 và PI, là hàm Sin với đối số là biến X.
  67. • - Biểu thức số học là biểu thức có giá trị bằng số (là Integer, Real) • - Biểu thức logic ( Boolean ) là biểu thức có giá trị là True hoặc • False. • - Biểu thức dãy ký tự là biểu thức có giá trị là một dãy ký tự • - Một biểu thức chứa một trong các toán tử quan hệ ( , • =, = ) đựoc gọi là một biểu thức Boolean đơn giản hay một biểu thức quan hệ. Các toán hạng trong biểu thức quan hệ có thể là các số nguyên, số thực, kí tự và chúng phải tương thích nhau về kiểu.
  68. • - Biểu thức có nhiều hơn một toán tử quan hệ thì được gọi là biểu thức phức. Trong Pascal, biểu thức phức phải được tách thành các biểu thức giản đơn và kết hợp lại thông qua toán tử logic. • Ví dụ: trong toán học việc viết biểu thức A > B > C rất hay gặp, nhưng khi biểu diễn trong ngôn ngữ Pascal thì không đúng với quy tắc, và khi đó biểu thức trên sẽ được viết lại như sau: (B > C) and (B < A)
  69. • - Khi thực hiện tính toán giá trị cho biểu thức, Pascal sẽ thực hiện lần lượt các toán hạng theo các mức thứ tự ưu tiên như sau: • (1) Các toán hạng nằm trong cặp ngoặc ( ), từ trong ra ngoài • (2) Toán tử Not • (3) Toán tử * (nhân); / (chia); DIV (chia lấy phần nguyên); MOD (chia lấy phần dư) và AND (hội) • (4) Toán tử + (cộng); - (trừ); Or (tuyển) và Xor (hoặc triệt tiêu) • (5) Các toán tử quan hệ • Trong trường hợp, các toán tử cùng mức ưu tiên thì Pascal sẽ • thực hiện tính toán lần lượt từ trái qua phải.
  70. • d/ Hàm trong Pascal • Hàm là một đoạn chương trình được xây dựng để thực hiện một nhiệm vụ cụ thể nào đó. Pascal xây dựng sẵn một số hàm và các hàm đó được gọi là hàm chuẩn, khi cần thi hành công việc của một hàm nào đó, người sử dụng phải ghi đúng tên hàm và giá trị của các đối số trong đối hàm. • Một số hàm chuẩn liên quan đến dữ liệu kiểu số nguyên và số thực:
  71. Lệnh gán được dùng để gán giá trị của một biểu thức, một hằng vào một biến. Dấu “ :=” được gọi là dấu gán := ; Vế trái của phép gán chỉ có thể là biến mà thôi.
  72. • Ví dụ : • X := 6 ; (* có nghĩa là biến X nhận giá trị bằng 6 *) Y := True ; (* có nghĩa là biến Y nhận giá trị True *) • X := X + 3 ; (* có nghĩa là giá trị của X sẽ bằng giá trị của X cộng với 3. Ví dụ nếu lúc đầu X có giá trị là 6 thì sau khi thực hiện câu lệnh này, X sẽ có giá trị là 9. Lưu ý rằng X chỉ là tên của một ô nhớ. X + 3 được hiểu là lấy nội dung của ô nhớ X đem cộng với 3, sau đó lại để vào ô nhớ X *)
  73. • - Tính tương thích của các kiểu dữ liệu: • Nguyên tắc chung khi dùng phép gán thì kiểu dữ liệu của biến ở bên trái dấu gán và kiểu dữ liệu của biểu thức ở bên phải dấu gán phải giống nhau.
  74. • Ví dụ: Một biến nguyên I không thể nhận một giá trị kí tự được. • I := 'A' ; là điều không thể chấp nhận được. • - Ngoại lệ: • Tuy một biến nguyên không thể nhận giá trị là một số • thực nhưng một số thực thì lại có thể nhận một giá trị nguyên. • X := 6.0; là sai vì X là biến Integer, 6.0 là giá trị thực. • M23 := 6; là đúng vì M23 là biến thực, nó có thể nhận giá trị nguyên. M23 sẽ chứa giá trị 6 dưới dạng số thực • 6.00000000E + 00.
  75. • b. Thủ tục xuất – nhập dữ liệu • Thủ tục (Procedure) là một chương trình con dùng để thực hiện1 công việc nào đó trong toàn bộ chương trình. Mỗi thủ tục có một tên, được dùng để gọi thủ tục khi cần thi hành thủ tục đó. Trong Pascal có hai loại thủ tục: • Thủ tục chuẩn: do Pascal định nghĩa sẵn. Có thể sử dụng các thủ tục chuẩn trong chương trình mà không cần phải khai báo. • Thủ tục “người lập trình”: là do người lập trình xây dựng. Muốn sử dụng các thủ tục này trong chương trình thì phải khai báo.
  76. • Thủ tục xuất dữ liệu • Dữ liệu có thể xuất ra trên màn hình hoặc trên máy in. Ở đây chúng ta chỉ xem xét việc đưa dữ liệu ra màn hình. Pascal cho phép đưa các dữ liệu ra màn hình theo 3 quy cách: Write( , [ , , , [ , ,<phần tử xuất N]) ; Writeln ;
  77. Đưa ra màn hình có quy cách Quy cách 1: Đối với dữ liệu kiểu nguyên, logic, ký tự, dãy ký tự WRITE(Biểu thức:n); WRITELN(Biểu thức:n); Quy cách 2: Chỉ đối với dữ liệu kiểu thực WRITE(Biểu thức:n:m); WRITELN(Biểu thức:n:m);
  78. • Thủ tục nhập dữ liệu • Để nhập dữ liệu vào cho một chương trình có nhiều cách khác nhau như nhập vào từ bàn phím, nhập vào từ một tệp tin dữ liệu hay nhập trực tiếp trong chương trình. Ở đây chúng ta xem xét việc nhập dữ liệu vào từ phàn phím. • Để nhập dữ liệu vào từ bàn phím Pascal cung cấp các quy cách như sau:
  79. Read( [, , , ]); Readln( [, , , ]); Readln; • Khi nhập dữ liệu cho các biến thì giá trị của biến này phải cách dữ liệu của biến kia ít nhất một ký tự khoảng trống hoặc một ký tự Tab. Kết thúc việc nhập dữ liệu bằng phím Enter. • Tương tự như Write và Writeln, Readln sẽ tự động chuyển con trỏ xuống đầu dòng dưới sau khi đã nhận xong các giá trị cho các biến. Với quy cách Readln; thì chương trình sẽ dừng lại cho đến khi người sử dụng ấn phím Enter.
  80. • Kết hợp thủ tục xuất và thủ tục nhập dữ liệu • Khi nhập dữ liệu để giúp cho người sử dụng không bị nhầm lẫn giá trị của biến này với biến khác thì trong quá trình lập trình thường sẽ đưa ra dòng thông báo về biến cần nhận giá trị trước khi thực hiện việc nhập dữ liệu cho biến đó. Và người ta quen gọi đó là thủ tục xuất – nhập dữ liệu (xuất ra một thông báo về biến và nhập dữ liệu vào cho biến đó). • Write( ); Readln( );
  81. • Ví dụ: Nhập dữ liệu về tên, tuổi cho một sinh viên trong lớp • Write(„Nhap ten sinh vien: „); • Readln(TenSV); • Write(„Nhap tuoi cua sinh vien: „); • Readln(TuoiSV); • Vậy khi thực hiện thủ tục Write(„Nhap ten sinh viên: „) sẽ đưa dãy ký tự này ra màn hình rồi dừng lại để người sử dụng nhập dữ liệu cho biến TenSV. Sau khi ấn Enter, con trỏ chuyển xuống đầu dòng dưới (vì thủ tục nhập dữ liệu là Readln), thực hiện tiếp thủ tục Write(„Nhap tuoi sinh vien: „) để đưa dãy ký tự này ra rồi dừng lại chờ người sử dụng nhập giá trị cho biến TuoiSV. Theo cách này, việc nhập dữ liệu trở nên dễ dàng rất nhiều cho người sử dụng, khác với việc viết là Readln(TenSV, TuoiSV);
  82. Một số ví dụ chương trình đơn giản nhất c. Một số ví dụ đơn giản về lập trình tuần tự • Ví dụ 1: cho biết họ tên sinh viên cùng các điểm thi tuyển sinh đại học ba môn Toán, Lý, Hóa của sinh viên đó. Viết chương trình để nhập dữ liệu, tính và in ra tổng điểm tuyển sinh và điểm trung bình các môn thi tuyển sinh của sinh viên đó. Program Sinh_vien; Var
  83. • {Tinh toan} • Tong := Toan + Ly + Hoa; T_binh := Tong/3 ; • {In an} • Writeln(„Tong diem thi tuyen sinh : „, Tong :5 :2) ; • Writeln(„Diem thi tuyen trung binh: „, T_binh :5:2); • Readln; End. Ví dụ 2: cho biết chiều dài, chiều rộng của một hình chữ nhật. Viết chương trình nhập dữ liệu, tính và in ra chu vi và diện tích của hình chữ nhật đó.
  84. • 4.4 Lập trình phân nhánh • a. Câu lệnh phân nhánh • Được dùng để giải quyết các bài toán khi bước kế tiếp được hay không được thi hành phụ thuộc vào kết quả của bước xử lý trước đó hay điều kiện của đầu bài đề ra. Pascal cung cấp cho người sử dụng hai câu lệnh để thực hiện công việc này đó là: • IF Then Else Case of • Câu lệnh phân chương trình thành hai nhánh chính: Quy cách lệnh: • 1/ IF THEN ;
  85. • 2/ IF THEN ELSE • ; • Theo lệnh này, nếu nhận giá trị True thì máy sẽ thực hiện , còn nếu không thì hoặc kết thúc (tức không làm gì cả) đối với quy cách thứ nhất, hoặc máy sẽ đi thực hiện lệnh khác tức là trong quy cách thứ 2. Như vậy quy cách thứ nhất thực ra là quy cách thứ hai thu gọn với là rỗng. • Chú ý: trước Else không bao giờ có dấu chấm phẩy. Sau từ khóa • Then và Else là một câu lệnh.
  86. Ví dụ để chia a cho b với điều kiện b 0 Then t := a / b Else Writeln (' Mẫu số bằng 0 ! Không chia được ! ') ; • Ví dụ 2: Cho biết tên công nhân, số lượng sản phẩm mà người công nhân đó sản xuất ra trong tháng, đơn giá tiền công mỗi sản phẩm và định mức sản xuất đối với người công nhân đó. Viết chương trình nhập dữ liệu, tính và in ra tiền lương sản phẩm của người công nhân đó trong tháng.
  87. Biết rằng nếu số lượng sản phẩm của người công nhân sản xuất ra trong tháng cao hơn định mức thì người công nhân đó được thưởng thêm 2% tiền lương sản phẩm
  88. • b. Câu lệnh ghép • Câu lệnh ghép hay còn gọi là câu lệnh phức hợp được sử dụng để giải quyết bài toán khi muốn thực hiện nhiều công việc được biểu diễn bởi nhiều câu lệnh khi mà theo quy tắc viết lệnh của Pascal chỉ cho phép viết một câu lệnh. Quy cách: Begin ; ; ; End; Nằm giữa cặp từ khóa Begin End là các câu lệnh cần thực hiện, cặp từ khóa Begin End sẽ ghép các lệnh này thành một lệnh ghép và được hiểu như một lệnh duy nhất.
  89. • Qua ví dụ này cho thấy vai trò của lệnh ghép. Giả sử nếu viết một lệnh như sau: • If a < b Then • Max := b ; Min := a ; • thì lúc này phải hiểu là lệnh Max := b được thực hiện chỉ khi điều kiện a < b thỏa mãn, còn lệnh Min := a luôn được thực hiện trong mọi trường hợp.
  90. Lệnh Goto và Nhãn Label Quy cách LABEL ; . GOTO ; : ;
  91. Câu lệnh rẽ nhiều nhánh Quy cách 1: CASE OF , , : ; : ; : ; END; ;
  92. - Quy cách 2: CASE OF , , : ; : ; : ELSE ; END;
  93. 4.5 Lập trình có chu trình Lập trình có chu trình (lặp) • Chu trình được sử dụng để giải quyết bài toán khi có thao tác hay nhóm thao tác được thực hiện lặp đi lặp lại nhiều lần với các toán hạng như nhau chỉ khác nhau ở giá trị dữ liệu đầu vào. Pascal cung cấp cho người sử dụng ba câu lệnh để thực hiện công việc này. • - FOR TO DO • - WHILE DO • - REPEAT UNTIL
  94. • a. Chu trình số học Chu trình số học là chu trình mà có khả năng sẽ cho biết số lần thực hiện lặp lại các thao tác. Quy cách 1: For := To Do ; Trong đó , và là các giá trị kiểu vô hướng đếm được. Khi thực hiện, đầu tiên sẽ được gán cho rồi bắt đầu quá trình lặp bằng việc kiểm tra giá trị của có lớn hơn so với không, nếu không lớn hơn thì thực hiện sau Do, sau đó tự động chuyển giá trị của sang giá trị kế tiếp, quá trình được lặp lại. Quá trình này kết thúc khi giá trị vượt quá
  95. Sau từ khóa Do chỉ được viết một lệnh, trong bài toán trên do sau từ khóa Do có tới ba lệnh nên phải sử dụng lệnh ghép.
  96. Quy cách 2: For := Downto Do ; Tương tự như quy cách 1 nhưng khi thực hiện, sau khi gán cho quá trình thực hiện lặp bắt đầu bằng việc kiểm tra giá trị của có nhỏ hơn so với hay không, nếu không nhỏ hơn thì thực hiện sau Do, sau đó tự động chuyển giá trị về giá trị kế trước đó, quá trình được lặp lại. Chu trình kết thúc khi giá trị nhỏ hơn .
  97. • Chu trình logic While Do • Quy cách: • While Do ; • Khi thực hiện máy sẽ kiểm tra giá trị của , nếu nhận giá trị True thì sẽ được thực hiện, sau đó quay lại kiểm tra giá trị của , , chu trình kết thúc khi trả giá trị False.
  98. Ví dụ: Cho a là một số nguyên dương nhập vào từ bàn phím và S = 1 + 2 + 3 + Viết chương trình tìm giá trị i sao cho S là giá trị lớn nhất nhỏ hơn a.
  99. Program Tim_so; Var A,I,s:integer; Begin Write(‘Nhap vao so nguyen duong a=‘);readln(a); i:=0;s:=0; While s<a do begin S:=s+i;i:=i+1;end; Writeln(‘ gia tri can tim la :’,i-1, ‘ Gia tri lon nhat la ‘, s, ‘ nho hon ‘, a); Readln;end.
  100. • Lưu ý sau từ khóa Do chỉ được viết một lệnh và phải bao gồm cả thao tác làm thay đổi giá trị của . Vì nếu không có thao tác làm thay đổi giá trị thì chu trình sẽ lặp vô hạn mà không thể kết thúc.
  101. • Chu trình logic Repeat Until • Quy cách: Repeat • ; • ; . ; • Until ; • Khi thực hiện, máy sẽ thi hành các lệnh nằm giữa Repeat Until rồi kiểm tra giá trị của , nếu trả lại giá trị False thì chu trình được thực hiện lặp lại. Chu trình kết thúc khi trả lại giá trị True.
  102. • Với chu trình logic Repeat Until thì dù giá trị của trả lại là True hay False thì các lệnh nằm giữa Repeat Until cũng được thực hiện ít nhất một lần. Và cũng giống như chu trình logic While Do, giữa Repeat Until cần có thao tác làm thay đổi giá trị của . • Ví dụ: Viết lại chương trình tìm i sao cho S = 1 + 2 + 3 + có giá trị lớn nhất nhỏ hơn giá trị A nguyên dương nhập vào từ bàn phím với chu trình logic Repeat Until.
  103. Program Tim_so_2; Var Begin A, i, S: Integer; Write(„Nhap vao so nguyen, duong A = „); Readln(A); S := 0; i := 0; Repeat i := i + 1; S := S + i; Until S > A; Writeln(„So can tim la „, i - 1, „ de S co gia tri lon nhat nho hon „, A); Readln; End.
  104. 4.6 Dữ liệu mảng Dữ liệu mảng a. Khái niệm Dữ liệu mảng là dữ liệu có cấu trúc, là tập hợp hữu hạn các biến cùng kiểu dữ liệu. Số lượng các biến được xác định khi khai báo mảng, để thao tác được với dữ liệu cảu một biến trong mảng người ta dùng tên của biến mảng và chỉ số chỉ thứ tự của biến đó trong mảng. Chỉ số được đặt trong cặp „[ ]‟ (ngoặc vuông). Số lượng các chỉ số chỉ số chiều của mảng, các chỉ số ngăn cách nhau bởi dấu „,‟ (phẩy). Dữ liệu kiểu mảng được định nghĩa bởi từ khóa Array.
  105. Dữ liệu kiểu mảng b/ Mảng một chiều Quy cách 1: TYPE =ARRAY[Kiểu chỉ số] OF ; VAR : ;
  106. Type C=Array[-30 50] Of Real; Ten=Array[1 40] Of String; Var Dongia,Soluong:C; Hotendem,Tengoi:Ten;
  107. Var Dongia,Soluong:Array[-30 50] Of Real; Hotendem,Tengoi:Array[1 40] Of String; Soluong[10] Tengoi[30]
  108. Quy cách 2: VAR : ARRAY[Kiểu chỉ số] OF ; * Truy cập đến các phần tử của mảng Tên mảng[Chỉ số mảng]
  109. Ví dụ 1: Cho dãy A gồm n phần tử ( a1, a2, . . ., an) , khi đó để gọi tên một phần tử bất kỳ nào đó trong dãy A thì sẽ là ai , và trong Pascal sẽ được ghi là a[i].
  110. Chương 5 Mạng máy tính và Internet 1. Các cơ sở của mạng máy tính 2. Phân loại mạng theo phạm vi địa lý 3. Mạng cục bộ - LAN 4. Phần cứng của mạng a.Card mạng và các dây cáp b.Các máy chủ (Servers) 5. Phần mềm của mạng máy tính a.Hệ điều hành mạng b.Các chương trình ứng dụng riêng lẻ c.Phần mềm dành cho nhóm công tác (GroupWare) 6. Mạng máy tính toàn cầu Internet a.Sự hình thành Internet b.Các thông tin trên Internet c.Qui trình nối một máy tính vào mạng Internet d.Các dịch vụ chủ yếu trên Internet e.Các dịch vụ khác f.Thương mại điện tử