Gioi thieu ngon ngu lap trinh fortran 90

153 7 0
Gioi thieu ngon ngu lap trinh fortran 90

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

LA VĂN HIỂN GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH Fortran 90 Tài liệu lập trình bản dành cho sinh viên :  Khối khoa học kỹ thuật  Khối khoa học tự nhiên Tà i liệ u được trình bà y dưới hình thức tự họ c Bao gò m cá c nọ i dung bả n nhá t củ a Fortran 90 Thực hà nh lạ p trình ở cuó i mõ i chương Kết hợp phần mềm GNUPLOT để vễ đò thị 2018 LỜI NÓI ĐẦU Tài liệu “ Giới thiệu NGÔN NGỮ LẬP TRÌNH Fortran 90 “ được biên soạn nhằm giúp các bạn sinh viên các khối, ngành khoa học kỹ thuật, khoa học tự nhiên quan tâm đến ngôn ngữ Fortran nắm được phương pháp bản để viết văn bản chương trình và chạy các chương trình tính toán bằng Fortran 90, phục vụ yêu cầu học tập , thực hiện các bài tập lớn ,luận văn tốt nghiệp Fortran có lịch sử phát triển lâu đời qua nhiều thế hệ máy tính với các phiên bản khác , đến vẫn là ngôn ngữ có nhiều ưu thế lĩnh vực tính toán số Fortran được xem là ngôn ngữ lập trình rất phố biến đối với các sinh viên, kỹ sư, khoa học gia thuộc các lĩnh vực khoa học , kỹ thuật tại các nước Âu – Mỹ Việc học tập Fortran còn giúp các bạn sinh viên có điều kiện học tập ở nước ngoài , đọc hiểu các chương trình viết bằng ngôn ngữ Fortran được trình bày các sách , tài liệu , bài báo nước ngoài Hai phiên bản Fortran được sử dụng phổ biến nhất hiện là FORTRAN 77 và Fortran 90 , đó phiên bản Fortran 90 được xem là một phiên bản quan trọng lịch sử phát triển Fortran Fortran 90 có rất nhiều điểm mới so với các phiên bản trước văn bản chương trình được phép viết theo kiểu “ định dạng tự “ ( free format ) khác với kiểu “ định dạng cố định theo cột “ ( fixed format ) , các cấu trúc điều khiển , xử lý mảng , xử lý vào / , chương trình , cấp phát động …tạo nhiều thuận lợi cho người lập trình Từ kiến thức Fortran 90 , bạn có thể dễ dàng tiếp cận phiên bản tiếp theo Fortran 95 , Fortran 2003, Fortran 2008 Tài liệu này sử dụng các trình biên dịch miễn phí G77/GFortran của GNU Compiler Collection (GCC) và G95 thông qua phần mềm Force 2.0 là một môi trường phát triển tích hợp ( IDE ) gọn nhẹ dùng để viết văn bản chương trình , tiến hành biên dịch , liên kết và chạy thử chương trình Tài liệu giới thiệu thêm trình biên dịch Fortran g95 Silverfrost FTN95 Personal Edition để bạn đọc tham khảo , chạy kiểm chứng chương trình Phần phụ lục giới thiệu tổng quát phần mềm GNUPLOT dùng để vẽ các đồ thị 2D, 3D lấy dữ liệu từ kết quả tính toán của Fortran và một chương trình mẫu bộ LINPACK dùng để giải hệ phương trình tuyến tính là các ví dụ về các tiện ích miễn phí từ các tổ chức phát triển Fortran cung cấp cho người sử dụng Các bạn sinh viên cần tham khảo , sử dụng các chương trình tiện ích rất phong phú đã được lập trình sẵn từ các thư viện Fortran Internet , phục vụ cho việc học tập, nghiên cứu Mặc dù đã cố gắng rà soát kỹ các nội dung tài liệu chạy kiểm tra các chương trình ví dụ khó tránh khỏi có những sai sót hoặc những điểm trình bày chưa phù hợp Tác giả rất mong và xin cám ơn sự đóng góp của các bạn đọc , các bạn sinh viên gần xa để tài liệu ngày càng hoàn thiện Tháng 05 năm 2018 La Văn Hiển Email : hienbk58@yahoo.com Cập nhật : 16/06/2019 CHƯƠNG : GIỚI THIỆU CHUNG VỀ NGƠN NGỮ LẬP TRÌNH FORTRAN 1.1 Sơ lược về lịch sử ngơn ngữ lập trình Fortran 1.1.1 Ng̀n gớc Fortran ( hay FORTRAN ) được viết tắt từ cụm từ Mathematical FORmula TRANslating System ( hệ thống dịch công thức toán học ) , ngôn ngữ lập trình cấp cao đầu tiên , kiểu biên dịch ( compiler ) , John Backus ( 1924 – 2007 ) cùng mợt nhóm kỹ sư điện tốn tḥc tập đoàn công nghiệp máy tính IBM ( International Business Machines ) thiết kế và phát triển từ giữa những năm 50 của thế kỷ XX Ban đầu tên ngôn ngữ được viết là FORTRAN , xu hướng hiện được viết chuẩn hóa thành Fortran ( viết hoa kí tự đầu ) 1.1.2 Phạm vi ứng dụng Ngôn ngữ lập trình Fortran hiện có đầy đủ tính của một ngôn ngữ lập trình cấp cao hiện đại, hỗ trợ nhiều kiểu lập trình , có khả ứng dụng nhiều lĩnh vực khác , nhiên Fortran thích hợp cho các ứng dụng tính tốn sớ lĩnh vực khoa học kỹ thuật , khoa học tự nhiên và được xem ngơn ngữ lập trình rất phở biến đới với các sinh viên, kỹ sư, khoa học gia thuộc các lĩnh vực nêu tại các nước Âu Mỹ 1.1.3 Các phiên ngôn ngữ Fortran FORTRAN (1957) , FORTRAN II ( 1958) , FORTRAN III (1958) , FORTRAN IV (1961) , FORTRAN 66 (1966) được xem phiên bản cũ , lỗi thời Các phiên bản được sử dụng phổ biến hiện FORTRAN 77 , Fortran 90 Fortran 95 Phiên bản Fortran 90 , được xem cột mốc quan trọng lịch sử phát triển ngôn ngữ Fortran , có rất nhiều điểm mới so với FORTRAN 77 văn bản chương trình hay tập tin nguồn ( source code ) được phép viết theo kiểu “ định dạng tự “ ( free format ) , khác với kiểu “ định dạng cố định theo cột “ ( fixed format ) của phiên bản trước ; các cấu trúc điều khiển , xử lý mảng , xử lý vào/ra , cấp phát động , chương trình , đơn vị chương trình module tạo nhiều thuận lợi cho người lập trình Phiên bản Fortran 95 bổ sung một số ít các nội dung mới vào Fortran 90 và bỏ một vài điểm lỗi thời vẫn còn giữ Fortran 90 Hai phiên bản sau Fortran 2003 ( hỗ trợ lập trình hướng đối tượng ) Fortran 2008 Một số công ty, tổ chức phát triển ngôn ngữ Fortran đã cho đời nhiều biến thể khác từ Fortran chuẩn ( Standard Fortran ) bằng cách thêm vào một số chức mở rộng Các phiên bản Fortran chuẩn được ANSI ( American National Standards Institute - Viện tiêu chuẩn quốc gia Hoa Kỳ ) ISO ( International Organization for Standardization - Tổ chức quốc tế về tiêu chuẩn hóa ) xem xét cơng bớ Chương trình viết bằng Fortran chuẩn đảm bảo tính khả chuyển ( portable ) , chạy ổn định hệ máy tính khác có cài đặt trình biên dịch Fortran Phần trình bày tài liệu tập trung vào phiên bản Fortran 90 Phần thực hành minh họa các chương trình Fortran 90 , chúng ta sử dụng phần mềm miễn phí Force 2.0 ,version 2.0.9p , được download tại trang web : http://force.lepsch.com/2009/05/downloads.html Tên tập tin download : Force209G95Setup.exe , kích thước 3,55 MB Phần mềm Force là một môi trường phát triển tích hợp IDE ( Integrated Development Environment ) gọn nhẹ , có chức biên dịch chạy các chương trình viết bằng FORTRAN 77 hoặc Fortran 90 Force sử dụng trình biên dịch miễn phí G77/GFortran của GNU Compiler Collection (GCC) và G95 Khi cài đặt xong , mở file Force2.exe , sẽ thấy hiển thị cửa sở mơi trường phát triển tích hợp IDE của Force 2.0 Trong môi trường , sẽ soạn tập tin nguồn ( văn bản chương trình dạng text ) , tiến hành biên dịch , liên kết ( lệnh compile ) và nếu không có lỗi sẽ tiến hành chạy thử ( lệnh run ) chương trình Ngồi , có thể chọn trình biên dịch Fortran khác sau để chạy kiểm tra một chương trình nguồn :  Sử dụng môi trường IDE của SilverFrost qua chương trình FTN90 Personal Edition ( chương trình miễn phí phục vụ học tập , chạy test ) với file có tên ftn95_personal.exe ( kích thước 70, 996 MB ) , được download tại trang web : https://www.silverfrost.com/32/ftn95/ftn95_personal_edition.aspx Khi download về máy tính xong , chạy file ftn95_personal.exe để cài đặt chương trình vào mợt thư mục tùy chọn , ví dụ D :\FTN95 Sau đó chúng ta chạy file plato.exe để mở môi trường IDE Plato Từ , có thể soạn thảo , biên dịch , liên kết chạy các chương trình Fortran  Để có thể biên dịch trực tiếp tại cửa sổ Command Prompt của Windows , chúng ta có thể vào trang web The Fortran Company có địa sau để download về trình biên dịch g95 qua một file cài đặt có tên g95-Mingw_201210.exe ( 5381 KB ) : http://www.fortran.com/the-fortran-company-homepage/whats-new/g95-windowsdownload/ Phần hướng dẫn sơ lược sử dụng các trình biên dịch này sẽ được trình bày ở cuối chương 1.2 Bộ kí tự Fortran Văn chương trình Fortran 1.2.1 Bộ kí tự Fortran Bợ kí tự của Fortran bao gồm : a) Chữ viết thường : từ a đến z ; ( 26 chữ tiếng Anh ) b) Chữ viết hoa : từ A đến Z ; c) Chữ số : đến ; ( 10 chữ sớ ) d) Kí tự nối chân : _ ; ( underscore ) e) Các kí tự khác : = + - * /( ) < > ,.;:‘“!&%$? f) Kí tự trớng ( blank , space ) Các đơn vị văn bản chương trình từ khóa ( keyword ) , tên biến , tên hằng , tên chương trình , xâu kí tự , biểu tượng …sử dụng các kí tự bộ kí tự Fortran Kí hiệu các phép toán số học cộng, trừ, nhân, chia được viết : + - * / ; riêng phép lũy thừa sử dụng hai dấu * liên tiếp ( ví dụ : 2**3 = 23 = ) 1.2.2 Soạn thảo văn chương trình ( tập tin ng̀n dạng *.f90 ) Để soạn một văn bản chương trình Fortran 90 , có thể dùng trình soạn thảo Notepad hoặc soạn thảo môi trường Force Tập tin nguồn phải được lưu ( save as ) dưới dạng có phần là *.f90 , ví dụ hinhtron.f90 , để trình biên dịch có thể nhận dạng được loại tập tin phiên bản Fortran phù hợp ( Tập tin văn bản soạn theo định dạng cớ định có phần là *.f , được giới thiệu ở cuối chương ; tập tin văn bản của Fortran 95 có phần là *.f95 ) Fortran không phân biệt chữ hoa với chữ thường văn bản chương trình ( case insensative ) trừ việc thể hiện nội dung xâu kí tự ( string of characters ) Trong các văn bản chương trình trước , người lập trình thường viết dòng lệnh bằng chữ IN HOA xu hướng hiện viết văn bản bằng chữ thường hoặc kết hợp cả hai 1.3 Phương thức chung tạo tập tin thi hành (executable file) từ văn chương trình a) Trong mơi trường DOS hoặc Windows , các ngơn ngữ lập trình cấp cao ( Fortran, C, Pascal,…) tạo tập tin thi hành có đuôi *.exe theo hai bước : Bước : Biên dịch ( compiling ) tập tin nguồn ( source code , file dạng text người lập trình soạn thảo ) sang tập tin đối tượng ( object code ) dạng nhị phân ( binary code ) Bước : Liên kết ( linking ) một hoặc vài tập tin đối tượng tập tin thư viện có liên quan để tạo thành tập tin thi hành được ( executable file ) Tập tin thi hành *.exe sau đó có thể chạy độc lập bên ngoài môi trường IDE b) Sơ đồ minh họa : Tập tin đối tượng ( Object code ) Tập tin nguồn ( Source code ) Biên dịch ( Compiling ) Tập tin thi hành ( Executable code ) Liên kết ( Linking ) File1.f90 File1.obj File2.f90 File2.obj Program.exe Thư viện Libraries Hình 1.1 : Các bước biên dịch và liên kết 1.4 Một ví dụ về chương trình Fortran Để có một cái nhìn tổng quát về việc soạn thảo tập tin nguồn của Fortran và cách thức biên dịch , liên kết và chạy chương trình môi trường Force , chúng ta xem qua một ví dụ đơn giản dưới 1.4.1 Văn chương trình tính chu vi diện tích hình trịn Trong cửa sổ Force , vào menu File , chọn New Khung cửa sổ soạn thảo hiện trỏ xuất hiện ở dòng đầu tiên Chúng ta vào nội dung văn bản chương trình dưới và lưu tập tin dưới tên hinhtron.f90 ( cần tạo trước một thư mục chứa tập tin văn bản Fortran để tiện việc thực hành ,ví dụ thư mục có tên D :\work ) Văn bản chương trình được xem một tập thị được sắp xếp theo một thứ tự từ xuống dưới và được viết theo quy tắc rất chặt chẽ của ngôn ngữ Fortran nhằm lệnh cho máy tính thực hiện một nhiệm vụ xác định nào đó Phần đánh sớ dịng cửa sở soạn thảo tự đợng nhằm giúp người lập trình dễ dàng tham chiếu đến dòng lệnh Khi chúng ta soạn thảo tập tin nguồn , các từ khóa văn bản , dịng ghi mợt sớ đơn vị cú pháp văn bản sẽ tự đợng có màu thích hợp giúp dễ phân biệt các đối tượng khác văn bản Trong văn bản ví dụ dưới , các từ khóa ( keyword ) của Fortran được in đậm program HinhTron implicit none ! phan khai bao real :: r,chuvi,dientich ! khai bao bien real,parameter :: pi = 3.14159 ! khai bao hang ! phan tinh toan print*,'Cho biet ban kinh r :' ; read*,r chuvi = 2.0*r*pi dientich = r*r*pi ! ket qua print*,'Chu vi : ',chuvi print*,'Dien tich : ',dientich read* ! tam dung man hinh de xem ket qua end program HinhTron Hình 1.2 : Soạn thảo tập tin nguồn cửa sổ Force 1.4.2 Biên dịch, liên kết chạy chương trình hinhtron.f90 Bước biên dịch,liên kết : chọn menu Run , chọn mục Compile (phím tắt Ctrl – F9) Khi biên dịch , liên kết xong , nếu không có lỗi cửa sổ Process hiển thị sau : Hình 1.3 : Cửa sổ Process thông báo việc biên dịch hoàn tất , không có lỗi Trường hợp xảy lỗi cú pháp ( syntax error ) sẽ có thơng báo thích hợp tại cửa sổ phía dưới vùng soạn thảo để hướng dẫn người lập trình chỉnh sửa lại tập tin ng̀n , sau đó chạy lại trình biên dịch Ví dụ dòng thứ bảy của văn bản , chúng ta viết read , r thay vì viết đúng là read*, r Cửa sổ Process sẽ báo lỗi và có thông báo vị trí ( dòng ) bị lỗi In file D:\work\hinhtron.f90:7 print*,'Cho biet ban kinh r :' ; read,r Error: Syntax error in READ statement at (1) Hình 1.4 : Cửa sổ Process thông báo lỗi và vị trí có lỗi cú pháp Bước chạy thử tập tin thi hành : chọn menu Run, mục Run ( phím tắt F9) Máy tính sẽ tạm thời thoát khỏi môi trường Force và cho chạy tập tin hinhtron.exe một cửa sổ màu đen riêng Tại , trỏ chương trình sẽ dừng lại sau câu Cho biet ban kinh r : và đợi chúng ta nhập một giá trị trực tiếp từ bàn phím ( ví dụ 3.0 ) và nhấn phím Enter để xác nhận Các kết quả tính toán được hiển thị màn hình Sau xem xong kết quả , chúng ta nhấn phím Enter để thoát khỏi cửa sổ chạy chương trình và trở về môi trường IDE của Force Hình 1.5 : Kết quả chạy tập tin hinhtron.exe Để chạy file *.exe trực tiếp thư mục có lưu file nguồn *.f90 ví dụ , menu chọn Options , chọn Environment Options , chọn tiếp thẻ Run , chọn Run with  EXE (direct ) Trường hợp chọn Console , chương trình sẽ được chạy cửa sổ cmd ( command prompt ) của Windows Hình 1.6 : Chọn cửa sổ chạy chương trình đã được biên dịch và liên kết Trường hợp có lỗi chạy chương trình ( run time error ) hoặc kết quả không đúng với kết quả mà chúng ta đã biết trước ( chạy test chương trình ) thì cần quay lại văn bản chương trình để rà soát lại thuật giải , các biểu thức tính toán , nội dung các câu lệnh để chỉnh sửa , sau đó thực hiện lại việc biên dịch, liên kết và chạy chương trình Để lưu kết của cửa sổ màu đen này vào file Word hoặc Notepad ,chúng ta để trỏ lên tiêu đề hinhtron.exe bấm phím phải cḥt , x́t hiện menu ,chọn Edit , chọn Select All , nội dung chọn được chiếu sáng , bấm Enter ( tương đương lệnh Copy) để đưa nội dung này vào clipboard sau đó dán vào file Word đã mở sẵn ( Word bấm phím phải cḥt , chọn Paste hoặc dùng tổ hợp phím Ctrl – V ) 1.5 Giải thích sơ lược văn chương trình hinhtron.f90 Chương trình Fortran ví dụ nêu có một đơn vị chương trình là chương trình chính ( main program ) Chương trình Fortran tổng quát thường gồm một chương trình chính và nhiều đơn vị chương trình khác có liên quan ( sẽ được trình bày ở phần sau ) 1.5.1 Cấu trúc tổng quát chương trình program tên_chương_trình implicit none ! < các câu lệnh không thực thi , khai báo các đối tượng [ biến ,hằng, mảng,…] sử dụng chương trình , luôn phải đặt trước các câu lệnh thực thi > ! end program tên_chương_trình ! có thể viết đơn giản end Các từ program , end program, implicit none thuộc bộ từ khóa ( keyword ) của Fortran Một số quy định về soạn thảo văn chương trình Fortran 90 :  Văn bản chương trình gồm các dòng text , dòng có không quá 132 kí tự  Nội dung văn bản bên phải sau dấu chấm than ! là phần chú thích , dùng để giải thích các câu lệnh hoặc các phần khác của chương trình nhằm giúp người đọc văn bản hiểu rõ các câu lệnh Trình biên dịch sẽ bỏ qua thích  Trình biên dịch bỏ qua dịng trớng ( dịng trắng ) văn bản chương trình  Thông thường một câu lệnh được đặt một dòng văn bản riêng biệt , nếu viết hai hoặc nhiều câu lệnh cùng một dòng thì phải dùng dấu chấm phẩy ; để phân cách các câu lệnh Ví dụ : print*,'Cho biet ban kinh r :' ; read*, r ! dòng có câu lệnh  Câu lệnh dài nếu cần phải viết nhiều dòng liên tiếp thì phải dùng dấu nối & đặt ở cuối dòng và có thể phải đặt ở đầu dòng tiếp theo ( trường hợp x́ng dịng ở giữa xâu kí tự thì bắt buộc phải đặt dấu nối & ở đầu dòng tiếp theo ) Ví dụ : integer :: dai , rong , & chuvi , dien tich print*, ‘ Tri so chu vi cua & & duong tron la : ‘ , chuvi ! bắt buộc phải có dấu & ở đầu dòng tiếp theo dientich = r*r & *pi ! không cần dấu & ở đầu dòng , nếu có cũng không có lỗi Số dòng tiếp theo cho phép : 39 dòng ( Thay đởi theo trình biên dịch )  Các khoảng trống có thể chèn vào giữa các đơn vị văn bản từ khóa, tên biến , tên hằng , các biểu tượng ( giúp cho chương trình dễ đọc ) …mà không ảnh hưởng đến kết quả ( trừ trường hợp xuất hiện xâu kí tự ) Tuy nhiên không được chèn khoảng trống vào giữa kí tự của mợt đơn vị văn bản ( từ khóa, tên ) hoặc biểu tượng Ví dụ : Viết real :: r,chuvi,dientich giống real :: r, chuvi, dientich ; nhiên lưu ý dấu :: không được viết tách rời thành : : Không được viết re al thay cho real Không được viết > = thay cho >= ( kí hiệu so sánh lớn hay bằng )  Nội dung của mợt xâu kí tự được đặt giữa hai dấu nháy đơn ‘ string ‘ , hoặc hai dấu nháy kép “ string “ có giá trị Phải dùng thống nhất một kiểu dấu nháy giữa một xâu kí tự Để thể hiện It’s a book , chúng ta viết ‘It’’s a book.’ (đặt hai dấu nháy đơn ‘string’) , để thể hiện Say “Hello !” , viết ‘Say “Hello !” ‘ hoặc “ Say “”Hello !”” “ 1.5.2 Câu lệnh implicit none Câu lệnh implicit none câu lệnh tùy chọn ( optional ) , được đặt sau từ khóa program , ḅc người lập trình phải khai báo rõ ràng ( explicitly ) tất cả biến , hằng ,mảng … tham gia vào chương trình cùng kiểu dữ liệu tương ứng ( số nguyên, số thực , số phức , kí tự , logic …) Fortran 90 vẫn chấp nhận quy tắc ngầm định về kiểu biến số học các phiên bản trước , nghĩa là có thể không cần phải khai báo biến văn bản chương trình , mà vào kí tự đầu của tên biến để biết biến thuộc loại dữ liệu : cụ thể những biến có tên bắt đầu bằng các chữ I,J,K,L,M,N thuộc loại số nguyên mặc định ( integer ) có tên bắt đầu bằng các chữ khác thuộc loại số thực mặc định ( real ) Tuy nhiên , việc khai báo đầy đủ các đối tượng kiểu dữ liệu từ đầu chương trình mợt thói quen lập trình tớt , tránh được nhiều sai sót khó phát hiện biên dịch chương trình Trong tài liệu , sử dụng câu lệnh implicit none văn bản chương trình 1.5.3 Khai báo biến ( variable) Biến dùng để lưu trữ dữ liệu , kết quả tính toán bộ nhớ máy tính Khai báo biến gồm khai báo tên biến ( variable name ) kiểu liệu ( data type ) của biến Fortran quy định tên biến xâu kí tự từ đến 31 kí tự , gờm chữ viết, chữ sớ kí tự nới chân , tên biến phải bắt đầu bằng chữ viết ( letter ) Tên biến khơng được có khoảng trớng chen giữa hoặc kí tự đặc biệt Ví dụ về tên biến đúng : ChuVi, chu_vi, dientich, NhanVien_01, x, y, z Ví dụ về tên biến đặt sai : 1x , dien tich , chu-vi Fortran không phân biệt chữ hoa với chữ thường tên biến Các tên biến : DienTich , dientich , Dientich là Quy tắc đặt tên biến được áp dụng cho việc đặt tên ( định danh , identifier ) cho đối tượng khác hằng , mảng, tên chương trình Fortran không cấm việc dùng tên các từ khóa ( keyword) để đặt tên ( identifier ) cho các đối tượng biến, hằng , mảng …như một số ngôn ngữ lập trình khác , chúng ta nên tránh việc làm dễ gây nhầm lẫn Câu lệnh real :: r ,chuvi ,dientich , khai báo biến kiểu số thực ( từ khóa real ) có tên r, chuvi, dientich ; giữa real dãy tên biến dấu :: viết liền Trong trường hợp đơn giản dấu :: có thể bỏ mà khơng ảnh hưởng đến kết quả ( real r,chuvi,dientich ) Lưu ý các tên biến phải được phân cách bằng dấu phẩy 1.5.4 Khai báo (named constant ) Câu lệnh real , parameter :: pi = 3.14159 , khai báo pi mợt hằng kiểu sớ thực có giá trị được gán 3,14159 Ở tḥc tính parameter mợt từ khóa báo cho biết biến pi được khai báo mợt hằng Hằng có giá trị khơng đổi suốt chương trình Lưu ý dấu :: trường hợp bắt buộc phải có Việc khai báo hằng giúp cho chương trình dễ đọc , dễ hiểu câu lệnh và dễ chỉnh sửa giá trị của hằng theo yêu cầu của bài toán 1.5.5 Viết liệu hình ( thiết bị xuất chuẩn ) Câu lệnh print *, dùng để xuất ( viết ) màn hình nợi dung xâu kí tự , giá trị biến , giá trị biểu thức Dấu * cho biết các đối tượng được viết theo định dạng ( format ) tự động ( mặc định ) , phụ thuộc vào cấu trúc máy tính Các đối tượng xuất khác được phân cách bởi dấu phẩy và được viết một dòng màn hình Câu lệnh print* không kèm đối tượng xuất dùng để tạo một dòng trống (blank line) hình Câu lệnh print tởng qt : print format , < list > , đó format phần định dạng cho các đối tượng xuất , list là danh sách các đới tượng x́t hình Câu lệnh write (*,*) < đối tượng xuất màn hình > có ý nghĩa tương đương lệnh print*, Dấu * đầu tiên cho biết kênh xuất là màn hình ,dấu * thứ hai quy định kiểu định dạng là tự đợng Ví dụ : write (*,*) ‘Cho biet ban kinh r : ‘  print*, ’Cho biet ban kinh r : ‘ Ghi : lệnh print dùng để xuất hình , lệnh write có nhiều lựa chọn dùng để xuất hình , tập tin 1.5.6 Nhập liệu từ bàn phím ( thiết bị nhập chuẩn ) Câu lệnh read *, < danh sách tên biến > dùng để nhập giá trị trực tiếp từ bàn phím và gán cho các biến theo thứ tự danh sách Khi chương trình thực hiện đến câu lệnh read*, r máy tính sẽ dừng lại chờ nhập mợt giá trị là bán kính r từ bàn phím , ví dụ nhập sớ 3.0 , xong nhấn Enter để xác nhận Biến r sẽ lấy giá trị 3.0 biểu thức tính tốn tiếp theo Câu lệnh read (*,*) < tên các biến > có ý nghĩa tương tự read*,< tên các biến> Dấu * đầu tiên read (*,*) cho biết kênh nhập dữ liệu bàn phím , dấu * thứ hai cho biết kiểu định dạng dữ liệu kiểu tự động Ví dụ : read (*,*) r  read*, r Nếu x,y,z ba biến kiểu sớ thực gặp câu lệnh read*, x,y,z , có thể nhập giá trị cho biến , sau giá trị nhập phải nhấn Enter ; hoặc có thể nhập lúc ba giá trị vào một hàng lúc này số phải được viết cách bằng dấu phẩy hoặc cách một hay vài khoảng trống , xong nhấn Enter để kết thúc việc nhập liệu cho cả ba số Lệnh read* không có đới sớ làm tạm dừng hình chờ chúng ta xem kết quả , xong nhấn phím Enter để chương trình tiếp tục hoặc kết thúc Nếu không có câu lệnh này thì chương trình được thực thi xong , máy tính lập tức quay trở lại môi trường IDE Force làm chúng ta không kịp xem kết quả Tuy nhiên một số trình biên dịch Plato lại không cần câu lệnh này ; chương trình chạy xong , xuất hiện câu “ Press return to close window … “ hoặc “ Press any key to continue “ , lúc này sau xem kết quả xong , chúng ta nhấn phím Enter hoặc phím bất kỳ để đóng cửa sổ thực thi chương trình , trở về môi trường soạn thảo Hai câu lệnh print*, “ Cho biet gia tri cua x va y : “ ; read *, x,y được dùng kết hợp với để hướng dẫn việc nhập số liệu cho biến x và y Lưu ý : sử dụng các lệnh print* hoặc read* , phải có dấu phẩy giữa lệnh và các đối tượng xuất , dùng lệnh write (*,*) và read (*,*) thì không có 1.5.7 Câu lệnh gán Các câu lệnh gán chương trình hinhtron.f90 : chuvi = 2.0*r*pi ! tính chu vi dientich = r*r*pi ! tính diện tích Biểu thức số học bên phải dấu = ( dấu dành cho phép gán ) được tính toán với giá trị biến, hằng đã biết , sau đó đem gán giá trị này cho biến bên trái Trong phép gán , cần có sự kiểm soát tính tương thích về kiểu dữ liệu giữa hai vế và cần nắm vững quy tắc chuyển đổi mặc định của Fortran về kiểu dữ liệu ( sẽ được trình bày các chương sau ) Dấu phép gán = không phải dấu bằng theo nghĩa toán học mà phải hiểu phép thay thế giá trị được tính từ vế phải cho nợi dung của biến bên vế trái Lưu ý cách viết số thực 2.0 hoặc thay viết sớ sớ nguyên Vẽ đồ thị từ kết xếp theo dạng cột tập tin Chúng ta có file ‘d:\dataplot.dat’ từ chương trình Fortran sau : program main implicit none real,dimension(10) :: x,y1,y2,y3 integer :: i i = 1,10 x(i) = real(i) end y1 = x*x ! y1 = x2 y2 = x*x +3.*x ! y2 = x2 + 3x y3 = sqrt(x*x +x ) ! y3 = x  x open (10,file = 'd:\dataplot.dat') i = 1,10 write (10,'(4f10.2)') x(i),y1(i),y2(i),y3(i) ! ghi vào file d:\dataplot.dat write (*,'(4f10.2)') x(i),y1(i),y2(i),y3(i) ! xuất màn hình để kiểm tra end close(10) read* end Ghi chú : các cột 1,2,3,4 file kết quả tương ứng với dãy số x,y1,y2,y3 + Để vẽ đồ thị x  y1(x) bằng cách nối các điểm (x,y1(x)) , dùng lệnh sau : set grid set title ‘ Quan he y1=x**2 ‘ plot ‘d:\dataplot.dat ‘ using 1:2 with lines Nhận xét : sau lệnh plot là tên file dấu ngoặc đơn ( kể cả đường dẫn ) ; cụm từ using 1:2 cho biết đồ thị dùng cột (dãy x) và cột ( dãy y1) ; cụm từ with lines cho biết đồ thị dùng các đoạn thẳng để nối các điểm (x,y) lại với 138 Tương tự chúng ta có đồ thị thể hiện mối quan hệ giữa cột và cột : set grid set title ‘ Quan he y2=x**2 + 3*x ‘ set ylabel ‘y2’ plot ‘d:\dataplot.dat ‘ using 1:3 with linespoints Ở đồ thị này , cụm từ with linespoints vừa dùng đoạn thẳng để nối , vửa có ghi dấu điểm tại các tọa độ tập tin Đồ thị dưới vẽ cả hàm cùng một cửa sổ , dùng mẫu lệnh : plot ‘tên_file’ using 1:3 with linespoints , ‘tên_file’ using 1:2 with lines , \ ‘tên_file’ using 1:4 with linespoints < Enter > 139 Lưu ý : Trong trường hợp câu lệnh dài cần phải viết ở dòng tiếp theo , chúng ta đặt dấu \ ở cuối câu xong và viết tiếp câu lệnh Soạn chạy tập tin script Trong Notepad chúng ta soạn tập tin sau và lưu lại với tên d:\dothi001.txt # Tap tin d:\dothi001.txt # Du lieu lay tu file d:\dataplot.dat # Ket qua xuat man hinh va file anh d:\y2y4.jpeg # set title 'Quan he y2(x), y4(x)' set ylabel 'y2 & y4' set xlabel 'Thoi gian' set grid plot 'd:\dataplot.dat' using 1:2 with linespoints ,\ 'd:\dataplot.dat' using 1:4 with linespoints set terminal png set output 'd:\y2y4.jpeg' replot set terminal windows Ghi chú : dòng có dấu # ở đầu là dòng ghi chú , gnuplot sẽ bỏ qua các dòng này Các lệnh đã trình bày ở các phần trước được nhóm lại thành một tập lệnh ( file dạng text ) và đặt vào một tập tin có tên d:\dothi001.txt Để thi hành tập lệnh này , tại dấu nhắc của gnuplot , đánh lệnh sau : gnuplot> load ‘d:\dothi001.txt’ Lúc này toàn bộ các lệnh của tập tin được thực thi lần lượt giống chúng ta vào lệnh ở dòng command line chế độ tương tác Nếu câu lệnh có lỗi, gnuplot sẽ đưa câu thông báo Kết quả sẽ có một đồ thị màn hình và một file ảnh y2y4.jpeg ổ đĩa D Cú pháp nạp một tập tin vào gnuplot : > load ‘’ [Enter] 140 Trong chương trình Fortran ở mục , chúng ta có thể gọi gnuplot và nạp tập tin dothi001.txt , dồ thị sẽ hiển thi chạy chương trình : … open (10,file = 'd:\dataplot.dat') i = 1,10 write (10,'(4f10.2)') x(i),y1(i),y2(i),y3(i) ! ghi dữ liệu vào tập tin ở dạng cột write (*,'(4f10.2)') x(i),y1(i),y2(i),y3(i) ! ghi hình end close(10) call system ('d:\gnuplot\bin\wgnuplot d:\dothi001.txt') read* end Dùng thủ tục call system với đối số là tên tập tin chương trình wgnuplot cùng đường dẫn và tập tin script d:\dothi001.txt chứa tập lệnh dùng để vẽ đồ thị Lưu ý chúng ta cần phải đặt lệnh pause 10 ( dừng lại 10 giây ) sau lệnh plot file script này để có đủ thời gian quan sát đồ thị hoặc lệnh pause -1 , lúc sau quan sát xong , nhấn để chương trình tiếp tục # Tap tin d:\dothi001.txt # Du lieu laytu file d:\dataplot.dat # Ket qua xuat file anh d:\func_y2y4.jpeg set title 'Quan he y2(x), y4(x)' set ylabel 'y2 & y4' set xlabel 'Thoi gian' set grid plot 'd:\dataplot.dat' using 1:2 with linespoints ,\ 'd:\dataplot.dat' using 1:4 with linespoints # lenh pause 10 : dung 10 giay de xem hinh hoac dung lenh pause -1 pause 10 # Tao file anh jpeg de luu thi set terminal png set output 'd:\func_y2y4.jpeg' replot # Tro ve terminal windows set terminal windows Vẽ đồ thị 3D z = f(x,y) lệnh splot +Để vẽ đồ thị 3D thể hiện quan hệ z = f(x,y) , dùng lệnh : splot Ví dụ : z = -x3 –y  Lệnh vẽ : splot (-x**3 – y) + Dùng lệnh set xrange [x1:x2] , set yrange [y1:y2] , set zrange [z1:z2] để thay đổi phạm vi của x,y,z theo yêu cầu Ví dụ : set grid set hidden3d ( dấu các đường khuất để dễ quan sát ) splot [-2: 2] [ -2:2 ] 2*(x**2 + y**2)*exp(-x**2 – y**2) Để tăng độ phân giải của đồ thì 3D nói , vào lệnh : set isosamples 40,40 replot 141 z = -x3-y z = 2*(x**2 + y**2)*exp(-x**2 – y**2) Đồ thị với độ phân giải 40,40 142 Vẽ mặt thể hiện mảng hai chiều + Để vẽ mặt thể hiện mảng chiều f(i,j) , với i,j : n , ví dụ hàm z = x2 + y2 với x,y lấy giá trị 1,2,3,4 , sắp xếp file dữ liệu sau , lưu ý sau ghi các giá trị của cột thứ của ma trận f (i,j) , phải để mợt dịng trớng # z = x**2 + y **2 # d:examsp.dat 1 2 10 17 ! Dịng phải để trớng 2 2 13 20 ! Dịng phải để trớng 3 3 10 13 18 25 ! Dòng phải để trống 4 4 17 20 25 32 Các câu lệnh gnuplot : gnuplot > set surface gnuplot > set hidden3d gnuplot > set grid gnuplot > splot ‘d:examsp.dat’ u 1:2:3 w lines Ghi : gnuplot cho phép viết tắt câu lệnh , ví dụ u thay cho using , w thay cho with 143 Vẽ véc tơ mặt phẳng 2D Để vẽ một trường véc tơ , tập tin dữ liệu phải bố trí số liệu thành 04 cột : cột cho biết tọa độ điểm gốc của véc tơ , cột cho biết thành phần số ( tọa độ ) của véc tơ theo phương X và phương Y theo định dạng sau : Tọa độ x Tọa độ y Thành phần số X Thành phần số Y Lệnh vẽ các véc tơ tập tin ‘d:\vevecto.dat’ sau : plot ‘d:\vevecto.dat’ using 1:2:3:4 with vectors head filled lt lw Vẽ vectơ Ngoài các đồ thị vẽ theo hệ tọa độ Descartes thông thường , gnuplot còn cho phép vẽ các đường cong tham số , đường cong hệ tọa độ cực , biểu diễn số liệu có kèm theo sai số , biểu diễn số liệu theo dạng thống kê, tạo ảnh động ( animation ) Bạn đọc quan tâm chi tiết , có thể download các tài liệu mới nhất về gnuplot internet để nghiên cứu , tham khảo thêm ***** 144 PHỤ LỤC B : CHƯƠNG TRÌNH LINPACK GIẢI HỆ n PHƯƠNG TRÌNH TUYẾN TÍNH Ax = b BẰNG PP KHỬ GAUSS Văn chương trình : Chương trình có hai module : module kinds định nghĩa hằng r dùng để khai báo số thực có độ chính xác kép và module ppgauss có chứa subroutine gauss dùng để giải hệ phương trình Trong chương trình chính , các ma trận A , vectơ b , vectơ nghiệm số x được khai báo là các mảng được cấp phát động Các dữ liệu đầu vào : _ Khai báo số phương trình n _ Khai báo các hệ số của ma trận A , dữ liệu được vào theo dòng _ Khai báo các phần tử của vectơ b , vế bên phải _ Trường hợp ma trận A suy biến ( singular) , chương trình sẽ có thông báo Văn bản chương trình : module kinds implicit none integer,parameter :: r = selected_real_kind (15,307) end module kinds module ppgauss implicit none contains subroutine gauss(a,n,b,x,suybien) use kinds implicit none !Khai bao cac doi so (arguments ) integer,intent(in) :: n real(r),intent(inout) :: a(:,:),b(:) real(r),intent(out) :: x(:) logical,intent(out) :: suybien !Khai bao bien cuc bo integer :: i,j,k,pivot_row real(r):: pivot,sum,trunggian real(r),parameter :: eps = 1.e-13_r ! Xu ly theo cot k = 1,n-1 ! Tim dong co phan tu lon nhat cua cot k de pivot pivot_row = maxval(maxloc(abs(a(k:n,k)))) + k - ! Test xem ma tran a co suy bien ! Neu co thi tro lai main program if (abs(a(pivot_row,k))

Ngày đăng: 16/12/2021, 12:22

Tài liệu cùng người dùng

Tài liệu liên quan