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 thu­t (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 nh­p 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à l­p trình nói chung. Cå thÃ, C là mÙt ngôn ngï l­p trình c¥p cao mà mÍi l­p 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 l­p 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 t­p 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à t­p 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 v­y 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 t­p lÇnh mà nó nh­n °ã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 t­p chÉ thË °ãc gÍi là câu lÇnh và t­p 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à :

Nh­p sÑ thé nh¥t và nhÛ nó.

Nh­p 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.

T­p lÇnh trên tuân thç t¥t c£ các quy t¯c ã Á c­p. Vì v­y, t­p 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 nh­n 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 t­p 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 à l­p 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). L­p 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ï b­c trung

C °ãc hiÃu là ngôn ngï b­c 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ì v­y, nó °ãc dùng cho l­p trình méc hÇ thÑng.

1.2.2 C - Ngôn ngï c¥u trúc

Thu­t 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 t­p 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 tr­t 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 t­p 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 l­p 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 l­p 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 t­p tin (file) lÛn trong khi a sÑ còn l¡i chéa nó trong nhiÁu t­p tin nhÏ. Khi l­p 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 l­p 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 nh­n lo¡i mã nguÓn vi¿t d°Ûi d¡ng t­p tin vn b£n chu©n. Vài trình biên dËch (compiler) cung c¥p môi tr°Ýng l­p 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 t­p 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 t­p tin riêng biÇt và m×i t­p tin có thà °ãc biên dËch riêng r½. ÐiÁu này giúp ích khi mà mÙt t­p 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 l­p 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ê t­p 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 t­p hãp các b°Ûc nh° v­y gÍi là gi£i thu­t (Algorithm hay gÍi v¯n t¯t là algo ).

MÙt gi£i thu­t (còn gÍi là thu­t 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 t­p 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 t­p 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 thu­t chúng ta có là mÙt t­p 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 thu­t à mÍi ng°Ýi dÅ dàng hiÃu nó. Chính vì v­y , gi£i thu­t °ã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 t­p 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 (thu­t 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 th­t sñ. T°¡ng tñ, mã gi£ và l°u Ó chÉ °a ra nhïng b°Ûc c§n làm. L­p 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ã th­t. Mã gi£ sí dång mÙt t­p hãp nhïng të t°¡ng tñ nh° mã th­t nh°ng nó không thà °ãc biên dËch và thñc thi nh° mã th­t.

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ñ, Ã nh­n 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½ nh­p 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 nh­p 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° v­y 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 t­p 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° v­y 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 Á c­p 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 thu­t. 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° v­y °ã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ï nh­t.

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 l­p trình viên hiÃu chúng dÅ dàng. N¿u có ba l­p trình viên dùng ba ngôn ngï l­p 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 l­p trình viên có thà giÑng nhau m·c dù ngôn ngï l­p 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 th­n. Chúng ta cing k¿t lu­n r±ng mã gi£ Ùc l­p vÛi ngôn ngï l­p 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É t­p 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 Á c­p 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 nh­p 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ï l­p 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 l­p 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ì v­y, 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 ã Á c­p ¿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 nh­n 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 l­p 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ì v­y, 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 t­p 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 l­p 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 t­p hãp các ch°¡ng trình.

MÙt ch°¡ng trình là mÙt t­p 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 th­p thông tin thích hãp, xí lý thông tin và i ¿n k¿t qu£.

MÙt gi£i thu­t là mÙt danh sách rút gÍn và logic các b°Ûc à gi£i quy¿t v¥n Á. Gi£i thu­t °ãc vi¿t b±ng mã gi£ ho·c l°u Ó.

Mã gi£ là sñ trình bày cça gi£i thu­t trong ngôn ngï t°¡ng tñ nh° mã th­t

MÙt l°u Ó là sñ trình bày d°Ûi d¡ng biÃu Ó cça mÙt gi£i thu­t.

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° v­y 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 l­p 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 t­p

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 t­p tñ làm

Vi¿t mÙt o¡n mã gi£ và v½ mÙt l°u Ó Ã nh­p 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 Ó Ã nh­p iÃm cça mÙt sinh viên cho các môn : V­t 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 L­p 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

T­p tin thêm vào

Library File

Th° viÇn

Compiler

Trình biên dËch

Other User-generated Object File

Các t­p tin thñc thi khác cça ng°Ýi dùng

Object File

T­p tin Ñi t°ãng

Linker

BÙ liên k¿t

Executable File

T­p 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/nh­p: 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/nh­p: Dùng ß ây à nh­p 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: truyentop.pro