NXB Nông nghip - Hà Ni - 2005
T khóa: Ngôn ng, lp trình, Fortran, thut gii, gi trình, lưu đồ, khai báo, hng, biến, file, lnh, tun t, r nhánh, lp, chương trình con,
th tc, hàm.
Tài liu trong Thư vin đin t Trường Đại hc Khoa hc T nhiên có th được s dng cho mc đích hc tp và nghiên cu cá
nhân. Nghiêm cm mi hình thc sao chép, in n phc v các mc đích khác nếu không được s chp thun ca nhà xut bn và
tác gi.
NGÔN NG LP TRÌNH FORTRAN
NG DNG TRONG KHÍ TƯỢNG THY VĂN
Phm Văn Hun
1
ĐẠI HC QUC GIA HÀ NI
PHM VĂN HUN
NGÔN NG LP TRÌNH FORTRAN
NG DNG TRONG KHÍ TƯỢNG THY VĂN
NHÀ XUT BN NÔNG NGHIP – 2005
2
MC LC
Gii thiu .............................................................................................................................................................................................................................. 5
Chương 1 - Khái nim v lp trình máy tính để gii các bài toán ng dng................................................................................................................. 6
1.1. Phn cng và phn mm máy tính ........................................................................................................................................................................ 6
1.2. Thc hin mt chương trình máy tính .................................................................................................................................................................. 7
1.3. Quy trình gii bài toán trên máy tính.................................................................................................................................................................... 7
1.4. Nhng chương trình Fortran hoàn chnh ........................................................................................................................................................... 10
1.5. Quy cách son tho mt chương trình Fortran.................................................................................................................................................. 11
Chương 2 - Nhng yếu t cơ bn ca Fortran ............................................................................................................................................................... 12
2.1. D liu và cách biu din d liu trong Fortran ................................................................................................................................................ 12
2.2. Hng và biến .......................................................................................................................................................................................................... 13
2.2.1. Tên biến và tên hng...................................................................................................................................................................................... 13
2.2.2. Mô t (khai báo) kiu biến và kiu hng .....................................................................................................................................................14
2.3. Biến có ch s (mng)............................................................................................................................................................................................. 16
2.3.1. Khái nim mng............................................................................................................................................................................................. 16
2.3.2. Mô t mng..................................................................................................................................................................................................... 17
2.4. Các hàm chun ...................................................................................................................................................................................................... 17
2.5. Lnh gán và các toán t s hc ............................................................................................................................................................................18
2.5.1. Lnh gán ......................................................................................................................................................................................................... 18
2.5.2. Các phép tính s hc đơn gin...................................................................................................................................................................... 19
2.5.3. Ước lượng biu thc s hc........................................................................................................................................................................... 19
2.5.4. Khái nim v ct và các phép tính hn hp................................................................................................................................................. 20
2.5.5. Khái nim v s quá bé và s quá ln (underflow và overflow)................................................................................................................ 20
Chương 3 - Nhp và xut d liu đơn gin..................................................................................................................................................................... 22
3.1. Các lnh xut và nhp d liu.............................................................................................................................................................................. 22
3.2. Các đặc t trong lnh FORMAT.......................................................................................................................................................................... 24
Chương 4 - Các cu trúc điu khin................................................................................................................................................................................27
4.1. Khái nim v cu trúc thut toán......................................................................................................................................................................... 27
4.1.1. Các thao tác cơ bn. Gi trình và lưu đồ.....................................................................................................................................................27
3
4.1.2. Các cu trúc tng quát trong thut gii....................................................................................................................................................... 28
4.1.3. Thí d ng dng thut toán cu trúc........................................................................................................................................................... 28
4.2. Cu trúc IF và các lnh tương ng ......................................................................................................................................................................29
4.2.1. Biu thc lôgic................................................................................................................................................................................................ 29
4.2.2. Lnh IF lôgic .................................................................................................................................................................................................30
4.2.3. Lnh IF s hc...............................................................................................................................................................................................32
Chương 5 - Cu trúc lp vi lnh DO ............................................................................................................................................................................. 44
5.1. Vòng lp DO........................................................................................................................................................................................................... 44
5.1.1. Cú pháp ca lnh DO và vòng lp DO......................................................................................................................................................... 44
5.1.2. Nhng quy tc cu trúc và thc hin vòng lp DO .................................................................................................................................... 45
5.1.3. Thí d ng dng vòng lp DO...................................................................................................................................................................... 46
5.2. Vòng DO lng nhau...............................................................................................................................................................................................47
Chương 6 - File d liu và t chc file d liu trong Fortran....................................................................................................................................... 51
6.1. Khái nim v file d liu và t chc lưu tr d liu.......................................................................................................................................... 51
6.2. Các lnh nhp, xut d liu vi file ..................................................................................................................................................................... 52
6.3. K thut đọc các file d liu................................................................................................................................................................................. 54
6.3.1. S dòng ghi được ch định............................................................................................................................................................................. 54
6.3.2. Dòng ký hiu kết thúc d liu....................................................................................................................................................................... 55
6.3.3. S dng tu chn END.................................................................................................................................................................................. 56
6.4. To lp các file d liu .......................................................................................................................................................................................... 58
6.5. K thut tr giúp tìm li chương trình ............................................................................................................................................................... 58
Chương 7 - S dng biến có ch s trong Fortran .........................................................................................................................................................60
7.1. Mng mt chiu ..................................................................................................................................................................................................... 61
7.2. Lnh DATA............................................................................................................................................................................................................62
7.3. Mng hai chiu....................................................................................................................................................................................................... 62
7.3. Mng nhiu chiu .................................................................................................................................................................................................. 64
7.4. Nhng điu cn chú ý khi s dng các mng ..................................................................................................................................................... 67
Chương 8 - Chương trình con loi hàm.......................................................................................................................................................................... 70
8.1. Các hàm chun ...................................................................................................................................................................................................... 70
8.2. Các hàm chương trình con
...................................................................................................................................................................................71
4
8.2.1. Hàm lnh......................................................................................................................................................................................................... 71
8.2.2. Hàm chương trình con .................................................................................................................................................................................. 72
8.3. Ch dn g ri và phong cách viết chương trình có hàm con............................................................................................................................76
Chương 9 - Chương trình con loi th tc ..................................................................................................................................................................... 78
9.1. Khai báo và gi chương trình con th tc........................................................................................................................................................... 78
9.2. Nhng thí d ng dng chương trình con th tc ............................................................................................................................................. 79
9.3. Nhng ch dn g ri khi s dng các th tc....................................................................................................................................................83
Chương 10 - Kiu d liu văn bn................................................................................................................................................................................... 85
10.1. Tp các ký t ca Fortran.................................................................................................................................................................................. 85
10.2. Các dng khai báo biến ký t............................................................................................................................................................................. 85
10.3. Nhp, xut d liu ký t ..................................................................................................................................................................................... 86
10.4. Nhng thao tác vi d liu ký t ....................................................................................................................................................................... 86
10.4.1. Gán các giá tr ký t .................................................................................................................................................................................... 86
10.4.2. So sánh các giá tr ký t .............................................................................................................................................................................. 87
10.4.3. Trích ra xâu con...........................................................................................................................................................................................88
10.4.4. Kết hp các xâu ký t..................................................................................................................................................................................88
10.4.5. Nhng hàm chun x lý xâu ký t............................................................................................................................................................. 89
Chương 11 - Nhng đặc đim b sung v file.................................................................................................................................................................94
11.1. Các file ni ti (Internal Files)............................................................................................................................................................................ 94
11.2. Các file truy nhp tun t (Sequential Files).................................................................................................................................................... 95
11.3. Các file truy cp trc tiếp (Direct-Access Files)............................................................................................................................................... 97
11.4. Lnh truy vn INQUIRE....................................................................................................................................................................................98
Tài liu tham kho ...........................................................................................................................................................................................................101
Ph lc 1: Bng các hàm chun ca FORTRAN ......................................................................................................................................................... 102
Ph lc 2: Phương pháp Gauss gii h phương trình đại s tuyến tính ................................................................................................................... 104
Ph lc 3: Phương pháp bình phương nh nht trong phân tích hi quy................................................................................................................ 108
Ph lc 4: Sơ đồ ng dng phương pháp hi quy nhiu biến....................................................................................................................................110
5
Gii thiu
Giáo trình “Ngôn ng lp trình Fortran và ng dng trong khí tượng thy văn” là tp hp nhng bài hc cơ s v lp trình mà tác gi đã dy trong mt s năm
gn đây cho sinh viên các ngành khí tượng hc, thy văn và hi dương hc Trường đại hc Khoa hc T nhiên, Đại hc Quc gia Hà Ni.
Sách này nhm gii thiu cho sinh viên ln đầu tiên hc lp trình nhng khái nim cơ bn v lp trình
máy tính, tóm tt nhng yếu t cơ bn và các lnh thông
dng, đặc đim s dng chúng trong ngôn ng lp trình Fortran. Mc tiêu cui cùng là giúp sinh viên làm quen vi các phương pháp xây dng thut gii các bài toán
thông dng ca toán hc tính toán, thng kê toán hc và x lý s liu, rèn luyn k năng lp trình để gii nhng bài toán x lý và phân tích s liu, tính toán ng
dng mc độ ban đầu tro
ng thi gian hc tp và nghiên cu trường đại hc.
Nhng thí d và h thng bài tp t luyn trong sách này có ý nghĩa minh ha, hướng sinh viên ti vn dng các lnh ca Fortran để viết ra nhng chương trình
ng dng nho nh có tính c th, bước đầu làm quen vi nhng đặc thù x lý d liu quan trc trong chuyên môn khí tượng thy văn. Nhng đặc đim khác ca ni
dung
ng dng lp trình trong các chuyên ngành này như qun lý cơ s d liu, các phương pháp thng kê hin đại, các phương pháp gii s tr nhng bài toán động
lc khí quyn, đại dương... chưa được đề cp đây do khuôn kh kiến thc chuyên môn ca người hc, đó là đối tượng ca các môn hc chuyên đề khác ca
chương trình hc tp, nhưng t đây đến đó thc ra cũng k
hông xa.
Vì là tài liu hc tp v lp trình cơ s, ni dung ngôn ng trong sách này cũng không bao quát hết nhng yếu t trong thế gii to ln ca Fortran. Nên bt đầu
bng nhng gì đơn gin nhưng được vic. Mt khi người hc bt đầu biết lp trình, thy được ng dng máy tính có ích trong hc tp và nghiên cu ca mình s ny
sinh nhu cu tìm hiu và kh
ai thác Fortran trong rt nhiu tài liu tra cu và sách chuyên kho khác hoc h thng tr giúp sn có ca Fortran.
Như vy, sách này không ch là tài liu hc tp cho nhng sinh viên các chuyên môn khí tượng thy văn, mà có th có ích cho sinh viên, hc viên cao hc nhiu
chuyên ngành khác hoc bt kì ai mun t hc lp trình máy tính mt cách nh nhàng.
Trong sách này, mi chương được cu to như mt bài hc. Mi chuyên t, khái nim xut hin ln đầu đều được in nghiêng, các câu
lnh được in ch hoa đậm
và bao trong hp để giúp người đọc thun tin tra cu khi chưa thuc chính t câu lnh.
Nhng thí d minh ha được chn lc sao cho đơn gin, nhưng có tính đin hình, giúp người đọc liên tưởng đến lp bài toán khác có th cùng s dng cách
gii này. Chương trình thí d luôn nht quán áp dng ý tưởng chia để tr, tc phân nhim v ln thành các vic nh hơn để thc hin tng vic mt dn ti kết qu
cui cùng.
Vi cách trình bày này, bn đọc s thy lp trình không còn là cái gì rc ri, khó hiu, mà nó t nhiên như ta vn gii quyết bài toán không bng máy tính.
Nhng tóm tt kinh nghim g ri và li khuyên v rèn luyn phong cách lp trình mi bài hc có th rt có ích cho người hc. Và đây là li khuyên đầu tiên
cho người mi hc lp trì
nh: Hãy luôn tưởng tượng xem mình s phi gii bài toán “bng tay” như thế nào trước khi bt đầu nghĩ cách viết chương trình máy tính.
Hãy nh ly chính t, cú pháp ca câu lnh và vic này không khó, vì lnh Fortran ging như mt câu tiếng Anh đơn gin. Nhưng hãy rt chú ý ti chính nhng điu
đơn gin, thí d khi nhìn dòng lnh sau
PRINT * , danh sách các mc cn in
thì hãy c gng đọc kĩ hay hi li xem thế nào là danh sách, thế nào là mt mc in,
mt mc in có th là nhng gì.
Tác gi
6
Chương 1 - Khái nim v lp trình máy tính để
gii các bài toán ng dng
1.1. Phn cng và phn mm máy tính
Máy tính được thiết kế để thc hin nhng thao tác tuân theo mt tp
nhng câu lnh do người dùng viết ra, gi là chương trình.
Các máy tính có cu to chung bên trong như trên hình 1.1. Người
dùng s dng bàn phím, chut hoc nhng thiết b nhp d liu khác để
đưa thông tin vào máy tính. B x (processor) là mt phn ca máy tính
kim soát tt c các phn khác. B x lý nhn d liu vào và lưu chúng
b nh (m
emory). Nó nhn biết các lnh ca chương trình. Nếu ta mun
cng hai giá tr, b x lý s ly hai giá tr đó t b nh và gi đến khi x
lý s hc lôgic (ALU). Khi này thc hin phép cng và b x lý lưu kết
qu vào b nh. Trong khi x lý, b x lý và khi s hc lôgic s dng
mt lượng b nh nh gi là b nh trong (internal mem
ory). Phn ln d
liu được lưu b nh ngoài (external memory) như đĩa cng, đĩa mm,
chúng cũng ni vi b x lý. B x lý, b nh trong và ALU gi chung là
khi x lý trung tâm hay CPU.
Trong chương trình, ta thường lnh cho máy tính in kết qu tính toán
lên màn hình hay máy in ni vi máy tính và là nhng thiết b xut d liu.
Phn mm cha nhng ch dn hoc lnh m
à ta mun máy tính thc
hin. Phn mm có th được viết bng nhiu ngôn ng và cho nhiu mc
đích. Nhng chương trình thc hin nhng thao tác chung, thường được
nhiu người s dng gi là nhng phn mm công c. H điu hành là tp
hp các chương trình giúp người dùng giao tiếp vi máy
tính. H điu hành
to mt môi trường thun tin cho người dùng “giao tiếp” được vi máy
tính, thc hin nhng chương trình ng dng như các b biên dch ngôn
ng lp trình, các phn mm công c... H điu hành gm mt s chương
trình cho phép thao tác vi file như in, sao chép, hin th danh sách file...
Nhng h điu hành hin đại như Windows còn giúp máy tính nhn biết và
qun lý công vic ca rt nhiu thiết b ngoi vi ni k
èm vi máy tính như
các thiết b nhp, xut d liu, màn hình, máy in, máy quét nh, loa, các
máy quan trc chuyên dng...
External memor
y
Internal memor
y
Processor
AL
U
CPU
In
p
ut Out
p
ut
Hình 1.1. Sơ đồ khi ca mt máy tính
7
Thông thường hin nay các chuyên gia lp chương trình viết ra rt
nhiu chương trình để máy tính thc hin, t nhng chương trình đơn gin
để gii các bài toán nh, tính toán mt vài giá tr, đến nhng chương trình
đồ s x lý thông tin phc tp, thông minh, gii nhng bài toán khoa hc kĩ
thut ln, chế bn văn bn, thiết kế đồ ha, các chương trình nghe nhc,
xem phim, trò chơi, truy cp Internet. Nhng chương trìn
h tương đối ln
và phc tp thường được gi là nhng phn mm. Người dùng máy tính có
th s dng nhng chương trình đó. Ngày nay chúng ta có cm giác rng
máy tính làm được tt c mi vic. Tuy nhiên, phi nh rng tt c nhng
gì máy tính làm được là do nó làm vic theo mt chương trình do con
người to ra.
1.2. Thc hin mt chương trình máy tính
Thc hin mt chương trình máy tính thường còn được gi tt là chy
chương trình. Khi người dùng máy tính mun nó làm mt vic gì đó, thí d
gii mt bài toán, thì người dùng phi viết ra mt chương trình để cho máy
thc hin. Người lp trình thường viết các chương trình máy tính bng
ngôn ng bc cao vi nhng câu lnh ging như nhng câu tiếng Anh, d
hc và s dng. Ngôn ng Fortran cũng thuc loi đó. Mi mt bước t
a
mun máy tính thc hin phi được mô t ra theo mt cú pháp ngôn ngũ
đặc thù (language syntax). Tuy nhiên, chương trình ta viết như vy vn
phi được mt chương trình chuyên (b biên dch - compiler) dch thành
ngôn ng máy thì máy tính mi hiu và thc hin được. Khi compiler dch
các dòng lnh ta viết, nó t động tìm các li dch, hay li cú pháp (syntax
error), tc các li v chính t, các du phân cách... Nếu chương trì
nh viết ra
có li dch, b biên dch s thông báo để người viết chương trình sa. Sau
khi đã sa hết li, ta chy li chương trình bt đầu t bước dch. Mt khi
dch xong, mt chương trình son tho liên kết (linkage editor program) s
thc hin vic hoàn tt sn sàng cho bước thc hin. Chính là bước này
các lnh ta viết được thc hin trong máy tính. Li chương trình cũng có
th xut hin
trong bước này, gi là li trong khi chy chương trình (run-
time error) hay li lôgic. Nhng li này không liên quan ti cú pháp ca
lnh, mà liên quan ti lôgic ca các lnh, ch l ra khi máy tính thc thi câu
lnh. Thí d, lnh
BAX /
là mt câu lnh đúng, bo máy tính ly
A
chia cho B và gi kết qu X .
Tuy nhiên, gi s nếu
B bng không, phép tính chia cho s không là phép
tính sai, không có nghĩa và ta được thông báo li chy chương trình. Các
li lôgic không phi bao gi cũng được thông báo. Thí d, nếu trong
chương trình thay vì chia mt s cho 0.10 ta viết thành nhân vi 0.10, khi
chy chương trình s chng có li nào được thông báo, nhưng đáp s bài
toán, tc kết qu mà ta mong đợi, s là sai.
1.3. Quy trình gii bài toán trên máy tính
Nhìn chung công vic gii mt bài toán bng máy tính gm năm bước
sau:
1) Phát biu bài toán mt cách rõ ràng.
2) Mô t thông tin nhp vào và xut ra.
3) Gii bài toán bng tay đối vi tp d liu đơn gin.
4) Phát trin cách gii bài toán thành dng tng quát.
5) Kim tra đáp s vi nhiu tp d liu khác nhau.
Bây gi ta minh ha năm bước trên qua thí d bài toán tính giá tr
trung bình ca mt tp s liu thc nghim.
Bước 1: Ta phát biu bài toán
mt cách rõ ràng như sau: “Tính tr s
trung bình ca tp các giá tr s liu thc nghim”.
Bước 2: Ch ra c th s liu vào và ra là gì, hình thc ra sao. Nếu có
8
t ghi mt s giá tr ca s liu, đòi hi nhp vào máy qua bàn phím, khi
nào hết s liu thì gõ giá tr 0.0 để báo hết, sau đó mi tính tr s trung bình
và in ra kết qu là tr s trung bình đó. Vy thì phi mô t bước 2 như
sau: “Đầu vào là chui các giá tr s thc khác không. Đầu ra là giá tr
trung bình, s là mt s thc được in trên màn hình”. Gi s nếu đầu vào là
mt s s liu như trên nhưng đã được
ghi vào mt tp (file) trong cng,
quy cách ghi cũng có nhng đặc đim nht định, thì bước mô t vào và ra
s hoàn toàn khác và cách gii cũng s khác. Khi đó ta phi mô t rõ cách
thc s liu ghi trong file. Thí d, ta có th mô t d liu đầu vào và đầu ra
như sau: D liu đầu vào là mt chui s thc được ghi trong file văn bn
có tên là SOLIEU.DAT vi quy
cách ghi như sau: dòng trên cùng ghi mt
s nguyên ch s phn t ca chui, các dòng tiếp sau ln lượt ghi các s
thc, mi s trên mt dòng.
Bước 3: Dùng máy tính tay tính th vi mt tp đơn gin gm năm s
liu: thí d:
Th t Giá tr
1 23.43
2 37.43
3 34.91
4 28.37
5 30.62
Trung bình = 30.95
Tp s liu này và kết qu s được dùng để kim tra bước 5.
Bước 4: Trong bước nà
y ta khái quát li nhng thao tác cn làm
bước 3. Tun t nhng thao tác này để dn đến gii được bài toán chính là
thut gii hay thut toán (algorithm). Ta s mô t tun t t đầu đến cui
quá trình gii. Chia quá trình thành mt s khi và lit kê nhng khi đó ra.
Sau này chương trình máy tính s tun t thc hin các khi chia đó. Trong
mi khi ta li chi tiết hóa thêm ra đến mc có th chuyn thàn
h nhng
lnh máy tính. Vy đây đã áp dng hai phương pháp: phân khichi
tiết hoá tng khi. Vi bài toán đang xét, trường hp d liu đầu vào cn
nhp t bàn phím, ta chia thành ba khi:
- Nhp các giá tr s và ly tng ca chúng.
- Chia tng cho s giá tr.
- In tr s trung bình.
C th hoá tng khi s dn ti gi trình ca chương t
rình như sau:
1. Cho tng ca các giá tr bng không.
2. Cho s s liu vào bng không.
3. Nhp vào tng giá tr và kim tra chng nào giá tr nhp vào còn
khác s 0.0 thì:
- Cng thêm giá tr đó vào tng.
- Cng thêm 1 vào s s liu.
4. Chia tng cho s s liu để được giá tr trung bình.
5. In giá tr trung bình.
Vì thut gii đã được mô t khá chi tiết, ta chuyn thut gii đó t
hành
chương trình như 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
END IF
9
TB = TONG / REAL(DEM)
PRINT 6, TB
6 FORMAT (1X, 'TRUNG BINH BANG ' , F6.2)
STOP
END
Bước 5: Trong bước này ta th chy chương trình đã viết vi tp s
liu đã được th bng cách tính tay mc 3. Đầu ra trên màn hình máy
tính phi như sau:
TRUNG BINH BANG 30.95
Ngoài ra, ta có th chy th vi mt s tp s liu khác nhau để tin
chc vào tính đúng đắn lôgic và hoàn ho ca chương trình đã xây dng.
Nhng khái nim thut gii và gi trình trên đây có ý nghĩa rt quan
trng. Cách gii, phương pháp gii mt bài toán chính là thut gii. Các bài
toán khoa hc kĩ thut thc hin trên máy tính thường có thut gii là
nhng phương pháp ca toán hc hoc ca các khoa hc chuy
ên ngành mà
người lp trình đã biết. Mt s nhim v, bài toán khác có th có cách gii
xut phát t kinh nghim thc tế, t cách suy nghĩ lôgic thường ngày ca
chúng ta.
Thí d, khi gii phương trình bc hai
0
2
cbxxa
bng máy tính,
ta có th tính giá tr ca bit thc
. Sau đó tùy giá tr ca
có th là:
0 phương trình vô nghim, 0 phương trình có mt nghim kép và
0
phương trình có hai nghim riêng bit mà đưa ra thông báo kết qu.
Trong thí d này, thut toán là phương pháp quen thuc mà chúng ta đã
hc trong đại s.
Mt thí d khác: Có mt danh sách sinh viên cùng vi đim ca môn
thi. Sp xếp li danh sách đó sao cho người có đim thi cao hơn thì dòng
trên. Ta có th làm như sau:
Tm thi xem người th nht là người đứng đầu danh sách. Dùng
ngón tay tr dõi theo tng người còn li, k t người th hai cho đến hết
danh sách, nếu ai có đim thi cao hơn thì chuyn người đó lên
đầu danh
sách và người đang đầu danh sách chuyn xung ch ca người va được
thay. Kết qu ta được danh sách mi vi người có đim thi cao nht dòng
đầu. Nhưng t dòng th hai đến dòng cui cùng ca danh sách có th th
t vn còn ln xn.
Bây gi ta ch còn vic sp xếp li t d
òng th hai tr đi. Ta theo dõi
t người th ba cho đến người cui cùng, nếu ai có đim thi cao hơn thì
được đưa lên dòng th hai và người đang dòng th hai s b đưa xung
dòng ca người va thay thế. Kết qu là người dòng th hai trong danh
sách mi s là người có đim thi cao th nhì. Nhưng t dòng th ba đến
cui danh sách vn còn
ln xn.
Tiếp tc, ta phi sp xếp li danh sách k t dòng th ba theo đúng
cách như trên. Lp li công vic như vy cho đến dòng trước dòng cui
cùng, ta s được danh sách hoàn chnh sp xếp theo th t gim dn ca
đim thi.
Ta thy, trong trường hp này thut gii ca bài toán chính là cái cách
mà chúng ta có th vn thường làm trong thc tế đời sng khi phi sp xếp
li danh sách theo th t nhưng không
dùng máy tính. Và cách làm “bng
tay” này cũng có th được áp dng làm thut toán cho các loi bài toán sp
xếp trong máy tính.
Chúng tôi gii thiu chi tiết hai thí d va ri ct là để sinh viên ý
thc được rng tư duy thut gii, suy nghĩ v cách gii là bước quan trng
nht khi bt tay vào xây dng chương trình máy tính. Có xác định được
thut gii thì mi nói đến vic lp được chương trình để gii bài toán trên
máy tính.
Còn gi trình ging như nhng li ch dn v phương pháp, cách gii
cho ai đó tun t thc hin các bước ca thut gii bài toán để dn ti kết
10
qu. Bn hãy tưởng tượng trong đời sng nếu bn mun nh ai đó thc
hin mt nhim v. Nếu nhim v đó không quá tm thường, thì thường ít
ra bn phi gii thích tóm tt yêu cu, tun t thc hin nhim v cho
người ta - bn đã đặt chương trình cho người ta thc hin. Như vy, ta thy
thc cht gi trình đã là mt chương trì
nh, chđiu nó được viết ra ngn
gn bng vài câu, vài kí hiu quen dùng, chưa được viết bng mt ngôn
ng lp trình c th mà thôi. Mt chương trình máy tính viết bng ngôn
ng Fortran hay bt k mt ngôn ngo khác chng qua ch là nhng li
ch dn này được viết theo qui ước kí hiu để máy tính hiu được mà làm
thay cho ta.
1.4. Nhng chương trình Fortran hoàn chnh
Chương trình TGTTB mc trước có th là mt thí d v mt
chương trình hoàn chnh. Như vy ta thy mt chương trình hoàn chnh bt
đầu bng lnh PROGRAM ch s bt đầu ca chương trình. Dng tng
quát ca lnh này như sau:
PROGRAM Tên chương trình
trong đó tên chương trìnhmt xâu ký t gm t mt đến sáu ký t, bt
đầu bng ch cái và ch cha các ch cái la tinh và ch s. Kết thúc
chương trình là hai lnh:
STOP
END
Lnh PROGRAM và lnh STOP là các lnh tu chn, có th không
nht thiết phi có. Nếu ta không viết ra, chúng có th được chương trình
dch t thêm vào. Phn thân chương trình gm tt c các lnh khác nhm
thc hin bài toán được gii và chia thành hai nhóm: nhóm các lnh thc
hin (executable statement) và nhóm các lnh không thc hin (non-
executable statement) hay gi là các lnh mô t, lnh khai báo. Nhóm các
lnh mô t phi nm phía trên ca thân chương trình.
Như vy các chương trình Fortran có th có cu trúc tng quát như
sau:
PROGRAM Tên chương trình
Các lnh khô
ng thc hin (Non-executable statements)
Các lnh thc hin (Executable statements)
STOP
END
Trong chương trình tính giá tr trung bình ca chui s thc thí d
trên, ta thy sau t khóa PROGRAM là tên chương trình - đó là cm ch
TGTTB. Nhóm các lnh không thc hin (nhng lnh mô t) gm 2 lnh:
INTEGER DEM
REAL X, TONG, TB
còn nhóm lnh thc hin gm các lnh tiếp sau hai lnh trên:
TONG = 0.0
DEM = 0
5 READ*, X
IF (X .NE. 0.0) THEN
TONG = TONG + X
DEM = DEM + 1
GOTO 5
END IF
TB = TONG / REAL(DEM)
PRINT 6, TB
6 FORMAT (1X, 'TRUNG BINH BANG ' , F6.2)
Nhng lnh thc hin thường là nhng lnh gán, lnh tính toán các
11
phép tính, lnh chuyn điu khin, đọc, ghi s liu và mt s lnh khác.
Cui cùng chương trình có lnh STOP và END.
Trong thc tế có th có nhng chương trình ln hơn rt nhiu, gm
hàng nghìn dòng lnh và có cu trúc phc tp. Nhưng ta vn thy nó
phn đầu, phn thân và phn cui, trong phn thân chương trình cũng ch
có hai nhóm lnh ging như trong chương trình đơn gin trên đây.
1.5. Quy cách son tho mt chương trình Fortran
Các chương trình Fortran được son tho nh mt b son tho
(editor) hoc phn mm son văn bn nào đó. Các lnh ca mt chương
trình được viết thành các dòng ni tiếp nhau, mi lnh trên mt dòng mi.
Trên màn hình son tho chun
(*)
người ta quy ước các ct t 1 đến 5
(hình 1.2) dùng để ghi s hiu lnh hay gi là nhãn lnh, ct 6 chuyên dùng
để ghi ký t ni dòng lnh, ni dung các dòng lnh ch được ghi trên các
ct t 7 đến 72. Tt c các thông tin quá ct 72 b b qua.
LÖnh Fortran
K
tù nèi dßn
Nh·n lÖnh
C¸c cét
1-5
Cét
6
c cét
7-72
Hình 1.2. Quy cách viết lnh Fortran trên màn hình son tho
(*)
Trước đây người ta phi dùng giy chuyên dng, gi là blank, để viết chương
trình Fortran. Sau đó tng lnh chương trình t giy chun được ghi vào mt t bìa
chuyên dng có hình dáng đặc bit bng máy đục l giúp t động mã hóa tng ký
t ca dòng lnh thành mt hàng l vi v trí khác nhau. Ngày nay các b son
tho có th giúp chúng ta viết các lnh trc tiếp t bàn phím, khi viết các ký t
hiu hin trên màn hình để d theo dõi và chnh sa ging như ta son tho mt
văn bn bt k, sau đó lưu trong máy tính dưới dng file ngun.
Nhãn lnh là nhng s nguyên dương, khác không, dùng để ch s
hiu ca dòng lnh. Ch nhng dòng lnh nào cn được chuyn điu khin
ti bi nhng dòng lnh khác mi nht thiết phi có nhãn lnh. Du ni
dòng lnh có th là bt c ký t nào ngoài ký t trng và s không, thường
người ta hay dùng du * hoc du +, để ch rng dòng hin ti là
phn ni
tiếp ca lnh dòng trên đó. Trong các dòng lnh có th có nhng ký t
trng để d đọc. Trong chương trình son tho có th có nhng dòng ghi
chú (comment lines); nhng dòng này không thuc ni dung chương trình,
không được dch khi dch chương trình, mà ch có tác dng gi nh cho
người lp trình khi theo dõi kim tra chương trình. Tt c các dòng ghi chú
phi bt đầu bng mt ch cái, thường người ta dùn
g ch C (ch cái đầu
tiên ca t comment), đứng ct th nht ca các ct dùng để ghi nhãn.
Trong sách này s luôn s dng ch cái C để đánh du dòng ghi chú trong
các chương trình.
Xây dng mt chương trình máy tính nói chung là mt công vic khó
đòi hi tính cn thn, t m. Kinh nghim cho thy rng ngay c đối vi
người lp trình thành tho, khi viết mt chương trình dù đơn gin vn có
th mc li, t
rong đó có c nhng li không ng ti. Do đó, mt s sách
dy ngôn ng lp trình, người ta còn khuyên người hc ngay t đầu chú ý
luyn thói quen, hay phong cách (style) son tho chương trình. Mt
chương trình đẹp là chương trình tính đúng và nhanh cái mà ta cn tính,
nhưng đơn gin, d hiu và sáng sa v cách trình bày. Trong tài liu này
dn dn cũng s có nhng ch dn, nhng li k
huyên quan trng cho người
hc rèn luyn phong cách son chương trình. Chu khó rèn luyn nhng
thói quen tt cũng góp phn giúp chúng ta tiến xa.
Bài tp
1. Nếu dùng ch C làm du ni dòng lnh thì có được không?
2. Các nhãn trong chương trình có cn tăng dn không?
3. Nêu các bước gii bài toán sp xếp chui s nguyên nhp t bàn
phím theo th t ln dn. Viết gi trình cho bài toán đó.
12
Chương 2 - Nhng yếu t cơ bn ca Fortran
2.1. D liu và cách biu din d liu trong Fortran
Fortran có th thao tác vi sáu loi (kiu) d liu cơ bn thường gp
trong thc tế là: các s nguyên, s thc, s phc, s thc độ chính xác gp
đôi, các giá tr lôgic và d liu văn bn. Trong chương này ta s làm quen
vi các d liu kiu s nguyên, s thc, giá tr lôgic và văn bn (chui ký
t).
S nguyên là lit các s thp phân vi du +, hoc không có
du.
Thí d:
0 ; 6 ; 400 ; +1234
Các s nguyên được biu din dưới dng
I
. Giá tr cc đại ca s
nguyên gi là kh năng biu din s nguyên ca máy tính.
Trong Fortran có hai dng biu din s thc. Dưới dng
F
s thc
gm phn nguyên và phn thp phân, cách nhau bi du chm. S thc có
th có du du +, hoc không có du. Nếu phn nguyên hoc phn thp
phân bng không, có th không cn viết ra các phn đó. Du chm thp
phân nht thiết phi có mt. Thí d:
2.583 ; 14.3 ; 0.8 ; 12. ; .7 ; 14.
Giá tr cc đại và s ch s có nghĩa cc đại trong dng
F
ph thuc
vào dng, hay kiu (kind) khai báo ca s thc.
Dng
E
biu din s thc thành hai phn: phn hng thc nm trong
khong t 0,1 đến 1,0 và phn bc. Bc bt đầu bng ch
E
, tiếp sau là
hng nguyên gm không quá hai ch s thp phân, có th có du hoc
không du. Thí d s 25000 có th viết dưới dng
E
là 0.25E05. S ch s
có nghĩa ca phn hng thc và hng nguyên cũng tùy thuc loi s thc
khai báo.
Hng vi độ chính xác gp đôi (dng
D
) có th viết như s vi du
chm thp phân, cha t 8 đến 16 ch s có nghĩa, hoc như s dng mũ
vi ch
D
thay vì
E
, trong đó phn hng thc có th cha ti 16 ch s
có nghĩa. Thí d:
2.71828182 ; 0.27182818D+1
Tr tuyt đối cc đại ca các s thc thường và độ chính xác gp đôi
bng
79
10
đến
75
10 .
S phc biu din bng mt cp hng thc trong du ngoc đơn và
cách nhau bi du phy. Thí d (2.1, 0.5E2) biu din s phc
i 501,2
trong toán hc.
Hai s trong du ngoc ng vi các phn thc và phn o phi cùng
độ chính xác biu din.
Các giá tr d liu văn bn dùng để biu din các đon văn bn như
tên các đại lượng, các khái nim, thí d cm ch " Toc do", "Temperature",
"BAO CAO SO 1"... Người ta còn gi d liu văn bn là d liu ký t, xâu
ký t, d liu ch.
Các ch s 1, 2, ...,
9, 0 khi dùng vi tư cách là để biu din các giá tr
s tương ng thì chúng cũng là nhng d liu kiu văn bn.
D liu lôgic dùng để ch kh năng có hay không ca mt s kin,
đúng hay sai ca mt biu thc quan h. Người ta dùng hai giá tr lôgic là
13
.TRUE..FALSE. để ch hai trng thái đối lp nhau trong nhng thí d
trên và ngôn ng Fortran có th x lý vi nhng giá tr lôgic, tc thc hin
nhng phép tính đối vi các giá tr lôgic như trong toán hc có th thc
hin.
S dĩ máy tính làm được nhng vic như chúng ta thy là vì nó có th
x lý thông tin, so sánh, tính toán được vi nhng kiu d liu này và đưa
ra nhng kết lun, thông báo... Tt c nhng th
ông tin chúng ta gp trong
đời sng thc tế đều có th được biu din bng nhng d liu kiu này
hoc kiu khác.
Trên đâynhng kiu d liu cơ bn ca ngôn ng lp trình Fortran.
Sau này và các chương khác, chúng ta s thy còn có nhng kiu d liu
khác được t chc da trên nhng kiu d liu cơ bn va trình bày.
đây
chúng ta cn lưu ý rng nhng khái nim d liu trong máy
tính như s nguyên, s thc... nói chung ging vi nhng khái nim tương
ng trong đời sng hoc trong toán hc. Nhưng đồng thi cũng có nhng
nét khác bit. Thí d, Fortran ch hiu và tính toán được vi nhng s
nguyên loi thường không ln hơn
9
102
, ngôn ng lp trình Pascal ch
làm vic vi nhng s nguyên không ln hơn 32767 và không nh hơn
32768, trong khi hàng ngày chúng ta có th viết trên giy hoc tính toán
các phép tính vi nhng s nguyên có giá tr tùy ý. Tình hình cũng tương
t như vy đối vi các s thc. Vy trong máy tính có nhng gii hn nht
định trong vic biu din các s, không phi so máy tính cũng biu
din được và tính toán được. Tuy nhiên, vi nhng gii hn như hin nay
,
Fortran vn cho phép chúng ta lp các chương trình để tính toán, x lý vi
tt c nhng giá tr s gp trong đời sng và khoa hc k thut.
2.2. Hng và biến
Máy tính x lý d liu hay thc hin nhng tính toán vi nhng đại
lượng. Tt c nhng đại lượng đó phi được lưu gi trong máy tính. Nhng
đại lượng không đổi trong sut quá trình thc hin ca chương trình gi là
các hng, còn nhng đại lượng có th nhn nhng giá tr khác nhau gi là
các biến. Vi mi hng hoc biến, trong b nh máy tính giành ra mt địa
ch để lưu giá
tr. Tên chính là ký hiu quy ước ca địa ch đó.
2.2.1. Tên biến và tên hng
Tên biến trong Fortran chun được biu din bng tp hp t 1 đến 6
các ch cái trong bng ch cái la tinh (26 ch cái) hoc các ch s 0, 1, ...,
9, nhưng phi bt đầu bng ch cái.
Trong mt chương trình các tên biến không được trùng nhau. Trong
các phiên bn Fortran hin nay, để dùng làm tên không phân bit ch cái
hoa và ch cái thường. Ngoài ra, còn mt vài ký t khác cũng có th dùng
để cu to tên. Phiên bn Fortran 90 cho phép đặt tên vi s ký t dài hơn
6 và trong tên có th có mt s ký t khác na. Tuy nhiên, sinh viên nên
tp thói quen đặt tên gn gàng theo Fortran chun, bi vì tp hp 6 ký t đã
rt đủ để chúng ta mô t các bài toán, k c nhng bài toán ln và phc tp.
Thí d, các tên sau đây
X ; A ; X1 ; B2T5 ; SOHANG ; SUM là hp l, còn các tên sau đây
là sai:
1NGAY ; HE SO ; B*T
vì trong tên th nht ký t đầu tiên
là ch s, trong tên th hai có ký t du
cách, trong tên th ba có ký t (*) không phi là nhng ký t dùng để đặt
tên.
Quy tc đặt tên biến trên đây cũng áp dng đối vi tên chương trình,
tên hng, tên các chương trình con và tên file. (Riêng vi tên file có th
thêm phn m rng gm không quá ba ch cái hoc ch s ngăn vi phn
tên chính bi du chm).
14
2.2.2. Mô t (khai báo) kiu biến và kiu hng
Kiu ca biến tương ng vi kiu d liu mà nó biu din. Các biến
nguyên biu din các d liu s nguyên, các biến thc - s thc... Trong
chương trình phi ch rõ các biến được s dng biu din d liu kiu nào
(nguyên, thc, lôgic, phc, văn bn, s thc độ chính xác thường hay độ
chính xác gp đôi...)
.
Mi biến ch lưu gi được nhng giá tr đúng kiu ca nó. Mt biến
đã mô t kiu là s nguyên thì không th dùng để lưu giá tr s thc hay giá
tr lôgic.
Cách mô t n ch dùng đối vi các biến nguyên và thc: dùng tên
biến nguyên bt đầu bng mt trong sáu ch cái I, J, K, L, M, N, còn tên
biến thc bt đầu bng mt trong nhng ch cái ngoài sáu ch cái trên. Nói
chung, người mi hc lp trình k
hông bao gi nên dùng cách mô t n.
Cách mô t hin dùng các lnh mô t hin như INTEGER, REAL,
CHARACTER, LOGICAL, DOUBLE PRECISION, COMPLEX... để ch
kiu d liu mà các biến biu din. Dưới đây là quy tc viết nhng lnh mô
t kiu d liu: tun t nguyên, thc, lôgic, phc, thc độ chính xác gp
đôi và ký t văn bn:
INTEGER Danh sách các biến nguyên
REAL Danh sách các biến thc
LOGICAL Danh sách các biến lôgic
COMPLEX Danh sách các biến phc
DOUBLE PRECISION Danh sách các biến độ chính xác đôi
CHARACTER Danh sách các biến ký t
Trong danh sách các biến s lit kê các tên biến, nếu có hơn mt biến
thì các biến phi cách nhau bi du phy.
Thí d:
INTEGER I, TT, DEM
REAL X1, APSUAT, MAX, TIME, DELTA
COMPLEX P1, P2, SOPH
ch rng các biến I, TT, DEM biu din các giá tr s nguyên, các biến X1,
APSUAT, MAX, TIME, DELTA biu din các giá tr s thc, còn ba biến
P1, P2, SOPH - s phc.
Nhng giá tr được gi nguyên nht quán trong sut chương trình (tc
các hng s) thường được gán vào các địa ch nh thông qua tên trong lnh
khai báo hng
có dng:
PARAMETER (ten1 = biu thc 1, tên 2 = biu thc 2, ...)
Thí d, trong chương trình nếu ta nhiu ln dùng đến giá tr s
141593,3
thì ta có th gán giá tr 3,141593 cho mt tên hng là PI bng
lnh
PARAMETER (PI = 3.141593)
Lnh sau đây
PARAMETER (HSMSD = 0.0026, RO = 1.0028)
khai báo hai hng s: HSMSD và RO, HSMSD được gán giá tr bng
0,0026, còn RO được gán giá tr 1,0028.
Trong chương trình tt c nhng lnh khai báo (mô t) va gii thiu
trên đây thuc loi các lnh không thc hin và chúng phi nm đầu
chương trình, trước tt c các lnh thc hin.
Khái nim v tên, kiu d liu ca biến, ca hng là
nhng khái nim
cơ bn, quan trng trong ngôn ng lp trình.
đầu mc này đã nói mt tên thc cht là ký hiu quy ước ca mt
15
địa ch trong b nh ca máy tính để lưu giá tr. Lnh khai báo biến mi
ch đặt tên cho mt địa ch trong b nh và quy định trong địa ch đó có th
lưu gi d liu kiu gì. Còn c th trong ô nh đó đã có cha giá tr chưa
hay cha giá tr bng bao nhiêu thì tùy thuc vào các lnh thc hin trong
chương trình, ti tng đon ca chương trình. Điu này
ging như ta quy
ước định ra mt ngăn trong t văn phòng để chuyên gi các công văn, còn
trong ngăn y có công văn hay không, hoc có my công văn thì tùy thuc
lúc này hay lúc khác. Dưới đây nêu mt thí d để minh ha ý nghĩa ca
vic đặt tên biến và mô t kiu (d liu) ca biến, đồng thi theo dõi giá tr
ca biến ti tng thi đim ca c
hương trình. Gi s ta viết mt chương
trình để tính din tích
s
ca hình tam giác khi giá tr độ dài đáy b bng 5,0
cm, chiu cao
h bng 3,2 cm, in kết qu tính lên màn hình. Chương trình
sau đây s thc hin nhng vic đó:
REAL DAY, CAO ! (1)
DAY = 5.0 ! (2)
CAO = 3.2 ! (3)
DAY = 0.5 * DAY * CAO ! (4)
PRINT *, ‘DIEN TICH TAM GIAC BANG’, DAY ! (5)
END ! (6)
Trong chương trình này có sáu lnh. Lnh (1) khai báo hai biến tên là
DAY và CAO d định để lưu giá tr s thc tương ng ca đáy
b và chiu
cao
h
ca tam giác. Lnh (2) gán giá tr 0,5
b (cm) cho biến DAY. Lnh
(3) gán giá tr
5,3
h (cm) cho biến CAO. Lnh (4) tính giá tr ca biu
thc
hb 5,0 , tc din tích
s
ca tam giác, bng 8 (cm
2
) và gán cho biến
DAY. Lnh (5) in lên màn hình dòng ch DIEN TICH TAM GIAC BANG
và sau đó là giá tr ca biến DAY. Lnh (6) là lnh kết thúc chương trình.
Sinh viên mi hc lp trình thường có th không hiu lnh th năm, khi
thy in din tích hình tam giác mà li in giá tr ca biến DAY. Trong đầu
h quen nghĩ khai báo DAY có nghĩa DAY là độ dài cnh đáy tam giác.
Nhưng nếu hiu được rng lnh (1) khai báo REAL DAY, CAO thc ra
mi ch d định dùng hai tên DAY và CAO để lưu các s thc, khôn
g cn
biết s thc đó bng bao nhiêu. chương trình trên, khi lnh (2) thc hin
xong thì trong biến DAY (trong ô nh có tên là DAY) mi thc s có s
5,0, tc độ dài đáy tam giác. Nhưng khi chương trình chy xong lnh (4)
thì trong biến DAY đã là s 8,0 ch không phi là s 5,0 na. Và khi thc
hin xong lnh (5) thì trên màn hình s in đúng giá tr din tích tam giác.
Nm vng được điu này có nghĩa là đã hiu được ý nghĩa ca biến, tên
biến và tun t làm
vic ca chương trình, tc các giá tr được lưu trong
máy tính như thế nào trong khi chương trình chy.
Dưới đây là hai li khuyên đầu tiên có l quan trng nht đối vi sinh
viên mi hc lp trình:
1) Sau khi tìm hiu xong bài toán cn gii, phi cân nhc tng đại
lượng trong bài toán có kiu d liu là s nguyên, s thc, ký t văn bn...
để đặt tên và
khai báo kiu cho đúng. Kinh nghim cho thy rng sinh viên
nào viết được nhng lnh khai báo h thng các tên biến đúng, va đủ,
sáng sa trong phn khai báo đầu chương trình thì thường là sau đó viết
được chương trình đúng. Còn nhng sinh viên không biết đặt tên cho các
biến, va bt tay vào son tho chương trình đã loay hoay vi lnh m file
d liu, tính cái này cái kia, thì thường là không hiu gì và không bao gi
làm được bài tp.
2) Nên tuân th cách đặt tên
ca Fortran chun. Ta có quyn chn
nhng ch cái, ch s nào để to thành tên là tùy ý, song nên đặt tên có
tính gi nh đến nhng đại lượng tương ng trong bài tp. Thí d, vi bài
toán va nói ti trong mc này ta có ba đại lượng là: độ dài cnh đáy,
đường cao và din tích tam giác. Nên khai báo tên ba biến tương ng bng
ba t tt ca tiếng Vit vi lnh sau:
REAL DAY, CAO, DTICH
hoc bng ba t tt ca tiếng Anh vi lnh
:
16
REAL BASE, HEIGHT, SQRE
hoc bng ba ch cái đúng như trong đầu đề bài tp vi lnh:
REAL B, H, S
đều là nhng li khai báo đúng, d hiu, trong đó li khai báo trên cùng có
l là tt nht, li khai báo sau cùng thì hơi quá ngn gn. Còn vi cùng
mc đích khai báo mà dùng lnh sau đây thì mc dù không sai, nhưng hoàn
toàn không nên, rt d gây nhm ln, mt mi trong khi kim tra chương
trình:
REAL X, IC, DT
2.3. Biến có ch s (mng)
2.3.1. Khái nim mng
Mng là tp hp có sp xếp ca các đại lượng được ký hiu bng mt
tên duy nht. Các thành phn ca tp hp gi là nhng phn t mng. Mi
phn t được xác định theo tên ca mng và v trí ca phn t đó trong
mng, tc tr s ca các ch s. Tên mng được đặt t
uân theo quy tc như
tên biến. Các ch s nm trong du ngoc đơn và nếu có hơn mt ch s thì
các ch s phi cách nhau bi du phy.
Thí d: A(1), A(2), A(3) tương ng vi cách viết thông thường cho
các biến
321
, , aaa trong toán hc. Vy đây ta đã đặt cho tp hp c 3 giá
tr này mt tên chung là A, nhưng để ch giá tr th nht ta thêm ch s 1
vào tên - A(1), để ch giá tr th hai ta thêm ch s 2 - A(2) và để ch giá tr
th ba ta thêm ch s 3 - A(3).
Tương t, các phn t ca ma trn hai chiu trong đại s
232221
131211
aaa
aaa
được viết trong Fortran là A(1,1), A(1,2), A(1,3), A(2,1), A(2,2), A(2,3)
(ch s th nht - s hiu dòng, ch s th hai - s hiu ct).
Thêm mt thí d na v mng. Mt năm có 12 tháng, mi tháng có
mt tên, thí d trong tiếng Vit: Tháng Giêng, Tháng Hai, ..., Tháng Mười
hai, trong tiếng Anh: January, February, ..., December. Ta hoàn toàn có th
gp 12 tên tiếng Anh ca các tháng trong năm vào thành mt mng có tên
chung là EMONTH. Vy mng EMONTH s mng có 12 giá tr (12
phn t), mi phn t là mt t ch tên mt tháng. Khi nói đến Ja
nuary tc
là nói ti giá tr th nht ca mng EMONTH, ta viết EMONTH(1), nói
đến December là nói ti giá tr th 12 ca mng EMONTH, ta viết
EMONTH(12).
Trong Fortran IV, mt phiên bn trước đây ca ngôn ngũ Fortran, cho
phép dùng các mng ti đa 7 ch s. Chiu ca mng ng vi s ch s, còn
kích thước ca mng ng vi s phn t cha trong mng.
Ch s ca mng có th được xác định bng các hng hoc biến
ngu
yên dương vi tr s ln hơn 0. Cũng có th ch s xác định bng biu
thc s hc bt k. Nếu dùng biu thc kiu thc, thì sau khi tính giá tr
ca biu thc, giá tr s thc được chuyn thành s nguyên, tc ct b phn
thp phân.
Trong mc 2.1 chúng ta đã
nói v các kiu d liu cơ bn. Mi mt
biến kiu d liu cơ bn trong mt thi đim chy chương trình ch lưu
(cha) được mt giá tr. Bây gi ta thy mng là mt thí d v kiu d liu
mi cu to t các kiu cơ bn - mt biến mng trong mt thi đim c
ó th
lưu được nhiu giá tr s nguyên, s thc, chui ký t... Nhưng cn lưu ý
rng tt c các phn t ca mng, tc tt c các giá tr ca mng phi có
cùng kiu d liu. Thí d vi mng EMONTH va xét, ta không th đưa
mt giá tr ký t January vào phn t EMONTH(1) và s thc 1.27 vào
EMONT
H(2).
Mng là mt yếu t rt quan trng trong Fortran. Sau này ta s thy s
17
dng mng trong ngôn ng lp trình có th giúp viết nhng đon chương
trình rt ngn gn, trong sáng. Đặc bit trong các vòng lp, ch bng vài
dòng lnh có th khiến máy tính thc hin nhiu triu phép tính s hc.
2.3.2. Mô t mng
Mô t mng thc hin ngay đầu chương trình và cha thông tin v
tên, chiu và kích thước mng vi toán t DIMENSION:
DIMENSION
) ..., , ,( MAT ), ..., , ,(A
2121 k
mmmnnn
trong đó -MAT A, tên các mng;
k
mmmnnn ,...,, ,,...,,
2121
các gii
hn trên ca các ch s ch ra bng các hng nguyên dương (gii hn
dưới luôn bng 1 và không cn ch định trong mô t).
Theo mô t này, máy tính s giành trong b nh nhng vùng địa ch
để lưu tt c các phn t ca các mng. Các phn t ca mng nhiu chiu
được lưu liên tiếp nhau sao cho ch s th nht biến đổi nhanh nht, ch s
sau cùng biến đổi chm n
ht.
Có th mô t mng bng các lnh mô t kiu hin như đối vi các
biến thông thường, thí d:
REAL MAX, L(7), A(20,21)
Trong lnh mô t này biến MAX được khai báo là biến s thc, có th
gi là biến đơn, còn mng L (biến có ch s) là mng mt chiu vi 7 phn
t s thc, mng A là mng hai chiu (hai ch s) vi g
ii hn trên ca ch
s th nht là 20, ca ch s th hai là 21, nó gm 420 phn t.
Vì các gii hn ch s (kích thước mng) phi được ch định trước
phn khai báo bng các hng nguyên dương, không th là các biến, nên
trong thc tin lp trình phi chú ý cân nhc chn các gii hn ch s sao
cho chúng không quá ln làm tn b nh, nhưng
cũng phi va đủ để biu
din hết các phn t có th có ca mng. Thí d cn biu din mt bng s
các giá tr nhit độ trung bình tng tháng trong 100 năm thì ta khai báo
mng TEM(100,12) là hp lý. Nếu d định gii h phương trình đại s
tuyến tính không quá 20 phương trình, ta nên khai báo các mng REAL
A(20,21), X(20) là va đủ để biu din ma trn các h s
ji
a
,
(k c các h
s t do) và các nghim
i
x . Vi mng EMONTH va nhc trong mc này
thì lnh khai báo sau:
CHARACTER*9 EMONTH(12)
là hoàn toàn hp lý vì mt năm ch có 12 tháng và tên tháng dài nht (vi
tiếng Anh) là September gm 9 ch cái.
2.4. Các hàm chun
Mt s phép tính như ly căn bc hai ca mt s, tính tr tuyt đối ca
mt s, tính hàm sin ca mt góc... thường xuyên gp trong nhiu thut
toán, nên được xây dng sn thành các hàm gi là các hàm riêng có ca
Fortran (intrinsic functions) hay còn gi là các hàm chun.
Bng 2.1 lit kê mt s hàm chun ca Fortran thường dùng trong
sách này.
Mi hàm chun có mt tên ca nó. Tên ca hàm được tiếp ni vi đầu
vào, gi là đối s ca hà
m, nm trong cp du ngoc đơn. Đối s ca các
hàm chun có th là các hng, biến, hay biu thc. Nếu mt hàm có nhiu
đối s thì các đối s được viết cách nhau bng du phy. Khi cho các giá tr
c th vào các đối s thì hàm tính ra mt giá tr ca hàm. Vì vy các hàm
thường dùng để tính mt giá tr nào đó để gán vào mt biến khác, người ta
gi là gi hàm ra để tính. Hàm không
bao gi có mt bên trái du ‘ = ’
ca lnh gán.
Thí d, nhng lnh sau đây gi các hàm để tính mt s giá tr:
18
S = SIN (0.5)
TG = TAN (S)
C = COS (ANGLE * 3.141593 / 180.0)
Bng 2.1. Mt s hàm
chun ca Fortran
Tên hàm và
đối s
Giá tr hàm
SQRT (X)
x Căn bc hai ca
x
ABS (X)
x Tr tuyt đối ca
x
SIN (X)
)sin(x
x
tính bng rađian
COS (X)
)cos(x
x
tính bng rađian
TAN (X)
)(tg x
x
tính bng rađian
EXP (X)
x
e
e
nâng lên lu tha
x
LOG (X)
)ln(x Logarit t nhiên ca
x
LOG10 (X)
)lg(x Logarit cơ s 10 ca
x
INT (X)
Chuyn phn nguyên ca s thc
x
thành s nguyên
REAL (I)
Giá tr thc ca
I
(chuyn mt giá tr nguyên thành
giá tr thc)
MOD (I,J)
Ly phn dư nguyên ca phép chia hai s
JI /
Trong lnh th nht ta gi giá tr hng 0,5 (rađian) cho đối s ca hàm
SIN để nó tính ra giá tr sin ca góc 0,5 và gán giá tr đó cho biến S. Trong
lnh th hai, ta đã gi giá tr ca biến S vào đối s ca hàm TAN để tính ra
tang. Còn trong lnh th ba, ta đã gi mt biu thc vào đối s ca hàm
COS để nó tính ra giá tr côsin ca mt góc có độ ln bng giá tr ca biu
thc đó. Trong trường hp này, máy
tính trước hết phi tính (ước lượng)
giá tr ca biu thc đối s, sau đó mi tính côsin theo giá tr nhn được.
Thy rng mt hàm biu din mt giá tr. Giá tr này có th được dùng
trong các tính toán khác hoc lưu địa ch nh khác. Mt hàm chun cũng
có th làm đối s ca mt hàm chun khác:
XLG = LOG(ABS(X))
Trong Fortran có mt s hàm chun cho ra giá tr vi kiu cùng kiu
vi đối s ca m
ình, chúng được gi là các hàm t sinh (generic function).
Thí d hàm ABS(X), nếu đối s X là s nguyên thì giá tr hàm ABS(X)
cũng là s nguyên, nếu X là s thc - ABS(X) cũng là s thc. Mt s hàm
ch định kiu ca đầu vào và đầu ra. Thí d hàm IABS là hàm đòi hi đối
s nguyên và cho ra giá tr tuyt đối là s nguyên. Danh sách đầy đủ hơn
v các hà
m chun ca Fortran được dn trong ph lc 1.
Khi dùng mt hàm chun nào đó phi đọc k li mô t xem nó tính ra
giá tr gì, điu kin ca các đối s ra sao. Thí d các hàm lượng giác phi
dùng đối s là rađian, nếu ta cho giá tr đối sđộ thì kết qu tính s sai.
2.5. Lnh gán và các toán t s hc
2.5.1. Lnh gán
Các tính toán trong Fortran có th ch định bng lnh gán vi dng
tng quát như sau:
Tên biến = Biu thc
Bên trái du lnh gán (du =) là tên mt biến. Biu thc bên phi có
th là mt hng, mt biến, mt biu thc s hc gm các toán t s hc
(bng 2.2) thc hin gia các toán hng là các hng, biến và hàm chun
hay mt biu thc lôgic. Khi thc hin lnh gán, trước hết máy ước lượng
(tính) giá tr ca biu thc bên phi, ri gán giá tr đó cho biến bên
trái, tc
lưu giá tr tính được ca biu thc bên phi vào địa ch nh có tên biến bên
19
trái. Kiu d liu ca biến và ca biu thc phi phù hp.
Thí d các lnh gán:
PI = 3.141593
S = PI * BKINH **2
I = I +1
Lnh th nht gán hng s 3,141593 cho biến có tên là PI. Lnh th hai
gán giá tr ca biu thc
2
)BKINH(PI cho biến có tên là S. Lnh th ba
ly giá tr hin ti ca biến I cng thêm mt đơn v và li gán cho chính
biến I.
trên đã nói, kiu d liu ca biến và ca biu thc phi phù hp.
Trường hp biến bên trái là biến thc, còn biu thc bên phi là giá tr
nguyên thì máy tính s chuyn giá tr nguyên đó thành giá tr thc (s thc
vi phn thp phân bng không) ri mi gán cho
biến. Khi biến bên trái là
biến nguyên, biu thc bên phi có giá tr thc, thì máy tính ct b phn
thp phân ca giá tr thc, đổi s thc nhn được thành s nguyên ri mi
gán nó cho biến nguyên. Các trường hp gán sai khác chương trình dch s
báo li.
Không nên quan nim lnh gán như du bng trong toán hc.
2.5.2. Các phép tính s hc đơn gin
Các phép tính s hc hay còn gi là các toán t s hc gm
có các
phép tính cng, tr, nhân, chia và nâng lên lu tha được ký hiu bng các
toán t trong Fortran như trong bng 2.2.
Gi là nhng phép tính s hc bi vì các toán hng ca các phép tính
là nhng giá tr s, thí d s nguyên, s thc, s phc. Sau này chúng ta s
thy máy tính có th tính toán vi nhng giá tr kiu khác như giá tr lôgic,
giá tr văn bn...
Bng 2.2. C
ác phép tính s hc
Phép tính Dng đại s Trong Fortran
Cng
B
A
A + B
Tr
B
A
A B
Nhân
B
A
A * B
Chia
B
A
A / B
Lu tha
3
A
A** 3
2.5.3. Ước lượng biu thc s hc
Khi tính giá tr ca biu thc s hc, nếu biu thc đó gm nhiu
phép tính đơn, thì máy s tính toán tng phép tính đơn để nhn các kết qu
trung gian, sau đó tính giá tr cui cùng ca biu thc gi là ước lượng.
Mc ưu tiên khi ước lượng giá tr ca mt biu thc s hc gm nhiu
phép tính đơn
nêu trong bng 2.3.
Nếu du âm đứng trước tên biến đầu tiên trong biu thc, thì nó được
tính vi cùng mc ưu tiên như phép tr. Thí d: A**2 bng (A**2),
A*B bng (A*B) và A+B bng (A)+B.
Bng 2.3. Mc ưu tiên các phép tính s hc
Ưu tiên Phép tính
1 Du ngoc
2 Nâng lên lu tha
3 Nhân chia
4 Cng và tr
Khi các phép tính cùng mc ưu tiên thì tt c các phép tính được
thc hin t trái sang phi, thí d:

Preview text:

NGÔN NGỮ LẬP TRÌNH FORTRAN
VÀ ỨNG DỤNG TRONG KHÍ TƯỢNG THỦY VĂN
Phạm Văn Huấn
NXB Nông nghiệp - Hà Nội - 2005
Từ khóa: Ngôn ngữ, lập trình, Fortran, thuật giải, giả trình, lưu đồ, khai báo, hằng, biến, file, lệnh, tuần tự, rẽ nhánh, lặp, chương trình con, thủ tục, hàm.
Tài liệu trong Thư viện điện tử Trường Đại học Khoa học Tự nhiên có thể được sử dụng cho mục đích học tập và nghiên cứu cá
nhân. Nghiêm cấm mọi hình thức sao chép, in ấn phục vụ các mục đích khác nếu không được sự chấp thuận của nhà xuất bản và tác giả.
ĐẠI HỌC QUỐC GIA HÀ NỘI PHẠM VĂN HUẤN
NGÔN NGỮ LẬP TRÌNH FORTRAN
VÀ ỨNG DỤNG TRONG KHÍ TƯỢNG THỦY VĂN
NHÀ XUẤT BẢN NÔNG NGHIỆP – 2005 1 MỤC LỤC
Giới thiệu .............................................................................................................................................................................................................................. 5
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................................................................................................................. 6
1.1. Phần cứng và phần mềm máy tính ........................................................................................................................................................................ 6
1.2. Thực hiện một chương trình máy tính .................................................................................................................................................................. 7
1.3. Quy trình giải bài toán trên máy tính.......................................................................................................
............................................................. 7
1.4. Những chương trình Fortran hoàn chỉnh ........................................................................................................................................................... 10
1.5. Quy cách soạn thảo một chương trình Fortran.................................................................................................................................................. 11
Chương 2 - Những yếu tố cơ bản của Fortran ............................................................................................................................................................... 12
2.1. Dữ liệu và cách biểu diễn dữ liệu trong Fortran ................................................................................................................................................ 12
2.2. Hằng và biến .......................................................................................................................................................................................................... 13
2.2.1. Tên biến và tên hằng...................................................................................................................................................................................... 13
2.2.2. Mô tả (khai báo) kiểu biến và kiểu hằng ..................................................................................................................................................... 14
2.3. Biến có chỉ số (mảng)............................................................................................................................................................................................. 16
2.3.1. Khái niệm mảng............................................................................................................................................................................................. 16
2.3.2. Mô tả mảng..................................................................................................................................................................................................... 17
2.4. Các hàm chuẩn ...................................................................................................................................................................................................... 17
2.5. Lệnh gán và các toán tử số học ............................................................................................................................................................................ 18
2.5.1. Lệnh gán ......................................................................................................................................................................................................... 18
2.5.2. Các phép tính số học đơn giản...................................................................................................................................................................... 19
2.5.3. Ước lượng biểu thức số học..............................................................................................................................
............................................. 19
2.5.4. Khái niệm về cắt và các phép tính hỗn hợp................................................................................................................................................. 20
2.5.5. Khái niệm về số quá bé và số quá lớn (underflow và overflow) ......................................................................................................
.......... 20
Chương 3 - Nhập và xuất dữ liệu đơn giản..................................................................................................................................................................... 22
3.1. Các lệnh xuất và nhập dữ liệu.............................................................................................................................................................................. 22
3.2. Các đặc tả trong lệnh FORMAT......................................................................................................................
.................................................... 24
Chương 4 - Các cấu trúc điều khiển................................................................................................................................................................................ 27
4.1. Khái niệm về cấu trúc thuật toán......................................................................................................................................................................... 27
4.1.1. Các thao tác cơ bản. Giả trình và lưu đồ..................................................................................................................................................... 27 2
4.1.2. Các cấu trúc tổng quát trong thuật giải....................................................................................................................................................... 28
4.1.3. Thí dụ ứng dụng thuật toán cấu trúc.........................................................................................................................
.................................. 28
4.2. Cấu trúc IF và các lệnh tương ứng ...................................................................................................................................................................... 29
4.2.1. Biểu thức lôgic................................................................................................................................................................................................ 29
4.2.2. Lệnh IF lôgic ...................................................................................................................
.............................................................................. 30
4.2.3. Lệnh IF số học..............................................................................................................................
................................................................. 32
Chương 5 - Cấu trúc lặp với lệnh DO ............................................................................................................................................................................. 44
5.1. Vòng lặp DO........................................................................................................................................................................................................... 44
5.1.1. Cú pháp của lệnh DO và vòng lặp DO......................................................................................................................................................... 44
5.1.2. Những quy tắc cấu trúc và thực hiện vòng lặp DO ...........................................................................................................................
......... 45
5.1.3. Thí dụ ứng dụng vòng lặp DO ...........................................................................................................................
........................................... 46
5.2. Vòng DO lồng nhau............................................................................................................................................................................................... 47
Chương 6 - File dữ liệu và tổ chức file dữ liệu trong Fortran....................................................................................................................................... 51
6.1. Khái niệm về file dữ liệu và tổ chức lưu trữ dữ liệu.......................................................................................................................................... 51
6.2. Các lệnh nhập, xuất dữ liệu với file .........................................................................................................................
............................................ 52
6.3. Kỹ thuật đọc các file dữ liệu ..............................................................................................................................
................................................... 54
6.3.1. Số dòng ghi được chỉ định............................................................................................................................................................................. 54
6.3.2. Dòng ký hiệu kết thúc dữ liệu..............................................................................................................................
......................................... 55
6.3.3. Sử dụng tuỳ chọn END..........................................................................................................................
........................................................ 56
6.4. Tạo lập các file dữ liệu .......................................................................................................................................................................................... 58
6.5. Kỹ thuật trợ giúp tìm lỗi chương trình .......................................................................................................................
........................................ 58
Chương 7 - Sử dụng biến có chỉ số trong Fortran ......................................................................................................................................................... 60
7.1. Mảng một chiều ..................................................................................................................................................................................................... 61
7.2. Lệnh DATA........................................................................................................................
.................................................................................... 62
7.3. Mảng hai chiều..............................................................................................................................
......................................................................... 62
7.3. Mảng nhiều chiều ..............................................................................................................................
.................................................................... 64
7.4. Những điều cần chú ý khi sử dụng các mảng .............................................................................................................................
........................ 67
Chương 8 - Chương trình con loại hàm .......................................................................................................................................................................... 70
8.1. Các hàm chuẩn ...................................................................................................................................................................................................... 70
8.2. Các hàm chương trình con ...................................................................................................................
................................................................ 71 3
8.2.1. Hàm lệnh......................................................................................................................................................................................................... 71
8.2.2. Hàm chương trình con ...................................................................................................................
............................................................... 72
8.3. Chỉ dẫn gỡ rối và phong cách viết chương trình có hàm con............................................................................................................................ 76
Chương 9 - Chương trình con loại thủ tục ..................................................................................................................................................................... 78
9.1. Khai báo và gọi chương trình con thủ tục........................................................................................................................................................... 78
9.2. Những thí dụ ứng dụng chương trình con thủ tục ..............................................................................................................................
............... 79
9.3. Những chỉ dẫn gỡ rối khi sử dụng các thủ tục..............................................................................................................................
...................... 83
Chương 10 - Kiểu dữ liệu văn bản................................................................................................................................................................................... 85
10.1. Tập các ký tự của Fortran .................................................................................................................................................................................. 85
10.2. Các dạng khai báo biến ký tự...............................................................................................................................
.............................................. 85
10.3. Nhập, xuất dữ liệu ký tự ...............................................................................................................................
...................................................... 86
10.4. Những thao tác với dữ liệu ký tự ...............................................................................................................................
........................................ 86
10.4.1. Gán các giá trị ký tự .................................................................................................................................................................................... 86
10.4.2. So sánh các giá trị ký tự ...............................................................................................................................
............................................... 87
10.4.3. Trích ra xâu con......................................................................................................
..................................................................................... 88
10.4.4. Kết hợp các xâu ký tự...............................................................................................................................
................................................... 88
10.4.5. Những hàm chuẩn xử lý xâu ký tự...............................................................................................................................
.............................. 89
Chương 11 - Những đặc điểm bổ sung về file................................................................................................................................................................. 94
11.1. Các file nội tại (Internal Files)............................................................................................................................................................................ 94
11.2. Các file truy nhập tuần tự (Sequential Files)............................................................................................................
........................................ 95
11.3. Các file truy cập trực tiếp (Direct-Access Files) ........................................................................................................
....................................... 97
11.4. Lệnh truy vấn INQUIRE ......................................................................................................................
.............................................................. 98
Tài liệu tham khảo ........................................................................................................................................................................................................... 101
Phụ lục 1: Bảng các hàm chuẩn của FORTRAN ......................................................................................................................
................................... 102
Phụ lục 2: Phương pháp Gauss giải hệ phương trình đại số tuyến tính ................................................................................................................... 104
Phụ lục 3: Phương pháp bình phương nhỏ nhất trong phân tích hồi quy................................................................................................................ 108
Phụ lục 4: Sơ đồ ứng dụng phương pháp hồi quy nhiều biến..............................................................................................................................
...... 110 4 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ối cùng là giúp sinh viên làm quen với các phương pháp xây dựng thuậ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ý số 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à đối 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 trình, 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ình 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ối cùng. Với cách trình bày này, bạn đọc sẽ thấy lập trình không còn là cái gì rắc rối, khó hiểu, mà nó tự nhiên như 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 trình 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 đơ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 giả 5
đích. Những chương trình thực hiện những thao tác chung, thường được
nhiều người sử dụng gọi là những phần mềm công cụ. Hệ điều hành là tập
hợp các chương trình giúp người dùng giao tiếp với máy tính. Hệ điều hành
tạo một môi trường thuận tiện cho người dùng “giao tiếp” được với máy
Chương 1 - Khái niệm về lập trình máy tính để
tính, thực hiện những chương trình ứng dụng như các bộ biên dịch ngôn
giải các bài toán ứng dụng
ngữ lập trình, các phần mềm công cụ... Hệ điều hành gồm một số chương
trình cho phép thao tác với file như in, sao chép, hiển thị danh sách file...
Những hệ điều hành hiện đại như Windows còn giúp máy tính nhận biết và
quản lý công việc của rất nhiều thiết bị ngoại vi nối kèm với máy tính như
các thiết bị nhập, xuất dữ liệu, màn hình, máy in, máy quét ảnh, loa, các
1.1. Phần cứng và phần mềm máy tính
máy quan trắc chuyên dụng...
Máy tính được thiết kế để thực hiện những thao tác tuân theo một tập
những câu lệnh do người dùng viết ra, gọi là chương trình.
Các máy tính có cấu tạo chung bên trong như trên hình 1.1. Người External memory
dùng sử dụng bàn phím, chuột hoặc những thiết bị nhập dữ liệu khác để
đưa thông tin vào máy tính. Bộ xử lý (processor) là một phần của máy tính
kiểm soát tất cả các phần khác. Bộ xử lý nhận dữ liệu vào và lưu chúng ở
bộ nhớ (memory). Nó nhận biết các lệnh của chương trình. Nếu ta muốn Internal memory
cộng hai giá trị, bộ xử lý sẽ lấy hai giá trị đó từ bộ nhớ và gửi đến khối xử
lý số học lôgic
(ALU). Khối này thực hiện phép cộng và bộ xử lý lưu kết
quả vào bộ nhớ. Trong khi xử lý, bộ xử lý và khối số học lôgic sử dụng Input Processor Output
một lượng bộ nhớ nhỏ gọi là bộ nhớ trong (internal memory). Phần lớn dữ
liệu được lưu ở bộ nhớ ngoài (external memory) như đĩ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à ALU
khối xử lý trung tâm hay CPU.
Trong chương trình, ta thường lệnh cho máy tính in kết quả tính toán CPU
lên màn hình hay máy in nối với máy tính và là những thiết bị xuất dữ liệu.
Phần mềm chứa những chỉ dẫn hoặc lệnh mà ta muốn máy tính thực
hiện. Phần mềm có thể được viết bằng nhiều ngôn ngữ và cho nhiều mục
Hình 1.1. Sơ đồ khối của một máy tính 6
Thông thường hiện nay các chuyên gia lập chương trình viết ra rất
các lệnh ta viết được thực hiện trong máy tính. Lỗi chương trình cũng có
nhiều chương trình để máy tính thực hiện, từ những chương trình đơn giản
thể xuất hiện trong bước này, gọi là lỗi trong khi chạy chương trình (run-
để giải các bài toán nhỏ, tính toán một vài giá trị, đến những chương trình
time error) hay lỗi lôgic. Những lỗi này không liên quan tới cú pháp của
đồ sộ xử lý thông tin phức tạp, thông minh, giải những bài toán khoa học kĩ
lệnh, mà liên quan tới lôgic của các lệnh, chỉ lộ ra khi máy tính thực thi câu
thuật lớn, chế bản văn bản, thiết kế đồ họa, các chương trình nghe nhạc, lệnh. Thí dụ, lệnh
xem phim, trò chơi, truy cập Internet. Những chương trình tương đối lớn
X A / B
và phức tạp thường được gọi là những phần mềm. Người dùng máy tính có
là một câu lệnh đúng, bảo máy tính lấy A chia cho B và gọi kết quả là X .
thể sử dụng những chương trình đó. Ngày nay chúng ta có cảm giác rằng
Tuy nhiên, giả sử nếu B bằng không, phép tính chia cho số không là phép
máy tính làm được tất cả mọi việc. Tuy nhiên, phải nhớ rằng tất cả những
tính sai, không có nghĩa và ta được thông báo lỗi chạy chương trình. Các
gì máy tính làm được là do nó làm việc theo một chương trình do con
lỗi lôgic không phải bao giờ cũng được thông báo. Thí dụ, nếu trong người tạo ra.
chương trình thay vì chia một số cho 0.10 ta viết thành nhân với 0.10, khi
chạy chương trình sẽ chẳng có lỗi nào được thông báo, nhưng đáp số bài
1.2. Thực hiện một chương trình máy tính
toán, tức kết quả mà ta mong đợi, sẽ là sai.
Thực hiện một chương trình máy tính thường còn được gọi tắt là chạy
chương trình. Khi người dùng máy tính muốn nó làm một việc gì đó, thí dụ
1.3. Quy trình giải bài toán trên máy tính
giải một bài toán, thì người dùng phải viết ra một chương trình để cho máy
Nhìn chung công việc giải một bài toán bằng máy tính gồm năm bước
thực hiện. Người lập trình thường viết các chương trình máy tính bằng sau:
ngôn ngữ bậc cao với những câu lệnh giống như những câu tiếng Anh, dễ
1) Phát biểu bài toán một cách rõ ràng.
học và sử dụng. Ngôn ngữ Fortran cũng thuộc loại đó. Mỗi một bước ta
muốn máy tính thực hiện phải được mô tả ra theo một cú pháp ngôn ngũ
2) Mô tả thông tin nhập vào và xuất ra.
đặc thù (language syntax). Tuy nhiên, chương trình ta viết như vậy vẫn
3) Giải bài toán bằng tay đối với tập dữ liệu đơn giản.
phải được một chương trình chuyên (bộ biên dịch - compiler) dịch thành
4) Phát triển cách giải bài toán thành dạng tổng quát.
ngôn ngữ máy thì máy tính mới hiểu và thực hiện được. Khi compiler dịch
5) Kiểm tra đáp số với nhiều tập dữ liệu khác nhau.
các dòng lệnh ta viết, nó tự động tìm các lỗi dịch, hay lỗi cú pháp (syntax
Bây giờ ta minh họa năm bước trên qua thí dụ bài toán tính giá trị
error), tức các lỗi về chính tả, các dấu phân cách... Nếu chương trình viết ra
trung bình của một tập số liệu thực nghiệm.
có lỗi dịch, bộ biên dịch sẽ thông báo để người viết chương trình sửa. Sau
khi đã sửa hết lỗi, ta chạy lại chương trình bắt đầu từ bước dịch. Một khi
Bước 1: Ta phát biểu bài toán một cách rõ ràng như sau: “Tính trị số
dịch xong, một chương trình soạn thảo liên kết (linkage editor program) sẽ
trung bình của tập các giá trị số liệu thực nghiệm”.
thực hiện việc hoàn tất sẵn sàng cho bước thực hiện. Chính là ở bước này
Bước 2: Chỉ ra cụ thể số liệu vào và ra là gì, hình thức ra sao. Nếu có 7
tờ ghi một số giá trị của số liệu, đòi hỏi nhập vào máy qua bàn phím, khi
lệnh máy tính. Vậy ở đây đã áp dụng hai phương pháp: phân khốichi
nào hết số liệu thì gõ giá trị 0.0 để báo hết, sau đó mới tính trị số trung bình
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
và in ra kết quả là trị số trung bình đó. Vậy thì phải mô tả ở bước 2 như
nhập từ bàn phím, ta chia thành ba khối:
sau: “Đầu vào là chuỗi các giá trị số thực khác không. Đầu ra là giá trị
- Nhập các giá trị số và lấy tổng của chúng.
trung bình, sẽ là một số thực được in trên màn hình”. Giả sử nếu đầu vào là
- Chia tổng cho số giá trị.
một số số liệu như trên nhưng đã được ghi vào một tệp (file) trong ổ cứng,
quy cách ghi cũng có những đặc điểm nhất định, thì bước mô tả vào và ra - In trị số trung bình.
sẽ hoàn toàn khác và cách giải cũng sẽ khác. Khi đó ta phải mô tả rõ cách
Cụ thể hoá từng khối sẽ dẫn tới giả trình của chương trình như sau:
thức số liệu ghi trong file. Thí dụ, ta có thể mô tả dữ liệu đầu vào và đầu ra
1. Cho tổng của các giá trị bằng không.
như sau: Dữ liệu đầu vào là một chuỗi số thực được ghi trong file văn bản
2. Cho số số liệu vào bằng không.
có tên là SOLIEU.DAT với quy cách ghi như sau: dòng trên cùng ghi một
3. Nhập vào từng giá trị và kiểm tra chừng nào giá trị nhập vào còn
số nguyên chỉ số phần tử của chuỗi, các dòng tiếp sau lần lượt ghi các số khác số 0.0 thì:
thực, mỗi số trên một dòng. -
Cộng thêm giá trị đó vào tổng.
Bước 3: Dùng máy tính tay tính thử với một tập đơn giản gồm năm số liệu: thí dụ: -
Cộng thêm 1 vào số số liệu. Thứ tự Giá trị
4. Chia tổng cho số số liệu để được giá trị trung bình. 5. In giá trị trung bình. 1 23.43 2 37.43
Vì thuật giải đã được mô tả khá chi tiết, ta chuyển thuật giải đó thành 3 34.91 chương trình như sau: 4 28.37 PROGRAM TGTTB 5 30.62 INTEGER DEM Trung bình = 30.95 REAL X, TONG, TB TONG = 0.0
Tập số liệu này và kết quả sẽ được dùng để kiểm tra ở bước 5. DEM = 0
Bước 4: Trong bước này ta khái quát lại những thao tác cần làm ở 5 READ*, X
bước 3. Tuần tự những thao tác này để dẫn đến giải được bài toán chính là IF (X .NE. 0.0) THEN
thuật giải hay thuật toán (algorithm). Ta sẽ mô tả tuần tự từ đầu đến cuối TONG = TONG + X
quá trình giải. Chia quá trình thành một số khối và liệt kê những khối đó ra. DEM = DEM + 1
Sau này chương trình máy tính sẽ tuần tự thực hiện các khối chia đó. Trong GOTO 5 END IF
mỗi khối ta lại chi tiết hóa thêm ra đến mức có thể chuyển thành những 8 TB = TONG / REAL(DEM)
Tạm thời xem người thứ nhất là người đứng đầu danh sách. Dùng PRINT 6, TB
ngón tay trỏ dõi theo từng người còn lại, kể từ người thứ hai cho đến hết
6 FORMAT (1X, 'TRUNG BINH BANG ' , F6.2)
danh sách, nếu ai có điểm thi cao hơn thì chuyển người đó lên đầu danh STOP
sách và người đang ở đầu danh sách chuyển xuống chỗ của người vừa được END
thay. Kết quả ta được danh sách mới với người có điểm thi cao nhất ở dòng
Bước 5: Trong bước này ta thử chạy chương trình đã viết với tập số
đầu. Nhưng từ dòng thứ hai đến dòng cuối cùng của danh sách có thể thứ
liệu đã được thử bằng cách tính tay ở mục 3. Đầu ra trên màn hình máy tự vẫn còn lộn xộn. tính phải như sau:
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 thi cao hơn thì TRUNG BINH BANG 30.95
được đưa lên dòng thứ hai và người đang ở dòng thứ hai sẽ bị đưa xuống
dòng của người vừa thay thế. Kết quả là người ở dòng thứ hai trong danh
Ngoài ra, ta có thể chạy thử với một số tập số liệu khác nhau để tin
sách mới sẽ là người có điểm thi cao thứ nhì. Nhưng từ dòng thứ ba đến
chắc vào tính đúng đắn lôgic và hoàn hảo của chương trình đã xây dựng.
cuối danh sách vẫn còn lộn xộn.
Những khái niệm thuật giải và giả trình trên đây có ý nghĩa rất quan
Tiếp tục, ta phải sắp xếp lại danh sách kể từ dòng thứ ba theo đúng
trọng. Cách giải, phương pháp giải một bài toán chính là thuật giải. Các bài
cách như trên. Lặp lại công việc như vậy cho đến dòng trước dòng cuối
toán khoa học kĩ thuật thực hiện trên máy tính thường có thuật giải là
cùng, ta sẽ được danh sách hoàn chỉnh sắp xếp theo thứ tự giảm dần của
những phương pháp của toán học hoặc của các khoa học chuyên ngành mà điểm thi.
người lập trình đã biết. Một số nhiệm vụ, bài toán khác có thể có cách giải
Ta thấy, trong trường hợp này thuật giải của bài toán chính là cái cách
xuất phát từ kinh nghiệm thực tế, từ cách suy nghĩ lôgic thường ngày của
mà chúng ta có thể vẫn thường làm trong thực tế đời sống khi phải sắp xếp chúng ta.
lại danh sách theo thứ tự nhưng không dùng máy tính. Và cách làm “bằng
Thí dụ, khi giải phương trình bậc hai 2
a x bx c  0 bằng máy tính,
tay” này cũng có thể được áp dụng làm thuật toán cho các loại bài toán sắp
ta có thể tính giá trị của biệt thức  . Sau đó tùy giá trị của  có thể là: xếp trong máy tính.
  0 phương trình vô nghiệm,   0 phương trình có một nghiệm kép và
Chúng tôi giới thiệu chi tiết hai thí dụ vừa rồi cốt là để sinh viên ý
  0 phương trình có hai nghiệm riêng biệt mà đưa ra thông báo kết quả.
thức được rằng tư duy thuật giải, suy nghĩ về cách giải là bước quan trọng
Trong thí dụ này, thuật toán là phương pháp quen thuộc mà chúng ta đã
nhất khi bắt tay vào xây dựng chương trình máy tính. Có xác định được học trong đại số.
thuật giải thì mới nói đến việc lập được chương trình để giải bài toán trên
Một thí dụ khác: Có một danh sách sinh viên cùng với điểm của môn máy tính.
thi. Sắp xếp lại danh sách đó sao cho người có điểm thi cao hơn thì ở dòng
Còn giả trình giống như những lời chỉ dẫn về phương pháp, cách giải
trên. Ta có thể làm như sau:
cho ai đó tuần tự thực hiện các bước của thuật giải bài toán để dẫn tới kết 9
quả. Bạn hãy tưởng tượng trong đời sống nếu bạn muốn nhờ ai đó thực
hiện (executable statement) và nhóm các lệnh không thực hiện (non-
hiện một nhiệm vụ. Nếu nhiệm vụ đó không quá tầm thường, thì thường ít
executable statement) hay gọi là các lệnh mô tả, lệnh khai báo. Nhóm các
ra bạn phải giải thích tóm tắt yêu cầu, tuần tự thực hiện nhiệm vụ cho
lệnh mô tả phải nằm ở phía trên của thân chương trình.
người ta - bạn đã đặt chương trình cho người ta thực hiện. Như vậy, ta thấy
Như vậy các chương trình Fortran có thể có cấu trúc tổng quát như
thực chất giả trình đã là một chương trình, chỉ có điều nó được viết ra ngắn sau:
gọn bằng vài câu, vài kí hiệu quen dùng, chưa được viết bằng một ngôn
PROGRAM Tên chương trình
ngữ lập trình cụ thể mà thôi. Một chương trình máy tính viết bằng ngôn
ngữ Fortran hay bất kỳ một ngôn ngữ nào khác chẳng qua chỉ là những lời
Các lệnh không thực hiện (Non-executable statements)
chỉ dẫn này được viết theo qui ước kí hiệu để máy tính hiểu được mà làm
Các lệnh thực hiện (Executable statements) thay cho ta. STOP END
1.4. Những chương trình Fortran hoàn chỉnh
Trong chương trình tính giá trị trung bình của chuỗi số thực ở thí dụ
Chương trình TGTTB ở mục trước có thể là một thí dụ về một
trên, ta thấy sau từ khóa PROGRAM là tên chương trình - đó là cụm chữ
chương trình hoàn chỉnh. Như vậy ta thấy một chương trình hoàn chỉnh bắt
TGTTB. Nhóm các lệnh không thực hiện (những lệnh mô tả) gồm 2 lệnh:
đầu bằng lệnh PROGRAM chỉ sự bắt đầu của chương trình. Dạng tổng INTEGER DEM
quát của lệnh này như sau: REAL X, TONG, TB
PROGRAM Tên chương trình
còn nhóm lệnh thực hiện gồm các lệnh ở tiếp sau hai lệnh trên: TONG = 0.0
trong đó tên chương trình là một xâu ký tự gồm từ một đến sáu ký tự, bắt DEM = 0
đầu bằng chữ cái và chỉ chứa các chữ cái la tinh và chữ số. Kết thúc 5 READ*, X
chương trình là hai lệnh: IF (X .NE. 0.0) THEN TONG = TONG + X STOP DEM = DEM + 1 GOTO 5 END END IF
Lệnh PROGRAM và lệnh STOP là các lệnh tuỳ chọn, có thể không TB = TONG / REAL(DEM) PRINT 6, TB
nhất thiết phải có. Nếu ta không viết ra, chúng có thể được chương trình
6 FORMAT (1X, 'TRUNG BINH BANG ' , F6.2)
dịch tự thêm vào. Phần thân chương trình gồm tất cả các lệnh khác nhằm
thực hiện bài toán được giải và chia thành hai nhóm: nhóm các lệnh thực
Những lệnh thực hiện thường là những lệnh gán, lệnh tính toán các 10
phép tính, lệnh chuyển điều khiển, đọc, ghi số liệu và một số lệnh khác.
Nhãn lệnh là những số nguyên dương, khác không, dùng để chỉ số
Cuối cùng chương trình có lệnh STOP và END.
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
Trong thực tế có thể có những chương trình lớn hơn rất nhiều, gồm
tới bởi những dòng lệnh khác mới nhất thiết phải có nhãn lệnh. Dấu nối
hàng nghìn dòng lệnh và có cấu trúc phức tạp. Nhưng ta vẫn thấy nó có
dòng lệnh có thể là bất cứ ký tự nào ngoài ký tự trống và số không, thường
phần đầu, phần thân và phần cuối, trong phần thân chương trình cũng chỉ
người ta hay dùng dấu * hoặc dấu +, để chỉ rằng dòng hiện tại là phần nối
có hai nhóm lệnh giống như trong chương trình đơn giản trên đây.
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ống để dễ đọc. Trong chương trình soạn thảo có thể có những dòng ghi
chú
(comment lines); những dòng này không thuộc nội dung chương trình,
1.5. Quy cách soạn thảo một chương trình Fortran
không được dịch khi dịch chương trình, mà chỉ có tác dụng gợi nhớ cho
Các chương trình Fortran được soạn thảo nhờ một bộ soạn thảo
người lập trình khi theo dõi kiểm tra chương trình. Tất cả các dòng ghi chú
(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
phải bắt đầu bằng một chữ cái, thường người ta dùng chữ C (chữ cái đầu
tiên của từ comment), đứng ở cột thứ nhất của các cột dùng để ghi nhãn.
trình được viết thành các dòng nối tiếp nhau, mỗi lệnh trên một dòng mới.
Trong sách này sẽ luôn sử dụng chữ cái C để đánh dấu dòng ghi chú trong
Trên màn hình soạn thảo chuẩn (*) người ta quy ước các cột từ 1 đến 5 các chương trình.
(hình 1.2) dùng để ghi số hiệu lệnh hay gọi là nhãn lệnh, cột 6 chuyên dùng
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ó
để 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
và đòi hỏi tính cẩn thận, tỉ mỉ. Kinh nghiệm cho thấy rằng ngay cả đối với
cột từ 7 đến 72. Tất cả các thông tin ở quá cột 72 bị bỏ qua.
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 C¸c cét Cét C¸c cét
dạy ngôn ngữ lập trình, người ta còn khuyên người học ngay từ đầu chú ý 1-5 6 7-72
luyện thói quen, hay phong cách (style) soạn thảo chương trình. Một LÖnh Fortran
chương trình đẹp là chương trình tính đúng và nhanh cái mà ta cần tính,
nhưng đơ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 Ký tù nèi dßng
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 Nh·n lÖnh
học rèn luyện phong cách soạn chương trình. Chịu khó rèn luyện những
Hình 1.2. Quy cách viết lệnh Fortran trên màn hình soạn thảo
thói quen tốt cũng góp phần giúp chúng ta tiến xa. (*) Bài tập
Trước đây người ta phải dùng giấy chuyên dụng, gọi là blank, để viết chương
trình Fortran. Sau đó từng lệnh chương trình từ giấy chuẩn được ghi vào một tờ bìa
1. Nếu dùng chữ C làm dấu nối dòng lệnh thì có được không?
chuyên dụng có hình dáng đặc biệt bằng máy đục lỗ giúp tự động mã hóa từ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
2. Các nhãn trong chương trình có cần tăng dần không?
thảo có thể giúp chúng ta viết các lệnh trực tiếp từ bàn phím, khi viết các ký tự và
3. Nêu các bước giải bài toán sắp xếp chuỗi số nguyên nhập từ bàn
ký hiệu hiện trên màn hình để dễ theo dõi và chỉnh sửa giống như ta soạn thảo một
phím theo thứ tự lớn dần. Viết giả trình cho bài toán đó.
văn bản bất kỳ, sau đó lưu trong máy tính dưới dạng file nguồn. 11
vào dạng, hay kiểu (kind) khai báo của số thực.
Dạng E biểu diễn số thực thành hai phần: phần hằng thực nằm trong
khoảng từ 0,1 đến 1,0 và phần bậc. Bậc bắt đầu bằng chữ E , tiếp sau là
hằng 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. Số chữ số
Chương 2 - Những yếu tố cơ bản của Fortran
có nghĩa của phần hằng thực và hằng 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ũ
2.1. Dữ liệu và cách biểu diễn dữ liệu trong Fortran
với chữ D thay vì E , trong đó phần hằng thực có thể chứa tới 16 chữ số có nghĩa. Thí dụ:
Fortran 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 2.71828182 ; 0.27182818D+1
đôi, các giá trị lôgic và dữ liệu văn bản. Trong chương này ta sẽ làm quen
Trị tuyệt đối cực đại của các số thực thường và độ chính xác gấp đôi
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ý bằng 79 10 đến 75 10 . tự).
Số phức biểu diễn bằng một cặp hằng thực trong dấu ngoặc đơn và
Số nguyên là liệt các số thập phân với dấu +,  hoặc không có dấu.
cách nhau bởi dấu phảy. Thí dụ (2.1, 0.5E2) biểu diễn số phức 1 , 2  i 50 Thí dụ: trong toán học. 0 ; 6 ; 400 ; +1234
Hai số trong dấu ngoặc ứng với các phần thực và phần ảo phải cùng
Các số nguyên được biểu diễn dưới dạng I . Giá trị cực đại của số
độ chính xác biểu diễn.
nguyên gọi là khả năng biểu diễn số nguyên của máy tính.
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 như
Trong Fortran có hai dạng biểu diễn số thực. Dưới dạng F số thực
tên các đại lượng, các khái niệm, thí dụ cụm chữ " Toc do", "Temperature",
gồm phần nguyên và phần thập phân, cách nhau bởi dấu chấm. Số thực có
"BAO CAO SO 1"... Người ta còn gọi dữ liệu văn bản là dữ liệu ký tự, xâu
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 ký tự, dữ liệu chữ.
phân bằng không, có thể không cần viết ra các phần đó. Dấu chấm thập
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ị
phân nhất thiết phải có mặt. Thí dụ:
số tương ứng thì chúng cũng là những dữ liệu kiểu văn bản.
2.583 ; 14.3 ; 0.8 ; 12. ; .7 ; 14.
Dữ liệu lôgic dùng để 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à
Giá trị cực đại và số chữ số có nghĩa cực đại trong dạng F phụ thuộc 12
.TRUE..FALSE. để chỉ hai trạng thái đối lập nhau trong những thí dụ
lượng. Tất cả những đại lượng đó phải được lưu giữ trong máy tính. Những
trên và ngôn ngữ Fortran có thể xử lý với những giá trị lôgic, tức thực hiện
đại lượng không đổi trong suốt quá trình thực hiện của chương trình gọi là
những phép tính đối với các giá trị lôgic như trong toán học có thể thực
các hằng, còn những đại lượng có thể nhận những giá trị khác nhau gọi là hiện.
các biến. Với mỗi hằng hoặc biến, trong bộ nhớ máy tính giành ra một địa
Sở dĩ máy tính làm được những việc như chúng ta thấy là vì nó có thể
chỉ để lưu giá trị. Tên chính là ký hiệu quy ước của địa chỉ đó.
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
2.2.1. Tên biến và tên hằng
ra những kết luận, thông báo... Tất cả những thông tin chúng ta gặp trong
đờ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
Tên biến trong Fortran chuẩn được biểu diễn bằng tập hợp từ 1 đến 6 hoặc kiểu khác.
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, ...,
Trên đây là những kiểu dữ liệu cơ bản của ngôn ngữ lập trình Fortran.
9, nhưng phải bắt đầu bằng chữ cái.
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
Trong một chương trình các tên biến không được trùng nhau. Trong
khác được tổ chức dựa trên những kiểu dữ liệu cơ bản vừa trình bày.
các phiên bản Fortran hiện nay, để dùng làm tên không phân biệt chữ cái
Ở đây chúng ta cần lưu ý rằng những khái niệm dữ liệu trong máy
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ùng
tính như số nguyên, số thực... nói chung giống với những khái niệm tương
để cấu tạo tên. Phiên bản Fortran 90 cho phép đặt tên với số ký tự dài hơn
ứng trong đời sống hoặc trong toán học. Nhưng đồng thời cũng có những
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
nét khác biệt. Thí dụ, Fortran chỉ hiểu và tính toán được với những số
tập thói quen đặt tên gọn gàng theo Fortran chuẩn, bởi vì tập hợp 6 ký tự đã
nguyên loại thường không lớn hơn 9
2 10 , ngôn ngữ lập trình Pascal chỉ
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.
làm việc với những số nguyên không lớn hơn 32767 và không nhỏ hơn
Thí dụ, các tên sau đây
32768, trong khi hàng ngày chúng ta có thể viết trên giấy hoặc tính toán
X ; A ; X1 ; B2T5 ; SOHANG ; SUM là hợp lệ, còn các tên sau đây
các phép tính với những số nguyên có giá trị tùy ý. Tình hình cũng tương là sai:
tự như vậy đối với các số thực. Vậy trong máy tính có những giới hạn nhất 1NGAY ; HE SO ; B*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
vì trong tên thứ nhất ký tự đầu tiên là chữ số, trong tên thứ hai có ký tự dấu
diễn được và tính toán được. Tuy nhiên, với những giới hạn như hiện nay,
cách, trong tên thứ ba có ký tự (*) không phải là những ký tự dùng để đặt
Fortran vẫn cho phép chúng ta lập các chương trình để tính toán, xử lý với tên.
tất cả những giá trị số gặp trong đời sống và khoa học kỹ thuật.
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ình con và tên file. (Riêng với tên file có thể có 2.2. Hằng và biến
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
Máy tính xử lý dữ liệu hay thực hiện những tính toán với những đại
tên chính bởi dấu chấm). 13
2.2.2. Mô tả (khai báo) kiểu biến và kiểu hằng
thì các biến phải cách nhau bởi dấu phảy.
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 Thí dụ:
nguyên biểu diễn các dữ liệu số nguyên, các biến thực - số thực... Trong INTEGER I, TT, DEM
chương trình phải chỉ rõ các biến được sử dụng biểu diễn dữ liệu kiểu nào
REAL X1, APSUAT, MAX, TIME, DELTA
(nguyên, thực, lôgic, phức, văn bản, số thực độ chính xác thường hay độ COMPLEX P1, P2, SOPH chính xác gấp đôi...).
chỉ rằng các biến I, TT, DEM biểu diễn các giá trị số nguyên, các biến X1,
Mỗi biến chỉ lưu giữ được những giá trị đúng kiểu của nó. Một biến
APSUAT, MAX, TIME, DELTA biểu diễn các giá trị số thực, còn ba biến
đã mô tả kiểu là số nguyên thì không thể dùng để lưu giá trị số thực hay giá P1, P2, SOPH - số phức. trị lôgic.
Những giá trị được giữ nguyên nhất quán trong suốt chương trình (tức
Cách mô tả ẩn chỉ dùng đối với các biến nguyên và thực: dùng tên
các hằng số) thường được gán vào các địa chỉ nhớ thông qua tên trong lệnh
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 khai báo hằng có dạng:
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ình không bao giờ nên dùng cách mô tả ẩn.
PARAMETER (ten1 = biểu thức 1, tên 2 = biểu thức 2, ...)
Cách mô tả hiện dùng các lệnh mô tả hiện như INTEGER, REAL,
Thí dụ, trong chương trình nếu ta nhiều lần dùng đến giá trị số
CHARACTER, LOGICAL, DOUBLE PRECISION, COMPLEX... để chỉ   141593 , 3
thì ta có thể gán giá trị 3,141593 cho một tên hằng là PI bằng
kiểu dữ liệu mà các biến biểu diễn. Dưới đây là quy tắc viết những lệnh mô lệnh
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: PARAMETER (PI = 3.141593) Lệnh sau đây
INTEGER Danh sách các biến nguyên
PARAMETER (HSMSD = 0.0026, RO = 1.0028)
REAL Danh sách các biến thực
khai báo hai hằng số: HSMSD và RO, HSMSD được gán giá trị bằng
LOGICAL Danh sách các biến lôgic
0,0026, còn RO được gán giá trị 1,0028.
Trong chương trình tất cả những lệnh khai báo (mô tả) vừa giới thiệu
COMPLEX Danh sách các biến phức
trên đây thuộc loại các lệnh không thực hiện và chúng phải nằm ở đầu
DOUBLE PRECISION Danh sách các biến độ chính xác đôi
chương trình, trước tất cả các lệnh thực hiện.
CHARACTER Danh sách các biến ký tự
Khái niệm về tên, kiểu dữ liệu của biến, của hằng là những khái niệm
cơ bản, quan trọng trong ngôn ngữ lập trình.
Trong danh 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
Ở đầu mục này đã nói một tên thực chất là ký hiệu quy ước của một 14
địa chỉ trong bộ nhớ của máy tính để lưu giá trị. Lệnh khai báo biến mới
Nhưng nếu hiểu được rằng lệnh (1) khai báo REAL DAY, CAO thực ra
chỉ đặt tên cho một địa chỉ trong bộ nhớ và quy định trong địa chỉ đó có thể
mới chỉ dự định dùng hai tên DAY và CAO để lưu các số thực, không cần
lưu giữ dữ liệu kiểu gì. Còn cụ thể trong ô nhớ đó đã có chứa giá trị chưa
biết số thực đó bằng bao nhiêu. Ở chương trình trên, khi lệnh (2) thực hiện
hay chứa giá trị bằng bao nhiêu thì tùy thuộc vào các lệnh thực hiện ở trong
xong thì trong biến DAY (trong ô nhớ có tên là DAY) mới thực sự có số
chương trình, tại từng đoạn của chương trình. Điều này giống như ta quy
5,0, tức độ dài đáy tam giác. Nhưng khi chương trình chạy xong lệnh (4)
ước định ra một ngăn trong tủ văn phòng để chuyên giữ các công văn, còn
thì trong biến DAY đã là số 8,0 chứ không phải là số 5,0 nữa. Và khi thực
trong ngăn ấy có công văn hay không, hoặc có mấy công văn thì tùy thuộc
hiện xong lệnh (5) thì trên màn hình sẽ in đúng giá trị diện tích tam giác.
lúc này hay lúc khác. Dưới đây nêu một thí dụ để minh họa ý nghĩa của
Nắm vững được điều này có nghĩa là đã hiểu được ý nghĩa của biến, tên
việc đặt tên biến và mô tả kiểu (dữ liệu) của biến, đồng thời theo dõi giá trị
biến và tuần tự làm việc của chương trình, tức các giá trị được lưu trong
của biến tại từng thời điểm của chương trình. Giả sử ta viết một chương
máy tính như thế nào trong khi chương trình chạy.
trình để tính diện tích s của hình tam giác khi giá trị độ dài đáy b bằng 5,0
Dưới đây là hai lời khuyên đầu tiên có lẽ quan trọng nhất đối với sinh
cm, chiều cao h bằng 3,2 cm, in kết quả tính lên màn hình. Chương trình
viên mới học lập trình:
sau đây sẽ thực hiện những việc đó:
1) Sau khi tìm hiểu xong bài toán cần giải, phải cân nhắc từng đại REAL DAY, CAO ! (1)
lượng trong bài toán có kiểu dữ liệu là số nguyên, số thực, ký tự văn bản... DAY = 5.0 ! (2)
để đặt tên và khai báo kiểu cho đúng. Kinh nghiệm cho thấy rằng sinh viên CAO = 3.2 ! (3)
nào viết được những lệnh khai báo hệ thống các tên biến đúng, vừa đủ, DAY = 0.5 * DAY * CAO ! (4)
sáng sủa trong phần khai báo ở đầu chương trình thì thường là sau đó viết
PRINT *, ‘DIEN TICH TAM GIAC BANG’, DAY ! (5)
được chương trình đúng. Còn những sinh viên không biết đặt tên cho các END ! (6)
biến, vừa bắt tay vào soạn thảo chương trình đã loay hoay với lệnh mở file
Trong chương trình này có sáu lệnh. Lệnh (1) khai báo hai biến tên là
dữ liệu, tính cái này cái kia, thì thường là không hiểu gì và không bao giờ
DAY và CAO dự định để lưu giá trị số thực tương ứng của đáy b và chiều làm được bài tập.
cao h của tam giác. Lệnh (2) gán giá trị b  ,
5 0 (cm) cho biến DAY. Lệnh
2) Nên tuân thủ cách đặt tên của Fortran chuẩn. Ta có quyền chọn
(3) gán giá trị h  5 ,
3 (cm) cho biến CAO. Lệnh (4) tính giá trị của biểu
những chữ cái, chữ số nào để tạo thành tên là tùy ý, song nên đặt tên có thức 5 ,
0  b h , tức diện tích s của tam giác, bằng 8 (cm2) và gán cho biến
tính gợi nhớ đến những đại lượng tương ứng trong bài tập. Thí dụ, với bài
DAY. Lệnh (5) in lên màn hình dòng chữ DIEN TICH TAM GIAC BANG
toán vừa nói tới trong mục này ta có ba đại lượng là: độ dài cạnh đáy,
và sau đó là giá trị của biến DAY. Lệnh (6) là lệnh kết thúc chương trình.
đường cao và diện tích tam giác. Nên khai báo tên ba biến tương ứng bằng
Sinh viên mới học lập trình thường có thể không hiểu lệnh thứ năm, khi
ba từ tắt của tiếng Việt với lệnh sau:
thấy in diện tích hình tam giác mà lại in giá trị của biến DAY. Trong đầu REAL DAY, CAO, DTICH
họ quen nghĩ khai báo DAY có nghĩa DAY là độ dài cạnh đáy tam giác.
hoặc bằng ba từ tắt của tiếng Anh với lệnh: 15 REAL BASE, HEIGHT, SQRE
được viết trong Fortran là A(1,1), A(1,2), A(1,3), A(2,1), A(2,2), A(2,3)
hoặc bằng ba chữ cái đúng như trong đầu đề bài tập với lệnh:
(chỉ số thứ nhất - số hiệu dòng, chỉ số thứ hai - số hiệu cột). REAL B, H, S
Thêm một thí dụ nữa về mảng. Một năm có 12 tháng, mỗi tháng có
đều là những lời khai báo đúng, dễ hiểu, trong đó lời khai báo trên cùng có
một tên, thí dụ trong tiếng Việt: Tháng Giêng, Tháng Hai, ..., Tháng Mười
lẽ là tốt nhất, lời khai báo sau cùng thì hơi quá ngắn gọn. Còn với cùng
hai, trong tiếng Anh: January, February, ..., December. Ta hoàn toàn có thể
mục đích khai báo mà dùng lệnh sau đây thì mặc dù không sai, nhưng hoàn
gộp 12 tên tiếng Anh của các tháng trong năm vào thành một mảng có tên
toàn không nên, rất dễ gây nhầm lẫn, mệt mỏi trong khi kiểm tra chương
chung là EMONTH. Vậy mảng EMONTH sẽ là mảng có 12 giá trị (12 trình:
phần tử), mỗi phần tử là một từ chỉ tên một tháng. Khi nói đến January tức
là nói tới giá trị thứ nhất của mảng EMONTH, ta viết EMONTH(1), nói REAL X, IC, DT
đến December là nói tới giá trị thứ 12 của mảng EMONTH, ta viết EMONTH(12).
2.3. Biến có chỉ số (mảng)
Trong Fortran IV, một phiên bản trước đây của ngôn ngũ Fortran, cho
phép dùng các mảng tối đa 7 chỉ số. Chiều của mảng ứng với số chỉ số, còn
2.3.1. Khái niệm mảng
kích thước của mảng ứng với số phần tử chứa trong mảng.
Mảng là tập hợp có sắp xếp của các đại lượng được ký hiệu bằng một
Chỉ số của mảng có thể được xác định bằng các hằng hoặc biến
tên duy nhất. Các thành phần của tập hợp gọi là những phần tử mảng. Mỗi
nguyên dương với trị số lớn hơn 0. Cũng có thể chỉ số xác định bằng biểu
phần tử được xác định theo tên của mảng và vị trí của phần tử đó trong
thức số học bất kỳ. Nếu dùng biểu thức kiểu thực, thì sau khi tính giá trị
mảng, tức trị số của các chỉ số. Tên mảng được đặt tuân theo quy tắc như
của biểu thức, giá trị số thực được chuyển thành số nguyên, tức cắt bỏ phần
tên biến. Các chỉ số nằm trong dấu ngoặc đơn và nếu có hơn một chỉ số thì thập phân.
các chỉ số phải cách nhau bởi dấu phảy.
Trong mục 2.1 chúng ta đã nói về các kiểu dữ liệu cơ bản. Mỗi một
Thí dụ: A(1), A(2), A(3) tương ứng với cách viết thông thường cho
biến kiểu dữ liệu cơ bản trong một thời điểm chạy chương trình chỉ lưu các biến
trong toán học. Vậy ở đây ta đã đặt cho tập hợp cả 3 giá
(chứa) được một giá trị. Bây giờ ta thấy mảng là một thí dụ về kiểu dữ liệu 1
a ,a2 ,a3
trị này một tên chung là A, nhưng để chỉ giá trị thứ nhất ta thêm chỉ số 1
mới cấu tạo từ các kiểu cơ bản - một biến mảng trong một thời điểm có thể
vào tên - A(1), để chỉ giá trị thứ hai ta thêm chỉ số 2 - A(2) và để chỉ giá trị
lưu được nhiều giá trị số nguyên, số thực, chuỗi ký tự... Nhưng cần lưu ý
thứ ba ta thêm chỉ số 3 - A(3).
rằng tất cả các phần tử của mảng, tức tất cả các giá trị của mảng phải có
cùng kiểu dữ liệu. Thí dụ với mảng EMONTH vừa xét, ta không thể đưa
Tương tự, các phần tử của ma trận hai chiều trong đại số
một giá trị ký tự January vào phần tử EMONTH(1) và số thực 1.27 vào  11 a 12 a 13 a  EMONTH(2).  
a21 a22 a23 
Mảng là một yếu tố rất quan trọng trong Fortran. Sau này ta sẽ thấy sử 16
dụng mảng trong ngôn ngữ lập trình có thể giúp viết những đoạn chương
các giá trị nhiệt độ trung bình từng tháng trong 100 năm thì ta khai báo
trình rất ngắn gọn, trong sáng. Đặc biệt trong các vòng lặp, chỉ bằng vài
mảng TEM(100,12) là hợp lý. Nếu dự định giải hệ phương trình đại số
dòng lệnh có thể khiến máy tính thực hiện nhiều triệu phép tính số học.
tuyến tính không quá 20 phương trình, ta nên khai báo các mảng REAL
A(20,21), X(20) là vừa đủ để biểu diễn ma trận các hệ số ai, j (kể cả các hệ 2.3.2. Mô tả mảng
số tự do) và các nghiệm xi . Với mảng EMONTH vừa nhắc trong mục này
Mô tả mảng thực hiện ngay ở đầu chương trình và chứa thông tin về thì lệnh khai báo sau:
tên, chiều và kích thước mảng với toán tử DIMENSION: CHARACTER*9 EMONTH(12) DIMENSION ( A n ,n ..., , n ( MAT ), m ,m ..., , m )
là hoàn toàn hợp lý vì một năm chỉ có 12 tháng và tên tháng dài nhất (với 1 2  1 2 k
tiếng Anh) là September gồm 9 chữ cái. trong đó MAT A,
- tên các mảng; n , n ,..., n m , , m ,..., m  1 2 các giới  1 2 k
hạn trên của các chỉ số  chỉ ra bằng các hằng nguyên dương (giới hạn 2.4. Các hàm chuẩn
dưới luôn bằng 1 và không cần chỉ định trong mô tả).
Theo mô tả này, máy tính sẽ giành trong bộ nhớ những vùng địa chỉ
Một số phép tính như lấy căn bậc hai của một số, tính trị tuyệt đối của
để lưu tất cả các phần tử của các mảng. Các phần tử của mảng nhiều chiều
một số, tính hàm sin của một góc... thường xuyên gặp trong nhiều thuật
được lưu liên tiếp nhau sao cho chỉ số thứ nhất biến đổi nhanh nhất, chỉ số
toán, nên được xây dựng sẵn thành các hàm gọi là các hàm riêng có của
sau cùng biến đổi chậm nhất.
Fortran (intrinsic functions) hay còn gọi là các hàm chuẩn.
Có thể mô tả mảng bằng các lệnh mô tả kiểu hiện như đối với các
Bảng 2.1 liệt kê một số hàm chuẩn của Fortran thường dùng trong
biến thông thường, thí dụ: sách này. REAL MAX, L(7), A(20,21)
Mỗi hàm chuẩn có một tên của nó. Tên của hàm được tiếp nối với đầu
vào, gọi là đối số của hàm, nằm trong cặp dấu ngoặc đơn. Đối số của các
Trong lệnh mô tả này biến MAX được khai báo là biến số thực, có thể
hàm chuẩn có thể là các hằng, biến, hay biểu thức. Nếu một hàm có nhiều
gọi là biến đơn, còn mảng L (biến có chỉ số) là mảng một chiều với 7 phần
đối số thì các đối số được viết cách nhau bằng dấu phảy. Khi cho các giá trị
tử số thực, mảng A là mảng hai chiều (hai chỉ số) với giới hạn trên của chỉ
cụ thể vào các đối số thì hàm tính ra một giá trị của hàm. Vì vậy các hàm
số thứ nhất là 20, của chỉ số thứ hai là 21, nó gồm 420 phần tử.
thường dùng để tính một giá trị nào đó để gán vào một biến khác, người ta
Vì các giới hạn chỉ số (kích thước mảng) phải được chỉ định trước ở
gọi là gọi hàm ra để tính. Hàm không bao giờ có mặt ở bên trái dấu ‘ = ’
phần khai báo bằng các hằng nguyên dương, không thể là các biến, nên của lệnh gán.
trong thực tiễn lập trình phải chú ý cân nhắc chọn các giới hạn chỉ số sao
cho chúng không quá lớn làm tốn bộ nhớ, nhưng cũng phải vừa đủ để biểu
Thí dụ, những lệnh sau đây gọi các hàm để tính một số giá trị:
diễn hết các phần tử có thể có của mảng. Thí dụ cần biểu diễn một bảng số 17 S = SIN (0.5)
Thấy rằng một hàm biểu diễn một giá trị. Giá trị này có thể được dùng TG = TAN (S)
trong các tính toán khác hoặc lưu ở địa chỉ nhớ khác. Một hàm chuẩn cũng
C = COS (ANGLE * 3.141593 / 180.0)
có thể làm đối số của một hàm chuẩn khác: XLG = LOG(ABS(X))
Bảng 2.1. Một số hàm chuẩn của Fortran
Trong Fortran có một số hàm chuẩn cho ra giá trị với kiểu cùng kiểu Tên hàm và
với đối số của mình, chúng được gọi là các hàm tự sinh (generic function). Giá trị hàm đối số
Thí dụ hàm ABS(X), nếu đối số X là số nguyên thì giá trị hàm ABS(X)
cũng là số nguyên, nếu X là số thực - ABS(X) cũng là số thực. Một số hàm SQRT (X)
x Căn bậc hai của x
chỉ định kiểu của đầu vào và đầu ra. Thí dụ hàm IABS là hàm đòi hỏi đối ABS (X)
x Trị tuyệt đối của x
số nguyên và cho ra giá trị tuyệt đối là số nguyên. Danh sách đầy đủ hơn SIN (X)
sin(x) x tính bằng rađian
về các hàm chuẩn của Fortran được dẫn trong phụ lục 1. COS (X)
cos(x) x tính bằng rađian
Khi dùng một hàm chuẩn nào đó phải đọc kỹ lời mô tả xem nó tính ra TAN (X)
tg(x) x tính bằng rađian
giá trị gì, điều kiện của các đối số ra sao. Thí dụ các hàm lượng giác phải
dùng đối số là rađian, nếu ta cho giá trị đối số là độ thì kết quả tính sẽ sai. EXP (X) x
e e nâng lên luỹ thừa x LOG (X)
ln(x) Logarit tự nhiên của x
2.5. Lệnh gán và các toán tử số học LOG10 (X)
lg(x) Logarit cơ số 10 của x INT (X)
Chuyển phần nguyên của số thực x thành số nguyên 2.5.1. Lệnh gán Giá trị thực của REAL (I)
I (chuyển một giá trị nguyên thành giá trị thực)
Các tính toán trong Fortran có thể chỉ định bằng lệnh gán với dạng MOD (I,J)
Lấy phần dư nguyên của phép chia hai số I / J tổng quát như sau:
Tên biến = Biểu thức
Trong lệnh thứ nhất ta gửi giá trị hằng 0,5 (rađian) cho đối số của hàm
Bên trái dấu lệnh gán (dấu =) là tên một biến. Biểu thức bên phải có
SIN để nó tính ra giá trị sin của góc 0,5 và gán giá trị đó cho biến S. Trong
thể là một hằng, một biến, một biểu thức số học gồm các toán tử số học
lệnh thứ hai, ta đã gửi giá trị của biến S vào đối số của hàm TAN để tính ra
(bảng 2.2) thực hiện giữa các toán hạng là các hằng, biến và hàm chuẩn
tang. Còn trong lệnh thứ ba, ta đã gửi một biểu thức vào đối số của hàm
hay một biểu thức lôgic. Khi thực hiện lệnh gán, trước hết máy ước lượng
COS để nó tính ra giá trị côsin của một góc có độ lớn bằng giá trị của biểu
(tính) giá trị của biểu thức bên phải, rồi gán giá trị đó cho biến bên trái, tức
thức đó. Trong trường hợp này, máy tính trước hết phải tính (ước lượng)
lưu giá trị tính được của biểu thức bên phải vào địa chỉ nhớ có tên biến bên
giá trị của biểu thức đối số, sau đó mới tính côsin theo giá trị nhận được. 18
trái. Kiểu dữ liệu của biến và của biểu thức phải phù hợp.
Bảng 2.2. Các phép tính số học Thí dụ các lệnh gán: Phép tính Dạng đại số Trong Fortran PI = 3.141593 Cộng A B A + B S = PI * BKINH **2 Trừ A B A  B I = I +1 Nhân A B A * B
Lệnh thứ nhất gán hằng số 3,141593 cho biến có tên là PI. Lệnh thứ hai A Chia A / B
gán giá trị của biểu thức 2 PI  ( )
BKINH cho biến có tên là S. Lệnh thứ ba B
lấy giá trị hiện tại của biến I cộng thêm một đơn vị và lại gán cho chính Luỹ thừa 3 A A** 3 biến I.
2.5.3. Ước lượng biểu thức số học
Ở trên đã nói, kiểu dữ liệu của biến và của biểu thức phải phù hợp.
Trường hợp biến bên trái là biến thực, còn biểu thức bên phải là giá trị
Khi tính giá trị của biểu thức số học, nếu biểu thức đó gồm nhiều
nguyên thì máy tính sẽ chuyển giá trị nguyên đó thành giá trị thực (số thực
phép tính đơn, thì máy sẽ tính toán từng phép tính đơn để nhận các kết quả
với phần thập phân bằng không) rồi mới gán cho biến. Khi biến bên trái là
trung gian, sau đó tính giá trị cuối cùng của biểu thức gọi là ước lượng.
biến nguyên, biểu thức bên phải có giá trị thực, thì máy tính cắt bỏ phần
Mức ưu tiên khi ước lượng giá trị của một biểu thức số học gồm nhiều
thập phân của giá trị thực, đổi số thực nhận được thành số nguyên rồi mới
phép tính đơn nêu trong bảng 2.3.
gán nó cho biến nguyên. Các trường hợp gán sai khác chương trình dịch sẽ
Nếu dấu âm đứng trước tên biến đầu tiên trong biểu thức, thì nó được báo lỗi.
tính với cùng mức ưu tiên như phép trừ. Thí dụ: A**2 bằng (A**2),
Không nên quan niệm lệnh gán như dấu bằng trong toán học.
A*B bằng (A*B) và A+B bằng (A)+B.
Bảng 2.3. Mức ưu tiên các phép tính số học
2.5.2. Các phép tính số học đơn giản
Các phép tính số học hay còn gọi là các toán tử số học gồm có các Ưu tiên Phép tính
phép tính cộng, trừ, nhân, chia và nâng lên luỹ thừa được ký hiệu bằng các 1 Dấu ngoặc
toán tử trong Fortran như trong bảng 2.2. 2 Nâng lên luỹ thừa
Gọi là những phép tính số học bởi vì các toán hạng của các phép tính 3 Nhân và chia
là những giá trị số, thí dụ số nguyên, số thực, số phức. Sau này chúng ta sẽ 4 Cộng và trừ
thấy máy tính có thể tính toán với những giá trị kiểu khác như giá trị lôgic,
Khi các phép tính ở cùng mức ưu tiên thì tất cả các phép tính được giá trị văn bản...
thực hiện từ trái sang phải, thí dụ: 19