PHƯƠNG PHÁP GIẢI HỆ PHƯƠNG TRÌNH VI PHÂN ĐỘNG HOÁ HỌC XÁC ĐỊNH Cơ CHẾ PHÀN ỨNG HOÁ HỌC...287 V.1.. Lời nói đẩuHoá tin học - môn khoa học liên ngành ứng dụng phương pháp tính toán, xử lí
Trang 1T R Â N V Ĩ N H Q U Ý
Trang 3Mục lục
Lời nói đẩu 7
Chương Mở đầu NGÔN NGỮ LẬP TRÌNH PASCAL VÀ CÁC THUẬT TOÁN TÌM NGHIỆM Cơ BÀN DÙNG TRONG HOÁ HỌC 9
0.1 Ngôn ngữ Turbo P a sca l 7 0 9
1 Khởi đ ộ ng T u rb o P ascal 7 0 9
2 Làm v iệ c trong m ôi trường Tu rbo P asca l 9
3 Kí hiệu cơ bản và các đại lượng trong Turbo P a s c a l 10
4 Biểu thức và hàm mẫu 11
5 Cấu trúc chương trinh Turbo Pascal 13
6 Các toán tử 15
7 Biến đếm , m ảng, chu trìn h 18
8 Giải thích 20
9 Case of 21
10 Các chương trình con : PROCEDURE (Thủ tục) và FUNCTION (hàm) 21
11 Kiểu dữ liệu c ó cấu trú c (R E C O R D ) 27
12 Kiểu dữ liệu c ó cấu trúc: tệp (F IL E ) 28
0.2 Các phương p háp tìm nghiệm phương trình đại sô' 30
1 Phương ph áp dây c u n g 30
2 Phương ph áp tiế p tuyến - Phương pháp N e w to n 32
3 Phương pháp kết h ợ p 35
4 Phương ph áp chia đôi khoảng chứa n g h iệ m 37
5 Phương pháp lặp .40
6 Phương p h áp bước lặp giảm dần 41
Tài liệu tham khảo chương MỞ đầu 4 4 Chương 1 CÁC PHƯƠNG PHÁP NHIỆT ĐỘNG XÁC ĐỊNH HẰNG SÔ CÂN BẰNG HOÁ HỌC 45
/ 1 Phương p h á p phương trình N e rn st 4 5 Các b à i tập ứng dụng phương pháp phương trinh N e rn s t 60
Các b à i toán tính n g ư ợ c 63
1.2 Phương p h á p Tem kin - S ch w a rsm a n 6 5 C á c b ài tập ứng dụng phương pháp Temkin - S ch w a rsm a n 96
Các b à i toán n g ư ợ c 9 9
Trang 4Các bài tập ứng dụng phương pháp thê phi s a o ??6
C ác bài toán tinh n g ư ợ c 7
Tài liệu tham khảo chương 1 121
Chương 2 PHƯƠNG PHÁP cơ HỌC THỐNG KẺ XÁC ĐỊNH HẰNG SỐ CÂN BẰNG HOÁ H Ọ C 123
II.1 Sơ lược về li thuyết Co học thống k ê 123
1 Hàm phân bố của hè đoan n h iê t 125
2 Hàm phân bô’ đối với hệ đẳng n h iệ t 125
11.2 Áp dụng H thuyết Co học thống kê tinh hàng s ố cản bàng hoá h ọ c 128
1 Hoá thế theo Cơ học thống k ê 129
2 Tinh hằng sô’ cân b ằ n g 130
11.3 Tinh tổng trạng thái (tổng thống k ê ) 132
1 Đôi với khi đơn nguyên tử 133
2 Tổng thống kê cùa phân tử khi hai nguyên t ử 136
3 Đối với phàn tử nhiéu nguyên tử (từ ba nguyên từ trờ lê n ) 149
II.4 ứng dụng: Tinh hàng s ó cân bàng của các phản ứng giữa các chất k h í 151
1 Tinh hằng sô' cân bằng của các phản ứng phân li ra nguyên tử 151
2 Tính hằng sô cân bằng cùa phàn ứng không phản li ra ng uyên t ử 199
Các bài tập chương 2 207
C á c bài toán tinh n g ư ợ c 210
Các bài loàn lo ạ i k h á c 272
Tài liệ u th a m k h ả o c h ư ơ n g 2 213
Chương 3 NGHIÊN cứu TÍNH CHẤT HOÁ LÍ HỆ PHÀN ỨNG CÂN BẰNG ở NHIỆT ĐỘ CAO 215
III 1 Li thuyết hệ cân b à n g 215
1 Ba định luật chi phối hệ phàn ứng cân b ằ n g 215
2 Nhặn x é t 219
111.2 Phương pháp N e w to n 220
1 Khai triển T a y lo r 220
2 Giải bài toán nghiên cứu hê cân bằng ở nhièt đô c a o 223
111.3 Phương pháp Newton cải tiến 231
1 Thiết ỉảp hệ phương trinh xác đinh nồng đô các cấu t ử 231
Trang 53 Bài toán cụ thể và chương trình giải theo phương pháp Newton cải tiến 235
4 B à i to á n cụ th ể g iả i b ằ n g cả hai phương p h á p N e w to n v à N e w to n c ả i tiế n đ ể s o s á n h 239
III 4 Cân bàng ion trong dung d ịc h 2 53 Các b à i tập ứng dụng của chương 3 261
Tài liệu tham khảo chương 3 264
Chương 4 LÍ THUYẾT HỒI QUY 265
IV 1 N ộ i dung của phương p h á p 265
1 N guyên lí tổng binh phương độ lệch cực tiể u 265
2 Phương pháp xá c định hệ sô' của phương trìn h 265
IV 2 Phép khử G a u s s 268
1 Phương pháp tổng q u á t 268
2 Sơ đồ G auss bó g ọ n 271
IV 3 Các b à i toán hoá học sử dụng li thuyết hồi q u y 273
1 Tinh các hệ s ố của phương trình IgKp = F(T) xuất phát từ các dữ liệu thực n g h iệ m 273
2 Chương trình 274
3 C ác ứng dụng khác của lí thu yết hồi q u y 276
Tài liệu tham khảo chương 4 286
Chương 5 PHƯƠNG PHÁP GIẢI HỆ PHƯƠNG TRÌNH VI PHÂN ĐỘNG HOÁ HỌC XÁC ĐỊNH Cơ CHẾ PHÀN ỨNG HOÁ HỌC 287
V.1 Phương pháp tích phân s ố hệ phương trình vi phân mô tả ca c h ế phản ứng hoá học phức tạ p 287
1 Nội dung phương p h á p 289
2 Đ ánh giá độ chính xá c của phương pháp g iả i 294
V.2 Tinh toán động học quá trình clo hoá etilen và phân tích độ chinh xác của thuật to á n 29 6 1 Hệ phản ứng hoá học và cơ c h ế 296
2 Hệ phương trình vi ph ân m õ tả cơ chê phản ứng clo hoá e t ile n 297
3 Phương pháp giải hệ phương trình vi phân m ô tả cơ c h ế phản ứng clo hoá e tile n 301
4 Đ ánh giá độ chính x á c của kết quả tích phân s ố hệ phương trình (5 1 2 ) 303
5 Giải gấn đúng phương trình vi phân thường 307
6 Chương trình, kết quả cá c đố thị của phép tích phân s ố hệ (5 1 2 ) 309
B à i tập ứng dụng chương 5 316
Tài liệu tham khảo chương 5 322
Trang 6Mỏ đầu 323
VI 1 Co sỏ của li thuyết R R K M 323
1 Mô hình của lí thu yết R R K M 323
2 Biểu thức của S k 1(E.đE tỗE )/ k 2 .325
3 Biểu thức của ka( E * ) 326
4 Biểu thức của ku„, th e o lí thu yết R R K M 330
5 Giới hạn áp suất c a o 330
6 Giới hạn áp suất th ấ p 332
7 Những thừa sô thống kê 332
8 S ố trạng t h á i 333
9 M ật độ các trạng thái lượng tử N (E ) 333
VI.2 Các phương pháp tinh s ố trạng thái lượng tử 334
1 Sự tinh toá n trực tiếp các trạng thái dao đ ộ n g 334
3 Phép gẩn đúng của VVhitten Rabinovitch 337
VI.3 Ap dụng li thuyết RRKM nghiên cứu động học phản ứng đơn phân tử 339
1 Các đại lượng cẩn tính khi nghiên cứu các phàn ứng đơn phân tử 339
2 Áp dụng: Tính hằng s ố tốc độ của phản ứng đồ ng phân hoá m e tyl is o x ia n u a 343 3 C ác chương trinh m áy tính áp dụng cho bài toán nghiên cứu độ ng học phản ứng đổng phân hoá bằng nhiệt m etyl is o x ia n u a 348
4 Bài tập .355
Tài liệu tham khảo 358
Trang 7Lời nói đẩu
Hoá tin học - môn khoa học liên ngành ứng dụng phương pháp tính toán, xử lí thông tin vào việc nghiên cứu các vấn đề hoá học, ngay từ khi ra đời đã thúc đẩy sự phát triển mạnh mẽ mọi lĩnh vực của môn khoa học, nhất
là lĩnh vực nghiên cứu và giảng dạy lí thuyết
Giáo trình Hoá tin học (Các bài toán nhiệt động, thống kê và lí thuyết phản ứng hoá học) trình bày từng bước phát triển của phần lí thuyết các hệ
vĩ mô của hoá học và cách ứng dụng tin học vào trợ giúp lí thuyết này vượt qua trở ngại trong sự tiến bộ của mình
Phần cốt lõi, nền tảng cơ bản của giáo trình là sự áp dụng Cơ học thống kê vào các vấn đề lí thuyết hoá học (lí thuyết cân bằng hoá học
và lí thuyết phản ứng hoá học) Giáo trình là bản tồng kết các nội dung nghiên cứu trong các bài tập lớn, luận văn của sinh viên, học viên cao học, Nghiên cứu sinh (lĩnh vực lí thuyết hệ vĩ mô) trong các năm vừa qua ỏ khoa Hoá học, trường Đại học Sư phạm Hà Nội Nội dung của giáo trình được sắp xếp theo trình tự phát triển của vấn đề bắt đầu từ:
+ Ngôn ngữ lập trình Pascal và các thuật toán tìm nghiệm cơ bản dùng
trong hoá học - chương Mở đẩu, tiếp đến các chương:
+ Các phương pháp Nhiệt động xác định hằng số cân bằng hoá học -
chương 1.
+ Phương pháp Cơ học thống kê xác định hằng số cân bằng hoá học -
chương 2.
+ Nghiên cứu hệ cân bằng ở nhiệt độ cao - chương 3.
+ Lí thuyết hổi quy - chương 4.
+ Phương pháp giải hệ phương trình vi phân động hoá học nghiên cứu
Trang 8hoá học một cách chắc chắn và có thể vận dụng trong các nghiên cứu của mình ỏ các bậc học tập hiện tại và cao hơn, nếu theo dõi một cách tuần tự các chương của giáo trinh.
Ngôn ngữ lập trình của cuốn sách là ngôn ngữ Pascal, ngôn ngữ mà các sinh viên Hoá học đều được học
Các chương của giáo trinh đều có những bài tập để người đọc có Ihể vận dụng các vấn đề lí thuyết vào giải quyết các bài toán cụ thể của tất cả các bộ môn Hoá học Các bài tập này với nội dung và sô' lượng phong phú
đã được giải cẩn thận và nghiêm túc Tuy vậy, giáo trình chỉ đưa ra các đáp
số ngắn gọn để người đọc có thể kiểm tra các tính toán của mình Phần chương trình giải các bài tập này có thể sẽ đưa vào đĩa CD kèm theo cuốn sách (nếu có đủ điều kiện làm điều đó) Một cuốn Bài tặp Hoá tin học kèm theo cuốn giáo trình này cũng sẽ là rất bổ ích trong thời gian tới
Tác giả chân thành cảm ơn Thạc sĩ Ngô Tuấn Cường đã sửa chữa và đánh máy bản thảo một cách rất nghiêm túc, Thạc sĩ Nguyễn Văn và Thạc
sĩ Nguyễn Đình Độ đã ưng thuận để tác giả được sử dụng các chương chủ yếu trong luận văn Cao học của mình làm nội dung để viết các Chương Mở
đầu, Chương 5 và Chương 6 Những đóng góp của các Thạc sĩ đã giúp tác giả hoàn thành được cuốn sách trong điều kiện thời gian và vật chất cực kì
eo hẹp như hiện nay
Cuối cùng, tác giả chúc các bạn đọc thành công trong việc đọc cuốn sách và ứng dụng nó vào việc nghiên cứu của mình Tác giả cũng thiết tha mong các bạn đọc góp ý thẳng thắn cho những thiếu sót không thể tránh khỏi về nội dung và hình thức của cuốn sách để nó có thể phục vụ các bạn một cách đắc lực hơn trong tương lai
Xin chân thành cảm ơn
T Á C G IẢ
Trang 9Chương Mở đẩu
NGÔN NGỮ LẬP TRÌNH PASCAL
VÀ CÁC THUẬT TOÁN TÌM NGHIỆM
Cơ BẢN DÙNG TRONG HOÁ HỌC
Tổ hợp các phím Alt+X: Ra khỏi chương t r ì n h TP
2 Làm việc trong môi trường Turbo Pascal
- Soạn th ả o trong TP: Nói chung việc soạn th ả o trong T P cũng
giông n h ư tro n g các hệ so ạn thảo k hác (Word, Notepad )
Phím ( E n t e r J ) : d ù n g để tạo dòng mới
Bốn phím m ũ i tê n ( < - í - > ị ) : dù n g đê dịch chuyển con trỏ
Các phím PgDn, PgUp dù n g để lậ t trang
Phím Home: đế đưa con trỏ vê' đ ầ u dòng
Phím End: đư a con trỏ về cuối dòng
Phím I n s e rt: đê t h a y đôi chê độ chèn hoặc đè
Phím Delete: đ ể xoá kí tự tạ i vị tr í con trỏ
Phím («- Backspace): đế xoá kí tự bên tr á i con trỏ
Tổ hợp các phím C trl+K B: đế đ á n h d ấu đ ầ u khối
Tô hợp các ph ím C trl+ K K: để đ á n h d ấ u cuối khối
Tô hợp các p h ím C trl+ K C: đề sao chép khôi đã đ á n h dấu
Trang 10Tổ hợp các phím C trl+ K Y: đẻ xoá khôi đã đ á n h dấu.
Tố hợp các phím Ctrl+K V: để chuyển khối đã sao chép tới vị tr í contrỏ
C hữ cái: T P d ù n g các chữ cái tiế n g Anh viết hoa: A B c z hoặc
viết thường: a b c z và các chữ sô 0, 1 9
Dâu:
+ - * / : Các phép toán sô học: cộng, trừ, n h â n , chia
= > > = < < = <> : Các phép toán q u an hệ: bằng, lớn hơn, không
nhỏ hơn nhỏ hơn không lỏn hơn khác
: Phép gán
: Chấm th ậ p phân, dấu h ết chương trìn h
: Mô tả
: D ấu nháy dùng cho h à n g v ă n bản
T ừ k h o á : AND DO GOTO FUX CTIO N\
3.2 Các đại lượng
H ằng (const)
Có hai loại hãng: h ả n g sô và h ằ n g v ă n bàn Các h ằ n g sô được biểu diễn dưới d ạn g nguyên và thực Ví dụ: 1076 123 là các h ằ n g nguyên
Trang 11Các h ằ n g th ự c có hai cách biểu diễn:
Dòng là một dãy kí tự, sô', kí hiệu và k h o ản g cách
Tên gọi (in d en tifie r)
Tên gọi là một dãy kí tự b ắ t đầu bằng chữ cái, tiếp theo đó là chữ cái hoặc chữ sô' Có th ể dùng các dấu nôi (_) Trong TP các tên gọi phân biệt
nh a u ở 8 kí hiệu đầu tiên Việc viết tên cần tuân th ủ các nguyên tắc sau:+ Không có k h o ả n g cách và cốc dâu
+ K hông đ ặ t chữ số lên đầu
Tên gọi được d ù n g đe đ ặ t tê n cho các biến, hàm và hằng
Biến
Trong T P có 4 loại biến cơ bản:
+ Biến nguyên (IN T E G E R ): Có giá trị là các số nguyên.
+ B iến thự c (REAL)- Có giá trị là các số thực.
+ B iến k í tự (CHAR)- Có giá trị là các chữ cái v iế t hoa và không
v iết hoa, với 10 chữ sô' th ậ p p h â n từ 0 đến 9
+ B iến logic (BOOLEAN)- Chỉ có hai giá trị: đ ú n g (TRUE) và sai
Trang 124.2 Hàm mầu
H àm m ẫ u với các biến nguyên
Sau đây là một số h à m m ẫ u mặc định d ù n g với biến n g u y ên của TP
ABS(x) cho giá trị tu y ệ t đối của X
SUCC(x) cho giá trị sau x: (x + 1)
PRED(x) cho giá trị trước x: (x - 1)
DIV phép chia hai số n guyên cho k ế t q u ả nguyên
X MOD y = X - (x DIV y)*y
H àm m ẫu với các biến thực
ABS(x) giá tr ị t u y ệ t đối của X
TRUNC(x) cho p h ầ n nguyên của X
Các h àm m ẫu với biến k i tự
ORD(c) (c kiểu CHAR) cho th ứ tự của c tr o n g b ả n g kí tự PRED(c) (c kiêu CHAR) cho kí tự trước c tr o n g b ả n g
succ (c) (c kiểu CHAR) cho kí tự sa u c tro n g b ả n g kí tự CHR(i) (i kiểu INTEGER) cho kí t ụ có số t h ứ tự 1
Các h àm m ẫu với biến logic
ORD (FALSE) = 0
Trang 134.3 Biểu thức
Biểu thức là một dãy các phép toán tác dụng lên các hằng, biên và hàm Việc viết các biểu thức T P cần tu â n t h ủ các quy tắ c sau:
+ Không để hai phép toán đứng liền n hau
+ Không v iế t h a i h ằ n g hoặc hai biến liên nhau
T h ứ tự ưu tiên các p h ép tin h
Trong các biểu thức của TP, các phép tính được ưu tiên theo thứ tự sau:
N ếu cùng mức ưu tiê n thì thực hiện tr á i trước, phải sau
5 Cấu trúc chương trình TURBO PASCAL
Chương t r ì n h T P được hợp th à n h từ các p h ầ n sau: đ ầ u chương
tr ìn h , p h ầ n mô tả, t h â n chương tr ìn h và k ế t thúc
5.1 Đấu chương trinh
P h ầ n đ ầ u của chương tr ìn h bao gồm:
PROGRAM tên_chương_trình;
5.2 Phẩn khai báo dữ liệu
P h ầ n k h a i báo gồm có 6 mục: khai báo n h ã n (địa chỉ), hàng, kiểu biến, t h ủ tục và h à m (chương t r ì n h con)
K h a i báo n h ă n (địa chỉ)
N h ã n là một s ố nguyên dương có không quá 4 chữ số Khai báo
n h ã n liệt kê t ấ t cả các n h ã n sử dụ n g trong khối và d ù n g để định vị các
to á n tử khi cần điểu k h iể n chương t r ìn h h o ạ t động ngoài quy tắc thông
th ư ờ n g (từ t r ê n xuống dưới)
Trang 14Cách khai báo:
CO NST tên h à n g 1 = giá trị h à n g 1;
tên h à n g 2 = giá trị h ằ n g 2 :
K hai báo kiêu (T Y P E )
TYPE dù n g để xác định các kiêu dữ liệu mới so với 4 kiê u đã có của
rp (Integer Real C h a r và Boolean)
Cách khai báo:
TYPE Tên kiểu 1 = (các biến của kiểu 1):
Tên kiêu 2 = (các biến của kiê u 2);
K hai báo biến
Nguyên tác r ấ t cơ bản cùa TP là trong chương t r ì n h d ù n g biến nào
phải mô tả biên đó Khác với một sô ngôn ngữ khác T P kh ô n g cỏ các biến
mặc định
Cách khai báo:
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;
Khai bán thù tục, hàm (xem p h ầ n 2.8).
5.3 Phán thân chương trinh
T h ân chư ơng t r ì n h bao gồm các toá n tử (còn gọi là các lệnh) để th ạ c hiện công việc của chương trìn h
Trang 15Tên biến:= biêu thức, biến, hằng, giá trị;
Khi gặp lệnh này, k ế t quả tín h to án của biểu thức vê phải hoặc giá trị biến, h ằ n g vê p h ả i được gán cho biến v ế trái
6.2 Toán tử chuyển (GOTO)
6.3 Toán tử hợp thành
BEGINs,;
Trang 16trong dó V, v, v„ là các biên Khi sử dụ n g READ cần lưu ý:
- Giá trị của các biến được đưa vào qua bàn phím th eo đ ú n g kiêu đã khai báo ỏ p h ầ n k h a i báo của chương trình
- Đọc xong con trỏ tr ê n m à n hình không tự động xuông dòng
WRITE (các biêu thức và các biến):
Trong d ấu ngoặc đơn có th ể là một biêu thức hoặc biến hoặc hằng Hác quy ước trong việc sủ dụ n g lệnh WRITE n h ư sau:
- S au mỗi biểu thức, biến hoặc h ằn g phái đ ậ t một d ấ u phảy
- Giá trị của biêu thức biến, h ằ n g được viết th e o b a cách sau:
Cách 1: Không viết gì th ê m sa u biếu thức, tê n biế n hoặc tê n h à n g
gọi chung là tên):
WRITE (Vị V v n);
Giá trị được viêt r a dưới d ạ n g dấu phảy động
Cách 2:
Dạng tổng quát:
Trang 17W RIT E (v„ v2: m 2, v„:mn);
tro n g đó nrij (i = 1, .n) dù n g để quy định số vị tr í được d à n h cho đại
lượng th ứ i được đưa r a m à n h ìn h khi thực hiện câu lệnh
6.4.2.3 G hi ra đoạn k í tự: Để viết lòi giải thích, ch ú n g ta đ ặ t các
lòi giải th íc h đó vào tr o n g d ấu n h á y ‘
W R ITE('Đ oạn kí tự');
W R IT E L N (’Đoạn kí t ụ ’)
6.5 Toán tử diều kiện
D ạn g tổng q u át:
I F biểu th ứ c T H E N Việc 1 ELSE Việc 2
tro n g đó biểu th ứ c n h ậ n giá trị logic Nếu biểu thức n h ậ n giá tr ị đúng (TRUE) thì thực h iệ n Việc 1, ngược lại:
+ Nếu có E L S E th ì thực hiện Việc 2
+ Nếu kh ô n g có ELSE thì không làm gì Sau đó chuyê n sa n g toán
tử k ế tiếp IF
D Ạ I T ỀĨ Ọ C T H A I N G U Y Ê N
17
Trang 18Chú ý:
- Trước ELSE không có d ấ u chấm phảy (;)
- Việc 1 và Việc 2 có th ể là các lệnh hợp t h à n h ( đ ặ t tro n g B E G IN
Ngoài các biến đơn giản trong các tín h toán toá n học, v ậ t lí hoá học còn cần dù n g các biến có chi sô a„ a,r b,|k (Ví dụ: các t h à n h p h ầ n cùa một vectơ, các p h ầ n tử của ma trận, )
Chú ý: Chỉ sô' buộc phải có giá trị nguyên.
+ n là giá tr ị cực đại của chỉ sô;
+ Sau từ khoá OF là kiểu biếu diễn của các p h ầ n tử của m ang(INTEGER, REAL hoặc CHAR )
C ũng có th ể khai báo m ả n g như một TYPE Cách k h a i báo n h ư sau:
Trang 19m l = ARRAY [1 10] of in te g er m2 = ARRAY [1 100] of real;
VARb: m l;
a: m 2 ;
7.2 Vòng lặp xác định: toán tử FOR
D ạn g tổ ng quát:
FOR biến đếm = giá trị đ ầ u TO giá trị cuối DO Công việc;
FOR biến đếm = giá tr ị đ ầ u DOWNTO giá trị cuối DO Công việc;
Có th ề diễn giải các vòng lặp tr ê n n h ư sau:
Việc th ự c h iệ n Công việc được lặp lại một số lần xác định tương ứng với các giá tr ị của biến đêm từ giá trị đầu đến giá trị cuối của nó Vòng lặp FOR được thực hiện theo các bước sau:
1 Tính giá trị đầu, giá trị cuôi của biến đếm
2 Bỏ q u a vòng lặp FOR n ế u biến đếm đã có giá trị n ằm ngoài
k h o ả n g giá trị nói trên
3 Biến đ ếm n h ậ n giá trị đầu
4 Thực hiện công việc
5 Biến đếm n h ậ n giá tr ị tiếp theo, chương tr ìn h q u a y về điếm 4 cho đến khi biến đếm có giá tr ị đứng sa u giá trị cuối cùng một đơn vị thì ra khỏi vòng lặp
7.3 Toán tử WHILE (vòng lặp không xác định)
D ạn g tổng quát:
W H ILE (biểu thức logic) DO
BEGIN Công việc
END;
Trang 20W H ILE cũng dù n g để lặp lại Công việc.
Vòng lặp WHILE DO được thực hiện n h ư sau:
1 Kiểm tr a biểu thức logic
2 N ếu TRUE thực hiện công việc;
Nếu FALSE thì thực hiện Công việc sa u từ k h o á End; của vòng lập WHILE (tức là ra khỏi vòng lặp WHILE)
3 Q uay lại bước 1 nếu bước 2 chưa k ế t thúc
U N TIL biểu thức logic;
Trong vòng lặp n à y không cần BEGIN END
Vòng lặp R EP EAT được thực hiện n h ư sau:
1 Thực hiệ n các Công việc
2 Kiểm t r a biểu thức lôgic N ếu FALSE th ì q u a y lại bước 1, nếu TRUE ra khỏi vòng lặp REPEAT
Chú ý: C ũng giống n h ư với WHILE, sự th ự c h iệ n các Công việc cần
phải dẫn đến các th a y đổi giá tr ị của biểu thức lôgic để có t h ế k ế t th úc vòng lặp
Trang 21CASE 0 F được thực hiện n h ư sau:
+ T ín h giá trị của biểu thức
+ Nếu giá tr ị biểu thức b ằ n g h ằ n g nào thì thực hiện Công việc sau
10 Các chương trình con: PROCEDURE (Thủ tục) và FUNCTION (hàm)
P R O C E D U R E và FUN CTIO N là tậ p hợp toán tử tạo nên một khối con có k h ả n ă n g sử d ụ n g n h iề u lần ở n h ữ n g ndi k hác n h a u tro n g chương
t r ì n h lớn Ưu điểm:
+ Tiết kiệm bộ nhớ và công sức lập trìn h
+ Tạo cho chư ơng tr ìn h một cấu trúc rõ r à n g và gọn
Trang 2210.1 FUNCTION (hàm)
F UN C TIO N là phương tiệ n để tạo các h à m mới được sử d ụ n g trong chương t r ìn h
V i dụ: Trong các h à m m ẫ u của T P kh ô n g có h à m giai th ừ a n! Vậy
muốn tín h các biêu thức có chứa n! có thê lặp một chương t r ì n h con dưới dạng FUNCTION (hàm) tương đương với việc định n g h ĩa h à m mới bên cạnh các h à m sin, COS có sẵn Để làm công việc này, cần thực hiệ n hai bước b ắ t buộc s a u đây:
+ Khai báo FUNCTION
+ Gọi FUNCTION' trong chương tr ìn h chính
10.1.1 K h a i báo
T hủ tục k h a i báo FUNCTION n h ư sau:
FUNCTION tê n h à m (các t h a m số h ìn h thức: kiểu của t h a m số): kiêu
dủ liệu của hàm :(*các k hai báo cục bộ: k hai báo Label Const Type V ar của riêngFunction nếu cần*)
P h ầ n t h â n chương t r ì n h con (CTC) - F U N C T I O N b ắ t buộc phải kết
th úc b ằn g lệnh gán giá trị cho tên hàm Do vậy khi sử d ụ n g ta có thể dùng tên C T C -F U N C T IO X chứa kết quà đế viết tr o n g các biểu thức
P h ầ n k h a i báo cục bộ chì có tác d ụ n g tr o n g F U N C T IO N , kh ô n g có tác dụng trong chư ơng t r ì n h chính Cần t r á n h k h a i báo t r ù n g lặp các tên giữa CTC và chư ơng t r ì n h chính
V i dụ: Với h à m Giai th ừ a n! ta có
FUNCTION G iai_thưa(n: integer): in te ger:
V ar i.k: integer:
Begin
Trang 23i:=0 ; k:=l; {phải dùng biến địa phương để chứa kết quả trung gian} while i<n do
begin i:=i+l;
S au khi đã k h a i báo thì việc sử d ụ n g F UN C TIO N tro n g chương
t r ì n h chính đơn giản n h ư đối với các h àm m ẫu khác Ta chỉ cần viết:
Biến:= tên hàm (các th a m sô’ thực);
Trang 24th am số này vẫn giữ nguyên giá trị đã bị th a y đổi tr o n g P R O C E D U R E+ Các tham số không được đặt sau chữ Var là các th a m số giá trị hay ngắn gọn hơn là t h a m t r ị Đó là các tham số mà CTC -P R O C E D U R E chì (có quyền) d ù n g giá tr ị của chúng mà không (đ ư ợ c quyền) t h a y đôi giá trị của chúng.
Đê’ p h â n biệt kĩ hơn hai loại th a m số này, ta đưa r a ví dụ sau:Program Tham_so;
V ar
a.b: in te ger;
(* - - *)Procedure Thidu_thamso(x: integer: V ar y: integer);
a:=0; b:=3:
Thidu_tham so(a.b):
w riteln (a :6 b:6 );
End
Kêt quả cho ra:
1 4 (kêt quả do lệnh viết ra m àn h ình n ằm tr o n g Procedure)
0 4 (kêt quả do lệnh viêt ra màn hình sau khi đã ra khỏi Procedure)
Trang 25T ro n g C T C -P R O C E D U R E nói trên, có hai lệ nh làm th a y đổi giá trị của a và b b à n g cách t ă n g th ê m 1 Trước khi gọi PROCEDUR E, hai t h a m
số thực a và b có giá tr ị a = 0, b = 3 Lệnh ghi r a m à n h ìn h Writeln(x,y)
n à m tro n g PR O C E D U R E cho k ế t quả 1 và 4 tư ơng ứng với giá trị của X
và y tro n g nội bộ PROCEDURE Tuy n hiê n sa u khi ra khỏi PROCEDUR E, lệ nh ghi r a m à n h ìn h w riteln(a,b) báo cho ta chỉ có b giữ
n guyên giá trị đã bị th a y đổi trong CTC vì b là th a m biến, còn a vẫn giữ nguyên giá tr ị của nó từ trưóc khi gọi t h ủ tục (tức là a v ẫ n b ằ n g 0 vì a chỉ là t h a m trị)
N h ư vậy, khi chuyể n một th a m sô cho C T C -P R O C E D U R E , nếu ta
m uốn bảo vệ giá t r ị của th a m số đó khỏi bị CTC "vô t ìn h p h á ” thì th a m
s ố đó phải dược d ù n g n h ư t h a m trị Còn một th a m số m uôn d ù n g để lấy
k ế t q u ả t h ì t h a m sô đó p h ả i là t h a m biến
Với ý n g h ĩa đó, tê n h à m FUNCTION đóng vai trò n h u một th a m biến; còn t h a m số tro n g p h ầ n khai báo của F UN C TIO N là t h a m trị
10.2.2 S ử d ụ n g P R O C E D U R E
Khi m uôn gọi một t h ủ tục để thực hiện thì chỉ cần câu lệnh sau:
Tên t h ủ tục (danh sách các th a m sô thực);
D anh sá ch các t h a m sô thực phải tu â n theo các đòi hỏi sau:
- Bàng về sô lượng, theo đú n g th ứ tự
- Tương ứ n g về kiểu và quy tắc mô tả với các th a m số h ìn h thức
tr o n g p h ầ n k h a i báo
10.3 Lựa chọn giũa PROCEDURE và FUNCTION
Khi q uyết đ ịn h lập CTC chúng ta cần xác địn h hai điều sau:
Đ iều 1: CTC là FUN CTIO N hay P ROCEDURE?
CTC là FUNCTION khi và chỉ khi thoả mãn đồng thời các yêu cầu sau:+ Nếu ta m uôn n h ậ n lại một (và chi một) kết quá;
+ Kết q u ả đó p hái là kiêu đơn gián:
+ Tên CTC (chứa k ế t quả), dù n g đê viết trong các biểu thức
Trang 26Nếu không th oả m ã n các yêu cầu tr ê n thì ( TC là P R O C E D l RE.
Vi dụ: Viết CTC tín h bình phương của một số
Để hiể u rõ cách sử dụ n g các CTC này ta xét tiếp ví dụ sa u: Già sử trong chương t r ì n h chính cần tính c = a ' + b" thì:
- Nêu dù n g FUNCTION’ có th ể viết
Nếu có t h a m s ô 'th i là t h a m b i ế n hay t h a m t r ị
Trang 27- Các th a m sô đóng vai trò cu ng cấp "tư liệu d ầ u vào" sẽ là các
t h a m t r ị
- Các k ế t quả th u lại đ ư ợ c thì đó là th a m biến
11 Kiểu dữ liệu có cấu trúc (RECORD)
Chúng ta đã biết ARRAY (mảng) là kiểu dữ liệu có cấu trúc nhưng chỉ bao gồm các phần tử có cùng kiểu RECORD (bản ghi) dùng đề tạo một kiêu
dữ liệu có câu trúc nhưng bao gồm các phần tử có kiêu khác nhau
S au khi đã mô tả bản ghi, ta phải k h a i báo các biến có kiểu thuộc
bả n ghi vừa mô tả trước khi dùng D ạn g tổng quát:
VAR tên biến: tên bản ghi;
T rong t h â n chương t r ì n h với các lệnh vào/ra, ta cần v iế t theo th ứ
tự sau:
tê n biên, tê n trường (tên trường riêng nếu có)
Trang 2811.3 Lệnh WITH
Để làm đơn giản cách viết khi d ù n g bản ghi, c h ú n g ta d ù n g lệnh:
WITH tên biến DO BEGIN
END;
Trong p h ầ n BEGIN END; chúng ta có thể’ chì c ầ n viết:
Tên trường (tên trường riê n g n ế u có);
hoặc đơn giản hơn nếu lồng ghép hai lệnh WITH:
WITH tên biến DO WITH tên trường DO hay WITH tên biển, tên trư ờ n g DO
S au đó chi việc viết tê n trường riêng
Bằng việc sử d ụ n g WITH DO ta có th ể xâm n h ậ p trự c tiếp vào các trường r iêng của b ả n g ghi
12 Kiểu dữ liệu có cảu trúc: tệp (FILE)
Tệp hay tệp dữ liệu là một tậ p hợp các dữ liệu có liên q u a n và cùng kiểu (type) được nhóm lại với n h a u tạo t h à n h một tệp Tệp được chứa trong th iế t bị nhó ngoài của máv tín h (Vi dụ: đĩa mềm, đĩa cứng ) có mang tên nào đó Vì được chứa ó bộ nhớ ngoài nên k h ô n g bị h u ý khi ngát điện Tệp có ý n ghĩa n h ư m ả n g (tức là bao gồm m ột d ã y các dữ liệu cùng kiểu) n hư ng ỏ đây nên hiểu một cách tông q u á t hơn dưới d ạ n g kiếu RECORD (tức là có th è bao gồm nhiề u kiểu cơ b ản k h á c nhau)
Trang 29S au khi mỏ tệ p xong, dù n g lệnh WRITE để c ấ t dữ liệu vào tệp:
W RIT E (biến tệp, các giá trị cần ghi vào);
12.4 Kết thúc - Đóng tệp
S au k h i đã k ế t thúo việc n h ậ p dữ liệu cần một t h ủ tục đóng tệp lại:
CLOSE (biến tệp);
V í dụ: T ín h các giá trị n h iệ t du n g của CdCl2 (Cp = 14,64+0,0096T) ở
1000K, 2000K, 3000K và ghi các giá trị tín h được vào file có tê n là
"ket_qua.doc" đ ặ t ở 0 c Đoạn chương t r ì n h sẽ n h ư sau:
Trang 301 Phương pháp dây cung
Đe tìm nghiệ m của phương t r ì n h f(x) = 0 , ta láy điểm a b ê n t r á i của nghiệm và điểm b bên p hải của nghiệm
Giả sử f(a) < 0: f(b) > 0
Nổì các điểm A[a f(a)] và B[b f(b)] b ằ n g đường th ẳ n g Đ ường này
cắ t trục h o àn h tạ i X| Coi Xj là nghiệm gần đ ú n g câ"p m ột của phương
t rìn h cần giải trên Giá trị gần đú n g này có th ế được tìm từ công thức:
( b - a ) f ( a )
1 f ( b ) - f ( a )
Lại giả t h i ế t (x,.b) là k h o ả n g chứ a nghiệ m mối Nôi A,[x,.f(x,)] và B[b.f(b)] n h ậ n được điếm cá t của dây cung với tr ụ c h o à n h là X, Coi XJ là nghiệm gần đ ú n g cấp hai của phương t r ì n h cần giải Nó sẽ được tín h từ công thức:
Trang 31( b - x , ) f ( x )
2 1 f ( b ) - f ( x , )
và cứ n h ư vậy, chuỗi sô’ a, Xị, x2 sẽ tiế n tới nghiệm cần tìm
Phương p h á p n à y có nhược điểm là nó đòi hỏi ta p hải b iê t k h o ản g chứ a nghiệm
END
Trang 32WriteC Cho a = ');readln(a);
WriteC Cho b = ');readln(b);
WritelnC N ghiem la: ',x:8:5):
WritelnO So lan lap la: ',i);
2 Phương pháp tiếp tuyến - Phương pháp Newton
Ta lấy x„ n ằ m bên p h ả i nghiệm , từ x„ kè đường song song với trục
tu n g cắ t đường biểu diễn h à m f(x) tạ i B[x0.f(x0)] Từ điêm nàv kè dưòng
Trang 33tiếp tu y ê n với đường f(x), đường tiếp tuyến này c ắ t tr ụ c h o à n h tạ i (x, được coi là nghiệm gần đúng cấp một) Từ X , lại kẻ đường song song với
tr ục tu n g cắ t đường biểu diễn hàm f(x) tạ i Bjfxj.fCx,)] Từ điểm B, lại kẻ tiếp tuyến với đường f(x), để được x2 (x2 là nghiệm gần đúng cấp hai),
Các nghiệ m g ầ n đ ú n g k ế tiếp của phương p h á p n à y sẽ hội tụ khi f(x) liên tục và có đạo h à m tạ i lân cận nghiệm
Q uá t r ì n h tiếp tục tối khi hai nghiệm gần đú n g k ế tiế p thoả m ãn điều kiện I x„- xntl I < E (e là đại lượng dương vô cùng nhỏ cho trước)
y
y = f(x)
f(x)
Trang 34dx:=f(x)/f (x);
Đ úng
x:=xi:=i
-dx; + 1ịdx:=fl x)/f(x)
Trang 35W ritelnC N ghiem la: ',x:8:5);
W ritelnC So la n lap la: \i);
f(b)-f(a)
f ( x jX,, = X
f ( x „ )
Trang 37F u n ctio n dh_f(x:real):real;
begin dh_f:= l/x; end;
BEGIN
WritelnC 0 < a< b < 6 ');
WriteC Cho a = ’);readln(a);
W rite(' Cho b = ');readln(b);
W ritelnC N ghiem la: ’,x:8:5);
W ritelnC So la n lap la: ’,i);
4 Phương pháp chia đôi khoảng chứa nghiệm
G iải phương t r ì n h phi tu y ế n f(x) = 0 b ằ n g phương p h á p chia đôi
k h o ả n g chứa nghiệm N ếu tích số f(a).f(b) < 0 thì tồn tạ i nghiệ m X thuộc
k h o ả n g [a b]
Lần lượt chia đôi k h o ả n g [a, b] và tiếp tục kiểm tr a điề u kiện trê n cho tới khi Iyi+1 - y, I < epsi, ta tìm được nghiệm gần đ ú n g với độ chínhxác đã cho
Trang 39Write(' Cho a = ');readln(a);
W rite(' Cho b = ');readln(b);
w ritelnC N ghiem la: ',x:8:5);
w ritelnC So la n lap la: ',i);
Trang 405 Phương pháp lặp [4]
Nếu phương tr ìn h cần giải quy được về d ạ n g X = ọ(x) tr o n g đó |<f>'(x)|
< 1 thì ta có th ể tiế n tới nghiệm bằng các bước lặp k ế tiế p x u ấ t p h á t từ