Tuy nhiên để có thể hiểu được các chương trình đó ta cần phải hiểu các khái niệm cơ bản của tin học dùng trong hoá học như các học thuật toán, những lệnh rất cơ bản của ngôn ngữ lập trìn
Trang 1đạI học thái nguyên
Trang 2Mở đầu
Tin học trong hóa học (chemometric) hay hoá tin (computational chemistry) là danh từ dùng để chỉ một lĩnh vực khoa học kết hợp toán học - mà chủ yếu là phương pháp tính - với máy tính để giải các bài toán hoá học Hoá tin bao giờ cũng được cấu thành bởi ba yếu tố: thuật toán (algorithm), đoạn chương trình máy tính (computer code) và nội dung hoá học
Tin học ứng dụng trong hóa học có thể hiểu là các phương pháp tính toán trên máy tính để giải các bài toán hoá học và không có tính đặc thù đầy đủ Tức là có thể
có những phương pháp chỉ dùng để giải các bài toán hoá học, thường là những phương pháp tổ hợp cấu thành bài toán lớn như hoá lượng tử (quantum chemistry), mô phỏng
động lực phân tử lượng tử (quantum molecular dynamics simulation), và có những phương pháp không chỉ được dùng trong hoá học mà còn dùng trong các lĩnh vực khác Các phương pháp này, đặc biệt là trong việc khai thác dữ liệu (datamining), thường là những phương pháp đơn, không quá phức tạp và xuất phát từ những bài toán cơ bản trong toán học về phương pháp tính như: phương pháp hồi quy phi tuyến, giải
hệ phương trình vi phân, lọc Kalman (Kalman filter), mạng nơron,
Những năm gần đây, sự phát triển các ngôn ngữ lập trình, thuật toán, các bài toán hoá học, các phần mềm tính toán ứng dụng trong hoá học và số lượng người sử dụng ngày càng nhiều Để phục vụ công tác giảng dạy và học tập tin học ứng dụng trong hóa học, chúng tôi đã biên soạn bài giảng "Tin học ứng dụng trong hoá học" Hiện nay có rất nhiều thuật toán, phần mềm cũng như các bài toán hoá tin ứng dụng đã được tải lên mạng INTERNET, bạn có thể tìm thấy trên mạng các thuật toán dưới dạng mã nguồn mở cho hầu hết các bài toán ứng dụng trong hoá học thì việc thay đổi cách học thực là rất cấp thiết Tuy nhiên để có thể hiểu được các chương trình đó ta cần phải hiểu các khái niệm cơ bản của tin học dùng trong hoá học như các học thuật toán, những lệnh rất cơ bản của ngôn ngữ lập trình đó
Vì vậy giáo trình này chủ yếu cung cấp những khái niệm cơ bản nhất của các ngôn ngữ lập trình để người học có thể lập trình những chương trình đơn giản hay có thể sử dụng các chương trình nguồn mở đã có
Trang 31.1.2 Đơn vị đo thông tin
Đơn vị đo thông tin trong máy tính được gọi là bít 1 bít mang lượng thông tin tương ứng với 1 trong 2 khả năng có thể xảy ra: 1 (tương ứng với có điện hay bóng đèn sáng) hoặc 0 (tương ứng với không có điện (bóng điện tắt) )
1GB = 1024MB
1.1.3 Xử lý thông tin bằng máy tính điện tử
Máy tính sẽ không làm gì nếu không có tác động của con người Người sử dụng phải nhập số liệu, bấm các phím thực hiện phép toán cũng như yêu cầu hiển thị kết quả hoặc lưu trữ kết quả
1.2 Cấu trúc hệ xử lý thông tin tự động
Quy tắc theo đó quá trình xử lý được thực hiện (do con người đặt ra)
Trang 4Các thiết vào và các thiết ra gọi là các thiết bị ngoại vi, tùy theo yêu cầu
mà ta có thể thêm, bớt các thiết bị ngoại vi cho phù hợp
Máy tính hoạt động dựa trên nguyên lý cơ bản Von Neumann Các lệnh và dữ liệu cùng được lưu trữ trong bộ nhớ được tạo bởi các từ địa chỉ dựa trên 2 yếu
1.3 phần mềm
Trong tin học, thuật ngữ phần mềm được dùng để nói về các chương trình dùng để điều khiển hoạt động của máy tính, xử lý dữ liệu phục vụ cho một ứng dụng cụ thể trong hoạt động kinh tế, sản xuất, kinh doanh, Ví dụ: các chương trình nạp sẵn trong ROM, các chương trình phần mềm do người lập trình viết
Nếu ta đưa ra khỏi máy tình toàn bộ các chương trình nạp sẵn trong nó, kể cả các chương trình ghi sẵn trong ROM thì những gì còn lại được gọi là phần cứng của máy tính Như vậy, thuật ngữ phần cứng được dùng để chỉ linh kiện, chi tiết, thiết bị lắp ráp thành máy tính
Các chuyên gia phần cứng tập trung vào việc thu nhỏ kích thước, khối lượng các linh kiện điện tử, cơ khí, bộ nhớ nhằm làm giảm năng lượng tiêu hao cho máy tính, tăng khả năng lưu trữ và vận tốc tính toán
Các chuyên gia phần mềm tập trung vào việc xây dựng hoạt động chính xác, khoa học và tiện lợi trên cơ sở phần khai thác tối đa khả năng của máy tính phục vụ cho lợi ích của con người Sự phối hợp chặt chẽ giữa hai lĩnh vực phần cứng và phần mềm là động lực thúc đẩy sự phát triển của tin học
Trang 5Ví dụ: Để tính biểu thức a = (b + c).(d + e) thì quá trình thực hiện việc tính toán bằng chương trình máy tính như sau:
Bước 7: lấy giá trị ở bảng 5 nhân với giá trị ở bảng 6
Bước 8: ghi giá trị tích (b + c).(d + e) ra bảng 7 và gán cho giá trị a
Bước 9: Viết giá trị a ở bảng 7
Bước 10 Dừng chương trình
Các bảng 3, 4, 6, 7 có thể dùng lại bảng 1, 2 bằng cách xóa đi (ghi đè lên) sau khi đã dùng xong
Thuật giải (các bước) ở trên chỉ để con người thực hiện, muốn cho máy
tính có thể “hiểu” và thực hiện được đúng ý đồ của chúng ta cần phải diễn đạt
thuật giải đã cho dưới một dạng quy định nào đó Một trong số các dạng quy
định đó là hợp ngữ Hợp ngữ bao gồm tên các câu lệnh và các quy tắc viết các câu lệnh để máy tính hiểu được Tên các cấu lệnh thường được viết dưới dạng tiếng anh như: READ, WRITE, INPUT, ADD, PRINT,
Trang 6Ngoài ra như ta đã biết, khi nạp chương trình vào bộ nhớ chúng ta phải dành chỗ lưu trữ các giá trị của số liệu Ví dụ trên là các giá trị: a, b, c, d, e
INPUT b (nhập giá trị b từ bàn phím, ghi vào ô nhớ 1)
INPUT c (nhập giá trị c từ bàn phím, ghi vào ô nhớ 2)
INPUT d (nhập giá trị d từ bàn phím, ghi vào ô nhớ 3)
INPUT e (nhập giá trị e từ bàn phím, ghi vào ô nhớ 4)
LOAD b (đọc b ở vào ô nhớ 1)
ADD c (cộng c ở ô nhớ 2 vào ô nhớ 1, kết quả giữ ở ô nhớ 1)
MOVE a (ghi kết quả ô nhớ 1vào ô nhớ 5)
LOAD d (đọc d ở ô nhớ 3)
ADD e (cộng e ở ô nhớ 4 vào ô nhớ 3, kết quả giữ ở ô nhớ 3)
MULT a (nhân kết quả ô nhớ 3 với ô nhớ 5, kết quả giữ ở ô nhớ 3) MOVE a (ghi kết quả từ ô nhớ 3 vào ô nhớ 5)
PRINT a (In ô nhớ 5 ra màn hình hoặc máy in)
Ngôn ngữ máy: Sau khi nạp chương trình hợp ngữ trên vào máy tính,
trong máy sẽ diễn ra hai quá trình sau đây:
+ Dịch chương trình hợp ngữ sang một chương trình viết bằng ngôn ngữ máy
+ Thực hiện chương trình đã dịch
Trang 7Tại sao lại phải dịch: Vì máy tính được thiết kế và làm việc trên cơ sở
của hệ nhị phân Chương trình viết bằng ngôn ngữ máy chỉ chứa các ký hiệu 0 (đèn tắt) và 1 (đèn sáng) Việc dịch từ chương trình hợp ngữ sang ngôn ngữ máy cũng được các nhà thiết kế máy tính chuẩn bị trước và nạp sẵn trong máy Khi dịch, mỗi câu lệnh của hợp ngữ sẽ được chuyển sang dạng đặc biệt gọi là mã máy hay mã nhị phân Ví dụ câu lệnh LOAD (đọc) sẽ được chuyển thành 0000, câu lệnh ADD (cộng) sẽ được chuyển thành 0001 Các ô nhớ dành cho các biến
a, b, c, d, e sẽ được gán địa chỉ của từ ứng với chúng Ví dụ biến a sẽ chiếm vùng nhớ bắt đầu bằng địa chỉ 00100000, biến b chiếm địa chỉ 00100010, …
Khi đó dòng câu lệnh hợp ngữ: LOAD a sẽ được dịch thành:
0000 00100000
Các ngôn ngữ lập trình bậc cao
Có thể viết trực tiếp chương trình bằng ngôn ngữ máy được không? Có thể Tuy nhiên, như ta đã thấy việc làm này rất vất vả và dễ sinh lỗi Các nhà lập trình dựa trên nguyên lý máy tính được điều khiển bằng chương trình để sáng tạo
ra các ngôn ngữ lập trình gần với ngôn ngữ tự nghiên, phù hợp với tâm lý và tư duy của người lập trình để diễn đạt các thuật toán được trong sáng và tự nhiên
Việc đặt ra hợp ngữ là một cố gắng bước đầu giúp cho những người lập chương trình được thuận tiện hơn Các câu lệnh của hợp ngữ được gán tên khá gần với ngôn ngữ tự nhiên, việc dành vùng nhớ cho các biến được thực hiện thông qua tên biến
Vận dụng tư tưởng dịch từ ngôn ngữ này sang ngôn ngữ khác, các nhà tin học đã sáng tạo ra những ngôn ngữ lập khác nhau thuận tiện hơn nữa với các ưu
điểm sau:
+ Các câu lệnh của ngôn ngữ lập trình gần với ngôn ngữ tự nghiên
+ Tùy theo lĩnh vực ứng dụng mà các ngôn ngữ lập trình mới này cung cấp các phương tiện trợ giúp để giải các bài toán khoa học, kỹ thuật hoặc quản lý
Người ta gọi các ngôn ngữ nói trên là các ngôn ngữ lập trình bậc cao để phân biệt với các ngôn ngữ lập trình bậc thấp là hợp ngữ và ngôn ngữ máy
Trang 8Quá trình giải các bài toán nhờ sự giúp đỡ của máy tính bao gồm các giai
đoạn sau:
Giai đọan 1: Tìm hiểu bài toán bao gồm việc xác định giả thiết, các yêu
cầu cần phải thực hiện, mục đích cần phải đạt
Giai đoạn 2: Xác định thuật giải để giải bài toán đã cho
Giai đoạn 3: Lập trình: sử dụng một ngôn ngữ bậc cao để diễn đạt thuật
Giai đoạn 6: Yêu cầu máy thực hiện chương trình đã dịch
Nếu tại một giai đoạn nào đó ta phát hiện ra sai sót thì cần quay lại giai
đoạn trước đó để sửa lỗi rồi thực hiện lại một số giai đoạn cần thiết cho tới khi thu được kết quả mong muốn
Chương trình dịch
Trong các ngôn ngữ bậc thấp thì ngôn ngữ máy có bậc thấp nhất Cần nhớ
là máy tính chỉ làm việc với ngôn ngữ máy
Việc dịch một chương trình viết bằng ngôn ngữ bậc cao sang ngôn ngữ máy do một chương trình đặc biệt đảm nhận gọi là chương trình dịch Chương trình dịch thực hiện chức năng sau đây:
+ Duyệt chương trình nguồn để phát hiện và thông báo các lối cú pháp tức
là những lỗi do người lập trình viết sai
+ Trong trường hợp chương trình dịch không phát hiện thấy lỗi trong chương trình nguồn nó sẽ dịch chương trình nguồn thành chương trình viết trên ngôn ngữ máy gọi là chương trình đích
2.2 Ngôn ngữ BAssic
Ngôn ngữ BASIC (Beginers All purpose Symbolic Instruction đoạn chương trình - thông dịch) do Kemeny và Kuzt sáng lập ra vào năm 1965 Được dùng như là một ngôn ngữ khởi đầu cho việc lập trình Hiện được cài đặt và phổ
Trang 9biến nhất trên máy tính IBM và tương thích Xu hướng hiện nay là cấu trúc hóa ngôn ngữ này và tiếp cận dần với PASCAL Một tiêu chuẩn mới đã được tác giả soạn ra với tên TRUE BASIC
2.3 Ngôn ngữ PASCAL
Do tính tường minh về cấu trúc nên PASCAL rất thích hợp cho việc giảng dạy cơ sở lập trình, đặc biệt đối với những người không chuyên tin Bạn đọc có thể đọc rất nhiều giáo trình khác nhau về PASCAL cơ bản (ví dụ Quách Tuấn Ngọc Ngôn ngữ lập trình PASCAL)
Tư liệu Đọc thêm
Ngôn ngữ PASCAL là ngôn ngữ lập trình bậc cao do giáo sư Niklaus Wirth (trường
đại học kỹ thuật Zurich - Thụy Sĩ) sáng lập và công bố vào đầu những năm 1970, tên PASCAL
để kỷ niệm nhà toán học người Pháp Blaisse PASCAL ở thế ký 17 Lúc đầu, PASCAL được sáng tác với mục đích làm ngôn ngữ cho máy tính để dạy học cho sinh viên ở các trường đại học: nó giúp cho sinh viên cũng như người mới học lập trình có được thói quen viết một chương trình có cấu trúc sáng sủa, rõ ràng, dễ hiểu và dễ đọc cho cả mọi người khác Trước khi có PASCAL, các sinh viên đều được học ngôn ngữ lập trình FORTRAN, một ngôn ngữ lâu
đời nhất và là ngôn ngữ không có cấu trúc Giáo sư Wirth thấy rằng có thể tránh được rất nhiều lỗi khi lập trình với một ngôn ngữ cấu trúc khối và có sự kiểm tra kỹ lưỡng sự tương thích giữa các dữ liệu
PASCAL là một ngôn ngữ có định kiểu mạnh mẽ, có nghĩa là mọi biến và hằng của
một kiểu dữ liệu không thể tự do đem trộn lẫn với các biến và hằng của một kiểu dữ liệu khác
Ví dụ cả hai vế phép gán phải là cùng một kiểu, ngoại trừ trường hợp vế trái là một biến số thực (real) còn vế phải có thể là số nguyên (integer) Việc định kiểu một cách chặt chẽ như vậy bắt buộc người lập trình luôn luôn phải có các biểu thức tương thích nhau về kiểu dữ liệu
PASCAL là một ngôn ngữ có cấu trúc Một ngôn ngữ có cấu trúc khối là ngôn ngữ
mà ta có thể tách các thông tin dữ liệu (biến, hằng, ) và các lệnh cần dùng cho một nhiệm
vụ xác định thành những khối riêng, tách ra khỏi phần còn lại của chương trình để người lập trình có thể giải quyết dần từng phần một, từng khối một thậm trí có thể cho nhiều người cùng tham gia lập trình, mỗi người phụ trách một vài khối Thông thường các khối ứng với các nhiệm vụ cụ thể và xác định, được thực hiện bằng các chương trình con với các biến địa phương là các biến tạm thời của chương trình con đó Bằng cách này ta có thể viết các chương trình con sao cho các sự kiện xảy ra trong đó không làm ảnh hưởng tới các phần khác của chương trình nằm ngoài chương trình con Có thể nói tính cấu trúc của chương trình PASCAL
được thể hiện trên 3 mặt
+ Cấu trúc về mặt dữ liệu: từ các dữ liệu đã có (kiểu đơn giản hoặc dữ liệu cấu trúc) ta
có thể xây dựng các cấu trúc dữ liệu phức tạp hơn
+ Cấu trúc về mặt lệnh: Từ các lệnh đã có (lệnh đơn giản hoặc lệnh có cấu trúc) ta có
thể nhóm chúng lại với nhau và đặt giữa hai từ khóa BEGIN và END thành câu lệnh phức tạp hơn, gọi là lệnh hợp thành hay lệnh ghép
Trang 10+ Cấu trúc về mặt chương trình: Một chương trình có thể chia thành các modun
chương trình độc lập (chương trình con)
Bộ chữ viết của PASCAL
Ngôn ngữ PASCAl được xây dựng với bộ chữ viết sau:
Bộ 26 chữ cái la tinh: 26 chữ cái in hoa A, B, C, ,Z
26 chữ cái thường a, b, c, , z
Ký tự gạch nối ”_”
Các chữ số thập phân: 0, 1, 2, , 9 Các ký hiệu toán học thông thường +, -, *, /, =, <, >, (), … Các ký hiệu đặc biệt như các dấu chấm câu và các dấu khác: ,; :[]?%\⏐!&#$’
Dấu cách (Space) được dùng để ngăn cách các từ Vì khi viết nó không hiện ra chữ gì
nên để tiện nhận biết trong một số trường hợp như cần đếm số dấu cách, trong tài liệu thường dùng dấu
Từ vựng của PASCAL gồm một số từ riêng PASCAL được gọi là từ khóa (key word)
Các từ khóa này người sử dụng phải dùng đúng với cú pháp, không được dùng nó vào việc khác hoặc đặt tên mới trùng với các từ khóa Đó là các từ:
Từ khóa chung: PROGRAM, BEGIN, END, PROCEDURE, FUNCTION
Từ khóa để khai báo: CONST, VAR, LABEL, TYPE, ARRAY, STRING, RECORD, SET, FILE, OF
Từ khóa của lệnh thử và rẽ nhánh: IF THEN ELSE ., CASE OF
Từ khóa của lệnh lặp: FOR TO DO , FOR DOWNTO DO , WHILE DO , REPEAT UNTIL
Từ khóa điều khiển: WITH, GO TO
Từ khóa toán tử: AND, OR, NOT, IN, DIV, MOD
Từ khóa NUL: NUL
Các từ khóa này có thể viết in hay viết thường, giá trị và ý nghĩa của các từ khóa không thay đổi
Tên hay định danh (identifier)
Tên hoặc định danh là một dãy ký tự (không có dấu cách) được dùng để chỉ tên hằng
số, tên hằng ký tự, tên biến, tên kiểu, tên chương trình, Tên được tạo thành từ các chữ cái
và chữ số song bắt buộc chữ đầu phải là chữ cái Tất nhiên ta phải đặt tên sao cho có ý nghĩa,
dễ nhớ Để làm sáng sủa tên, PASCAL cho phép dùng dấu gạch dưới "_" khi viết tên
Một số tên như tên của chương trình con (SIN , COS, ) đã được PASCAL định nghĩa sẵn được gọi là tên chuẩn hay tên đã được định nghĩa Sự khác nhau giữa tên chuẩn và từ khóa là người sử dụng có thể định nghĩa lại tên chuẩn, dùng tên chuẩn vào việc khác nếu muốn còn từ khóa thì bị nghiêm cấm dùng vào việc khác trái quy định
Một số tên chuẩn của PASCAL: BOOLEAN, CHAR, INTEGER, REAL, BYTE, TEXT, FALSE, TRUE, MAXINT, ABS, ARCTAN, CHR, COS, SIN, EOF, EOLN, EXP, LN, ODD, ORD, ROUND, TRUNC, SQR, PRED, SUCC,DISPOSE, NEW, GET, PUT, READ, READLN, WRITE, WRITELN, RESET, REWRITE
Dấu chấm phẩy “;” dùng để ngăn cách các câu lệnh của PASCAL và không thể thiếu
được Không nên hiểu dấu “;” là kết thúc cấu lệnh
Trang 11Lời giải thích (Comment) có thể để bất kỳ chỗ nào của chương trình cho dễ hiểu, dễ đọc hơn mà không làm ảnh hưởng đến các phần khác Lời giải thích được đặt giữa hai dấu { } hoặc (**) : { lời giải thích } hoặc giữa cụm dấu (* lời giải thích *)
Do có rất nhiều tài liệu về PASCAL và cũng do khuôn khổ của giáo trình này nên chúng tôi chỉ trình bày những khái niệm cơ bản nhất về PASCAL để người đọc có thể hiểu và lập trình được những chương trình đơn giản
2.3.1 Cấu trúc chương trình PASCAL
Một tập các câu lệnh tạo thành một chương trình Lệnh còn được gọi là chỉ thị dùng để hướng dẫn máy tính làm việc Cấu trúc của một chương trình PASCAL hợp thành bởi các phần sau: đầu chương trình, mô tả, thân chương trình
và kết thúc
Đầu chương trình
Phần đầu của chương trình bao gồm:
Trong đó tên chương trình không được có dấu cách và các ký tự đặc biệt, không được dùng các toán tử để đặt tên chương trình, kết thúc tên chương trình là dấu “;”
Ví dụ: PROGRAM GIAI_PHUONG_TRINH_BAC_2;
Cách mô tả :
Ví dụ: LABEL 10, 20, 123; mô tả 3 nhãn dùng trong khối
PROGRAM tên chương trình;
LABEL số nguyên;
Trang 12Ví dụ: VAR m,n : integer; ch : char;
chỉ ra m, n, ch, x, y, j, h : là các biến, trong đó: m, n là kiểu nguyên, x, y
là thực, ch là kí tự, j là logic và h là kiểu city (đã đ−ợc định nghĩa trong TYPE)
CONST tên hằng 1 = gía trị hằng 1;
tên hằng 2 = gía trị hằng 2;
TYPE Tên kiểu 1 = ( phổ các giá trị của kiểu 1);
Tên kiểu 2 = ( phổ các giá trị của kiểu 2);
VAR tên biến 1, tên biến 2 : kiểu 1;
tên biến 3, tên biến 4 : kiểu 2;
Trang 13Mảng
Để có thể truy nhập thông tin và sử dụng các phần tử trong dãy số PASCAL đưa vào khái niệm mảng Mảng là một kiểu biến (hoặc hằng) có chỉ số dùng để chỉ thứ tự của phần tử đó trong dãy số
Cách mô tả mảng 1 chiều:
hoặc khai báo theo kiểu (TYPE) rồi sau đó mới khai báo biến như sau:
Ví dụ dãy số dưới đây :
y 12 3 5 10 9 1Khai báo biến x và y là biến số thực theo kiểu mảng như sau:
x,y: array[1 n] of real;
hoặc khai báo thông qua việc xác định trước một kiểu biến mới
TYPE M1=array[1 10] of real;
VAR X,y: M1;
Cách thứ hai phổ biến hơn khi chúng ta phải sử dụng các chương trình con
có các biến hình thức là các mảng (xem phần sau) Trong các tính toán, các phần
tử của mảng đóng vai trò như các biến đơn
Ngoài mảng một chiều còn có các mảng hai và ba chiều:
Cách mô tả mảng 2 chiều:
tên biến 1, tên biến 2, : ARRAY [1 n, 1 m] of kiểu biến;
hoặc khai báo theo kiểu (TYPE) rồi sau đó mới khai báo biến như sau:
tên biến 1, tên biến 2, : ARRAY [1 n] of kiểu biến;
tên biến 3, tên biến 4, : ARRAY [1 m] of kiểu biến;
TYPE Mang1 = array [1 n] of kiểu biến;
Mang2 = array [1 m] of kiểu biến;
VAR tên biến 1, tên biến 2, : Mang1;
tên biến 3, tên biến 4, : Mang2 ;
Trang 14TYPE Mang1=array[1 n, 1 m] of kiểu biến;
VAR tên biến 1, tên biến 2, : Mang1;
Tương tự ta có cách mô tả mảng 3 chiều:
tên biến 1, tên biến 2, : ARRAY [1 n, 1 m,1 k] of kiểu biến;
Phần thân chương trình
Thân chương trình bao gồm các toán tử (còn gọi là các câu lệnh hoặc chỉ
thị) để thực hiện công việc chủ yếu của chương trình và được đặt sau từ khóa:
Trang 15WRITE(‘Th«ng b¸o’ hoÆc biÕn);
READ(biÕn);
WRITELN(‘Th«ng b¸o’ hoÆc biÕn);
READLN(biÕn);
Trang 16Ví dụ:
Write(a,b,c); sẽ cho ra màn hình 1.2345678+01 3.00000000+02 -7.0001111-03 Trong trường hợp định khuôn chúng ta dùng các số sau dấu “:” để mô tả
số cột trên màn hình dành cho việc viết biến hoặc hằng trước đó Riêng với các
số thập phân kiểu dấu phảy cố định có thêm số thứ hai sau dấu ‘”:” thứ hai chỉ
số số thập phân sau dấu phảy
Với tất cả các điều vừa trình bày ở trên chúng ta đã có thể viết một chương trình PASCAL hoàn chỉnh, ví dụ để tính tích của hai số a và b, tức là S = a b
Toán tử điều khiển
Toán tử điều khiển của PASCAL có 2 vế:
Nếu điều kiện logic sau IF được thoả mãn thì thực hiện câu lệnh 1 sau THEN Nếu không thì thực hiện câu lệnh 2 sau ELSE
IF <Điều kiện logic> THEN <Câu lệnh 1> ELSE <Câu lệnh 2>;
Trang 17Ví dụ:
If (i=k) then a:=b else a:=d;
Trong trường hợp đơn giản nhất ta chỉ cần đến vế đầu:
Nếu điều kiện logic sau IF thoả mãn thì thực hiện câu lệnh 1 sau THEN
Ví dụ:
If (i=k) then a:=b;
Trong những trường hợp phức tạp, sau THEN và ELSE chúng ta có thể phải thực hiện nhiều câu lệnh, khi đó phải dùng các toán tử hợp thành bắt đầu bằng BEGIN và kết thúc bằng END
Chú ý là câu lệnh trước ELSE không có dấu “;”
Dưới đây là ví dụ đoạn chương trình sử dụng toán tử IF … THEN
Ví dụ 1: Giải phương trình bậc hai:
…
If (delta>=0) then
Begin x1:= (- b + sqrt(delta))/2/a;
x2:= (- b - sqrt(delta))/2/a;
End
Else
IF <Điều kiện logic> THEN <Câu lệnh 1>;
IF <Điều kiện logic> THEN
BEGIN
Câu lệnh 1; .; Câu lệnh n;
END ELSE
BEGIN
Câu lệnh 2; ; Câu lệnh m;
END;
Trang 18Begin AA: = -b/2/a; { phần thực của nghiệm phức } BB:= sqrt(-delta)/2/a; { phần ảo của nghiệm phức } End;
Ví dụ 3: Tính tổng các số chẵn và tổng các số lẻ trong một dãy n số
nguyên đầu tiên
Trong đó có sử dụng toán tử lấy số d− khi chia số nguyên a cho số nguyên
b (câu lệnh là a mod b) Nếu muốn tính tổng các phần tử có chỉ số chẵn và tổng các phần tử có chỉ số lẻ của mảng a[i] ta có:
…
i:=1;
sum1:=0;
Trang 192.4.1 Giới thiệu ngôn ngữ FORTRAN
FORTRAN là ngôn ngữ lập trình cho máy tính Nó thuộc loại ngôn ngữ cap cấp thiên về bài toán, còn gọi là ngôn ngữ thuật toán hay ngôn ngữ thủ tục
Đương nhiên, ngôn ngữ chương trình nào cũng dùng để thể hiện thuật toán, nhưng ngôn ngữ thuật toán cho phép chuyển trực tiếp từ mô tả thuật toán sang chương trình nguồn không cần thay đổi gì mấy
FORTRAN là tên ghép của các chữ cái đầu “FORmula TRANslation” nghĩa là “biên dịch các công thức”, bởi vì lúc đầu ngôn ngữ này dùng để giải các bài toán kỹ thuật
FORTRAN ra đời mới vài chục năm (1954) nhưng sớm phát triển và có sức sống mạnh mẽ và dẻo dai
Hiện nay, đã có rất nhiều ngôn ngữ phát triển phức tạp, chặt chẽ và tinh tế hơn, đặc biệt là PASCAL nhưng FORTRAN vẫn đang là ngôn ngữ phổ dụng trên thế giới: hơn 70% các chương trình được viết bằng FORTRAN Tuy nhiên ở Việt Nam chương trình FORTRAN chủ yếu được áp dụng nhiều trong các ngành khoa học kỹ thuật, Trong giáo dục chương trình FORTRAN không được phổ biến như PASCAL
Những ưu điểm của FORTRAN:
+ Dễ học, dễ viết, dễ hiệu chỉnh
+ Có hiệu quả khi dịch do cấu trúc ngôn ngữ đơn giản
+ Vốn tư liệu phong phú: Có nhiều kho chương truình mẫu, chương trình phục vụ
+ Khả năng vào ra đơn giản và dồi dào, tiện dụng
Trang 20Hiện nay, có nhiều dạng FORTRAN khác nhau dựa trên FORTRAN cơ sở (Basic FORTRAN) FORTRAN chuẩn (standard FORTRAN) Từ phiên bản thứ
7 trở đi ngôn ngữ FORTRAN được ký hiệu là “Fortran” (Fortran 90) Hiện nay
đã có phiên bản 9 (Fortran 2003) và phiên bản 10 (Fortran 2008)
ở đây, chúng tôi chỉ giới thiệu những nét, những khái niệm cơ bản chung nhất để người học có thể nắm được cơ sở của ngôn ngữ và lập được những chương trình không phức tạp (về mặt ngôn ngữ và kỹ thuật lập trình mà không
đề cập đến tính phức tạp về mặt chuyên môn) và không dùng bộ nhớ phụ
Muốn lập chương trình bằng ngôn ngữ FORTRAN, phải đọc tài liệu hướng dẫn để biết đặc điểm, những hạn chế hay mở rộng của dạng FORTRAN, thủ tục đưa dịch và cho thực hiện chương trình như thế nào
Chừng nào càng đi sâu vào giải quyết các bài toán thực tiễn ta mới càng thấy kiến thức đã học là chưa đầy đủ, mới thấy cần bổ sung những gì, và thấy rõ thêm mặt mạnh và mặt yếu của từng loại ngôn ngữ Quy mô bài toán tăng lên thì khó khăn cũng gấp bội, bấy giờ mới thấy yêu cầu bức thiết về thuật toán, ngôn ngữ, cấu trúc dữ liệu và cấu trúc chương trình và mới có hướng để tự bổ sung thêm
2.4.2 Chỉ thị và thông báo
Chương trình FORTRAN là một dãy các câu lệnh thuộc 2 loại: Chỉ thị hay thông báo Chương trình là sự kết hợp giữa thuật toán và dữ liệu Nó gồm một mặt là các thông báo để mô tả dữ liệu và một mặt là các chỉ thị để thực hiện các
sự tác động lên dữ liệu đó theo một thuật toán (giải thuật) cho bài toán
Chỉ thị (Statement) là các câu lệnh được thực hiện và sẽ được chương trình dịch biến thành dãy lệnh máy trong chương trình đích Chỉ thị có thể thực hiện là:
Trang 21- Mô tả quy cách dữ liệu ngay khi dịch
- Gán trước dữ liệu ngay khi dịch
- Trao đổi thông tin ở vùng chung
- Chỗ cuối chương trình cần dịch
2.4.3 Phiếu mẫu và bìa FORTRAN
Trong FORTRAN khái niệm bìa và dòng in có một vai trò đặc biệt
Chương trình FORTRAN được ghi trên phiếu mẫu như sau (xem ví dụ cụ thể phiếu mẫu ở bảng 1)
Mỗi câu lệnh nói chung ghi ở 1 dòng, dù thừa chỗ cũng phải xuống dòng khác (do đó nên ghi thưa cho dễ đọc)
Mỗi dòng của phiếu có đúng 80 vị trí (cột), cho phép ghi 80 ký hiệu cơ sở FORTRAN, kể cả ký hiệu trống là chỗ không ghi gì (để đánh dấu chỗ trống có thể ghi dấu “b” hay “B”)
Những ký hiệu của chương trình viết ở phiếu mẫu phải được mã hoá mới
đưa vào máy được Máy thu nhận các thông tin mã hoá từ bìa đục lỗ (loại 80 cột) Mỗi bìa có 80 cột ứng 80 vị trí của dòng phiếu Như vậy mỗi dòng phiếu
được mã hoá bởi một bìa
Khi đục từng ký hiệu thì xuất hiện các tổ hợp lỗ đục ứng với mã ký hiệu trên cột tương ứng của bìa và phía trên cùng của cột có in bản thân ký hiệu đó
Đục xong bìa thì nội dung của dòng phiếu tương ứng sẽ hiện lên ở mép trên bìa, như vậy tiện kiểm tra bìa
Chương trình và dữ liệu trước khi đưa vào máy phải được chuẩn bị thành các cỗ bìa: Cỗ bìa chương trình và cỗ bìa dữ liệu
Trang 22Năm cột (vị trí) đầu tiên của phiếu dành ghi nhãn của câu lệnh hoặc để trống Nhãn (Label) của câu lệnh là một số nguyên không dấu, có giá trị từ 1 đến
99999 – Không nhất thiết ghi từ cột đầu - dùng để đánh dấu câu lệnh đó
Cột thứ sau (6) là cột nối tiếp (Continuation) để ghi dấu hiệu nối: Nếu câu lệnh ghi một dòng chưa đủ thì xuống dòng, ở các dòng tiếp theo (dòng phụ) phải
có dấu nối là một ký hiệu cơ sở nào đó khác số 0 và dấu b, ghi ở cột 6 Tối đa có
Riêng cột đầu của phiếu mẫu còn có tác dụng phân biệt dòng thuyết minh Các dòng có chữ C (Comment: thuyết minh, chú thích) ở đầu dòng (cột 1) đều là các dòng thuyết minh, không có tác dụng với việc dịch và chạy chương trình, chỉ
có tác dụng khi in kiểm tra chương trình, cho phép người đọc dễ dàng theo dõi từng đoạn chương trình Đặt các dòng thuyết minh thích đáng, đúng chỗ thì người khác đọc cũng có thể hiểu được thuật toán, chương trình Các dòng thuyết minh có thể gồm mọi ký hiệu cơ sở và muốn xuống dòng (sang bìa) chỉ cần ghi
C ở đầu dòng (chứ không dùng cột 6)
2.4.4 Một số chương trình Fortran
Để có khái niệm ban đầu, bao quát nhưng thô sơ và để hình dung thế nào
là một chương trình viết bằng FORTRAN, ta sẽ xét một số chương trình đơn giản, qua đó giới thiệu một số yếu tố của FORTRAN
Ví dụ 1: Viết chương trình tính thể tích của hình trụ tròn xoay theo công thức V = πR2h Với R là bán kính đáy hình trụ, h là chiều cao hình trụ (Bảng 1)
Trang 23Bảng 1: Phiếu mẫu của chương trình tính thể tích của hình trụ tròn xoay
Công thức V = πR2h Với R là bán kính đáy hình trụ, h là chiều cao hình trụ
Trang 24ý nghĩa chương trình là: đọc 1 bìa có ghi giá trị của bán kính (BKINH) và chiều cao (CCAO), tính thể tích hình trụ (TTICH) theo công thức trên, in ra các giá trị tương ứng của bán kính, chiều cao, thể tích rồi dừng máy
ý nghĩa của từng dòng:
1 Đây là dòng thuyết minh: tóm tắt nội dung và tên chương trình là TTTRU Chữ C đầu dòng có thể đồng thời là chữ đầu của nội dung thuyết minh (CHUONG) đồng thời cũng cho biết đây là dòng thuyết minh
2 Dòng thuyết minh trống có chữ C ở đầu nhằm để cách dòng khi in nhằm dễ theo dõi chương trình
3 READ là “đọc”: đọc nội dung 1 bìa ghi vào bộ nhớ bao gồm: 5 là số
hiệu kênh vào (bàn phím), 10 là nhãn của thông báo FORMAT tương ứng cho
biết quy cách đọc Nhãn ở đây là cần thiết vì có nhiều FORRMAT khác nhau, cần phải đánh số của chúng để gọi cho đúng
Chỉ thị này lệnh cho máy vào đọc bìa ở kênh 5 (bàn phím) theo quy cách
10 và gán giá trị đọc được cho 2 biến BKINH và CCAO tức là gửi nội dung đọc
được vào các biến nhớ có tên (địa chỉ) là BKINH và CCAO
4 Dòng tiếp theo là một chỉ thị gán, cho phép tính thể tích hình trụ theo bán kính và chiều cao đã xác định (ở trên) và gán kết quả cho biến TTICH ở đây
* là dấu nhân; ** là dấu lũy thừa bậc 2
5 WRITE là “viết”, Viết ra theo kênh số 6 (máy in) giá trị của ba biến
BKINH, CCAO và TTICH với quy cách thông báo FORMAT mang nhãn 11
6 STOP là “dừng lại”, chỉ thị cho máy tính xong, kết thúc công việc
7 10 là nhãn của FORMAT , 2F10.2 là quy cách đọc: đọc 2 số liền nhau dạng dấu phảy tĩnh (mã F) mỗi số 10 cột và có 2 số ở phân thập phân FORMAT
để đâu cũng được miễn là chưa kết thúc chương trình
Ví dụ bbbbb10.32bbbbb61.07 thì máy sẽ đọc là giá trị thứ nhất là 10,32 gán cho BKINH và giá trị thứ hai 61,07 gán cho CCAO ở đây dấu đóng vai trò như dấu phảy và là 1 ô trong bìa, b chỉ chỗ trống không đục gì hoặc đục cách ”
8 11 là nhãn của FORMAT cho biết quy cách in ra: vừa in kết quả vừa giải thích Dùng hằng ký tự (HOLLERITH) để biên tập kết quả
9HOBKINHb=b chỉ rằng máy sẽ in ra 8 ký tự kể từ chữ B (kể cả ký tự trắng) tức là in ra “BKINH_= _“ chữ b có nghĩa là ký tự trắng
Trang 25F6.2 cho phép in giá trị của BKINH sau hằng ký tự vừa rồi, phạm vi in là 6
ký tự lệch về phải, có 2 số ở phần thập phân Tức là khi in ra giấy ta sẽ có:
“
Tương tự với các phần sau
Dấu * ở cột 6 trong dòng 9 và 10 là dấu hiệu nối tiếp của 2 dòng phụ đó (tuy cho phép ghi 66 ký tự mỗi dòng, nhưng không nên viết quá dài vì khó đọc
và dễ đục sai nên người ta thường xuống dòng cho dễ theo dõi)
Tác động của FORMAT nhãn 11 (chiếm 3 dòng liền) là cho in ra dòng sau:
Chương trình trên có cấu trúc của một chương trình tuyến tính, các chỉ thị
được thực hiện tuần tự nhau theo thứ tự tự nhiên, viết trước thực hiện trước, viết sau thực hiện sau Đây là cấu trúc đơn giản nhất Muốn tránh phải dừng mày luôn mỗi khi in xong 1 dòng (1 chương trình) Có thể cho máy đọc tiếp bìa sau
để tính với dữ liệu khác, Thay dòng 3 là READ bởi chỉ thị có nhãn là 2 READ
và thay dòng 6 là STOP bằng Go To 2 thì mỗi khi in xong gặp chỉ thị này máy sẽ chuyển tới chỉ thị mang nhãn 2 là đọc tiếp dữ liệu ở bìa sau tạo thành chu trình
để giải bài toán với nhiều dữ liệu, tới khi hết dữ liệu (dữ liệu không hợp lệ) thì READ sẽ “lỗi” và chấm dứt chương trình, lúc ấy máy sẽ tự động dừng
Trang 26Bảng 2: Tính trung bình cộng của một dãy số
Các số đều là số nguyên, không vượt quá 100, mỗi số 3 ký tự Đục 8 số trên 1 bìa Bìa đầu có kích thước 80 của dãy (80 ký tự)
Trang 28X k
1 S
Gọi X(K) là số liệu thứ K, K = 1 đến N và XTB là giá trị trung bình cộng của X(K)
Trang 29X N
2
X k
1 S
Gọi X(K) là số liệu thứ K, K = 1 đến N
XTB là giá trị trung bình cộng của X(K) (Bảng 4)
Ví dụ 5: Tìm giá trị bé nhất MIN trong hai số X, Y cho trước
Real (thực) thông báo MIN là biến thực
MIN.GT.Y là biểu thức logic ở đây “.GT.” là lớn hơn, lấy giá trị TRUE (đúng) nếu MIN > Y, nó là FALSE (sai) nếu MIN không lớn hơn Y
Trang 30IF là chỉ thị kiểm tra điều kiện logic Nếu biểu thức logic trong ngoặc
đúng thì thực hiện chỉ thị đứng sau biểu thức logic rồi chuyển sang thực hiện chỉ thị sau IF, nếu biểu thức logic sai thì bỏ qua chỉ thị sau biểu thức logic và chuyển sang thằng chỉ thị sau IF
Tư liệu đọc thêm
1 INTEGER Là số nguyên; DIMENSION DAY (80) là thông báo mô tả kích thước mảng DAY, báo để chương trình dành cho mảng này 80 ký tự tối đa DIMENSION (kích thước)
2 WRITE (6, 49) không có danh sách biến vì chỉ in hằng ký tự ở FORMAT nhãn 49 H1 là ký hiệu kiểm tra, không in ra, chỉ nhắc rằng phải in những ký hiệu sau ở đầu trang mới (sang trang)
3 READ (5, 50) KT cho đọc kích thước thực tế của mãng DAY KT không được vượt quá kích thước tối đa cho phép ở DIMENSION Đọc theo mã I3 ở quy cách 50
4 READ (5, 50) (DAY (I), I = 1,KT) cho đọc cả một mảng biến có chỉ số DAY (I) Chỉ số I tự động tăng từ 1 tới KT với bước tăng 1 Quy cách đọc theo nhãn 50 Mỗi bìa ghi 8
số, mỗi số 3 ký tự
5 WRITE (6, 51) In ra máy in từng dòng, mỗi dòng 8 số, mỗi số 5 ký tự (trừ số đầy
có 4 ký tự), thừa để trắng bên tráu tức là canh phải của 5 ký tự
6 DO 20 J = 1, KT là chỉ thị chu trình cho phép thực hiện KT lần chỉ thị 20 với giá trị của J tăng từ 1 đến KT
7 Dấu / là dấu chia
+ Dấu Cộng * Dấu nhân ** Dấu lũy thừa Dấu chấm
Dấu dùng với 4 nghĩa:
- Là dấu thập phân thay cho dấu phảy
Trang 31- Là dấu phân ly trong mã đặc trưng F6.2
- Là dấu ở phép logic GT là lớn hơn hay EQ là bằng
- Là dấu chấm câu
Dấu = dùng theo nghĩa gán, muốn diễn tả sự bẳng nhau dùng phép so sánh quan hệ ED
Tránh dùng ký hiệu ngoại lai như: π,∞,↑, Đ, Ơ,
Có thể mở rộng dấu đặc biệt như: ;, :, &, $
Ký hiệu thứ cấp gồm:
Từ các ký hiệu cơ sở (sơ cấp) có thể tạo ra các ký hiệu thứ cấp
- Trị logic TRUE., FALSE
- Quan hệ logic: EQ., NE., LT., LE., GT., GE
- Phép logic: NOT., AND., OR
- Các từ khóa:
CALL Gọi; COMMON Chung; COMPLEX Phức; CONTINUE Tiếp tục; DATA Dữ liệu; DIMENSION Kích thước; DO Làm; DOUBLE PRECISION Chính xác kép; END Hết
Số từ khóa này nhiều hay ít tùy thuộc vào chương trình dịch Từ khóa để xây dựng các chỉ thị, thông báo
Ngoài ra còn loại từ tự đặt do người lập chương trình đặt riêng cho minh dùng để ghi các tên gọi (biến, hàm, thủ tục, ) thường là một dãy không quá 6 ký tự bắt đầu bằng chữ cái
Các từ khóa là từ riêng cho ngôn ngữ, phải viết trong chương trình theo đung quy tắc chính tả và ngữ pháp
Trong FORTRAN không được viết:
DIMENTION thay cho DIMENSION
Các yếu tố FORTRAN có thể phân loại như sau:
+ Hằng các loại + Biến đơn và mang chỉ số + Biểu thức số học và logic + Chỉ thị gán số học và logic + Chỉ thị điều khiển
+ Chỉ thị vào ra + Hàm và chương trình con + Các thông báo
Trang 32Muốn chạy được chương trình linh hoạt, vạn năng thì các tham số cần đưa vào dưới dạng biến hơn là hằng
Trong FORTRAN có các hằng sau:
+ Hằng nguyên (Integer) có mã I là dãy chữ số đi sau dấu + hoặc - Số chữ số hạn chế, thường không quá 11; tốt nhất để đảm bảo không mắc lỗi nên viết không quá 5, tuy nhiên có máy chấp nhận tới 20 chữ số
+ Hằng thực (REAL) : Được biểu diễn dưới 2 dạng
- Dạng dấu chấm tĩnh hay mã F (fixe point) thường không quá 9 chữ số viết giống như cách thông thường, bắt buộc phải có dấu chấm (dấu thập phân) thay cho dấu phảy
Số thực nói chung chỉ được biểu diễn xấp xỉ và chỉ gồm số hữu tỷ
Số quá lớn hoặc quá bé Ví dụ 15000000000000000000 không thể biểu diễn bằng mã
F, với mã E là 15E18, tương tự 0,0000000000000001 được viết là 1.E-16
Khi chưa biết trước kết quả tính lớn hay bé nên biểu diễn theo mã E
+ Hằng chính xác kép (Double precision) có độ dài gấp đôi hằng thực, chiếm hai đơn
vị nhớ
+ Hằng phức (Complex) có mã C biểu diễn bởi cặp số thực chỉ phần thực và phần ảo (hai đơn vị nhớ, mỗi phần một theo mã F hay mã E)
A + bi biểu diễn bới (a, b)
Ví dụ 2.7, 7.25) biểu diễn phức số 2,7 + 7,25i
(3.E2, 1E-1) biểu diễn phức số 3.102 + 0,1i
Các phép tính đưa về phép tính giữa phần thực và phần ảo
+ Hằng logic (Logical) có mã L chỉ gồm 2 giá trị TRUE (đúng) và FALSE (sai) + Hằng ký tự (Holerit) có mã H có dạng:nHxxx…xxx hay xxx….xxx
X là các ký hiệu cơ sở, có n ký hiệu cơ sở x các ký tự trống trong mã H vẫn phải tính Hằng ký tự thường dùng để biên tập các thông báo, thuyết minh, kết quả
Biến
Biến là một đại lượng có tên, có thể thay đổi giá trị khi chạy chương trình Tên biến
đồng thời là địa chỉ của đơn vị nhớ chứa giá trị biến
Tên biến là một dạy các chữ cái và chữ số, bắt đầu bằng chữ cái và không quá 6 ký tự viết liền nhau (không có dấu cách)
Trang 33Mảng A gồm n hàng, m cột được viết là (A(n, m)
Mảng X là mảng 1 chiều kích thước 3: X(1) X(2) X(3)
Mảng A là mảng 2 chiều kích thước 3: A(1,1) A(1,2) A(1,3)
Tên biến và tên mảng theo quy cách gọi tên và xác định loại
Mỗi hàng, mỗi cột là mảng 1 chiều
(A(1, J), J=1,3) là hàng 1 gồm A(1,1) A(1,2) và A(1,3)
(A(I, 2), I = 1, 2) là cột 2 gồm A(1,2) và A(2,2)
Mảng phải được thông báo kích thước bởi thông báo DIMENSION (kích thước) để chương trình dịch biết dành vùng nhớ chứa mảng đó
Ví dụ DIMENSION X(3), A(2,3)
Mảng X là mảng 1 chiều kích thước 3 còn mảng A là mảng 2 chiều kích thước 3
Quy cách vào, ra
Các biến có thể được gán một giá trị (các hằng) và được đọc hay in ra phải dùng các mã đặc trưng để giải mã các dữ liệu của biến (hay hằng) đó
ALOG(X) là hàm lnX SIN(X) là hàm sinX
COS(X) là hàm cosX EXP(X) là hàm e X
ATAN(X) là hàm acrtgX
2.4.5.7 Biểu thức logic và các quan hệ
Chỉ thị gán số học
na = b
n là nhãn (nếu có) của chỉ thị a tên biến b biểu thức số học
Chuyển điều khiển
Trang 34Có các chỉ thị GOTO, IF, DO, CONTINUE, PAUSE, STOP, END, CALL, RETURN, READ, WRITE
n GO TO m nghĩa là: n là nhãn (nếu có) của bản thân chỉ thị, GO TO là chuyển tới, m
là nhãn của chỉ thị sẽ thực hiện ngay sau đó
n GO TO (n1, n2, nk), i nghĩa là: n là nhãn (nếu có) của bản thân chỉ thị, GO TO là chuyển tới, nj(j = 1 k) là nhãn của chỉ thị có trong chương trình (thường k ≤ 10), i biến nguyên không dấu, không chỉ số Biến i khi gặp GO TO sẽ tính, có giá trị j thì chuyển tới chỉ thị có nhãn nj
n IF (e) n1, n2, n3 nghĩa là: n là nhãn (nếu có) của bản thân chỉ thị, IF là nếu, e là biểu thức số học hoặc biểu thức logic, n1, n2, n3 là nhãn chỉ thị có trong chương trình
n DO m i=j, k, l nghĩa là n là nhãn (nếu có) của bản thân chỉ thị, DO là làm i, j, k, l là các hằng hoặc biến nguyên không dấu, không chỉ số i là biến chỉ số hay biến điều khiển đóng vai trò đếm vòng lặp, không được là hằng j là cận dưới hay giá trị ban đầu cuả i (ban đầu i = j) k là cận trên (thực hiện DO đến khi i ≤ k) l là bước lặp hay số gia (i = i + l nếu l = 1 thì không cần ghi) m là nhãn của chỉ thị cuối phạm vi tác dụng của DO
n CONTINUE là chỉ thị giả (không làm gì cả) Gặp chỉ thị này chỉ việc chuyển sang chỉ thị tiếp theo (thường dùng cuối phạm vi DO)
END nghĩa là hết là thông báo cuối cùng của mọi chương trình nguồn (kể cả chương trình con) chỉ có tác dụng báo cho chương trình dịch đó là chỗ cuối chương trình nguồn Khi gặp END máy sẽ báo hiệu dịch xong chương trình tương ứng
STOP nghĩa là đứng, khi gặp chỉ thị này máy sẽ dừng chờ người thao tác điều khiển và nếu tiếp tục thi bắt đầu lại từ đầu
PAUSE nghĩa là nghỉ tương tự như STOP nhưng khác là ấn nút CHAY thi máy tiếp tục thực hiện chương trình
READ (m, n) dsb nghĩa là đọc từ thiết bị m (kênh vào), quy cách n (ghi nhãn của thông báo FORMAT tương ứng) và gán cho danh sách biên dsb
WRITE (m, n) dsb nghĩa là viết ra thiết bị m (kênh ra) danh sách biến dsb với quy cách n (ghi nhãn của thông báo FORMAT tương ứng)
Mã A thì sẽ in dồn về phía phải (nếu w≥ c), thừa để trắng bên trái w – c ký tự
Nếu w < c thì chỉ in ra w ký tự bên trái (đầu số) đuôi bị cắt
Mã H thì in ra các thông báo, tiêu đề, thuyết minh
Mã X dùng để bỏ trắng n vị trí ở dòng in ra
Trang 35Việc thực hiện lệnh gán các biến a, b, c sẽ đ−ợc lặp lại từ giá trị của i bằng
1 (a = 1; b = 2; c = 5) sau đó tăng i lên 1 đơn vị (i=2) và thực hiện lệnh gán các biến a, b, c (a = 3; b = 4; c = 6) sau đó tiếp tục tăng i lên 1 đơn vị i= 3 và i = 4
và cho đến giá trị của i bằng 5 thì thực hiện xong các lệnh gán thì thoát ra khỏi vòng lặp
FOR Biến_điều_khiển:=Giá_trị_đầu Giá_trị_cuối Do <Câu lệnh>
FOR Biến_điều_khiển:=Giá_trị_đầu Giá_trị_cuối Do <Câu lệnh>
FOR Biến_điều_khiển:=Giá_trị_đầu Giá_trị_cuối Do
Trang 36For i:=1 to n do if (i mod 2 = 0) then
sum1:=sum1+i else sum2:=sum2+i;
Trang 37amax:= a[k]; imax := k;
for i:= k+1 to n do if a[i]>amax then begin
CÊu tróc lÖnh REPEAT UNTIL
REPEAT
Trang 38Việc thực hiện <công việc> hoặc <Các công việc> nằm giữa REPEAT và UNTILl sẽ được lặp lại cho đến khi biểu thức logic thoả mãn
Ví dụ 1: Đoạn chương trình tính tổng các số chẵn và tổng các số lẻ trong
một dãy n số nguyên đầu tiên
CASE i=1: Begin
End;
Trang 39Cấu trúc lệnh WHILE DO
Nếu biểu thức logic đúng thì thực hiện <Các công viêc>;
3.1.3 Lệnh nhảy vô điều kiện GO TO
Khử Gauss là một phương pháp đơn giản và dễ hiểu về thuật toán để tính
định thức của ma trận cũng như giải hệ phương trình tuyến tính Giả sử có hệ n phương trình tuyến tính n ẩn số
<Các công việc>;
END;
GOTO
Trang 40Dưới dạng tổng quát khi thay vào phương trình thứ m ta có:
(am2 – am1a12(1))x2 + + (amn – am1a1n(1)xn = am(n+1) – am1a1(n+1)m=2, n (3.2)
Đây chính là hệ n-1 phương trình mới không chứa ẩn x1 Tiếp tục thực hiện việc khử x2 trong hệ n-1 phương trình mới này theo cách tính toán tương tự
ta sẽ được hệ n-2 phương trình không chứa ẩn x1 và x2 v.v đoạn chương trình máy tính của cách khử này có dạng
i:=1;
For k:=i to n+1 do a[i,k]:=a[i,k]/a[i,i]; (*chia 2 vế cho aii: pt(3.1)*)
For m:=i+1 to n do
For k:=i+1 to n+1 do a[m,k]:=a[m,k]-a[m,i]*a[i,k]; (* pt (3.2) *)
Đến đây chúng ta chỉ việc thực hiện một vòng lặp theo i, bắt đầu từ i=1
đến i=n-1, tức là
for i:=1 to n do
begin
For k:=i to n+1 do a[i,k]:=a[i,k]/a[i,i]; (* xác dịnh các (Bi) *)
If i=n then goto 1;