Để 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, tác giả đã biên soạn bài giảng Tin học ứng dụng trong hoá học. Bài giảng 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ó. Mời các bạn cùng tham khảo.
đạI học thái nguyên trờng đạI học s phạm Khoa Hoá học TS Mai Xuân Trờng D : 0912.739.257 CQ : 0280.3856.853 NR 0280.3759.402 Bài giảng Tin học ứng dụng ho¸ häc (2 tÝn chØ) (TÀI LIỆU LƯU HÀNH NI B) Thái nguyên, 2011 TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên Mở đầu Tin học hóa học (chemometric) hay hoá tin (computational chemistry) danh từ dùng để lĩnh vực khoa học kết hợp toán học - mà chủ yếu phơng pháp tính - với máy tính để giải toán hoá học Hoá tin đợc cấu thành ba yếu tố: thuật toán (algorithm), đoạn chơng trình máy tính (computer code) néi dung ho¸ häc Tin häc øng dơng hãa học hiểu phơng pháp tính toán máy tính để giải toán hoá học tính đặc thù đầy đủ Tức có phơng pháp dùng để giải toán hoá học, thờng phơng pháp tổ hợp cấu thành toán lớn nh hoá lợng tử (quantum chemistry), mô động lực phân tử lợng tử (quantum molecular dynamics simulation), có phơng pháp không đợc dùng hoá học mà dùng lĩnh vực khác Các phơng pháp này, đặc biệt việc khai thác liệu (datamining), thờng phơng pháp đơn, không phức tạp xuất phát từ toán toán học 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, phát triển ngôn ngữ lập trình, thuật toán, toán hoá học, phần mềm tính toán ứng dụng hoá học số lợng ngời sử dụng ngày nhiều Để phục vụ công tác giảng dạy vµ häc tËp tin häc øng dơng hãa häc, đà biên soạn giảng "Tin học ứng dơng ho¸ häc" HiƯn cã rÊt nhiỊu tht toán, phần mềm nh toán hoá tin ứng dụng đà đợc tải lên mạng INTERNET, bạn tìm thấy mạng thuật toán dới dạng mà nguồn mở cho hầu hết toán ứng dụng hoá học việc thay đổi cách học thực cấp thiết Tuy nhiên để hiểu đợc chơng trình ta cần phải hiểu khái niệm tin học dùng hoá học nh học thuật toán, lệnh ngôn ngữ lập trình Vì giáo trình chủ yếu cung cấp khái niệm ngôn ngữ lập trình để ngời học lập trình chơng trình đơn giản hay sử dụng chơng trình nguồn mở đà có TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên Chơng : mở đầu 1.1 khái niệm 1.1.1 Thông tin Mọi yếu tố mang lại hiểu biết đợc gọi thông tin Thông tin đợc thể dới nhiều dạng thức khác Thông tin đối tợng kiện đối tợng đó, nhiều thông tin độ bất định đối tợng giảm xuống 1.1.2 Đơn vị đo thông tin Đơn vị đo thông tin máy tính đợc gọi bít bít mang lợng thông tin tơng ứng với khả xảy ra: (tơng ứng với có điện hay bóng đèn sáng) (tơng ứng với điện (bóng điện tắt) ) byte = bÝt 1KB = 1024 byte 1MB = 1024KB 1GB = 1024MB 1.1.3 Xử lý thông tin máy tính điện tử Thông tin vào Quá trình xử lý Kết Quy tắc theo trình xử lý đợc thực (do ngời đặt ra) Máy tính không làm tác động ngời Ngời sử dụng phải nhập số liệu, bấm phím thực phép toán nh yêu cầu hiển thị kết lu trữ kết 1.2 Cấu trúc hệ xử lý thông tin tự động Thiết bị vào Bàn phím CPU Bộ nhớ ROM Thiết bị Bộ nhớ RAM Màn hình Chuột Bộ xử lý trung tâm ổ đĩa Bộ số học logic Máy Scan Bộ điều khiển Máy in ổ đĩa TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên Các thiết vào thiết gọi thiết bị ngoại vi, tùy theo yêu cầu mà ta thêm, bớt thiết bị ngoại vi cho phù hợp Máy tính hoạt động dựa nguyên lý Von Neumann Các lệnh liệu đợc lu trữ nhớ đợc tạo từ địa dựa yếu tố then chốt : + Điều khiển chơng trình: Máy tính hoạt động theo dẫn, điều khiển chơng trình đợc lu trữ nhớ Các bớc tác động đợc tiến hành theo câu lệnh chơng trình Chơng trình dẫn cho máy tính biết phải làm phải làm nh + Truy xuất theo địa chỉ: Dữ liệu theo nghĩa rộng (dữ liệu vào, kết trung gian, kết cuối cùng, chơng trình, liệu ra, ) đợc lu trữ RAM vùng nhớ đợc định vị số thứ tự đợc gọi địa Dữ liệu đợc định đợc truy cập (đọc hay ghi) theo địa ô nhớ chứa chúng 1.3 phần mềm Trong tin học, thuật ngữ phần mềm đợc dùng để nói chơng trình dùng để điều khiển hoạt động máy tính, xử lý d÷ liƯu phơc vơ cho mét øng dơng thể hoạt động kinh tế, sản xuất, kinh doanh, Ví dụ: chơng trình nạp sẵn ROM, chơng trình phần mềm ngời lập trình viết Nếu ta đa khỏi máy tình toàn chơng trình nạp sẵn nó, kể chơng trình ghi sẵn ROM lại đợc gọi phần cứng máy tính Nh vậy, thuật ngữ phần cứng đợc dùng để 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 linh kiện điện tử, khí, nhớ nhằm làm giảm lợng tiêu hao cho máy tính, tăng khả lu trữ 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 xác, khoa học tiện lợi sở phần khai thác tối đa khả máy tính phục vụ cho lợi ích ngời Sự phối hợp chặt chẽ hai lĩnh vực phần cứng phần mềm động lực thúc đẩy phát triển tin học TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên Chơng : số ngôn ngữ lập trình 2.1 Mở đầu Các ngôn ngữ lập trình phơng tiện giao tiếp ngời máy tính Nh ta đà biết, muốn yêu cầu máy tính giải toán đó, ví dụ tính giá trị biểu thức a = (b + c).(d + e) hc a = b + c.d + e phải viết chơng trình quy định thật rõ trật tự thực thao tác để đợc kết mong muốn Nh chơng trình máy tính thuật giải đợc viết dới dạng quy định ngôn ngữ Ngôn ngữ dùng để viết chơng trình máy tính đợc gọi ngôn ngữ lập trình Ví dụ: Để tính biểu thức a = (b + c).(d + e) trình thực việc tính toán chơng trình máy tính nh sau: Bớc Đọc giá trị b bảng Bớc 2: Đọc giá trị c bảng 2, cộng b với c Bớc 3: Ghi giá trị tổng (b + c) vào bảng Bớc 4: Đọc giá trị d bảng Bớc 5: Đọc giá trị e ë b¶ng 4, céng d víi e B−íc 6: Ghi giá trị tổng (d + e) bảng Bớc 7: lấy giá trị bảng nhân với giá trị bảng Bớc 8: ghi giá trị tích (b + c).(d + e) bảng gán cho giá trị a Bớc 9: Viết giá trị a bảng Bớc 10 Dừng chơng trình Các bảng 3, 4, 6, dùng lại bảng 1, cách xóa (ghi đè lên) sau đà dùng xong Thuật giải (các bớc) để ngời thực hiện, muốn cho máy tính hiểu thực đợc ý đồ cần phải diễn đạt thuật giải đà cho dới dạng quy định Một số dạng quy định hợp ngữ Hợp ngữ bao gồm tên câu lệnh quy tắc viết câu lệnh để máy tính hiểu đợc Tên cấu lệnh thờng đợc viết dới dạng tiếng anh nh−: READ, WRITE, INPUT, ADD, PRINT, TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên Ngoài nh ta đà biết, nạp chơng trình vào nhớ phải dành chỗ lu trữ giá trị số liệu Ví dụ 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ớ vào ô nhớ 1, kết giữ ô nhớ 1) MOVE a (ghi kết ô nhớ 1vào ô nhớ 5) LOAD d (đọc d ô nhớ 3) ADD e (cộng e ô nhớ vào ô nhớ 3, kết giữ ô nhớ 3) MULT a (nhân kết ô nhớ với ô nhớ 5, kết giữ ô nhớ 3) MOVE a (ghi kết từ ô nhớ vào ô nhớ 5) PRINT a (In ô nhớ hình máy in) HALT (Dừng chơng trình) Chơng trình phải sử dụng ô nhớ (bảng) để lu giữ số liệu, cụ thể là: (ô nhớ dành cho a) (ô nhớ dành cho b) (ô nhớ dành cho c) (ô nhớ dành cho d) (ô nhớ dành cho e) Chơng trình hợp ngữ nhận giá trÞ b, c, d, e ng−êi sư dơng nhËp từ bàn phím máy tính tính hiển thị giá trị biểu thức hình Ngôn ngữ máy: Sau nạp chơng trình hợp ngữ vào máy tính, máy diễn hai trình sau đây: + Dịch chơng trình hợp ngữ sang chơng trình viết ngôn ngữ máy + Thực chơng trình đà dịch TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên Tại lại phải dịch: Vì máy tính đợc thiết kế làm việc sở hệ nhị phân Chơng trình viết ngôn ngữ máy chứa ký hiệu (đèn tắt) (đèn sáng) Việc dịch từ chơng trình hợp ngữ sang ngôn ngữ máy đợc nhà thiết kế máy tính chuẩn bị trớc nạp sẵn máy Khi dịch, câu lệnh hợp ngữ đợc chuyển sang dạng đặc biệt gọi mà máy hay mà nhị phân Ví dụ câu lệnh LOAD (đọc) đợc chuyển thành 0000, câu lệnh ADD (cộng) đợc chuyển thành 0001 Các ô nhớ dành cho biến a, b, c, d, e đợc gán địa từ øng víi chóng VÝ dơ biÕn a sÏ chiÕm vïng nhớ bắt đầu địa 00100000, biến b chiếm địa 00100010, Khi dòng câu lệnh hợp ngữ: LOAD a đợ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 ngôn ngữ máy đợc không? Có thể Tuy nhiên, nh ta đà thấy việc làm vất vả dễ sinh lỗi Các nhà lập trình dựa nguyên lý máy tính đợc điều khiển chơng trình để sáng tạo 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ý t ngời lập trình để diễn đạt thuật toán đợc sáng tự nhiên Việc đặt hợp ngữ cố gắng bớc đầu giúp cho ngời lập chơng trình đợc thuận tiện Các câu lệnh hợp ngữ đợc gán tên gần với ngôn ngữ tự nhiên, việc dành vùng nhớ cho biến đợc thực thông qua tên biến Vận dụng t tởng dịch từ ngôn ngữ sang ngôn ngữ khác, nhà tin học đà sáng tạo ngôn ngữ lập khác thuận tiện với u điểm sau: + Các câu lệnh 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à ngôn ngữ lập trình cung cấp phơng tiện trợ giúp để giải toán khoa học, kỹ thuật quản lý Ngời ta gọi ngôn ngữ nói ngôn ngữ lập trình bậc cao để phân biệt với ngôn ngữ lập trình bậc thấp hợp ngữ ngôn ngữ máy TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên Quá trình giải toán nhờ giúp đỡ máy tính bao gồm giai đoạn sau: Giai đọan 1: Tìm hiểu toán bao gồm việc xác định giả thiết, 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 toán đà cho Giai đoạn 3: Lập trình: sử dụng ngôn ngữ bậc cao để diễn đạt thuật giải Giai đoạn 4: Sử dụng hệ trợ giúp, thông qua việc bấm phím thích hợp bàn phím để nhập chơng trình vào máy tính Giai đoạn 5: Yêu cầu máy dịch chơng trình đà nạp sang ngôn ngữ bậc thấp (ngôn ngữ máy) Giai đoạn 6: Yêu cầu máy thực chơng trình đà dịch Nếu giai đoạn ta phát sai sót cần quay lại giai đoạn trớc để sửa lỗi thực lại số giai đoạn cần thiết thu đợc kết mong muốn Chơng trình dịch Trong ngôn ngữ bậc thấp ngôn ngữ máy có bậc thấp Cần nhớ máy tính làm việc với ngôn ngữ máy Việc dịch chơng trình viết ngôn ngữ bậc cao sang ngôn ngữ máy chơng trình đặc biệt đảm nhận gọi chơng trình dịch Chơng trình dịch thực chức sau đây: + Duyệt chơng trình nguồn để phát thông báo lối cú pháp tức lỗi ngời lập trình viết sai + Trong trờng hợp chơng trình dịch không phát thấy lỗi chơng trình nguồn dịch chơng trình nguồn thành chơng trình viết ngôn ngữ máy gọi 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) Kemeny Kuzt sáng lập vào năm 1965 Đợc dùng nh ngôn ngữ khởi đầu cho việc lập trình Hiện đợc cài đặt phổ TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên biến máy tính IBM tơng thích Xu hớng cấu trúc hóa ngôn ngữ tiếp cận dần với PASCAL Một tiêu chuẩn đà đợc tác giả soạn với tên TRUE BASIC 2.3 Ngôn ngữ PASCAL Do tính tờng minh cấu trúc nên PASCAL thích hợp cho việc giảng dạy sở lập trình, đặc biệt ngời không chuyên tin Bạn đọc đọc nhiều giáo trình khác PASCAL (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 ngôn ngữ lập trình bậc cao giáo s Niklaus Wirth (trờng đại học kỹ thuật Zurich - Thụy Sĩ) sáng lập công bố vào đầu năm 1970, tên PASCAL để kỷ niệm nhà toán học ngời Pháp Blaisse PASCAL 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 trờng đại học: giúp cho sinh viên nh ngời học lập trình có đợc thói quen viết chơng trình có cấu trúc sáng sủa, rõ ràng, dễ hiểu dễ đọc cho ngời khác Trớc có PASCAL, sinh viên đợc học ngôn ngữ lập trình FORTRAN, ngôn ngữ lâu đời ngôn ngữ cấu trúc Giáo s Wirth thấy tránh đợc nhiều lỗi lập trình với ngôn ngữ cấu trúc khối có kiểm tra kỹ lỡng tơng thích liệu PASCAL ngôn ngữ có định kiểu mạnh mẽ, có nghĩa biến kiểu liệu tự đem trộn lẫn với biến kiểu liệu khác Ví dụ hai vế phép gán phải kiểu, ngoại trừ trờng hợp vế trái biến số thực (real) vế phải số nguyên (integer) Việc định kiểu cách chặt chẽ nh bắt buộc ngời lập trình luôn phải có biểu thức tơng thích kiểu liệu PASCAL ngôn ngữ có cấu trúc Một ngôn ngữ có cấu trúc khối ngôn ngữ mà ta tách thông tin liệu (biến, hằng, ) lệnh cần dùng cho nhiệm vụ xác định thành khối riêng, tách khỏi phần lại chơng trình để ngời lập trình giải dÇn tõng phÇn mét, tõng khèi mét thËm trÝ cã thể cho nhiều ngời tham gia lập trình, ngời phụ trách vài khối Thông thờng khối ứng với nhiệm vụ cụ thể xác định, đợc thực chơng trình với biến địa phơng biến tạm thời chơng trình Bằng cách ta viết chơng trình cho kiện xảy không làm ảnh hởng tới phần khác chơng trình nằm chơng trình Có thể nói tính cấu trúc chơng trình PASCAL đợc thể mặt + Cấu trúc mặt liệu: từ liệu đà có (kiểu đơn giản liệu cấu trúc) ta xây dựng cấu trúc liệu phức tạp + Cấu trúc mặt lệnh: Từ lệnh đà có (lệnh đơn giản lệnh có cấu trúc) ta nhóm chúng lại với đặt hai từ khóa BEGIN END thành câu lệnh phức tạp hơn, gọi lệnh hợp thành hay lệnh ghép TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên + Cấu trúc mặt chơng trình: Một chơng trình chia thành modun chơng trình độc lập (chơng trình con) Bộ chữ viết PASCAL Ngôn ngữ PASCAl đợc xây dựng với chữ viết sau: Bộ 26 chữ la tinh: 26 chữ in hoa A, B, C, ,Z 26 chữ thờng a, b, c, , z Ký tự gạch nối _ Các chữ số thập phân: 0, 1, 2, , Các ký hiệu toán học thông thờng +, -, *, /, =, , (), … C¸c ký hiƯu đặc biệt nh dấu chấm câu dấu khác: ,; :[]?%\!$ Dấu cách (Space) đợc dùng để ngăn cách từ Vì viết không chữ nên để tiện nhận biết số trờng hợp nh cần đếm số dấu cách, tài liƯu th−êng dïng dÊu Tõ vùng cđa PASCAL gồm số từ riêng PASCAL đợc gọi từ khóa (key word) Các từ khóa ngời sử dụng phải dùng với cú pháp, không đợc dùng vào việc khác đặt tên trùng với từ khóa Đó 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 lệnh thử 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 viết in hay viết thờng, giá trị ý nghĩa từ khóa không thay đổi Tên hay định danh (identifier) Tên định danh 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ừ chữ chữ số song bắt buộc chữ đầu phải chữ Tất nhiên ta phải đặt tên 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 "_" viết tên Một số tên nh tên chơng trình (SIN , COS, ) đà đợc PASCAL định nghĩa sẵn đợc gọi tên chuẩn hay tên đà đợc định nghĩa Sự khác tên chuẩn từ khóa ngời sử dụng định nghĩa lại tên chuẩn, dùng tên chuẩn vào việc khác muốn từ khóa bị nghiêm cấm dùng vào việc khác trái quy định Một số tên chuẩn 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âu lệnh PASCAL thiếu đợc Không nên hiểu dấu ; kết thúc cấu lệnh TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên Procedure RK3(xa,xb,delx,ya,eps,h0 :real); { xa, xb: cận lấy tích phân ya: giá trị y đIểm xa eps: độ xác nghiệm delx: khoảng bớc lấy tích phân (xa,xb); h0: khoảng chia delx itermax: số lần lặp tối đa để hội tụ nghiÖm } LABEL 10; VAR Npont,nint,iint,irepeat,k,ipont,itermax : integer; H,yold,temp : real; procedure RK2(x0,y0,h0 :real; k :integer; VAR y:real); VAR h,h2,x : real; i : integer; BEGIN h:=h0/k; x:=x0; y:=y0; for i:=1 to k begin {1} RK4(x,y,h,y); x:=x+h; end; {1} END; BEGIN itermax:=20; npont:=round((xb-xa)/delx); nint:=round(delx/h0); for ipont:=1 to npont begin {2} for iint:=1 to nint begin {3} k:=1; RK2(xa,ya,h0,k,yold); for irepeat:=1 to itermax begin {4} k:=k*2; h:=h0/k; RK2(xa,ya,h0,k,y); if yold=0 then yold:=1; temp:=abs((y-yold)/yold); if temp eps begin {1} c:=(a+b)/2; x:= c; fc:= FF(x); d:= fa * fc; if d > then begin {2} 91 TS Mai Xu©n Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên fa:= fc; a:= c; end {2} else begin {3} fb:= fc; b:= c; end; {3} end; {1} END; ®ã cã sư dơng FUNCTION FF(x) Khi dïng PPCK bạn cần soạn riêng function FF(x) cho hàm số phơng trình f(x) = 3.2 Hồi quy đa thøc Procedure HQDT(npont,m: integer; Y,X:m1; VAR A:m1); (* npont lµ số điểm thực nghiệm xác định Y X *) (* m bậc đa thức, A hƯ sè cđa ®a thøc håi quy*) VAR bm,tampon,i,npont,j,k :integer; ab: real; xx: array [ 10] of real; sum,sum2 : array [ 20] of real; a,aa : array [1 20,1 20] of real; function ymux(y,x:real): real; VAR kqtg : real; BEGIN kqtg:=x*ln(y); ymux:=exp(kqtg); END; procedure GHPTTT(n:integer; A:m2; VAR X:m1); BEGIN … END; BEGIN bm:= * m; for k := to bm begin {1} sum[k]:= 0; for i:=1 to npont sum[k] := sum[k] + ymux(x[i],k); end; {1} sum[0]:= npont; for k := to m begin {2} sum2[k]:= 0; for i:=1 to npont sum2[k] := sum2[k] + y[i]*ymux(x[i],k); end; {2} for i:=1 to m+1 (*cac he so cua he ptrinh tuyen tinh*) begin {3} for j:=1 to m+1 Begin {4} tampon:=bm-i-j+2; a[i,j]:= sum[tampon]; aa[i,j]:=a[i,j]; end; {4} end; {3} 92 TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên for j:= to m+1 begin {5} tampon:=m-j+1; a[j,M+2]:= sum2 [tampon]; aa[j,M+2]:=a[j,M+2]; end; {5} GHPTTT(m+1,AA,X); (* giai he pt tuyen tinh *); END; Các chơng trình nguồn 4.1 Tính cân ion Fe3+ SCNPROGRAM CBION_FE_SCN; (* He Fe3+- SCN- *) LABEL 10; VAR FX,FFX,C1,C2,epsilon,GAM,W,NDOH,NDH : real; delta,Y,CC1,CC2,sum1,sum2,sum2,sum4,PK : real; PKK : array[1 6] of real; K,x: array[1 10] of real; i,m,j : integer; PROCEDURE FUNC(X: real; VAR FX,FFX: real); VAR tamp1,tamp2,tamp2,tamp4 : real; i : integer; BEGIN sum1 := ; sum2 := 0; sum2 := 0; sum4 := 0; FOR i:= TO DO begin {1} tamp1:= exp( i * ln ( x ) )* PKK[ i ]; tamp2:= tamp1 / i ; tamp2:=tamp2* i * i/ x; tamp4:=tamp2/i; sum1:=sum1 + tamp1; sum2:=sum2 + tamp2; sum2:=sum2 + tamp2; sum4:=sum4 + tamp4; end; {1} W:= + sum2 + NDOH/K[7]; FX := X - C2 + X * NDH/K[8] + C1 * sum1/W; FFX:= + NDH/K[8] + C1 * (sum2 * W - sum4*sum1)/W/W; END; BEGIN Write('Do chinh xac cua loi giai :=?'); Readln (epsilon); Writeln (' nhap hscb:'); for i:=1 to begin {2} write('InK[',i,']='); readln( K[i]); K[i]:=exp(K[i]); end; {2} (*Tap so lieu dung de tinh thu K[1]:=1; K[2]:=5; K[2]:=2; K[4]:=1.5; K[6]:=4; K[7]:=10;K[8]:=12; *) Write (' nhap Nong Do Fe3+'); READLN (C1); write(' nhap pH cua dung dich'); readln ( NDH); 93 K[5]:=2; TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên NDH:=exp(-NDH); NDOH:=1.e-14/NDH; Write (' nhap Nong Do SCN- va the tich GIOT '); Readln (C2, GAM); Writeln ('nhap x10 dau'); Readln (x[10]); (* Vi du x[10] 1.e-5 *) Writeln ('GIA TRI ND CAC ION CAN BANG'); Writeln('FeSCN':12,'FeSCN2':12,'FeSCN2':12,'FeSCN4':12,'FeSCN5':12,'FeSC N6':12); Writeln('FeOH':20,'HCNS':12,'Fe':12,'SCN':12); {sau lan tinh dau, cac x dau duoc chon la x cua phep tinh truoc } (*tinh PKi*) for i:=1 to begin {3} PK:= 1; For M:= to i PK:= PK * K[M]; PKK[i]:= 1.0/PK; end; {3} i:=0; 10: FUNC (x[10],FX,FFX); j:=j+1; delta := FX/FFX; X[10] := X[10]- delta; IF abs(delta)> epsilon THEN GOTO 10; x[9]:=C1/W; x[8]:=x[10]*NDH/K[8]; x[7]:=x[9]*NDOH/K[7]; x[1]:=x[9]*x[10]/K[1]; for i:=2 to x[i]:=x[i-1]*x[10]/K[i]; for i:=1 to write(x[i]:12); writeln; write('':12); for i:=7 to 10 write(x[i]:12); writeln; if (j mod 10) = then readln; C2 := C2 + GAM; IF (C2/2) 30 then TB[F2]:=1.960; SS:=SO*TB[F2]; For J:=1 to O If (ABS(B[J])< ABS(SS)) then Writeln(fout,' Phai loai he so B[',J,']'); L:=0; For J:=1 to O If (ABS(B[J])> ABS(SS)) then Begin {12} Writeln(fout,'He so hoi quy lai la: B[',J,']= ',B[J]:7:3); L:=L+1; End; {12} Writeln(fout,''); Writeln(fout,'So he so co y nghia la ',l); Close(fout); end; {4} 96 TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên END; (*======ham x mu y==============================*) Function mu(x,y:integer):integer; VAR tg,q:integer; BEGIN tg:=1; For q:=1 to y tg:=tg*x; mu:=tg; END; (*======Ham tinh giai thua=========================*) Function Gthua(w:integer):integer; VAR gt,i:integer; BEGIN If w=0 then gt:=1 else Begin {13} gt:=1; For i:=1 to w gt:= gt*i; End; {13} Gthua:=gt; END; Function t(i,k:integer):integer; VAR tt,t1,t2,q:integer; BEGIN t1:=i Div k; t2:=I Mod k; If t2=0 then tt:=t1 else tt:=t1+1; t:=tt; END; Procedure XDMTTN(Var a:m2); Label 11; VAR KT,U:integer; BEGIN O:=1+N; For I:=1 to N Begin {14} C[I]:=(Gthua(N) DIV (Gthua(I)* Gthua(N-I))); O:=O+C[i]; End; {14} Writeln('So he so B can tim la: ',O); For I:=1 to M A[I,1]:= 1; For J:=2 to N+1 Begin {15} KT:=MU(2,J-2); For I:=1 to Q Begin {16} U:= T(I,KT); A[I,J]:= MU(-1,U); End; {16} End; {15} Case n of 1:goto 11; 97 TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên 2:Begin {17} For I:= Q+1 to M Begin {18} For J:=2 to N+1 Begin {19} if J=2 then Begin {20} A[Q+1,J]:=D; A[Q+2,J]:=-D; End; {20} if J=3 then Begin {21} A[Q+3,J]:=D; A[Q+4,J]:=-D; End {21} else A[I,J]:=0; End; {19} End; {18} For I:= to M Begin {22} A[I,4]:=A[I,2]*A[I,3]; A[I,5]:=(A[I,2]*A[I,2])-V; A[I,6]:=(A[I,3]*A[I,3])-V; End; {22} End; {17} 3:Begin {23} For I:= Q+1 to M Begin {24} For J:=2 to N+1 Begin {25} If J=2 Then Begin {26} A[Q+1,J]:=D; A[Q+2,J]:=-D; End; {26} If J=3 Then Begin {27} A[Q+3,J]:=D; A[Q+4,J]:=-D; End; {27} If J=4 Then Begin {28} A[Q+5,J]:=D; A[Q+6,J]:=-D; End {28} else A[I,J]:=0; End; {25} End; {24} For I:= to M Begin {29} A[I,5]:=A[I,2]*A[I,3]; A[I,6]:=A[I,2]*A[I,4]; A[I,7]:=A[I,4]*A[I,3]; A[I,8]:=A[I,5]*A[I,4]; A[I,9]:=(A[I,2]*A[I,2])-V; A[I,10]:=(A[I,3]*A[I,3])-V; A[I,11]:=(A[I,4]*A[I,4])-V; End; {29} end; {23} 98 TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên 4:Begin {30} For I:= Q+1 to M Begin {31} For J:=2 to N+1 Begin {32} If J=2 Then Begin {33} A[Q+1,J]:=D; A[Q+2,J]:=-D; End; {33} If J=3 Then Begin {34} A[Q+3,J]:=D; A[Q+4,J]:=-D; End; {34} If J=4 Then Begin {35} A[Q+5,J]:=D; A[Q+6,J]:=-D; End; {35} If J=5 Then Begin {36} A[Q+7,J]:=D; A[Q+8,J]:=-D; End {36} Else A[I,J]:=0; End; {32} End; {31} For I := to M Begin {37} A[I,6]:=A[I,2]*A[I,3]; A[I,7]:=A[I,2]*A[I,4]; A[I,8]:=A[I,2]*A[I,5]; A[I,9]:=A[I,4]*A[I,3]; A[I,10]:=A[I,5]*A[I,3]; A[I,11]:=A[I,4]*A[I,5]; A[I,12]:=A[I,4]*A[I,6]; A[I,13]:=A[I,6]*A[I,5]; A[I,14]:=A[I,2]*A[I,11]; A[I,15]:=A[I,11]*A[I,3]; A[I,16]:=A[I,11]*A[I,6]; A[I,17]:=(A[I,2]*A[I,2])-V; A[I,18]:=(A[I,3]*A[I,3])-V; A[I,19]:=(A[I,4]*A[I,4])-V; A[I,20]:=(A[I,5]*A[I,5])-V; End; {37} End; {30} 5:Begin {38} For I:= Q+1 to M Begin {39} For J:=2 to N+1 Begin {40} If J=2 Then Begin {41} A[Q+1,J]:=D; A[Q+2,J]:=-D; End; {41} If J=3 Then Begin {42} A[Q+3,J]:=D; A[Q+4,J]:=-D; End; {42} If J=4 Then Begin {43} 99 TS Mai Xu©n Tr−êng - Tr−êng Đại học S phạm - Đại học Thái Nguyên A[Q+5,J]:=D; A[Q+6,J]:=-D; End; {43} If J=5 Then Begin {44} A[Q+7,J]:=D; A[Q+8,J]:=-D; End; {44} If J=6 Then Begin {45} A[Q+9,J]:=D; A[Q+10,J]:=-D; End {45} Else A[I,J]:=0; End; {40} End; {39} For I:= to M Begin {46} A[I,7]:=A[I,2]*A[I,3]; A[I,8]:=A[I,2]*A[I,5]; A[I,9]:=A[I,4]*A[I,3]; A[I,10]:=A[I,2]*A[I,6]; A[I,11]:=A[I,4]*A[I,3]; A[I,12]:=A[I,5]*A[I,3]; A[I,13]:=A[I,6]*A[I,3]; A[I,14]:=A[I,4]*A[I,5]; A[I,15]:=A[I,4]*A[I,6]; A[I,16]:=A[I,5]*A[I,6]; A[I,17]:=A[I,7]*A[I,4]; A[I,18]:=A[I,7]*A[I,5]; A[I,19]:=A[I,7]*A[I,6]; A[I,20]:=A[I,8]*A[I,5]; A[I,21]:=A[I,8]*A[I,6]; A[I,22]:=A[I,9]*A[I,6]; A[I,23]:=A[I,11]*A[I,5]; A[I,24]:=A[I,11]*A[I,6]; A[I,25]:=A[I,12]*A[I,6]; A[I,26]:=A[I,14]*A[I,6]; A[I,27]:=A[I,14]*A[I,7]; A[I,28]:=A[I,15]*A[I,7]; A[I,29]:=A[I,11]*A[I,6]; A[I,30]:=A[I,7]*A[I,16]; A[I,31]:=A[I,8]*A[I,16]; A[I,32]:=A[I,27]*A[I,6]; A[I,33]:=(A[I,2]*A[I,2])-V; A[I,36]:=(A[I,5]*A[I,5])-V; A[I,34]:=(A[I,3]*A[I,3])-V; A[I,37]:=(A[I,6]*A[I,6])-V; A[I,35]:=(A[I,4]*A[I,4])-V; End; {46} End; {38} END; 11: Writeln; Writeln(' MA TRAN THUC NGHIEM NHU SAU'); For I:= to M Begin {47} For J:= to O Write('A[',I,',',J,'] = ', A[I,J]:5:3); Writeln; End; {47} END; Procedure nhapketqua; VAR sqk,smax,gg:Real; g,gt: m2; BEGIN Write('So lan lap thuc nghiem o tam la: '); Readln(II); Writeln('CAC THI NGHIEM O TAM ') ; For J:=1 to II Begin {48} Write('KQ[M,',J,']='); Readln(KQ[M,J]); End; {48} 100 TS Mai Xuân Trờng - Trờng Đại học S phạm - Đại học Thái Nguyên SKQ:=0; For J:=1 to II Begin {49} SKQ:=SKQ+KQ[M,J]; End; {49} KQ[M,II+1]:= SKQ/II; KQTN[M]:=KQ[M,II+1]; Writeln('KET QUA THI NGHIEM THU DUOC LA:'); For i:=1 to m-1 Begin {50} Write('KQTN[',i,']= '); Readln(kqtn[i]); End; {50} Writeln('KQTN[',m,']= ',kqtn[m]:5:3); If II=1 then Begin {51} Writeln('Nen lam lap thi nghiem de co ket qua chinh xac hon'); Exit; End; {51} SSUM:= 0; For J:=1 to II Begin {52} S[I]:=SQR(KQ[M,J]-KQ[M,II+1]); End; {52} SSUM:= SSUM+ S[I]; SMAX:= S[1]; For I:=2 to II If SMAX