Session 01 - khai niem co ban
Bài 1 Nhïng khái niÇm c¡ b£n vÁ ngôn ngï C
Måc tiêu:
K¿t thúc bài hÍc này, b¡n có thÃ:
Phân biÇt sñ khác nhau giïa Câu lÇnh, Ch°¡ng trình và Ph§n mÁm
Bi¿t °ãc quá trình hình thành C
Nên dùng C khi nào và t¡i sao
N¯m °ãc c¥u trúc mÙt ch°¡ng trình C
HiÃu rõ khái niÇm gi£i thut (algorithms)
V½ l°u Ó (flowchart)
LiÇt kê các ký hiÇu dùng trong l°u Ó
GiÛi thiÇu
Ngày nay, khoa hÍc máy tính thâm nhp vào mÍi l)nh vñc. Tñ Ùng hóa hiÇn ang là ngành chç chÑt iÁu h°Ûng sñ phát triÃn th¿ giÛi. B¥t cé ngành nghÁ nào cing c§n ph£i hiÃu bi¿t ít nhiÁu vÁ Công nghÇ Thông tin và lp trình nói chung. Cå thÃ, C là mÙt ngôn ngï lp trình c¥p cao mà mÍi lp trình viên c§n ph£i bi¿t. Vì th¿, trong giáo trình này, chúng ta s½ nghiên céu chi ti¿t c¥u trúc ngôn ngï C. Чu tiên chúng ta tìm hiÃu sñ khác nhau cça nhïng khái niÇm: LÇnh (Command), Ch°¡ng trình (Program) và Ph§n mÁm (Software).
1.1 Ra lÇnh cho máy tính làm viÇc
Khi mÙt máy tính °ãc khßi Ùng, nó s½ tñ Ùng thñc thi mÙt sÑ ti¿n trình và xu¥t k¿t qu£ ra màn hình. ÐiÁu này diÅn ra th¿ nào? Câu tr£ lÝi ¡n gi£n là nhÝ vào HÇ iÁu hành cài ·t bên trong máy tính. HÇ iÁu hành (operating system) °ãc xem nh° ph§n mÁm hÇ thÑng. Ph§n mÁm này khßi Ùng máy tính và thi¿t lp các thông sÑ ban §u tr°Ûc khi trao quyÁn cho ng°Ýi dùng. Ã làm °ãc iÁu này, hÇ iÁu hành ph£i °ãc c¥u t¡o të mÙt tp hãp các ch°¡ng trình. MÍi ch°¡ng trình Áu cÑ g¯ng °a ra lÝi gi£i cho mÙt hay nhiÁu bài toán nào óMÍi ch°¡ng trình cÑ g¯ng °a ra gi£i pháp cho mÙt hay nhiÁu v¥n Á. M×i ch°¡ng trình là tp hãp các câu lÇnh gi£i quy¿t mÙt bài toán cå thÃ. MÙt nhóm lÇnh t¡o thành mÙt ch°¡ng trình và mÙt nhóm các ch°¡ng trình t¡o thành mÙt ph§n mÁm.
à rõ h¡n, chúng ta hãy xem xét mÙt thí då : MÙt ng°Ýi b¡n ¿n nhà chúng ta ch¡i và °ãc mÝi món sïa dâu. Anh ta th¥y ngon miÇng và muÑn xin công théc làm. Chúng ta h°Ûng d«n cho anh ta làm nh° sau :
L¥y mÙt ít sïa.
Õ n°Ûc ép dâu vào.
TrÙn h×n hãp này và làm l¡nh.
Bây giÝ n¿u b¡n cça chúng ta theo nhïng chÉ d«n này, hÍ cing có thà t¡o ra món sïa dâu tuyÇt vÝi.
Chúng ta hãy phân tích chÉ thË (lÇnh) ß trên
LÇnh §u tiên : LÇnh này hoàn chÉnh ch°a ? Nó có tr£ lÝi °ãc câu hÏi l¥y sïa ß âu ?.
LÇnh thé hai : MÙt l§n nïa, lÇnh này không nói rõ n°Ûc ép dâu Ã ß âu .
May m¯n là b¡n cça chúng ta ç thông minh à hiÃu °ãc công théc pha ch¿ nói trên, dù r±ng còn nhiÁu iÃm ch°a rõ ràng. Do vy n¿u chúng ta muÑn phÕ bi¿n cách làm, chúng ta c§n bÕ sung các b°Ûc nh° sau :
Rót mÙt ly sïa vào máy trÙn.
Õ thêm vào mÙt ít n°Ûc dâu ép.
Ðóng n¯p máy trÙn
Mß iÇn và b¯t §u trÙn
Dëng máy trÙn l¡i
N¿u ã trÙn Áu thì t¯t máy, ng°ãc l¡i thì trÙn ti¿p.
Khi ã trÙn xong, rót h×n hãp vào tô và ·t vào tç l¡nh.
ÐÃ l¡nh mÙt lúc rÓi l¥y ra dùng.
So sánh hai cách h°Ûng d«n nêu trên, h°Ûng d«n thé hai ch¯c ch¯n hoàn chÉnh, rõ ràng h¡n, ai cing có thà Íc và hiÃu °ãc.
T°¡ng tñ, máy tính cing xí lý dï liÇu dña vào tp lÇnh mà nó nhn °ãc. а¡ng nhiên các chÉ thË °a cho máy vi tính cing c§n ph£i hoàn chÉnh và có ý ngh)a rõ ràng. Nhïng chÉ thË này c§n ph£i tuân thç các quy t¯c:
Tu§n tñ
Có giÛi h¡n
Chính xác.
M×i chÉ thË trong tp chÉ thË °ãc gÍi là câu lÇnh và tp các câu lÇnh °ãc gÍi là ch°¡ng trình .
Chúng ta hãy xét tr°Ýng hãp ch°¡ng trình h°Ûng d«n máy tính cÙng hai sÑ.
Các lÇnh trong ch°¡ng trình có thà là :
Nhp sÑ thé nh¥t và nhÛ nó.
Nhp sÑ thé hai và nhÛ nó.
Thñc hiÇn phép cÙng giïa sÑ thé nh¥t và sÑ thé hai, nhÛ k¿t qu£ phép cÙng.
HiÃn thË k¿t qu£.
K¿t thúc.
Tp lÇnh trên tuân thç t¥t c£ các quy t¯c ã Á cp. Vì vy, tp lÇnh này là mÙt ch°¡ng trình và nó s½ thñc hiÇn thành công viÇc cÙng hai sÑ trên máy tính.
Ghi chú: Kh£ nng nhÛ cça con ng°Ýi °ãc bi¿t ¿n nh° là trí nhÛ, kh£ nng nhÛ dï liÇu °ãc °a vào máy tính °ãc gÍi là bÙ nhÛ . Máy tính nhn dï liÇu t¡i mÙt thÝi iÃm và làm viÇc vÛi dï liÇu ó vào thÝi iÃm khác, ngh)a là máy tính ghi dï liÇu vào trong bÙ nhÛ rÓi sau ó Íc ra à truy xu¥t các giá trË dï liÇu và làm viÇc vÛi chúng.
Khi khÑi l°ãng công viÇc giao cho máy tính ngày càng nên nhiÁu và phéc t¡p thì t¥t c£ các câu lÇnh không thà °ãc °a vào mÙt ch°¡ng trình, chúng c§n °ãc chia ra thành mÙt sÑ ch°¡ng trình nhÏ h¡n. T¥t c£ các ch°¡ng trình này cuÑi cùng °ãc tích hãp l¡i à chúng có thà làm viÇc vÛi nhau. MÙt tp hãp các ch°¡ng trình nh° th¿ °ãc gÍi là ph§n mÁm.
MÑi quan hÇ giïa ba khái niÇm câu lÇnh, ch°¡ng trình và ph§n mÁm có thà °ãc biÃu diÅn b±ng s¡ Ó trong hình 1.1:
Hình 1.1: Ph§n mÁm, ch°¡ng trình và câu lÇnh
1.2 Ngôn ngï C
Vào §u nhïng nm 70 t¡i phòng thí nghiÇm Bell, Dennis Ritchie ã phát triÃn ngôn ngï C. C °ãc sí dång l§n §u trên mÙt hÇ thÑng cài ·t hÇ iÁu hành UNIX. C có nguÓn gÑc të ngôn ngï BCPL do Martin Richards phát triÃn. BCPL sau ó ã °ãc Ken Thompson phát triÃn thành ngôn ngï B, ây là ng°Ýi khßi thçy ra C.
Trong khi BCPL và B không h× trã kiÃu dï liÇu, thì C ã có nhiÁu kiÃu dï liÇu khác nhau. Nhïng kiÃu dï liÇu chính gÓm : kiÃu ký tñ (character), kiÃu sÑ nguyên (interger) và kiÃu sÑ thñc (float).
C liên k¿t ch·t ch½ vÛi hÇ thÑng UNIX nh°ng không bË trói buÙc vào b¥t cé mÙt máy tính hay hÇ iÁu hành nào. C r¥t hiÇu qu£ Ã vi¿t các ch°¡ng trình thuÙc nhiÁu nhïng l)nh vñc khác nhau.
C cing °ãc dùng à lp trình hÇ thÑng. MÙt ch°¡ng trình hÇ thÑng có ý ngh)a liên quan ¿n hÇ iÁu hành cça máy tính hay nhïng tiÇn ích h× trã nó. HÇ iÁu hành (OS), trình thông dËch (Interpreters), trình so¡n th£o (Editors), ch°¡ng trình Hãp Ngï (Assembly) là các ch°¡ng trình hÇ thÑng. HÇ iÁu hành UNIX °ãc phát triÃn dña vào C. C ang °ãc sí dång rÙng rãi bßi vì tính hiÇu qu£ và linh ho¡t. Trình biên dËch (compiler) C có sµn cho h§u h¿t các máy tính. Mã lÇnh vi¿t b±ng C trên máy này có thà °ãc biên dËch và ch¡y trên máy khác chÉ c§n thay Õi r¥t ít ho·c không thay Õi gì c£. Trình biên dËch C dËch nhanh và cho ra mã Ñi t°ãng không l×i.
C khi thñc thi cing r¥t nhanh nh° hãp ngï (Assembly). Lp trình viên có thà t¡o ra và b£o trì th° viÇn hàm mà chúng s½ °ãc tái sí dång cho ch°¡ng trình khác. Do ó, nhïng dñ án lÛn có thà °ãc qu£n lý dÅ dàng mà tÑn r¥t ít công séc.
1.2.1 C Ngôn ngï bc trung
C °ãc hiÃu là ngôn ngï bc trung bßi vì nó k¿t hãp nhïng y¿u tÑ cça nhïng ngôn ngï c¥p cao và nhïng chéc nng cça hãp ngï (ngôn ngï c¥p th¥p). C cho phép thao tác trên nhïng thành ph§n c¡ b£n cça máy tính nh° bits, bytes, Ëa chÉ& . H¡n nïa, mã C r¥t dÅ di chuyÃn ngh)a là ph§n mÁm vi¿t cho lo¡i máy tính này có thà ch¡y trên mÙt lo¡i máy tính khác. M·c dù C có nm kiÃu dï liÇu c¡ b£n, nh°ng nó không °ãc xem ngang hàng vÛi ngôn ngï cao c¥p vÁ m·t kiÃu dï liÇu. C cho phép chuyÃn kiÃu dï liÇu. Nó cho phép thao tác trñc ti¿p trên bits, bytes, word và con trÏ (pointer). Vì vy, nó °ãc dùng cho lp trình méc hÇ thÑng.
1.2.2 C - Ngôn ngï c¥u trúc
Thut ngï ngôn ngï c¥u trúc khÑi (block-structured language) không áp dång vÛi C. Ngôn ngï c¥u trúc khÑi cho phép thç tåc (procedures) hay hàm (functions) °ãc khai báo bên trong các thç tåc và hàm khác. C không cho phép viÇc t¡o hàm trong hàm nên nó không ph£i là ngôn ngï c¥u trúc khÑi. Tuy nhiên, nó °ãc xem là ngôn ngï c¥u trúc vì nó có nhiÁu iÃm giÑng vÛi ngôn ngï c¥u trúc ALGOL, Pascal và mÙt sÑ ngôn ngï t°¡ng tñ khác.
C cho phép có sñ tÕng hãp cça mã lÇnh và dï liÇu. ÐiÁu này là mÙt ·c iÃm riêng biÇt cça ngôn ngï c¥u trúc. Nó liên quan ¿n kh£ nng tp hãp cing nh° ©n d¥u t¥t c£ thông tin và các lÇnh khÏi ph§n còn l¡i cça ch°¡ng trình à dùng cho nhïng tác vå riêng biÇt. ÐiÁu này có thà thñc hiÇn qua viÇc dùng các hàm hay các khÑi mã lÇnh (Code Block). Các hàm °ãc dùng à Ënh ngh)a hay tách rÝi nhïng tác vå °ãc yêu c§u trong ch°¡ng trình. ÐiÁu này cho phép nhïng ch°¡ng trình ho¡t Ùng nh° trong mÙt ¡n vË thÑng nh¥t. KhÑi mã lÇnh là mÙt nhóm các câu lÇnh ch°¡ng trình °ãc nÑi k¿t vÛi nhau theo mÙt trt tñ logic nào ó và cing °ãc xem nh° mÙt ¡n vË thÑng nh¥t. MÙt khÑi mã lÇnh °ãc t¡o bßi mÙt tp hãp nhiÁu câu lÇnh tu§n tñ giïa d¥u ngo·c mß và óng xo¯n nh° d°Ûi ây:
do
{
i = i + 1;
.
.
.
} while (i < 40);
Ngôn ngï c¥u trúc h× trã nhiÁu c¥u trúc dùng cho vòng l·p (loop) nh° là while, do-while, và for. Nhïng c¥u trúc l·p này giúp lp trình viên iÁu khiÃn h°Ûng thñc thi trong ch°¡ng trình.
1.3 C¥u trúc ch°¡ng trình C
C có mÙt sÑ të khóa, chính xác là 32. Nhïng të khóa này k¿t hãp vÛi cú pháp cça C hình thành ngôn ngï C. Nh°ng nhiÁu trình biên dËch cho C ã thêm vào nhïng të khóa dùng cho viÇc tÕ chéc bÙ nhÛ ß nhïng giai o¡n tiÁn xí lý nh¥t Ënh.
Vài quy t¯c khi lp trình C nh° sau :
- T¥t c£ të khóa là chï th°Ýng (không in hoa)
- Ðo¡n mã trong ch°¡ng trình C có phân biÇt chï th°Ýng và chï hoa. Ví då : do while thì khác vÛi DO WHILE
- Të khóa không thà dùng cho các måc ích khác nh° ·t tên bi¿n (variable name) ho·c tên hàm (function name)
- Hàm main() luôn là hàm §u tiên °ãc gÍi ¿n khi mÙt ch°¡ng trình b¯t §u ch¡y (chúng ta s½ xem xét kù h¡n ß ph§n sau)
Xem xét o¡n mã ch°¡ng trình:
main ()
{
/* This is a sample program */
int i = 0;
i = i + 1;
.
.
}
Ghi chú: Nhïng khía c¡nh khác nhau cça ch°¡ng trình C °ãc xem xét qua o¡n mã trên. Ðo¡n mã này xem nh° là o¡n mã m«u, nó s½ °ãc dùng l¡i trong suÑt ph§n còn l¡i cça giáo trình này.
1.3.1 ÐËnh ngh)a Hàm
Ch°¡ng trình C °ãc chia thành tëng ¡n vË gÍi là hàm. Ðo¡n mã m«u chÉ có duy nh¥t mÙt hàm main(). HÇ iÁu hành luôn trao quyÁn iÁu khiÃn cho hàm main() khi mÙt ch°¡ng trình C °ãc thñc thi. Tên hàm luôn °ãc theo sau là c·p d¥u ngo·c ¡n (). Trong d¥u ngo·c ¡n có thà có hay không có nhïng tham sÑ (parameters).
1.3.2 D¥u phân cách (Delimiters)
Sau Ënh ngh)a hàm s½ là d¥u ngo·c xo¯n mß {. Nó thông báo iÃm b¯t §u cça hàm. T°¡ng tñ, d¥u ngo·c xo¯n óng } sau câu lÇnh cuÑi trong hàm chÉ ra iÃm k¿t thúc cça hàm. D¥u ngo·c xo¯n mß ánh d¥u iÃm b¯t §u cça mÙt khÑi mã lÇnh, d¥u ngo·c xo¯n óng ánh d¥u iÃm k¿t thúc cça khÑi mã lÇnh ó. Trong o¡n mã m«u có 2 câu lÇnh giïa 2 d¥u ngo·c xo¯n.
H¡n nïa, Ñi vÛi hàm, d¥u ngo·c xo¯n cing dùng à phân Ënh nhïng o¡n mã trong tr°Ýng hãp dùng cho c¥u trúc vòng l·p và lÇnh iÁu kiÇn..
1.3.3 D¥u k¿t thúc câu lÇnh (Terminator)
Dòng int i = 0; trong o¡n mã m«u là mÙt câu lÇnh (statement). MÙt câu lÇnh trong C thì °ãc k¿t thúc b±ng d¥u ch¥m ph©y (;). C không hiÃu viÇc xuÑng dòng dùng phím Enter, kho£ng tr¯ng dùng phím spacebar hay mÙt kho£ng cách do dùng phím tab. Có thà có nhiÁu h¡n mÙt câu lÇnh trên cùng mÙt hàng nh°ng m×i câu lÇnh ph£i °ãc k¿t thúc b±ng d¥u ch¥m ph©y. MÙt câu lÇnh không °ãc k¿t thúc b±ng d¥u ch¥m ph©y °ãc xem nh° mÙt câu lÇnh sai.
1.3.4 Dòng chú thích (Comment)
Nhïng chú thích th°Ýng °ãc vi¿t à mô t£ công viÇc cça mÙt lÇnh ·c biÇt, mÙt hàm hay toàn bÙ ch°¡ng trình. Trình biên dËch s½ không dËch chúng. Trong C, chú thích b¯t §u b±ng ký hiÇu /* và k¿t thúc b±ng */. Tr°Ýng hãp chú thích có nhiÁu dòng, ta ph£i chú ý ký hiÇu k¿t thúc (*/), n¿u thi¿u ký hiÇu này, toàn bÙ ch°¡ng trình s½ bË coi nh° là mÙt chú thích. Trong o¡n mã m«u dòng chï "This is a sample program" là dòng chú thích. Trong tr°Ýng hãp chú thích chÉ trên mÙt dòng ta có thà dùng //. Ví då:
int a = 0; // Bi¿n a ã °ãc khai báo nh° là mÙt kiÃu sÑ nguyên (interger)
1.3.5 Th° viÇn C (Library)
T¥t c£ trình biên dËch C chéa mÙt th° viÇn hàm chu©n dùng cho nhïng tác vå chung. MÙt vài bÙ cài ·t C ·t th° viÇn trong mÙt tp tin (file) lÛn trong khi a sÑ còn l¡i chéa nó trong nhiÁu tp tin nhÏ. Khi lp trình, nhïng hàm °ãc chéa trong th° viÇn có thà °ãc dùng cho nhiÁu lo¡i tác vå khác nhau. MÙt hàm (°ãc vi¿t bßi mÙt lp trình viên) có thà °ãc ·t trong th° viÇn và °ãc dùng bßi nhiÁu ch°¡ng trình khi °ãc yêu c§u. Vài trình biên dËch cho phép hàm °ãc thêm vào th° viÇn chu©n trong khi sÑ khác l¡i yêu c§u t¡o mÙt th° viÇn riêng.
1.4 Biên dËch và thñc thi mÙt ch°¡ng trình (Compiling and Running)
Nhïng b°Ûc khác nhau cça viÇc dËch mÙt ch°¡ng trình C të mã nguÓn thành mã thñc thi °ãc thñc hiÇn nh° sau :
So¡n th£o/Xí lý të
Ta dùng mÙt trình xí lý të (word processor) hay trình so¡n th£o (editor) Ã vi¿t mã nguÓn (source code). C chÉ ch¥p nhn lo¡i mã nguÓn vi¿t d°Ûi d¡ng tp tin vn b£n chu©n. Vài trình biên dËch (compiler) cung c¥p môi tr°Ýng lp trình (xem phå låc) gÓm trình so¡n th£o.
Mã nguÓn
Ðây là o¡n vn b£n cça ch°¡ng trình mà ng°Ýi dùng có thà Íc. Nó là §u vào cça trình biên dËch C.
BÙ tiÁn xí lý C
Të mã nguÓn, b°Ûc §u tiên là chuyÃn nó qua bÙ tiÁn xí lý cça C. BÙ tiÁn xí lý này s½ xem xét nhïng câu lÇnh b¯t §u b±ng d¥u #. Nhïng câu lÇnh này gÍi là các chÉ thË tiÁn biên dËch (directives). iÁu này s½ °ãc gi£i thích sau. ChÉ thË tiÁn biên dËch th°Ýng °ãc ·t n¡i b¯t §u ch°¡ng trình m·c dù nó có thà °ãc ·t b¥t cé n¡i nào khác. ChÉ thË tiÁn biên dËch là nhïng tên ng¯n gÍn °ãc gán cho mÙt tp mã lÇnh.
Mã nguÓn mß rÙng C
BÙ tiÁn xí lý cça C khai triÃn các chÉ thË tiÁn biên dËch và °a ra k¿t qu£. Ðây gÍi là mã nguÓn C mß rÙng, sau ó nó °ãc chuyÃn cho trình biên dËch C.
Trình biên dËch C (Compiler)
Trình biên dËch C dËch mã nguÓn mß rÙng thành ngôn ngï máy à máy tính hiÃu °ãc.
N¿u ch°¡ng trình quá lÛn nó có thà °ãc chia thành nhïng tp tin riêng biÇt và m×i tp tin có thà °ãc biên dËch riêng r½. ÐiÁu này giúp ích khi mà mÙt tp tin bË thay Õi, toàn ch°¡ng trình không ph£i biên dËch l¡i.
BÙ liên k¿t (Linker)
Mã Ñi t°ãng cùng vÛi nhïng thç tåc h× trã trong th° viÇn chu©n và nhïng hàm °ãc dËch riêng l» khác k¿t nÑi l¡i bßi BÙ liên k¿t à cho ra mã có thà thñc thi °ãc.
BÙ n¡p (Loader)
Mã thñc thi °ãc thi hành bßi bÙ n¡p cça hÇ thÑng.
Ti¿n trình trên °ãc mô t£ qua l°u Ó 1.2 sau :
Hình 1.2: Biên dËch và thñc thi mÙt ch°¡ng trình
1.5 Các b°Ûc lp trình gi£i quy¿t v¥n Á
Chúng ta th°Ýng g·p ph£i nhïng bài toán. Ã gi£i quy¿t nhïng bài toán ó, chúng ta c§n hiÃu chúng tr°Ûc rÓi sau ó mÛi ho¡ch Ënh các b°Ûc c§n làm .
Gi£ sí chúng ta muÑn i të phòng hÍc ¿n quán n tñ phåc vå ß t§ng h§m. ÐÃ thñc hiÇn viÇc này chúng ta c§n hiÃu nó rÓi tìm ra các b°Ûc gi£i quy¿t tr°Ûc khi thñc thi các b°Ûc ó:
B¯ÚC 1 : RÝi phòng
B¯ÚC 2 : пn c§u thang
B¯ÚC 3 : XuÑng t§ng h§m
B¯ÚC 4 : Ði ti¿p ¿n quán n tñ phåc vå
Thç tåc trên liÇt kê tp hãp các b°Ûc thñc hiÇn °ãc xác Ënh rõ ràng cho viÇc gi£i quy¿t v¥n Á. MÙt tp hãp các b°Ûc nh° vy gÍi là gi£i thut (Algorithm hay gÍi v¯n t¯t là algo ).
MÙt gi£i thut (còn gÍi là thut toán) có thà °ãc Ënh ngh)a nh° là mÙt thç tåc, công théc hay cách gi£i quy¿t v¥n Á. Nó gÓm mÙt tp hãp các b°Ûc giúp ¡t °ãc lÝi gi£i.
Qua ph§n trên, chúng ta th¥y rõ ràng à gi£i quy¿t °ãc mÙt bài toán, tr°Ûc tiên ta ph£i hiÃu bài toán ó, k¿ ¿n chúng ta c§n tp hãp t¥t c£ nhïng thông tin liên quan tÛi nó. B°Ûc k¿ s½ là xí lý nhïng m©u thông tin ó. CuÑi cùng, chúng ta cho ra lÝi gi£i cça bài toán ó.
Gi£i thut chúng ta có là mÙt tp hãp các b°Ûc °ãc liÇt kê d°Ûi d¡ng ngôn ngï ¡n gi£n. R¥t có thà r±ng các b°Ûc trên do hai ng°Ýi khác nhau vi¿t v«n t°¡ng tñ nhau nh°ng ngôn ngï dùng diÅn t£ các b°Ûc có thà khác nhau. Do ó, c§n thi¿t có nhïng ph°¡ng pháp chu©n mñc cho viÇc vi¿t gi£i thut à mÍi ng°Ýi dÅ dàng hiÃu nó. Chính vì vy , gi£i thut °ãc vi¿t b±ng cách dùng hai ph°¡ng pháp chu©n là mã gi£ (pseudo code) và l°u Ó (flowchart).
C£ hai ph°¡ng pháp này Áu dùng à xác Ënh mÙt tp hãp các b°Ûc c§n °ãc thi hành à có °ãc lÝi gi£i. Liên hÇ tÛi v¥n Á i ¿n quán n tñ phåc vå trên, chúng ta ã v¡ch ra mÙt k¿ ho¡ch (thut toán) à ¿n ích. Tuy nhiên, à ¿n n¡i, chúng ta ph£i c§n thi hành nhïng b°Ûc này tht sñ. T°¡ng tñ, mã gi£ và l°u Ó chÉ °a ra nhïng b°Ûc c§n làm. Lp trình viên ph£i vi¿t mã cho viÇc thñc thi nhïng b°Ûc này qua viÇc dùng mÙt ngôn ngï nào ó.
Chi ti¿t vÁ vÁ mã gi£ và l°u Ó °ãc trình bày d°Ûi ây.
1.5.1 Mã gi£ (pseudo code)
NhÛ r±ng mã gi£ không ph£i là mã tht. Mã gi£ sí dång mÙt tp hãp nhïng të t°¡ng tñ nh° mã tht nh°ng nó không thà °ãc biên dËch và thñc thi nh° mã tht.
Chúng ta hãy xem xét mã gi£ qua ví då sau.Ví då này s½ hiÃn thË câu 'Hello World!'.
Ví då 1:
BEGIN
DISPLAY 'Hello World!'
END
Qua ví då trên, m×i o¡n mã gi£ ph£i b¯t §u vÛi të BEGIN ho·c START, và k¿t thúc vÛi të END hay STOP. ÐÃ hiÃn thË giá trË nào ó, të DISPLAY ho·c WRITE °ãc dùng. Khi giá trË °ãc hiÃn thË là mÙt giá trË h±ng (không Õi), trong tr°Ýng hãp này là (Hello World), nó °ãc ·t bên trong d¥u nháy. T°¡ng tñ, Ã nhn mÙt giá trË cça ng°Ýi dùng, të INPUT hay READ °ãc dùng.
ÐÃ hiÃu iÁu này rõ h¡n, chúng ta xem xét ví då 2, ß ví då này ta s½ nhp hai sÑ và máy s½ hiÃn thË tÕng cça hai sÑ.
Ví då 2:
BEGIN
INPUT A, B
DISPLAY A + B
END
Trong o¡n mã gi£ này, ng°Ýi dùng nhp vào hai giá trË, hai giá trË này °ãc l°u trong bÙ nhÛ và có thà °ãc truy xu¥t nh° là A và B theo thé tñ. Nhïng vË trí °ãc ·t tên nh° vy trong bÙ nhÛ gÍi là bi¿n. Chi ti¿t vÁ bi¿n s½ °ãc gi£i thích trong ph§n sau cça ch°¡ng này. B°Ûc k¿ ti¿p trong o¡n mã gi£ s½ hiÃn thË tÕng cça hai giá trË trong bi¿n A và B.
Tuy nhiên, cing o¡n mã trên, ta có thà bÕ sung à l°u tÕng cça hai bi¿n trong mÙt bi¿n thé ba rÓi hiÃn thË giá trË bi¿n này nh° trong ví då 3 sau ây.
Ví då 3:
BEGIN
INPUT A, B
C = A + B
DISPLAY C
END
MÙt tp hãp nhïng chÉ thË hay các b°Ûc trong mã gi£ thì °ãc gÍi chung là mÙt c¥u trúc. Có ba lo¡i c¥u trúc : tu§n tñ, chÍn lña và l·p l¡i. Trong o¡n mã gi£ ta vi¿t ß trên,chúng ta dùng c¥u trúc tu§n tñ. Chúng °ãc gÍi nh° vy vì nhïng chÉ thË °ãc thi hành tu§n tñ, cái này sau cái khác và b¯t §u të iÃm §u tiên. Hai lo¡i c¥u trúc còn l¡i s½ °ãc Á cp trong nhïng ch°¡ng sau.
1.5.2 L°u Ó (Flowcharts)
MÙt l°u Ó là mÙt hình £nh minh ho¡ cho gi£i thut. Nó v½ ra biÃu Ó cça luÓng chÉ thË hay nhïng ho¡t Ùng trong mÙt ti¿n trình. M×i ho¡t Ùng nh° vy °ãc biÃu diÅn qua nhïng ký hiÇu.
ÐÃ hiÃu iÁu này rõ h¡n, chúng ta xem l°u Ó trong hình 1.3 dùng hiÃn thË thông iÇp truyÁn thÑng Hello World! .
EMBED Pacestar.Diagram
Hình 1.3: L°u Ó
L°u Ó giÑng vÛi o¡n mã gi£ là cùng b¯t §u vÛi të BEGIN ho·c START, và k¿t thúc vÛi të END hay STOP. T°¡ng tñ, të khóa DISPLAY °ãc dùng à hiÃn thË giá trË nào ó ¿n ng°Ýi dùng. Tuy nhiên, ß ây, mÍi të khóa thì n±m trong nhïng ký hiÇu. Nhïng ký hiÇu khác nhau mang mÙt ý ngh)a t°¡ng éng °ãc trình bày ß b£ng trong Hình 1.4.
Hình 1.4: Ký hiÇu trong l°u Ó
Ta hãy xét l°u Ó cho ví då 3 nh° ß Hình 1.5 d°Ûi ây.
EMBED PBrush
Hình 1.5: L°u Ó cÙng hai sÑ
T¡i b°Ûc mà giá trË cça hai bi¿n °ãc cÙng và gán cho bi¿n thé ba thì xem nh° là mÙt xí lý và °ãc trình bày b±ng mÙt hình chï nht.
L°u Ó mà chúng ta xét ß ây là ¡n gi£n.Thông th°Ýng, l°u Ó tr£i rÙng trên nhiÁu trang gi¥y. Trong tr°Ýng hãp nh° th¿, biÃu t°ãng bÙ nÑi °ãc dùng à chÉ iÃm nÑi cça hai ph§n trong mÙt ch°¡ng trình n±m ß hai trang k¿ ti¿p nhau. Vòng tròn chÉ sñ nÑi k¿t và ph£i chéa ký tñ ho·c sÑ nh° ß hình 1.6. Nh° th¿, chúng ta có thà t¡o liên k¿t gi°a hai l°u Ó ch°a hoàn chÉnh.
EMBED PBrush
Hình 1.6: BÙ nÑi
Bßi vì l°u Ó °ãc sí dång à vi¿t ch°¡ng trình, chúng c§n °ãc trình bày sao cho mÍi lp trình viên hiÃu chúng dÅ dàng. N¿u có ba lp trình viên dùng ba ngôn ngï lp trình khác nhau à vi¿t mã, bài toán hÍ c§n gi£i quy¿t ph£i nh° nhau. Trong tr°Ýng hãp này, mã gi£ °a cho lp trình viên có thà giÑng nhau m·c dù ngôn ngï lp trình hÍ dùng và t¥t nhiên là cú pháp có thà khác nhau. Nh°ng k¿t qu£ cuÑi cùng là mÙt. Do ó, c§n thi¿t ph£i hiÃu rõ bài toán và mã gi£ ph£i °ãc vi¿t c©n thn. Chúng ta cing k¿t lun r±ng mã gi£ Ùc lp vÛi ngôn ngï lp trình.
Vài iÃm c§n thi¿t khác ph£i chú ý khi v½ mÙt l°u Ó :
Lúc §u chÉ tp trung vào khía c¡nh logic cça bài toán và v½ các luÓng xí lý chính cça l°u Ó
MÙt l°u Ó ph£i có duy nh¥t mÙt iÃm b¯t §u (START) và mÙt iÃm k¿t thúc (STOP).
Không c§n thi¿t ph£i mô t£ tëng b°Ûc cça ch°¡ng trình trong l°u Ó mà chÉ c§n các b°Ûc chính và có ý ngh)a c§n thi¿t.
Chúng ta tuân theo nhïng c¥u trúc tu§n tñ, mà trong ó luÓng thñc thi ch°¡ng trình i qua t¥t c£ các chÉ thË b¯t §u të chÉ thË §u tiên. Chúng ta có thà b¯t g·p các iÁu kiÇn trong ch°¡ng trình, dña trên các iÁu kiÇn này h°Ûng thñc thi cça ch°¡ng trình có thà r½ nhánh. Nhïng c¥u trúc cho viÇc r½ nhánh nh° là c¥u trúc chÍn lña, c¥u trúc iÁu kiÇn hay r½ nhánh. Nhïng c¥u trúc này °ãc Á cp chi ti¿t sau ây:
C¥u trúc IF (N¿u)
C¥u trúc chÍn lña c¡ b£n là c¥u trúc IF . ÐÃ hiÃu c¥u trúc này chúng ta hãy xem xét ví då trong ó khách hàng °ãc gi£m giá n¿u mua trên 100 Óng. M×i l§n khách hàng tr£ tiÁn, mÙt o¡n mã ch°¡ng trình s½ kiÃm tra xem l°ãng tiÁn tr£ có quá 100 Óng không?. N¿u úng th¿ thì s½ gi£m giá 10% cça tÕng sÑ tiÁn tr£, ng°ãc l¡i thì không gi£m giá.
ÐiÁu này °ãc minh hÍa s¡ l°ãc qua mã gi£ nh° sau:
IF khách hàng mua trên 100 thì gi£m giá 10%
C¥u trúc dùng ß ây là câu lÇnh IF.
Hình théc chung cho câu lÇnh IF (c¥u trúc IF) nh° sau:
IF iÁu kiÇn
Các câu lÇnh Ph§n thân cça c¥u trúc IF
END IF
MÙt c¥u trúc IF b¯t §u là IF theo sau là iÁu kiÇn. N¿u iÁu kiÇn là úng (thÏa iÁu kiÇn) thì quyÁn iÁu khiÃn s½ °ãc chuyÃn ¿n các câu lÇnh trong ph§n thân à thñc thi. N¿u iÁu kiÇn sai (không thÏa iÁu kiÇn), nhïng câu lÇnh ß ph§n thân không °ãc thñc thi và ch°¡ng trình nh£y ¿n câu lÇnh sau END IF (ch¥m dét c¥u trúc IF). C¥u trúc IF ph£i °ãc k¿t thúc b±ng END IF.
Chúng ta xem ví då 4 cho c¥u trúc IF.
Ví då 4:
Yêu c§u: KiÃm xem mÙt sÑ là chµn hay không và hiÃn thË thông iÇp báo n¿u úng là sÑ chµn,
ta xí lý nh° sau :
BEGIN
INPUT num
r = num MOD 2
IF r=0
Display Number is even
END IF
END
Ðo¡n mã trên nhp mÙt sÑ të ng°Ýi dùng, thñc hiÇn toán tí MOD (l¥y ph§n d°) và kiÃm tra xem ph§n d° có b±ng 0 hay không. N¿u b±ng 0 hiÃn thË thông iÇp, ng°ãc l¡i thoát ra.
L°u Ó cho o¡n mã gi£ trên thà hiÇn qua hình 1.7.
EMBED Pacestar.Diagram
Hình 1.7 : KiÃm tra sÑ chµn
Cú pháp cça lÇnh IF trong C nh° sau:
if (iÁu kiÇn)
{
Câu lÇnh
}
C¥u trúc IF& ELSE
Trong ví då 4, s½ hay h¡n n¿u ta cho ra thông iÇp báo r±ng sÑ ó không là sÑ chµn téc là sÑ l» thay vì chÉ thoát ra. Ðà làm iÁu này ta có thà thêm câu lÇnh IF khác à kiÃm tra xem tr°Ýng hãp sÑ ó không chia h¿t cho 2. Ta xem ví då 5.
Example 5:
BEGIN
INPUT num
r = num MOD 2
IF r=0
DISPLAY Even number
END IF
IF r<>0
DISPLAY Odd number
END IF
END
Ngôn ngï lp trình cung c¥p cho chúng ta c¥u trúc IF& ELSE. Dùng c¥u trúc này s½ hiÇu qu£ và tÑt h¡n à gi£i quy¿t v¥n Á. C¥u trúc IF & ELSE giúp lp trình viên chÉ làm mÙt phép so sánh và sau ó thñc thi các b°Ûc tùy theo k¿t qu£ cça phép so sánh là True (úng) hay False (sai).
C¥u trúc chung cça câu lÇnh IF& ELSE nh° sau:
IF iÁu kiÇn
Câu lÇnh 1
ELSE
Câu lÇnh 2
END IF
Cú pháp cça c¥u trúc if& else trong C nh° sau:
if(iÁu kiÇn)
{
Câu lÇnh 1
}
else
{
Câu lÇnh 2
}
N¿u iÁu kiÇn thÏa (True), câu lÇnh 1 °ãc thñc thi. Ng°ãc l¡i, câu lÇnh 2 °ãc thñc thi. Không bao giÝ c£ hai °ãc thñc thi cùng lúc. Vì vy, o¡n mã tÑi °u h¡n cho ví då tìm sÑ chµn °ãc vi¿t ra nh° ví då 6.
Ví då 6:
BEGIN
INPUT num
r = num MOD 2
IF r = 0
DISPLAY Even Number
ELSE
DISPLAY Odd Number
END IF
END
L°u Ó cho o¡n mã gi£ trên thà hiÇn qua Hình 1.8.
EMBED Pacestar.Diagram
Hình 1.8: SÑ chµn hay sÑ l»
Ða iÁu kiÇn sí dång AND/OR
C¥u trúc IF& ELSE làm gi£m Ù phéc t¡p, gia tng tính hïu hiÇu. Þ mÙt méc Ù nào ó, nó cing nâng cao tính dÅ Íc cça mã. Các thí då IF chúng ta ã Á cp ¿n thÝi iÃm này thì khá ¡n gi£n. Chúng chÉ có mÙt iÁu kiÇn trong IF à ánh giá. ThÉnh tho£ng chúng ta ph£i kiÃm tra cho h¡n mÙt iÁu kiÇn, thí då: Ðà xem xét nhà cung c¥p có ¡t MVS (nhà cung c¥p quan trÍng nh¥t) không?, mÙt công ty s½ kiÃm tra xem nhà cung c¥p ó ã có làm viÇc vÛi công ty ít nh¥t 10 nm không? và ã có tÕng doanh thu ít nh¥t 5,000,000 không?. Hai iÁu kiÇn thÏa mãn thì nhà cung c¥p °ãc xem nh° là mÙt MVS. Do ó toán tí AND có thà °ãc dùng trong câu lÇnh IF nh° trong ví då 7 sau:
Ví då 7:
BEGIN
INPUT yearsWithUs
INPUT bizDone
IF yearsWithUs >= 10 AND bizDone >=5000000
DISPLAY Classified as an MVS
ELSE
DISPLAY A little more effort required!
END IF
END
Ví då 7 cing khá ¡n gi£n, vì nó chÉ có 2 iÁu kiÇn. Þ tình huÑng thñc t¿, chúng ta có thà có nhiÁu iÁu kiÇn c§n °ãc kiÃm tra. Nh°ng chúng ta có thà dÅ dàng dùng toán tí AND à nÑi nhïng iÁu kiÇn l¡i giÑng nh° ta ã làm ß trên.
Bây giÝ, gi£ sí công ty trong ví då trên Õi quy Ënh, hÍ quy¿t Ënh °a ra iÁu kiÇn dÅ dàng h¡n. Nh° là : Ho·c làm viÇc vÛi công ty trên 10 nm ho·c có doanh sÑ (giá trË th°¡ng m¡i,giao dËch) të 5,000,000 trß lên. Vì vâõ, ta thay th¿ toán tí AND b±ng toán tí OR. NhÛ r±ng toán tí OR cho ra giá trË True (úng) n¿u chÉ c§n mÙt iÁu kiÇn là True.
C¥u trúc IF lÓng nhau
MÙt cách khác à thñc hiÇn ví då 7 là sí dång c¥u trúc IF lÓng nhau. C¥u trúc IF lÓng nhau là câu lÇnh IF này n±m trong trong câu lÇnh IF khác. Chúng ta vi¿t l¡i ví då 7 sí dång c¥u trúc IF lÓng nhau ß ví då 8 nh° sau:
Ví då 8:
BEGIN
INPUT yearsWithUs
INPUT bizDone
IF yearsWithUs >= 10
IF bizDone >=5000000
DISPLAY Classified as an MVS
ELSE
DISPLAY A little more effort required!
END IF
ELSE
DISPLAY A little more effort required!
END IF
END
Ðo¡n mã trên thñc hiÇn cùng nhiÇm vå nh°ng không có AND . Tuy nhiên, chúng ta có mÙt lÇnh IF (kiÃm tra xem bizDone lÛn h¡n ho·c b±ng 5,000,000 hay không?) bên trong lÇnh IF khác (kiÃm tra xem yearsWithUs lÛn h¡n ho·c b±ng 10 hay không?). Câu lÇnh IF §u tiên kiÃm tra iÁu kiÇn thÝi gian nhà cung c¥p làm viÇc vÛi công ty có lÛn h¡n 10 nm hay không. N¿u d°Ûi 10 nm (k¿t qu£ tr£ vÁ là False), nó s½ không công nhn nhà cung c¥p là mÙt MVS; N¿u thÏa iÁu kiÇn nó xét câu lÇnh IF thé hai, nó s½ kiÃm tra tÛi iÁu kiÇn bizDone lÛn h¡n ho·c b±ng 5,000,000 hay không. N¿u thÏa iÁu kiÇn (k¿t qu£ tr£ vÁ là True) lúc ó nhà cung c¥p °ãc xem là mÙt MVS, n¿u không thì mÙt thông iÇp báo r±ng ó không là mÙt MVS.
L°u Ó cho mã gi£ cça ví då 8 °ãc trình bày qua hình 1.9.
EMBED Pacestar.Diagram
Hình 1.9: Câu lÇnh IF lÓng nhau
Mã gi£ trong tr°Ýng hãp này cça c¥u trúc IF lÓng nhau t¡i ví då 8 ch°a hiÇu qu£. Câu lÇnh thông báo không thÏa iÁu kiÇn MVS ph£i vi¿t hai l§n. H¡n nïa lp trình viên ph£i vi¿t thêm mã nên trình biên dËch ph£i xét hai iÁu kiÇn cça lÇnh IF, do ó lãng phí thÝi gian. Ng°ãc l¡i, n¿u dùng toán tí AND chÉ xét tÛi iÁu kiÇn cça câu lÇnh IF mÙt l§n. ÐiÁu này không có ngh)a là c¥u trúc IF lÓng nhau nói chung là không hiÇu qu£. Nó tùy theo tình huÑng cå thà mà ta dùng nó. Có khi dùng toán tí AND hiÇu qu£ h¡n, có khi dùng c¥u trúc IF lÓng nhau hiÇu qu£ h¡n. Chúng ta s½ xét mÙt ví då mà dùng c¥u trúc IF lÓng nhau hiÇu qu£ h¡n dùng toán tí AND.
MÙt công ty Ënh ph§n l°¡ng c¡ b£n cho công nhân dña trên tiêu chu©n nh° trong b£ng 1.1.
Grade Experience Salary E 2 2000 E 3 3000 M 2 3000 M 3 4000
B£ng 1.1: L°¡ng c¡ b£n
Vì vy, n¿u mÙt công nhân °ãc x¿p lo¡i là E và có hai nm kinh nghiÇm thì l°¡ng là 2000, n¿u ba nm kinh nghiÇm thì l°¡ng là 3000.
Mã gi£ dùng toán tí AND cho v¥n Á trên nh° ví då 9:
Ví då 9:
BEGIN
INPUT grade
INPUT exp
IF grade = E AND exp =2
salary=2000
ELSE
IF grade = E AND exp=3
salary=3000
END IF
END IF
IF grade = M AND exp =2
salary=3000
ELSE
IF grade = M AND exp=3
salary=4000
END IF
END IF
END
Câu lÇnh IF §u tiên kiÃm tra x¿p lo¡i và kinh nghiÇm cça công nhân. N¿u x¿p lo¡i là E và kinh nghiÇm là 2 nm thì l°¡ng là 2000, ngoài ra n¿u x¿p lo¡i E, nh°ng có 3 nm kinh nghiÇm thì l°¡ng là 3000.
N¿u c£ 2 iÁu kiÇn không thÏa thì câu lÇnh IF thé hai cing t°¡ng tñ s½ kiÃm iÁu kiÇn x¿p lo¡i và kinh nghiÇm cho công nhân à phân Ënh l°¡ng.
Gi£ sí x¿p lo¡i cça mÙt công nhân là E và có hai nm kinh nghiÇm. L°¡ng ng°Ýi ó s½ °ãc tính theo mÇnh Á IF §u tiên. Ph§n còn l¡i cça câu lÇnh IF thé nh¥t °ãc bÏ qua. Tuy nhiên, iÁu kiÇn t¡i mÇnh Á IF thé hai s½ °ãc xét và t¥t nhiên là không thÏa, do ó nó kiÃm tra mÇnh Á ELSE cça câu lÇnh IF thé 2 và k¿t qu£ cing là False. Ðây qu£ là nhïng b°Ûc thëa mà ch°¡ng trình ã xét qua. Trong ví då, ta chÉ có hai câu lÇnh IF bßi vì ta chÉ xét có hai lo¡i là E và M. N¿u có kho£ng 15 lo¡i thì s½ tÑn thÝi gian và tài nguyên máy tính cho viÇc tính toán thëa m·c dù l°¡ng ã xác Ënh t¡i câu lÇnh IF §u tiên. Ðây dét khoát không ph£i là mã nguÓn hiÇu qu£.
Bây giÝ chúng ta xét mã gi£ dùng c¥u trúc IF lÓng nhau ã °ãc sía Õi trong ví då 10.
Ví då 10:
BEGIN
INPUT grade
INPUT exp
IF grade= E
IF exp=2
salary = 2000
ELSE
IF exp=3
salary=3000
END IF
END IF
ELSE
IF grade= M
IF exp=2
Salary=3000
ELSE
IF exp=3
Salary=4000
END IF
END IF
END IF
END IF
END
Ðo¡n mã trên nhìn khó Íc. Tuy nhiên, nó em l¡i hiÇu su¥t cao h¡n. Chúng ta xét cùng ví då nh° trên. N¿u công nhân °ãc x¿p lo¡i là E và kinh nghiÇm là 2 nm thì l°¡ng °ãc tính là 2000 ngay trong b°Ûc §u cça câu lÇnh IF. Sau ó, ch°¡ng trình s½ thoát ra vì không c§n thñc thi thêm b¥t cé lÇnh ELSE nào. Do ó, không có sñ lãng phí và o¡n mã này mang l¡i hiÇu su¥t cho ch°¡ng trình và ch°¡ng trình ch¡y nhanh h¡n.
Vòng l·p
MÙt ch°¡ng trình máy tính là mÙt tp các câu lÇnh s½ °ãc thñc hiÇn tu§n tñ. Nó có thà l·p l¡i mÙt sÑ b°Ûc vÛi sÑ l§n l·p xác Ënh theo yêu c§u cça bài toán ho·c ¿n khi mÙt sÑ iÁu kiÇn nh¥t Ënh °ãc thÏa.
Ch³ng h¡n, ta muÑn vi¿t ch°¡ng trình hiÃn thË tên cça ta 5 l§n. Ta xét mã gi£ d°Ûi ây.
Ví då 11:
BEGIN
DISPLAY Scooby
DISPLAY Scooby
DISPLAY Scooby
DISPLAY Scooby
DISPLAY Scooby
END
N¿u à hiÃn thË tên ta 1000 l§n, n¿u ta vi¿t DISPLAY Scooby 1000 l§n thì r¥t tÑn công séc. Ta có thà tinh gi£n v¥n Á b±ng cách vi¿t câu lÇnh DISPLAY chÉ mÙt l§n, sau ó ·t nó trong c¥u trúc vòng l·p, và chÉ thË máy tính thñc hiÇn l·p 1000 l§n cho câu lÇnh trên.
Ta xem mã gi£ cça c¥u trúc vòng l·p trong ví då 12 nh° sau:
Ví då 12:
Do loop 1000 times
DISPLAY Scooby
End loop
Nhïng câu lÇnh n±m giïa Do loop và End loop (trong ví då trên là lÇnh DISPLAY) °ãc thñc thi 1000 l§n. Nhïng câu lÇnh này cùng vÛi các lÇnh do loop và end loop °ãc gÍi là c¥u trúc vòng l·p. C¥u trúc vòng l·p giúp lp trình viên phát triÃn thành nhïng ch°¡ng trình lÛn trong ó có thà yêu c§u thñc thi hàng ngàn câu lÇnh. Do loop& end loop là mÙt d¡ng théc tÕng quát cça vòng l·p.
Ví då sau là cách vi¿t khác nh°ng cing dùng c¥u trúc vòng l·p.
Ví då 13:
BEGIN
cnt=0
WHILE (cnt < 1000)
DO
DISPLAY Scooby
cnt=cnt+1
END DO
END
L°u Ó cho mã gi£ trong ví då 13 °ãc v½ trong Hình 1.10.
EMBED Pacestar.Diagram
Hình 1.10: C¥u trúc vòng l·p
Chú ý r±ng Hình 1.10 không có ký hiÇu ·c biÇt nào à biÃu diÅn cho vòng l·p. Chúng ta dùng ký hiÇu phân nhánh à kiÃm tra iÁu kiÇn và qu£n lý h°Ûng i cça cça ch°¡ng trình b±ng các dòng ch£y (flow_lines).
Tóm t¯t bài hÍc
Ph§n mÁm là mÙt tp hãp các ch°¡ng trình.
MÙt ch°¡ng trình là mÙt tp hãp các chÉ thË (lÇnh).
Nhïng o¡n mã lÇnh là c¡ sß cho b¥t kó mÙt ch°¡ng trình C nào.
Ngôn ngï C có 32 të khóa.
Các b°Ûc c§n thi¿t à gi£i quy¿t mÙt bài toán là nghiên céu chi ti¿t bài toán ó, thu thp thông tin thích hãp, xí lý thông tin và i ¿n k¿t qu£.
MÙt gi£i thut là mÙt danh sách rút gÍn và logic các b°Ûc à gi£i quy¿t v¥n Á. Gi£i thut °ãc vi¿t b±ng mã gi£ ho·c l°u Ó.
Mã gi£ là sñ trình bày cça gi£i thut trong ngôn ngï t°¡ng tñ nh° mã tht
MÙt l°u Ó là sñ trình bày d°Ûi d¡ng biÃu Ó cça mÙt gi£i thut.
L°u Ó có thà chia nhÏ thành nhiÁu ph§n và §u nÑi dùng cho viÇc nÑi chúng l¡i t¡i n¡i chúng bË chia c¯t.
MÙt ch°¡ng trình có thà g·p mÙt iÁu kiÇn dña theo ó viÇc thñc thi có thà °ãc phân theo các nhánh r½ khác nhau. C¥u trúc lÇnh nh° vy gÍi là c¥u trúc chÍn lña, iÁu kiÇn hay c¥u trúc r½ nhánh.
C¥u trúc chÍn c¡ b£n là c¥u trúc IF .
C¥u trúc IF & ELSE giúp lp trình viên chÉ làm so sánh ¡n và sau ó thñc thi các b°Ûc tùy theo k¿t qu£ cça phép so sánh là True (úng) hay False (sai).
C¥u trúc IF lÓng nhau là câu lÇnh IF này n±m trong câu lÇnh IF khác.
Thông th°Ýng ta c§n l·p l¡i mÙt sÑ b°Ûc vÛi sÑ l§n l·p xác Ënh theo yêu c§u cça bài toán ho·c ¿n khi mÙt sÑ iÁu kiÇn nh¥t Ënh °ãc thÏa. Nhïng c¥u trúc giúp làm viÇc này gÍi là c¥u trúc vòng l·p.
KiÃm tra ti¿n Ù hÍc tp
C cho phép ____________ cça mã và dï liÇu.
MÙt là mÙt sñ trình bày d¡ng biÃu Ó minh hÍa tính tu§n tñ cça nhïng ho¡t Ùng °ãc thñc thi nh±m ¡t °ãc mÙt lÝi gi£i.
L°u Ó giúp chúng ta xem xét l¡i và gá rÑi ch°¡ng trình mÙt cách dÅ dàng. (True / False)
MÙt l°u Ó có thà có tuó ý sÑ iÃm b¯t §u và sÑ iÃm k¿t thúc. (True / False)
MÙt ____ c¡ b£n là viÇc thñc thi tu§n tñ nhïng câu lÇnh ¿n khi mÙt iÁu kiÇn cå thà nào ó là úng (True) hay sai (False).
Bài tp tñ làm
Vi¿t mÙt o¡n mã gi£ và v½ mÙt l°u Ó Ã nhp mÙt giá trË là Ù 0C (Celsius) và chuyÃn nó sang Ù 0F (Fahrenheit). [H°Ûng d«n: C/5 = (F-32)/9]
Vi¿t mÙt o¡n mã gi£ và v½ mÙt l°u Ó Ã nhp iÃm cça mÙt sinh viên cho các môn : Vt lý, Hóa hÍc, và Sinh hÍc. Sau ó hiÃn thË iÃm trung bình và tÕng cça nhïng iÃm này.
PAGE 10 Lp trình c¡ b£n C
Nhïng khái niÇm c¡ b£n cça ngôn ngï C PAGE 11
Software
Program 2
Program 1
Commands
Commands
Commands
Source file
Ch°¡ng trình gÑc
# include file
Tp tin thêm vào
Library File
Th° viÇn
Compiler
Trình biên dËch
Other User-generated Object File
Các tp tin thñc thi khác cça ng°Ýi dùng
Object File
Tp tin Ñi t°ãng
Linker
BÙ liên k¿t
Executable File
Tp tin thñc thi
Ký hiÇu k¿t thúc: Dùng ß ây k¿t thúc l°u Ó
Yes
No
No
No
Yes
Yes
Yes
No
No
Yes
Ký hiÇu xu¥t/nhp: Dùng ß ây à hiÃn thË tÕng C
Ký hiÇu xí lý: Dùng ß ây à cÙng
hai sÑ
Ký hiÇu xu¥t/nhp: Dùng ß ây à nhp hai sÑ A, B
Ký hiÇu b¯t §u: Dùng ß ây à b¯t §u l°u Ó
Bạn đang đọc truyện trên: AzTruyen.Top