Tải bản đầy đủ (.pdf) (214 trang)

Ngôn ngữ lập trình fortran và ứng dụng trong khí tượng thuỷ văn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.97 MB, 214 trang )


ĐẠI HỌC QUÓC GIA HÀ NỘI

PH ẠM VĂN H U M

NGÔN NGỮ L Ậ P T R ÌN H FO R T R A N
VÀ ỨNG DỤNG
TRONG K H Í TƯỢNG
THỦY VẪN



NHÀ XUẤT BẢN NÔNG NGHIỆP
HÀ NỘI - 2005


Giới thiêu
Giáo trình “Ngôn ngữ lập trình Fortran và ứng dựng trong khí
tượng thủy văn” là tập hợp những bài học cơ sô về lập trình mà tác giả
đã dạy trong một số’ năm gần đây cho sinh viên các ngành khí tượng
học, thủy văn và hải dương học ở Trường đại học Khoa học Tự nhiên,
Đại học Quốc gia Hà Nội.
Sách này nhằm giới thiệu cho sinh viên lẫn đầu tiên học lặp trình
những khái niệm cơ bản vẽ lặp trình máy tính, tóm tắt những yếu tô"
cơ bản và các lệnh thông dụng, đặc điểm sử dụng chúng trong ngôn
ngữ lập trình Fortran. Mục tiêu cuôì cùng là giúp sinh viên làm quen
với cáo phương pháp xây dựng th u ật giải các bài toán thông dụng của
toán học tính toán, thông kẽ toán học và xử lý scí liệu, rèn luyện kỹ
năng lập trình để giải những bài toán xử lý và phân tích số liệu, tính
toán ứng dụng ở mức độ ban đầu trong thòi gian học tập và nghiên
cứu ở trường đại học.


Những thí dụ và hệ thông bài tập tự luyện trong sách này có ý
nghĩa minh họa, hướng sinh viên tới vận dụng các lệnh của Fortran để
viết ra những chương trình ứng dụng nho nhỏ có tính cụ thể, bước đầu
làm quen với những đặc thù xử lý dữ liệu quan trắc trong chuyên môn
khí tượng thủy văn. Những đặc điềm khác của nội dung ứng dụng lập
trình trong các chuyên ngành này như quản lý cơ sở dữ liệu, các
phương pháp thông kê hiện đại, các phương pháp giải sô' trị những bài
toán động lực khí quyển, đại dương... chưa được đề cập ở đây do khuôn
khổ kiến thức chuyên môn của người học, đó là đổì tượng của các môn
học chuyên đề khác của chương trình học tập, nhưng từ đây đến đó
thực ra cũng không xa.
Vì là tài liệu học tập về lập trình cơ sô, nội dung ngôn ngữ trong
sách này cũng không bao quát hết những yếu tô' trong th ế giới to lớn
của Fortran. Nên bắt đầu bằng những gì đơn giản nhưng được việc.


Một khi người học bắt đầu biết lập trinh, thấy được ứng dụng máy
tính có ích trong học tập và nghiên cứu của m ình sẽ nảy sinh nhu cầu
tìm hiểu và khai thác Fortran trong rấ t nhiều tài liệu tra cửu và sách
chuyên khảo khác hoặc hệ thông trợ giúp sẵn có của Fortran.
Như vậy, sách này không chỉ là tài liệu học tập cho những sinh
viên các chuyên môn khí tượng thủy văn, m à có thê có ích cho sinh
viên, học viên cao học nhiều chuyên ngành khác hoặc b ất kì ai muôn
tự học lập trìn h máy tính một cách nhẹ nhàng.
Trong sách này, mỗi chương được cấu tạo như một bài học. Mỗi
chuyên từ, khái niệm xuất hiện lần đầu đểu được in nghiêng, các câu
lệnh được in chữ hoa đậm và bao trong hộp để giúp người đọc thuận
tiện tra cứu khi chưa thuộc chính tả cấu lệnh.







Những th í dụ minh họa được chọn lọc sao cho đơn giản, nhưng có
tính điển hình, giúp người đọc liên tưởng đến lớp bài toán khác có thể
cùng sử dụng cách giải này. Chương trình th í dụ luồn nhất quán áp
dụng ý tưởng chia đ ể trị, tức phân nhiệm vụ lớn thành các việc nhỏ
hơn để thực hiện từng việc một dẫn tới kết quả cuôì cùng. Với cách
trình bày này, bạn đọc sẽ thấy lập trìn h khồng còn là cái gì rác rối,
khó hiểu, mà nó tự nhiên n h ư ta vẫn giải quyết bài toán không bằng
máy tính.
Những tóm tắ t kinh nghiệm gỡ rối và lời khuyên về rèn luyện
phong cách lập trình ở mỗi bài học có thể r ấ t có ích cho người học. Và
đây là lòi khuyên đầu tiên cho ngưòi mới học lập trình: Hãy luôn
tưởng tượng xem mình sẽ phải giải bài toán “bằng tay” như th ế nào
trước khi b ắt đầu nghĩ cách viết chương trinh máy tính. Hãy nhớ lấy
chính tả, cú pháp của câu lệnh và việc này không khó, vì lệnh Fortran
giông như một câu tiếng Anh dơn giản. Nhưng hãy rấ t chú ý tới chính
những điều đơn giản, thí dụ khi nhìn dòng lệnh sau
PRINT * ,

danh sách các m ục cấn in

thì hãy cô gắng đọc kĩ hay hồi lại xem th ế nào là danh sách, thê nào là
một mục in, một mục in có thể là những gì.
Tác g iá


Mục lục





Chương 1: Khái n iệm về lập trìn h m áy tín h đ ể g iả i c á c
bài toán ứng d ụ n g
1.1.
1.2.
1.3.
1.4.
1.5.

9

Phần cứng và phần mềm máy tín h
Thực hiện một chương trìn h máy tính
Quy trình giải bài toán trên máy tính
Những chương trình F ortran hoàn chỉnh
Quy cách soạn thảo một chương trình Fortran

9
11
12
18
19

Chương 2: Những y ế u tô* cơ b ản củ a F ortran
2.1. Dữ liệu và cách biểu diễn dữ liệu trong F ortran
2.2. Hằng và biến
2.2.1. Tên biến và tên hằng

2.2.2. Mô tả (khai báo) kiểu biến và kiểu hằng
2.3. Biến có chỉ sô" (mảng)
2.3.1. Khái niệm mảng
2.3.2. Mô tả mảng
2.4. Các hàm chuẩn

21
21
23
24
25
29
29
31
32

2.5. Lệnh gán và các toán tử số' học
2.5.1. Lệnh gán
2.5.2. Các phép tính sổ*học đờn giản

34
34
35

2.5.3. Ước lượng biểu thức số’ học

36


2.5.4. Khái niệm về cắt và các phép tín h hỗn hợp

2.5.5. Khái niệm vể sô' quá bé và sô' quá lớn (underflow
và overflow)
C hương 3: Nhặp và xuất dừ liệu đơn giản
3.1. Các lệnh xuất và nhập dữ liệu
3.2. Các đặc tả trong lệnh FORMAT

38
38
41
41
44

C hương 4: Các cấu trúc đ iều k h iển
4.1. Khái niệm về cấu trúc th u ậ t toán
4.1.1. Các thao tác cơ bản. Giả trình và lưu đồ
4.1.2. Các cấu trúc tổng quát trong th u ật giải
4.1.3. Thí dụ ứng dụng th u ật toán cấu trúc
4.2. Cấu trúc IF và các lệnh tương ứng
4.2.1. Biểu thức lôgic
4.2.2. Lệnh IF logic
4.2.3. Lệnh IF số học
4.2.4. Lệnh chuyển điều khiển vôđiều kiện GO TO
4.2.5. Lệnh GO TO tính toán

51
51
51
53
53
56

56
58
62
64
65

C hương 5: Cấu trúc lặp với lện h DO

83

5.1. Vòng lặp DO
5.1.1. Cú pháp của lệnh DO và vòng lặp DO
5.1.2. Những quy tắc cấu trúc và thực hiện vòng lặp DO
5.1.3. Thí dụ ứng dụng vòng lặp DO
5.2. Vòng DO lổng nhau
C hương 6: File dử liệu v à tổ chức dừ liệu trong Fortran
6.1. Khái niệm về file dữ
liệu và tổ chức lưu trữ dữ liệu
6.2. Các lệnh nhập, xuất
dữ liệu vối file
6.3. Kỹ thuật đọc các file
dữ liệu
6.3.1. Số dòng ghi được chỉ định
6.3.2. Dòng ký hiệu kết thúc dữ liệu

84
84
86
88
89

97
97
99
103
104
105


6.3.3. Sử dụng tùy chọn END
6.4. Tạo lập các file dữ liệu
6.5. Kỷ thuật trợ giúp tìm lỗi chương trình
Chương 7: s ử dụng b iến có chỉ sô trong Fortran
7.1.
7.2.
7.3.
7.4.
7.5.

M ảng một chiều
Lệnh DATA
Mảng hai chiểu
Mảng nhiều chiều
Những điểu cần chú ý khi sử dụng các mảng

108
110
110
115
116
118

119
123
129

Chương 8: Chương trìn h con loại hàm
8.1. Các hàm chuẩn
8.2. Các hàm chương trình con
8.2.1. Hàm lệnh
8.2.2. Hàm chương trình con
8.3. Chỉ dẫn gờ rối và phong cách viết chương trình có hàm con

133
134
135
135
137
146

Chương 9: Chương trình con loại thủ tục

149

9.1. Khai báo và gọi chương trình con thủ tục
9.2. N hững th í dụ ứng dụng chương trình con thủ tục
9.3. Những chỉ dẫn gỡ rối khi sử dụng các thủ tục
Chương 10: K iểu dừ liệu văn bản

149
151
158

161

10.1. Tập các ký tự của Fortran
10.2. Các dạng khai báo biến ký tự
10.3. Nhập, xuất dữ liệu ký tự
10.4. Những thao tác với dữ liệu ký tự
10.4.1. Gán các giá trị ký tự

161
162
163
164
164

10.4.2. So sánh các giá trị ký tự
10.4.3. Trích ra xâu con
10.4.4. Kết hợp các xâu ký tự

165
167
168


10.4.5. Những hàm chuẩn xử lý xâu ký tự

169

Chương 11: Những đặc điểm b ổ su n g vể file
11.1. Các file nội tại (Internal Files)
11.2. Các file truy nhập tuần tự (Sequential Files)

11.3. Các file truy cập trực tiếp (Direct-Access Files)

179
179
181
185

11.4. Lệnh truy vấn INQUIRE

186

T ài liệu tham khảo

193

P h ụ lụ c 1:

195

Bảng các hàm chuẩn của F ortran

P h ụ lụ c 2: Phương pháp Gauss giải hệ phương trình đại số
tuyến tính

199

P h ụ lụ c 3: Phương pháp bình phương nhỏ n h ất trong phân
tích hồi quy

205


P h ụ lục 4: Sơ đổ ứng dụng phương pháp hồi quy nhiều biến

209


Chương 1
Khái niệm về lập trình máy tính để giải
các bài toán ứng dụng
1.1. Phần cứng và phần mềm máy tính
M áy tín h được th iế t k ế để thực hiện n h ữ n g th ao tác tu â n theo
một tậ p những câu lệ n h do người d ù n g viết ra, gọi là chương trình.
Các máy tín h có cấu tạo chung bên trong n h ư trê n h ìn h 1.1.
Người d ù n g sử d ụ n g b à n phím , chuột hoặc những th iế t bị n h ậ p dữ
liệu k hác để đưa th ô n g tin vào máy tính. Bộ xử lý (processor) là
một p h ầ n của m áy t ín h kiểm soát tấ t cả các p h ầ n khác. Bộ x ử lý
n h ậ n dữ liệu vào và lư u chúng ở bộ nhớ (memory). Nó n h ậ n biết
các lện h của chương trìn h . Nếu ta muôn cộng h a i giá trị, bộ xử lý
sẽ lây h a i giá trị đó t ừ bộ nhổ và gửi đến khối xử lý số học logic
(ALU). Khối n ày th ự c h iện phép cộng và bộ xử lý lưu k ết quả vào
bộ nhớ. Trong k h i xử lý, bộ xử lý và khối sô” học lôgic sử dụng một
lượng bộ nhó nhỏ gọi là bộ nhố trong (internal níemory). P h ầ n lốn
dữ liệu được lưu ở bộ nhớ ngoài (external memory) n h ư đĩa cứng,
đĩa mềm, chúng củng nôi vói bộ xử lý. Bộ xử lý, bộ nhớ trong và
ALU gọi chung là khối xử lý tru n g tâm hay CPU.
Trong chương trìn h , ta thường lệnh cho máy tín h in k ế t quả
tín h to án lên m à n h ì n h hay m áy in nối với m áy tín h và là những
th iế t bị x u ấ t dữ liêu.
9



P h ẩ n m ềm chứa nhừng chỉ dần hoặc lệnh mà ta muôn máy
tín h thực hiện. P h ần mềm có th ể được viết bằng nhiều ngôn ngữ và
cho nhiểu mục đích. N hững chương trìn h thực hiện n h ữ n g thao tác
chung, thường được nhiều người sử d ụ n g gọi là những p h ấ n m ềm
công cụ. Hệ điều hành là tập hợp các chương trìn h giúp người dùng
giao tiếp với m áy tính. Hệ điểu h à n h tạo m ột môi trường th u ậ n
tiện cho người dùng “giao tiếp” được với m áy tín h , thực hiện những
chương trìn h ứng d ụ n g n h ư các bộ biên dịch ngôn ngừ lập trình,
các p h ầ n mềm công cụ... Hệ điểu h à n h gồm m ột số chương trìn h
cho phép thao tác với file như in, sao chép, hiển thị d an h sách file...
N hững hệ điểu h àn h hiện đại n h ư W indows còn giúp máy tính
n h ậ n biết và q u ản lý công việc của r ấ t nhiều th iế t bị ngoại vi nôi
kèm với máy tín h n h ư các th iế t bị n hập, xu ất dữ liệu, m àn hình,
máy in, m áy quét ảnh, loa, các máy q u a n trắc chuyên dụng...

Hình 1.1. Sơ đổ khối của một máy tính

10


T hông thường hiện nay các chuyên gia lập chương trìn h viết
ra r ấ t n h iề u chương trìn h để máy tín h thực hiện, từ những chương
trìn h dơn giản dế giải các bài toán nhỏ, tín h to án một vài giá trị,
đến n h ữ n g chương trìn h dồ sộ xử lý thông tin phức tạp, thông
m inh, giải n h ữ n g bài toán khoa học kĩ th u ậ t lớn, ch ế bản văn bản,
th iế t k ế đồ họa, các chương trìn h nghe nhạc, xem phim, trò chơi,
truy cập In te rn et. N hững chương trìn h tương đối lớn và phức tạp
thường được gọi là nhữ ng p h ầ n m ềm . Người d ù n g máy tính có thể
sử d ụ n g n h ữ n g chương trìn h đó. Ngày nay chúng ta có cảm giác

rằn g m áy tín h làm được t ấ t cả mọi việc. Tuy nhiên, phải nhớ rằng
t ấ t cả n h ữ n g gì m áy tín h làm được là do nó làm theo một chương
trìn h do con ngưòi tạo ra.

1.2. Thực hiện m ột chương trình máy tính
Thực h iện m ột chương trìn h máy tín h thưòng còn được gọi tắt
là chạy chương trìn h . Khi người dùng máy tín h m uôn nó làm một
việc gì đó, th í dụ giải một bài toán, thì người d ù n g phải viết ra một
chương trìn h để cho máy thực hiện. Người lập trìn h thường viết các
chương trìn h m áy tín h bằng ngôn ngữ bậc cao với những câu lệnh
giống n h ư n h ữ n g câu tiếng Anh, dễ học và sử dụng. Ngôn ngữ
F o rtran cũng thuộc loại đó. Mỗi một bưỏc ta m uôn máy tín h thực
h iện ph ải được mỏ tả ra theo một cú p h áp ngôn ngủ đặc th ù
(language syntax). Tuy nhiên, chương trìn h ta viết n h ư vậy vẫn
p h ả i dược một chương trìn h chuyên (bộ biên dịch - compiler) dịch
th à n h ngôn ngừ m áy thì máy tín h mối hiểu và thực hiện được. Khi
compiler dịch các dòng lệnh ta viết, nó tự động tìm các lỗi dịch, hay
lôi cú p h á p (syntax error), tức các lỗi về chính tả, các dấu phân
cách... N ếu chương trìn h viết ra có lỗi dịch, bộ biên dịch sè thông
báo đế người v iết chương trìn h sửa. Sau khi đã sửa hết lỗi, ta chạy
lại chương trìn h b ắ t đầu từ bước dịch. Một khi dịch xong, một
11


chương tr ìn h soạn thảo liên k ết (linkage editor program ) sẽ thực
h iệ n việc h o à n t ấ t sẵn sàn g cho bưóc thực hiện. C hính là ở bước
n à y các lện h ta viết được thực hiện trong máy tín h . Lỗi chương
tr ìn h cũng có th ể x u ấ t hiện trong bước này, gọi là lỗi trong kh i
ch ạ y chương trìn h (run-time error) hay lỗi lôgic. Những lỗi này
k h ô n g liên q u an tới cú pháp của lệnh, mà liên quan tới lôgic của

các lệnh, chỉ lộ r a khi máy tính thực th i câu lệnh. T h í dụ, lệnh
X = A /B
là m ột câu lệnh đúng, bảo máy tín h lấy A chia cho B và gọi kết
q u ả là X . T uy nhiên, giả sử nếu B b ằ n g không, phép tín h chia cho
sô' k h ô n g là phép tín h sai, không có n gh ĩa và ta được thông báo lỗi
ch ạy chương trìn h . Các lỗi lôgic không ph ải bao giò c ũ n g được
th ô n g báo. T hí dụ, nếu trong chương trìn h th a y vì chia m ột scí cho
0.10 ta v iết th à n h n h â n với 0.10, khi chạy chương trìn h sẽ ch ẳn g có
lỗi nào được th ô n g báo, nhưng đáp sô' bài toán, tức kết q u á mà ta
m ong đợi, sẽ là sai.

1.3. Q uy trìn h giải bài toán trẽn m áy tính
N h ìn chung công việc giải một bài to án b ằn g máy tín h gồm
n ă m bước sau:
1) P h á t biểu bài toán một cách rõ ràng.
2) Mô t ả thông tin nhập vào và x u ấ t ra.
3) G iải b à i to án bằng tay đối với tậ p dữ liệu đơn giản.
4) P h á t triể n cách giải bài toán th à n h dạng tổng quát.
5) Kiểm tr a đáp sô' với nhiều tập dữ liệu khác nhau.
B ây giờ ta m inh họa năm bước trẽ n q u a th í dụ bài to á n tín h
giá trị tru n g b ìn h của một tậ p sô' liệu thực nghiệm.
Bước 1: T a p h á t biểu bài to án một cách rõ rà n g n h ư sau:
12


“Tính trị

SC)

tru n g bình củ a tậ p các giá'trị


s ố

liệu thực nghiệm".

Bước 2: Chỉ ra cụ th ể sô" liệu vào và ra là gi, h ìn h th ứ c ra sao.
Nêu có tờ ghi m ột sô' giá trị cùa sô' liệu, đòi hỏi n h ập vào m áy qua
bàn phím , khi nào h ế t số’ liệu thì gõ giá trị 0.0 để báo hết, sau đó
mới tín h trị số tru n g bình và in ra kết quả là trị số t r u n g bình đó.
Vậy th ì phải mô tả ỏ bước 2 n h ư sau: “Đ ầu vào là chuỗi các giá trị
sô' thực khác không. Đ ầu ra là giá trị tru n g bình, sẽ là m ột sô' thực
đươc in trê n m àn h ìn h ”. Giả sử nếu đầu vào là m ôt sô'
■ sô' liêu •n h ư
trẽn n h ư n g đã được ghi vào m ột tệp (file) trong ổ cứng, quy cách
ghi cũng có nh ữ n g đặc điểm n h ấ t định, thì bước mô tả vào và ra sẽ
hoàn toàn khác và cách giải củng sẽ khác. Khi đó t a p h ải mô tả rõ
cách thức s ố liệu ghi tro n g file. T h í dụ, ta có th ể mô tả d ữ liệu đ ầu
vào và đáu ra n h ư sau: Dữ liêu
• đầu vào là môt chuỗi số thưc đươc
ghi trong file văn bản có tên là SOLIEU.DAT với quy cách ghi n h ư
sau: dòng trê n cùng ghi m ột sô' nguyên chỉ sô" p h ầ n tử của chuỗi,
các dòng tiếp sau lần lượt ghi các sô' thực, mỗi số* trê n m ột dòng.


Bước 3: Dùng m áy tín h tay tín h th ừ vói một tậ p đơn g iản gồm
n ăm s ố liệu: th í dụ:
Thứ tư


1

2
3
4
5
Trung bình =

Giá tri


23.43
37.43
34.91
28.37
30.62
30.95

Tập sô’ liệu này và k ế t quả sẽ được dùng để kiểm t r a ở bưốc 5.
Bước 4: Trong bước này ta khái q u á t lại n h ữ n g th a o tá c cần
làm ỏ bưóc 3. T u ầ n tự n h ữ n g thao tác này để dẫn đến giải được bài
toán chính là th u ậ t g iả i hay th u ậ t toán (algorithm). T a sẽ mô t ả
t u ầ n tự từ đầu đến cuối quá trìn h giải. C hia quá tr ìn h th à n h m ột
13




sô* khối và liệt kê nh ữ n g khối đó ra. Sau này chương trìn h máy tính
sẽ tu ầ n tự thực hiện các khôi chia đó. Trong mỗi khôi ta lại chi tiết
hóa thêm ra đến mức có th ể chuyển th à n h những lệnh ỉĩiáy tính.
Vậy ở đây đã áp dụng h a i phương pháp: p h â n khối và chi tiết hoá

từng khôi. Với bài toán đang xét, trường hợp dữ liệu đ ẩ u vào cần
n h ậ p từ bàn phím, ta chia th à n h ba khối:
- Nhập các giá trị sô' và lấy tổng của chúng.
- Chia tổng cho sô" giá trị.
- In trị sô' tru n g bình.
Cụ th ể hoá từng khối sẽ dẫn tới g iá trinh của chương trìn h
n h ư sau:
1. Cho tổng của các giá trị bằng không.
2. Cho sô sô" liệu vào bằng không.
3. N hập vào từng giá trị và kiểm tra chừng nào giá trị nhặp
vào còn khác số 0.0 thì:
- Cộng thêm giá trị đó vào tổng.
- Cộng th êm 1 vào sô" số liệu.
4. Chia tổng cho sô" số liệu để được giá trị tru n g bình.
5. In giá trị tru n g bình.
Vì th u ậ t giải đã được mô tả khá chi tiết, ta chuyển th u ậ t giải
đó th à n h chương trìn h n h ư sau:
PROGRAM TGTTB
INTEGER DEM
REAL X, TONG, TB
TONG = 0.0
DEM = 0
5 READ*, X
IF (X .NE. 0.0) THEN
TONG = TONG + X
DEM = DEM + 1
GOTO 5
14



a

END IF
TB = TONG / REAL(DEM)
PRINT 6, TB
FORMAT (IX, 'TRUNG BINH BANG ' , F6.2)
STOP
END

Bước 5: Trong bưốc này ta th ử chạy chương trìn h đ ấ viết với
tậ p sô' liệu đã được th ử bằng cách tính tay ở m ục 3. Đầu ra trên
m à n h ìn h máy tín h phải n h ư sau:
TRUNG BINH BANG 30.95
__________________________________________________

N goài ra, t a có th ể chạy thử với một sô' tậ p sô" liệu khác n h au
để tin chắc vào tín h đúng đắn lồgic và hoàn hảo của chương trìn h
đã xây dựng.
N h ữ n g k hái niệm th u ậ t giải và giả trìn h tr ê n đây có ý nghĩa
r ấ t q u a n trọng. Cách giải, phương pháp giải một bài toán chính là
th u ậ t giải. Các b ài to án khoa học kĩ th u ậ t thực h iệ n trên máy tín h
thư ờ n g có th u ậ t giải là n h ữ n g phương pháp củ a to á n học hoặc của
các k h o a học chuyên n gành mà người lập tr ìn h đã biết. Một sô'
nhiệm vụ, bài to án khác có th ể có cách giải x u ấ t p h á t từ kinh
n g h iệm thực tế, từ suy nghĩ lôgic thường ngày củ a chúng ta.
T h í dụ, k h i giải phương trìn h bậc hai a x 2 +bx + c = 0 bằng
m áy tín h , ta có th ể tín h giá trị của biệt thức A . S a u đó tùy giá trị
của A có th ể là: A < 0 phương trìn h vô nghiệm, A = 0 phương trìn h
có một nghiệm kép và A > 0 phương trìn h có h a i nghiệm riêng biệt
m à đ ư a r a thông báo k ết quà. Trong th í dụ này, th u ậ t to án là

p hư ơ ng pháp quen thuộc mà chúng ta đã học tro n g đại sô.
M ột th í d ụ khác: Có một d a n h sách sinh viên cùng với điểm
củ a m ôn thi. s ắ p xếp lại danh sách đó sao cho người có điềm thi
cao hơn th ì ô dòng trên. Ta có th ể làm n h ư sau:



T ạ m thòi xem người th ứ n h ấ t là người đứng đầu danh sách.
D ù n g ngón ta y trỏ dõi th e o từng người còn lại, kể từ người th ứ hai
cho đến h ế t d a n h sách, n ế u ai có điểm th i cao hơn th ì chuyển người
đó lên đ ầ u d a n h sách và người đ a n g ò đầu d a n h sách chuyển xuống
chỗ củ a ngưòi vừa được th a y . Kết quả ta được d an h sách mới với
người có điểm th i cao n h ấ t ỏ dòng đầu. N hưng từ dòng th ứ hai đến
dòng cuối cùng của d a n h sá ch có th ể th ứ tự vẫn còn lộn xộn.
Bây giờ ta chỉ còn việc sắp xếp lại từ dòng th ứ hai trỏ đi. Ta
theo dõi từ người th ứ ba cho đến ngươi cuối cùng, nếu ai có điểm
th i cao hơn th ì được đưa lên dòng th ử hai và người đang õ dòng thứ
h a i sẽ bị đưa xuống dòng của người vừa th a y thế. Kết quả là người
ở dòng th ứ h a i trong d a n h sách mới sẽ là ngươi có điểm th i cao thứ
nhì. N h ư n g từ dòng th ứ b a đến cuối d an h sách vẫn còn lộn xộn.
Tiếp tục, ta p h ải sắp xếp lại d a n h sách kể từ dòng thứ b a theo
đ ú n g cách n h ư trên . Lặp lạ i công việc n h ư vậy cho đến dòng trước
dòng cuối cùng, t a sẽ được d a n h sách hoàn chỉnh sắp xếp theo thứ
tự giảm d ầ n củ a điểm th i.
T a th ấy , trong trư ò n g hợp này th u ậ t giải của bài toán chính là
cái cách m à c h ú n g ta có th ể vẫn thường làm trong thực t ế đòi sông
k h i p h ả i sắp xếp lại d a n h sách th eo thứ tự n h ư n g không dùng máy
tín h . Và cách làm “b ằ n g ta y ” n à y cũng có th ể được áp dụng làm
t h u ậ t to á n cho các loại b à i toán sắp xếp trong m áy tính.
C h ú n g tôi giới th iệu chi tiế t h ai th í d ụ vừa rồi cốt là để sinh

viên ý th ứ c được rằ n g tư duy t h u ậ t giải, suy nghĩ về cách giải là
bước q u a n trọ n g nhâ't k h i b ắ t ta y vào xây dựng chương trìn h máy
tín h . Có xác đ ịn h được t h u ậ t giải th ì mới nói đến lập được chương
tr ìn h để giải bài to án tr ê n máy tín h .
Còn giả trìn h giống n h ư n h ữ n g lời chỉ dẫn về phương pháp,
cách giải cho ai đó t u ầ n tự thực hiện các bước của th u ậ t giải bài
to á n đ ể d ẫ n tới k ế t quả. B ạn hãy tưởng tượng trong đòi sông nếu
16


bạn muôn nhờ ai dó th ự c hiện một nhiệm vụ. Nếu n h iệm v ụ đó
không quá tầm thường, thì thường ít ra b ạn p h ải giải thích tóm tắ t
yêu cầu, tu ầ n tự thực hiện nhiệm vụ cho người ta • bạn đã đ ặ t
chường trìn h cho người ta thực hiện. N h ư vậy, ta th ấ y thực c h ấ t
giá trìn h dã là một chương trìn h , chí có điều nó được viết ra ngắn
gọn bằng vài câu, vài kí hiệu quen dùng, chưa được viết b à n g m ột
ngôn ngừ lập trìn h cụ th ê mà thôi. M ột chương trìn h m áy tín h viết
b ằ n g ngôn ngữ F o rtran hay b ất kỳ m ột ngôn ngữ nào kh ác chẳng
qua chỉ là n h ữ n g lời chỉ dẫn này dược v iết theo qui ước kí h iệ u để
m áy tín h hiểu được m à làm th ay cho ta.

















1.4. Những chương trìn h Fortran hoàn chỉnh
( ’hương trìn h TG TTB ở mục trước có th ể là m ột th í dụ về m ột
chương trìn h hoàn ch ỉn h . N hư vậy t a th ấ y m ột chương trìn h hoàn
chỉnh b ắ t đ ầ u bằng lện h PROGRAM chỉ sự b ắ t đ ầ u củ a chương
trìn h . D ạng tổng quát c ủ a lệnh n à y n h ư sau:
P R O G R A M T ên c h ư ơ n g t r ì n h
trong đỏ tên chương tr in h là m ột xâu kỹ tự gồm từ m ột đến sáu ký
tự, b ă t đ ầ u b à n g chữ cái và chỉ chứa các chữ cái la tin h và chữ sô".
Kết thúc chương trìn h là h ai lệnh:
|T Õ g
EN D
L ệnh PROGRAM và lệnh S T O P là các lệnh tu ỳ chọn, có th ể
khòng n h ấ t th iê t phải có. Nêu ta không viết ra, c h ú n g có th ể được
chương tr ìn h dịch tự th ỏ m vào. P h ầ n th â n chương t r ì n h gồm t ấ t cả
các lệnh khác n h ằm th ự c hiện bài to án được giải và chia th à n h h ai
nhóm: nhóm các lệnh th ự c hiên (oxe eutablc s t ạ t c m cnt ) vărrứ óm
ĐAI H Ọ C Q U Ố C GIA HA NỌI
TRUNG TÂM THÕNG TIN THƯ VIỆN

V V -D 5

/ Ấ L s a r

17



cốc lệnh không thực hiện (non-executable statem ent) hay gọi là các
lệnh mô tả, lệnh khai báo. Nhóm các lệnh mô tả phải nằm ỏ phía
trên của th â n chương trình.
N hư vậy các chương trìn h F ortran có th ể có cấu trúc tong quát
n h ư sau:
PROGRAM Tên chương trình
Các lệnh không thực hiện (Non-executable statem ents)
Các lệnh thực hiện (Executable statem ents)
STOP
END
Trong chương trìn h tín h giá trị tru n g bình của chuỗi sô' thực ở
th í dụ trê n , ta thấy sau từ khóa PROGRAM là tê n chương trìn h đó là cụm chữ TGTTB. Nhóm các lệnh không thực hiện (những
lệnh mô tả) gồm 2 lệnh:
INTEGER DEM
REAL X, TONG, TB
còn nhóm lệnh thực h iện gồm các lệnh ở tiếp sau h ai lệnh trên:

5

6

TONG = 0.0
DEM = 0
READ*, X
IF (X .NE. 0.0) THEN
TONG = TONG + X
DEM = DEM + 1
GOTO 5

END IF
TB = TONG / REAL(DEM)
PRIN T 6, TB
FORMAT (IX, ’TRUNG BINH BANG ■, F6.2)

N hững lệnh thực hiện thường là những lện h gán, lệnh tính
toán các phép tính, lệnh chuyển điều khiển, đọc, ghi sô' liệu v à một
18


số lộnh khác. Cuôì cùng chương trìn h cỏ lệnh STOP và END.
Trong thực t ế có th ê có những chương trìn h lớn hơn r ấ t nhiều,
gồm h àn g nghìn dòng lệnh và có cấu trúc phức tạp. N hưng t a vẫn
th ấ y nó có phần đầu, p h ần th â n và phần cuôì, trong phẩn th án
chương trìn h củng chỉ có h ai nhóm lệnh giống n h ư trong chương
trìn h đơn giản trê n đây.

1.5. Q uy cách soạn thảo m ột chương trìn h Fortran
Các chương trìn h F ortran được soạn thảo nhờ một bộ soạn
th ảo (editor) hoặc phần m ềm soạn văn bản nào đó. Các lộnh của
một chương trìn h được viết th à n h các dòng nôì tiếp nhau, mỗi lệnh
trẽ n một dòng mới. T rên m àn hình soạn thảo chu ẩn n người ta quy
ước các cột từ 1 đến 5 (hình 1.2) dùng để ghi sô' hiệu lộnh hay gọi là
n h ã n lệnh, cột 6 chuyên dùng đế ghi ký tự nối dòng lệnh, nội dung
các dòng lệnh chỉ được ghi trên các cột từ 7 đến 72. T ất cả các
thông tin ỏ quá cột 72 bị bỏ qua.
C á c CỎI
1-5

Cội

6

C á c CỎI
7-72

t_

L ộ n h Fo r tr a n

K ý lự n ố i d ò n g
N h â n lênh

H inh 1.2. Q uy cách

viết lệnh

Fortran trên màn hinh soạn thào

Trước dây người ta phái dùng giày chuyên dụng, gọi là blank, de viel chương
trình Fortran. Sau đó lừng lệnh chương trình từ giấy chuẩn dược ghi vào một tờ
bìa chuyên cỉụng có hình dáng đặc biệt bàng máy dục lỗ giúp tự động ự\â hóa
lừng ký tự của dòng lệnh thành một hàng lỗ với vị trí khác nhau. Ngày nay các bộ
soạn thảo có the giúp chúng ta viết các lệnh trực tiếp lừ bàn phím, khi viết các ký
tự và ký hiệu hiện trên màn hình để dỗ ihco dõi và chỉnh sừa giống như ta soạn
thảo một Vãn bản bất kỳ. sau đó lưu trong máy tính dưới dạng file nguổn.
19


N h ã n lệnh là những sô nguyên dương, k h ác không, d ù n g đê
chi sỏ hiệu của dòng lệnh. Chỉ nhừng dòng lệnh nào c ầ n được

chuyển điểu khiển tới bởi những dòng lệnh khác mói n h ấ t th iết
p h ải có n h ãn lệnh. D ấu nối dòng lệnh có th ê là bất cứ ký tự nào
ngoài ký tự trông và sc> không, thường người ta hay d ù n g dâu *
hoặc dâu +, để chỉ rằ n g dòng hiện tạ i là p h ần nôì tiếp c ủ a lệnh ỏ
dòng trên đó. Trong các dòng lệnh có th ể có những ký tự trô n g để
dễ đọc. Trong chương trìn h soạn thảo có th ê có những dòng g h i chú
(comment lines); những dòng này không thuộc nội dung (‘hương
trìn h , không được dịch khi dịch chương trìn h , mà chỉ có tác clụng
gợi nhớ cho người lập trìn h khi theo dõi kiếm tr a chương trìn h . T ất
cả các dòng ghi chú p h ải b ắt đầu bằng một chữ cái, thường người
ta d ù n g chữ c (chữ cái đầu tiên của từ comment), đứng ở cột thứ
n h ấ t của các cột dùng để ghi nhãn. Trong sách này sẽ luỏn sử d ụ n g
chừ cái c đê đánh dấu dòng ghi chú trong các chương trìn h .
Xây dựng một chương trình máy tính nói chung là một công việc
khó và đòi hỏi tính cẩn thận, tỉ mỉ. Kinh nghiệm cho thấy rằng ngay
cả đõĩ vói người lập trình thành thạo, khi viết một chương trình dù
đơn giản vẫn có thể mắc lỗi, trong đó có cả những lỗi không ngờ tới. Do
đó, ỏ một sô' sách dạy ngôn ngữ lập trình, người ta còn khuyên người
học ngay từ đẩu chú ý luyộn thói quen, hay phong cách (style) soạn
thảo chường trình. Một chương trình đẹp là chương trình tính dúng và
nhanh cái mà ta cần tính, nhưng dơn giản, dỗ hiểu và sáng súa về
cách trình bày. Trong tài liệu này dần dần cùng sẽ có những chỉ dẫn,
những lời khuyên quan trọng cho người học rèn luyện phong cách soạn
chương trình. Chịu khó rèn luyện những thói quen tôt cũng góp phần
giúp chúng ta tiến xa.
B à i tậpị
1. Nếu dùng chữ

c


làm dấu nối dòng lộnh thì có được không?

2. Các n h àn trong chương trìn h có cần tă n g dần không?
3. Nêu các bước giải bài toán sắp xếp chuỗi sô' nguyên n h ập từ
bàn phím theo thứ tự lớn dần. Viết giả trìn h cho bài toán đó.
20


Chương 2
Những yếu tố cơ bản của Fortran
2.1. Dữ liệu và cách biểu diên dữ liệu tro n g Fortran
F o rtra n có th ể thao tác với sáu loại (kiểu) dữ liệu cơ bản
thưòng g ặp trong thực t ế là: các sô' nguyên, sô" thực, sô' phức, sô
thực độ chính xác gấp đôi, các giá trị logic và d ừ liệu v ă n bản.
Trong chương này ta sẻ làm quen với các dừ liệu kiêu sô'nguyên, số
thực, giá trị lôgic và văn bản (chuỗi ký tự).
Sô nguyên là liệt các số th ậ p phân với dấu +, - hoặc không có
dấu. T h í dụ:
4

0 ; 6 ; -4 0 0 ; +1234
Các sô' nguyên được biểu diễn dưới dạng I . Giá trị cực đại cùa
sỏ* n g uyên gọi là khả n ă n g biểu diễn số’nguyên của máy tính.
T rong F o rtran có h ai dạng biểu diễn sô'thực. Dưới dạng F số
thực gồm p h ần nguyên và p h ần thập phán, cách n h a u bởi dâu
chấm. Số' thực có th ể có dấu dấu +, - hoặc không có dâu. Nếu phần
nguyên hoặc phẩn th ập phồn hằng không, có th ể không cắn viết ra
các phần đó. Dấu chấm th ậ p phân n h ấ t th iết phải có m ặt. Thí dụ:
-2 .5 8 3 ; 14.3; 0 .8 ; 12.; .7 ; 14.
Giá trị cực đại và sô chữ sô*có nghĩa cực đại trong dạng F phụ

thuộc vào dạng, hay kiểu (kind) khai báo của sô' thực.


D ạng E biếu dien sô' thực th à n h hai phần: p h ần h ằn g thực
nằm trong khoảng từ 0,1 đến 1,0 và phần bậc. Bậc b ắ t đau bang
chữ E , tiếp sau là h ằ n g nguyên gồm không quá hai chừ số thập
phân, có thể có dấu hoặc không dấu. Thí dụ sô' 25000 có thể viết
dưới dạng E là 0.25E05. Sei chữ sô' có nghía của p h ầ n h ằ n g thực và
h ằ n g nguyên cũng tùy thuộc loại số thực khai báo.
H ằng với độ chính xác gấp đôi (dạng D ) có th ể viết như s ố với
dấu chấm th ập phân, chứa từ 8 đến 16 chữ sô" có nghĩa, hoặc như
số dạng mù vói chữ D th a y vì E , trong dó phần hằng thực có the
chứa tới 16 chữ số có nghĩa. Thí dụ:
2.71828182 ; 0.27182818D+1
Trị tuyệt đốì cực d ại của các sô' thực thường và độ chính xác
gấp đôi bằng 10"79 đến 1075.
S ố phứ c biểu diễn b ằn g một cặp h ằn g thực trong dấu ngoặc
đơn và cách nhau bồi dấu phảy. Thí dụ (2.1, 0.5E2) biểu diễn sô'
phức 2,1 + 50/ trong toán học.
Hai sô' trong dấu ngoặc ứng với các phần thực và phần ảo phải
cùng độ chính xác biểu diễn.
Các giá trị d ữ liệu văn bản dùng đế biểu diễn các đoạn văn
bản n h ư tên các đại lượng, các khái niệm, thí dụ cụm chừ " Toc đo",
"Temperature", "BAO CAO s o 1"... Người ta còn gọi dữ liệu văn
bản là dữ liệu ký tự, xâu ký tự, dữ liệu chữ.
Các chữ sô" 1, 2 , 9 , 0 khi dùng với tư cách là đỏ biểu diễn các
giá trị sô' tương ứng th ì chúng củng là những dử liệu kiểu văn bán.
D ữ liệu lôgic dùng dế chỉ khả năng có hay không của một sự
kiện, đúng hay sai của một biểu thức quan hệ. Người ta dùng hai
giá trị lôgic là .T R U E , và .FALSE, để chỉ hai trạ n g th á i (lôi lập

n h a u trong nhừng th í dụ trê n và ngôn ngữ Fortran có thê xứ ]ý với
những giá trị logic, tức thực hiện n h ũ n g phép tín h đôi với các giá
22


trị lôgic n h ư trong toán học có th ể thực hiện.
Sở dĩ m áy tính làm được n h ữ n g việc như chúng ta th ấy là vì
nó có th ế xử lý thông tin, so sánh, tính toán được với những kiêu
dữ liệu này và đưa ra những kết luận, thông báo... T ấ t cả những
thông tin chúng ta gặp tro n g đời sông thực t ế đểu có th ể được biêu
diễn bằng những dữ liệu kiểu này hoặc kiểu khác.
T rên đây là n h ữ n g kiểu d ữ liệu cơ bản của ngôn ngữ lập trìn h
Fortran. Sau này và ở các chương khác, chúng ta sẽ thấy còn có
những kiểu dữ liệu khác được tổ chức dựa trẽ n n h ữ r 2 kiểu dữ liệu
cơ b ản vừa trìn h bày.
Ớ đây chúng ta cần lưu ý rằ n g những k hái niệm dữ liệu trong
máy tín h như sô' nguyên, số’ thực... nói chung giông với những khái
niệm tương ứng trong đòi sông hoặc trong toán học. N hưng đồng
thòi cũng có n h ữ n g n ét khác biệt. Thí dụ, F o rtran chỉ hiếu và tính
toán được với nh ữ n g s ố nguyên loại thường không lớn hơn 2 -1o9 ,
ngôn ngữ lập trìn h Pascal chỉ làm việc với n h ữ n g số nguyên không
lớn hơn 32767 và khồng nhỏ hơn -32768, tro ng khi hàng ngày
chúng ta có th ể viết trên giấy hoặc tín h toán các phép tín h với
những sỏ' nguyên có giá trị tùy ý. Tình hình củng tương tự n h ư vậy
đôì với các sô thực. Vậy trong máy tín h có n h ữ n g giới h ạn nhâ't
định trong việc biểu diễn các sô", không phải sô" nào m áy tính cũng
biểu diễn được và tính toán được. Tuy nhiên, vói những giới hạn
n h ư hiện nay, F o rtran vẫn cho phép chúng ta lập các chương trìn h
dể tính toán, xử lý với t ấ t cả những giá trị số’gặp trong đời sông và
khoa học kỹ th u ậ t.


2.2. Hằng và biến
Máy tín h xử lý dử liệu hay thực hiện n h ữ n g tín h toán với
những đại lượng. T ấ t cả những dại lượng đó p h ải được lưu giữ
23


trong máy tính. N hững dại lượng không đối tro n g suốt quá trình
thực hiện của chương trìn h gọi là các h ằ n g , còn n h ữ n g đại lượng có
thể n h ậ n những giá trị khác n h a u gọi là các b iến . Với mỗi hang
hoặc biến, trong bộ nhớ m áy tín h giành r a m ột địa chi đế lưu giá
trị. Tên chính là ký hiệu quy ước của địa chỉ đó.

2.2.1. Tên biến và tên hằng
Tên biến trong F o rtra n chuẩn được biểu diễn bằng tập hớp từ
1 đến 3 các chữ cái trong bắng chữ cái la tinh (26 chữ cái) hoặc các
chữ số 0, 1,
9, nhưng ph ải bắt đầu bằng chữ cái.
Trong một chương trìn h các tên biến không được trù n g nhau.
Trong các phiên bản F o rtra n hiện nay, đê dùng làm tên không
p h ả n biệt chữ cái hoa và chữ cái thường. Ngoài ra, còn một vài ký
tự khác cững có th ể d ù n g để cấu tạo tên. Phiên b ả n F o rtran 90 cho
phép đ ặ t tên với scf kv tự dài hơn 6 và trong tên có th ể có một sô' ký
tự khác nữa. Tuy nhiên, sinh viên nên tập thói quen đ ặt tên gọn
gàng theo F ortran chuẩn, bởi vì tập hợp 6 ký tự đã r ấ t đủ đê chúng
ta mô tả các bài toán, kể cả những bài toán lón và phức tạp.
T hí dụ, các tên sau đây
X ; A ; X I ; B2T5 ; SOHANG ; SUM là hợp lệ, còn các tên sau
đây là sai:
1NGAY; H E s o ; B*T

vì trong tên thứ n h ấ t ký tự đầu tiên là chữ số, trong tên th ứ hai có
ky tự dâu cách, trong tê n thứ ba có ký tự (*) không phải là những
ký tự dùng đế đ ặ t tên.
Quy tắc đ ặ t tên biến trên đây củng áp dụng đối vói tên chương
trình, tên hằng, tên các chương trìn h con và tên file. (Riêng với tên
file có th ể có thêm phần mở rộng gồm không quá ba chừ cái hoặc
chữ sô" ngăn với phần tên chính bđi dấu châm).

24


2.2.2. Mô tả (khai báo) kiểu biến và kiểu hằng
Kiéu củ a biến tương ứng với kiểu dữ liệu mà nó biểu diễn. Các
biến nguyên biểu diễn các dữ liộu sô" nguyên, các biến thự c - sô"
thực... Trong chương trình phái chi rõ các biến được sứ dụng biểu
diễn dữ liệu kiểu nào (nguyên, thực, lôgic, phức, vàn bản, sô thực
độ chính xác thường h a y dộ chính xác gấp đôi...).
MÒI hiên chỉ lưu giữ được những giá trị đúng kiểu của nó. Một
biến (là mô tá kiểu là sô" nguyên thì không th ể dùng đề lưu giá trị
sô' thực hay giá trị lôgic.
Cách m ô tả â n chỉ dùng đôi với các biến nguyên và thực: dùng
tèn biến nguyên b ắt đầu bằng một trong sáu chữ cái I, J , K, L, M,
N, còn tôn biến thực b ắ t đầu bằng một trong những chữ cái ngoài
sáu chữ cái trôn. Nói chung, người mới học lập trìn h không bao giò
nên dùng cách mô tả ẩn.
Cách mô tả hiện d ù n g các lệnh mô tả hiện n h ư INTEGER,
REAL, CHARACTER, LOGICAL, DOUBLE PRECISION, COMPLEX...
đẽ c!lỉ kiêu dừ liệu mà. các biến biểu diễn. Dưới đây là quy tắc viết
n h ữ n g lộnh mô tả kiểu dử liệu: tu ầ n tự nguyên, thực, lôgic, phức,
thực độ chính xác gãp đôi và ký tự văn bản:

IN T E G E R D anh sách các biến nguyênị
R EA L D anh sách các biến thực
LOGICAL D anh sách các biến lôgìc
C O M P L E X D anh sách các biến phức
¡DOUBLE P R E C IS IO N D anh sách các biến độ chính xác đôi
C H A R A C T E R D anh sách các biến ký~ ĩĩ\
Trong d a n h sách các biến sẽ liệt kê các tên biến, n ếu có hơn
một biên thì các biên phải cách n h au bởi dấu phảy.
25


×