Kỹ thuật lập trình
Kỹ thuật lập trì nh 1 CHƯƠNG i ĐạI CƯƠNG Về LậP TRìNH I. Khái niệm thuật toán: I.1. Khái niệ m: Thuậ t toá n là tậ p hợp cá c quy tắ c có logic nhằ m giả i một lớp bà i toán nà o đó để được một kế t quả xá c định. I.2. Các tí nh chất đặc trưng của thuật toán : I.2.1. Tí nh tổng quát : Thuậ t toá n được lậ p không phả i chỉ để giả i một bà i toá n cụ thể mà thôi mà còn phả i giả i đ ược một lớp cá c bà i toá n có dạ ng tương tự. I.2.2. Tí nh giới hạn : Thuậ t toá n giả i một bà i toá n phả i đ ược thực hiệ n qua một số giới hạ n các thao tá c để đạ t đế n kế t quả . I.2.3. Tí nh duy nhất : Toà n bộ quá trì nh biến đổi, cũng như trậ t tự thực hiệ n phả i đ ược xác định và là duy nhấ t. Như vậ y khi dùng thuậ t toá n cùng một dữ liệ u ban đầ u phả i cho cùng một kế t quả . I.3. Phân loại: Theo cấ u trúc, ta có thể phâ n thà nh ba loạ i thuậ t toá n cơ bả n sau : - Thuậ t toá n không phâ n nhá nh. - Thuậ t toá n có phâ n nhá nh. - Thuậ t toá n theo chu trì nh có bước lặ p xá c định và có bước lặ p không xá c định. II. Mô tả thuật toán bằng lưu đồ : II.1. Lưu đồ : Lưu đồ là một dạ ng đồ thị dùng để mô tả quá trì nh tí nh toá n một cá ch có hệ thống. Người ta thường thể hiệ n thuậ t toá n bằ ng lưu đồ. II.2. Các ký hiệu trên lưu đồ : Tê n khối Ký hiệ u ý nghĩ a Khối mở đầ u hoặ c kế t thúc Dùng mở đầ u hoặ c kế t thúc chương trì nh Khối và o ra Đưa số liệ u và o hoặ c in kế t quả Kỹ thuật lập trì nh 2 Khối tí nh toá n Biể u diễ n cá c công thức tí nh toá n và thay đổi giá trị của cá c biế n Khối điều kiện Dùng để phâ n nhá nh chương trì nh Chương trì nh con Dùng để gọi chương trì nh con Mũi tê n Chỉ hướng truyề n thông tin, liê n hệ cá c khối II.3. Một số ví dụ biể u diễ n thuật toán bằng lưu đồ II.3.1. Thuật toán không phân nhánh: Ví dụ 1: Tí nh A = x2 + y2 BeginNhaọp (x,y)A = x2 + y2Xuaỏt (A)End Ví dụ 2 : Tí nhyxCByAxS22+++=; biế t A,B,C,x,y BeginNhaọp (A, B, C, x,y)S = (Ax + By + C) / SQRT (x*x + y*y)Xuaỏt SEnd Kỹ thuật lập trì nh 3 II.3.2. Thuật toán có phân nhánh: Ví dụ 1: Tì m giá trị max của ba số thực a,b,c BeginNhaọp (a, b, c)Max = aXuaỏt (Max)Enda > bMax < cMax = cSSMax = bẹẹ Ví dụ 2: Giả i phương trì nh bậ c nhấ t Ax+B =0 với cá c nghiệ m thực. BeginNhaọp (a, b)Xuaỏt (PTVẹ)Enda = 0SSXuaỏt (-b/a)b = 0 Xuaỏt (PTVN)ẹẹ Kü tht lËp tr× nh 4 VÝ dơ 3 : Gi¶ i ph¬ng tr× nh bË c hai Ax2+Bx+C =0 víi c¸ c nghiƯ m thùc. BeginNhập (a, b, c)Xuất (‘X1= ’,(-b + SQRT(Delta)) / (2*a))Xuất (‘X2= ’,(-b - SQRT(Delta)) / (2*a))Enda = 0ĐĐPTB1 (b, c)Delta < 0Xuất (‘PTVN’)SSDelta = b*b - 4*a*cĐDelta = 0Xuất (-b / (2*a))S II.3.3. Tht to¸n cã chu tr× nh: Th t to¸ n cã chu tr× nh víi c¸c bíc lỈ p x¸ c ®Þnh thêng ® ỵc thĨ hiƯ n b» ng lu ®å sau : i = giá trò ban đầuLệnh S;Tăng ii <= nSĐ víi n lµ gi¸ trÞ kÕ t thóc. Kỹ thuật lập trì nh 5 Ví dụ 4: Tí nhS=iinx=1, với cá c xi do ta nhậ p và o. BeginNhaọp (n)i = 1S = 0Nhaọp (xi)Endi = i+1S = S+xii <= nXuaỏt (S)Sẹ III. CáC NGôN NGữ LậP TRìNH & CHươNG TRìNH DịCH: III.1. Ngôn ngữ lập trì nh: III.1.1. Giới thiệ u: Con người muốn giao tiế p với má y tí nh phải thông qua ngôn ngữ. Con người muốn má y tí nh thực hiệ n công việ c, phả i viế t cá c yê u cầu đ ưa cho má y bằ ng ngôn ngữ má y hiể u đ ược. Việ c viế t cá c yê u cầ u ta gọi là lậ p trì nh (programming). Ngôn ngữ dùng để lậ p trì nh đ ược gọi là ngôn ngữ lậ p trì nh. Nế u ngôn ngữ lậ p trì nh gầ n với vấ n đề cầ n giả i quyế t, gầ n với ngôn ngữ tự nhiê n thì việ c lậ p trì nh sẽ đơn giả n hơn nhiề u. Những ngôn ngữ lậ p trì nh có tí nh chấ t như trê n đ ược gọi là ngôn ngữ cấ p cao. Nhưng má y tí nh chỉ hiể u đ ược ngôn ngữ riê ng của mì nh, đó là cá c chuỗi số 0 với 1 và như vậ y rõ rà ng là khó khă n cho lậ p trì nh viê n, vì nó không gầ n gũi với con người. Hiệ n tạ i, ngôn ngữ lậ p trì nh được chia ra là m cá c loạ i sau: III.1.2. Phân loại ngôn ngữ lập trì nh: - Ngôn ngữ má y (machine language) Kü tht lËp tr× nh 6 - Hỵp ng÷ (assembly language) - Ng«n ng÷ cÊ p cao (higher-level language) Do m¸ y tÝ nh chØ hiĨ u ®ỵc ng«n ng÷ m¸ y, cho nª n mét ch¬ng tr× nh viÕ t trong ng«n ng÷ cÊ p cao ph¶ i ® ỵc biª n dÞch sang ng«n ng÷ m¸ y. C«ng cơ thùc hiƯ n viƯ c biª n dÞch ®ã ® ỵc gäi lµ ch¬ng tr× nh dÞch. III.2. Ch¬ng tr× nh dÞch: Ch¬ng tr× nh dÞch ® ỵc chia ra lµ m 2 lo¹ i : tr× nh biªn dÞch (compiler) vµ tr× nh th«ng dÞch (interpreter) III.2.1. Tr× nh biª n dÞch: lµ viƯ c chu n mét ch¬ng tr× nh trong ng«n ng÷ cÊ p cao nµ o ®ã (ch¬ng tr× nh ngn) sang ng«n ng÷ m¸ y (ch¬ng tr× nh ®Ý ch). - Thêi gian chu n mét ch¬ng tr× nh ngn sang ch¬ng tr× nh ®Ý ch ® ỵc gäi lµ thêi gian dÞch. - Thêi gian mµ ch¬ng tr× nh ®Ý ch thùc thi ® ỵc gäi lµ thêi gian thùc thi. Nh vË y, ch¬ng tr× nh ngn vµ d÷ liƯ u ®Ĩ ch¬ng tr× nh thùc thi ® ỵc xư lý trong c¸ c thêi ®iĨ m kh¸ c nhau, ® ỵc gäi lµ thêi gian dÞch (compile time) vµ thêi gian thùc thi (run-time) Chương trìnhnguồnTrình biêndòchChương trìnhđíchMáy tínhthực hiệnKết quảDữ liệu H× nh I.1. Ch¬ng tr× nh thùc thi theo c¬ chÕ dÞch cđa tr× nh biª n dÞch III.2.2. Tr× nh th«ng dÞch: qu¸ tr× nh dÞch vµ thùc thi x¶ y ra cïng 1 thêi gian, dÞch ®Õ n ®© u thi hµ nh lƯ nh ®Õ n ®ã. Chương trìnhnguồnChương trìnhthông dòchKết quảDữ liệu H× nh I.2. Ch¬ng tr× nh thùc thi theo c¬ chÕ dÞch cđa tr× nh th«ng dÞch Kỹ thuật lập trì nh 7 CHươNG 2 LàM QUEN VớI NGôN NGữ C * Giới thiệu ngôn ngữ C Ngôn ngữ C do Dennis Ritchie là người đầu tiên đề xuất, đ thiế t kế và cà i đặ t C trong môi trường UNIX. Nó có nguồn gốc từ ngôn ngữ BCPL do Martin Richards đ ưa ra và o nă m 1967 và ngôn ngữ B do Ken Thompson phá t triể n từ ngôn ngữ BCPL nă m 1970 khi viế t hệ điề u hà nh Unix. C là ngôn ngữ lậ p trì nh đa dụng, cấ p cao nhưng lạ i có khả nă ng thực hiệ n cá c thao tá c như của ngôn ngữ Assembly. Vì thế ngôn ngữ C nhanh chóng đ ược cà i đ ặ t, sử dụ ng trê n má y vi tí nh và đ trở thà nh một công cụ lậ p trì nh khá mạ nh, hiệ n nay đang có khuynh hướng trở thà nh một ngôn ngữ lậ p trì nh chí nh cho má y vi tí nh trê n thế giới. * Đặc điể m ngôn ngữ C Ngôn ngữ C có những đặ c điể m cơ bả n sau : - Tí nh cô đọng (compact) : Ngôn ngữ C chỉ có 32 từ khoá chuẩ n, 40 toán tử chuẩ n mà hầ u hế t đ ược biể u diể n bởi cá c d y ký tự ngắ n gọn. - Tí nh cấ u trúc (structured) : Ngôn ngữ C có một tậ p hợp cá c phá t biểu lậ p trì nh cấ u trúc như phá t biể u quyế t định hoặ c lặ p. Do đó, nó cho phép chúng ta viế t chương trì nh có tổ chức và dể hiể u. - Tí nh tương thí ch (compactable) : Ngôn ngữ C có bộ lệ nh tiề n xử lý và cá c thư việ n chuẩ n là m cho cá c chương trì nh viế t bằ ng ngôn ngữ C có thể tương thí ch khi chuyể n từ má y tí nh nà y sang má y tí nh kiể u hoà n toà n khá c. - Tí nh linh động (flexible) : Ngôn ngữ C là một ngôn ngữ rấ t linh động về ngữ phá p, nó có thể chấ p nhậ n rấ t nhiề u cá ch thể hiệ n mà không có ở ngôn ngữ khá c như Pascal, nó giúp cho kí ch thước m lệ nh có thể thu gọn lạ i để chương trì nh thực thi nhanh chóng hơn. - Biê n dịch : Ngôn ngữ C đ ược biê n dịch bằ ng nhiề u bước và cho phép biê n dịch nhiề u tậ p tin chương trì nh riê ng rẽ thà nh cá c tậ p tin đối tượng (object) và nối cá c đối tượng đó lạ i với nhau (link) thà nh một chương trì nh thực thi thống nhấ t. I. CáC KHáI NIệM Cơ BảN I.1. Cấu trúc cơ bản của một chương trì nh C [tiề n xử lý] [Cá c hà m] main() Kỹ thuật lập trì nh 8 { [khai bá o biế n;] [nhậ p dữ liệ u ;] [xử lý ;] [xuấ t ;] } Ví dụ : Chương trì nh hiệ n trê n mà n hì nh câ u Chao cac ban void main() { printf(Chao cac ban\n); } Một và i nhậ n xét quan trọng : - Chương trì nh C bao giờ cũng có một hay nhiề u hà m, trong đó có một hà m chí nh bắ t buộc phả i có là hà m main(). Đâ y chí nh là hà m đ ược thực hiệ n đầ u tiê n trong chương trì nh. - Cặ p dấ u { } để xá c định một khối lệ nh. - Hà m printf( Chao cac ban \n) là hà m chuẩ n của C dùng để xuấ t câ u thông bá o Chao cac ban ra mà n hì nh. Ký tự \n là ký tự đặ c biệ t dùng để xuống dòng. - Dấ u ; để chấ m dứt một lệ nh. - Chương trì nh C có phâ n biệ t chữ thường với chữ hoa. Đa số cá c từ khoá của C đ ược viế t bằ ng chữ thường, còn một số í t đ ược viế t bằ ng chữ hoa mà ta phả i tuâ n thủ chặ t chẽ , nế u không thì chương trì nh dịch sẽ không hiể u. * Một vài ví dụ Ví dụ 1: In bả ng lũy thừa 2 của cá c số nguyê n từ 10 đế n 50 /* Chương trì nh in bì nh phương cá c số từ 10 đế n 50*/ #include <stdio.h> void main() {int n; /*Khai bá o biế n n kiể u nguyê n */ n=10; /*Gá n n=10 */ while (n<=50) /*Lặ p từ 10 đế n 50 bằ ng while */ { printf(%3d \t %5d\n,n,n*n); /*in dạ ng 5d là dà nh 5 vị trí để in n và n2 */ n++; /* Tă ng n lê n 1 */ } /*Hế t while*/ } /*Hế t main*/ Kỹ thuật lập trì nh 9 Ví dụ 2 : Tương tự như ví dụ 1 nhưng viế t cá ch khá c : #include <stdio.h> #define max 50 /*Tiề n xử lý, định nghĩ a max =50*/ void main() { int n; /*Khai bá o biế n n kiể u nguyê n*/ for (n=10; n<=max; n++) /*Lặ p từ 10 đế n 50 bằ ng for*/ printf(%3d \t %5d\n,n,n*n); /*in n và n2 dạ ng 5d là nă m chữ số*/ } /*Hế t main*/ Ví dụ 3 : Chương trì nh in lũy thừa 2, 3, 4, 5; có dùng hà m để tí nh lũy thừa : #include <stdio.h> #define max 50 /*Tiề n xử lý, định nghĩ a max =50*/ float luythua(int n, int m) /*Hà m luythua với 2 thông số*/ { float s=1; /*Khai bá o và khởi tạ o biế n s*/ for ( ;m>0;m--) /*Lặ p giả m dầ n từ m tới 1*/ s=s*n; return s; /*Trả kế t quả về */ } void main() { int n,n2,n3,n4,n5; /*Khai bá o biế n kiể u nguyê n*/ for (n=10;n<=50;n++) /*Lặ p từ 10 đế n 50 bằ ng for*/ { n2= luythua(n,2); /*Gọi hà m luythua*/ n3= luythua(n,3); n4= luythua(n,4); n5= luythua(n,5); printf(%3d \t %5.2f \t %5.2f\t %5.2f\t %5.2f\t %5.2f\n, n,n2,n3,n4,n5); /*in n và nm dạ ng 5 chữ số với 2 số lẻ */ } } /*Hế t main*/ * Hàm xuất chuẩn printf() Cú pháp : printf(chuỗi-địnhdạ ng,thamso1,thamso2, .) ý nghĩ a : Hà m printf() sẽ xem xét chuỗi-địnhdạ ng, lấ y giá trị cá c tham số (nế u cầ n) để đặ t và o theo yê u cầ u của chuỗi-địnhdạ ng và gởi ra thiế t bị chuẩ n. Chuỗi-địnhdạ ng là một chuỗi ký tự, trong đó có những ký tự xuấ t ra nguyê n vẹ n hoặ c xuấ t ở dạ ng đặ c biệ t, và có thể có những chuỗi điề u khiển cầ n lấ y giá trị của cá c tham số để thay và o đó khi in ra. Kỹ thuật lập trì nh 10 - Những ký tự đặc biệ t : Ký tự Tác dụng Mã ASCII \n Xuống hà ng mới 10 \t Tab 9 \b Xóa ký tự bê n trá i 8 \r Con trỏ trở về đầ u hà ng 13 \f Sang trang 12 \a Phá t tiế ng còi 7 \\ Xuấ t dấ u chéo ngược 92 \ Xuấ t dấ u nhá y đơn 39 \ Xuấ t dấ u nhá y kép 34 \xdd Xuấ t ký tự có m ASCII dạ ng Hex là dd \ddd Xuấ t ký tự có m ASCII dạ ng Dec là ddd \0 Ký tự NULL 0 - Chuỗi định dạng : % [ flag][width][.prec][FNhl] type Type : định kiể u của tham số theo sau chuỗi-địnhdạ ng để lấ y giá trị ra Type ý nghĩ a d,i Số nguyê n cơ số 10 u Số nguyê n cơ số 10 không dấ u o Số nguyê n cơ số 8 x Số nguyê n cơ số 16, chữ thường(a,b, .,f) X Số nguyê n cơ số 16, chữ in (A,B, .,F) f Số thực dạ ng [-]dddd.ddd . e Số thực dạ ng [-]d.ddd e[+/-]ddd E Số thực dạ ng [-]d.ddd E[+/-]ddd g,G Số thực dạ ng e(E) hay f tùy theo độ chí nh xá c c Ký tự s Chuỗi ký tự tậ n cùng bằ ng \0 % Dấ u % cầ n in [...]... nh I.2. Chương trì nh thực thi theo cơ chế dịch của trì nh thông dịch Kỹ thuật lập trì nh 1 CHƯƠNG i ĐạI CƯƠNG Về LậP TRìNH I. Khái niệm thuật toán: I.1. Khái niệ m : Thuậ t toá n là tậ p hợp cá c quy tắ c có logic nhằ m giả i một lớp bà i toán nà o đó để được một kế t quả xá c định. I.2. Các tí nh chất đặc trưng của thuật toán : I.2.1. TÝ nh tỉng qu¸t : Th t to¸ n được lậ p không phả i... time) và thời gian thùc thi (run-time) Chương trình nguồn Trình biên dịch Chương trình đích Máy tính thực hiện Kết quả Dữ lieọu Hì nh I.1. Chương trì nh thực thi theo cơ chế dịch của trì nh biê n dịch III.2.2. Trì nh thông dịch: quá trì nh dịch và thực thi xả y ra cùng 1 thời gian, dịch đế n đâ u thi hà nh lệ nh đế n ®ã. Chương trình nguồn Chương trình thông dịch Kết quả Dữ liệu H× nh I.2. Chương... bit : “); scanf ( %x %d “, &x1, &x2); printf (“ %02x >> %d = %02x \n”, x1, x2, x1>> x2); } Chú ý : Trong phép dịch phả i C là m theo 2 cá ch khá c nhau tïy thuéc vµ o Kỹ thuật lập trì nh 19 dạ ng unsigned nế u sau đó có chữ u (U), dạ ng thậ p lục phâ n nế u trước số đó có 0x và dạ ng bá t phâ n nế u tríc sè ®ã cã 0 VÝ dơ : 50000; 10 L; → Long 5U, 100u → unsigned... Toán tử trê n bit (bit wise) : Dạng Ký hiÖ u ý nghÜ a NOT bit ~ lÊ y bï 1 AND bit & giao OR bit | hội XOR bit ^ hội loạ i trừ dịch trá i << nhâ n 2 dịch phả i >> chia 2 Kỹ thuật lập trì nh 45 III. Hàm - Đệ quy: III.1. Hàm : III.1.1. Mục đí ch: Hà m là một chương trì nh con của chương trì nh chí nh, với cá c mục đí ch sau: * Trá nh việ c lặ p đi lặ p lạ i cá c đoạ n chương... nà o đó. Từng hà m sẽ đ ược lậ p trì nh, kiể m tra hoà n chỉ nh; Sau đó, ta kế t lạ i để tạ o chương trì nh hoà n chỉ nh. Nhờ vậ y, chương trì nh về sau dể hiể u và dể sữa. * Tí nh độc lập: cho phép hàm độc lập với chương trì nh chí nh. Ví dụ hà m có những biế n cục bộ mà chương trì nh chí nh và cá c hà m khá c không thể đụng tới. Do đó, nÕ u ta cã khai b¸ o c¸ c biÕ n trùng tê n với cá c hà... (i=1;i<=r;i++) { for (j=1;j<=d; ++j) printf("*"); printf("\n"); } } void main() { int d=20, r=5; clrscr(); ve_hcn(d,r); // lêi gäi hµ m getch(); } Kỹ thuật lập trì nh 7 CHươNG 2 LàM QUEN VớI NGôN NGữ C * Giới thiệu ngôn ngữ C Ngôn ngữ C do Dennis Ritchie là người đầu tiên đề xuất, đ thiế t kế và cà i đặ t C trong môi trường UNIX. Nó có nguồn gốc... ky tu hexa %c la %d ",ch,k); getch(); } Ví dụ : Viế t chương trì nh tạ o 1 m¸ y tÝ nh cã 4 phÐp to¸ n + , - , * , / #include <stdio.h> #include <conio.h> void main() { Kỹ thuật lập trì nh 22 Cá c phép gá n phøc hỵp : += , -= , *= , /= , %= , <<= , >>= VÝ dô :n = n*(10+x) ⇔ n *= (10 +x) n = n % 10 ⇔ n %= 10 I = I +3 ⇔ I += 3 << : lµ phÐp dịch... void main () { int a; for (a=2; a<= 9; a++) { for (b =1; b <= 9; b++) printf(“%d* %d = %d \t”, a, b, a*b); printf(“\n); } } VÝ dô 4 : Viế t chương trì nh tí nh n giai thõa Kỹ thuật lập trì nh 23 I.5.5.Toán tử logic: Toán tử ý nghĩ a NOT ! Phủ định AND && Giao, và OR || Hội Thứ tự tí nh toá n từ trê n xuống. Bả ng châ n trị : x ! x x y x && y true false... phạ m vi từ 0 đế n 100, tối đa 5 lầ n. Chương trì nh kiể m tra kế t quả và xuấ t thông bá o hướng dẫ n: - Số bạ n đoá n lớn hơn - Số bạ n đoá n nhỏ hơn - Bạ n đoá n đúng - Má y thắ ng cuộc Kỹ thuật lập trì nh 28 Ví dụ 9: Chương trì nh má y tí nh bitwise Đâ y l à ch ương trì nh giả lậ p một m¸ y tÝ nh thùc hiƯ n c¸ c to¸ n tö bitwise. #define TRUE 1 main() { char op[10]; int x1, x2;... else printf("The character isn't extended\n"); } PhÝ m M· scancode F1 59 F2 60 F3 61 F4 62 F5 63 F6 64 F7 65 F8 66 F9 67 F10 68 Home 71 " 72 # 80 $ 75 Kỹ thuật lập trì nh 6 - Hợp ngữ (assembly language) - Ngôn ngữ cấ p cao (higher-level language) Do má y tí nh chỉ hiể u được ngôn ngữ má y, cho nê n một chương trì nh viế t trong ngôn ngữ cấ p cao phả i . Kỹ thuật lập trì nh 1 CHƯƠNG i ĐạI CƯƠNG Về LậP TRìNH I. Khái niệm thuật toán: I.1. Khái niệ m: Thuậ t toá. i+1S = S+xii <= nXuaỏt (S)Sẹ III. CáC NGôN NGữ LậP TRìNH & CHươNG TRìNH DịCH: III.1. Ngôn ngữ lập trì nh: III.1.1. Giới thiệ u: Con người muốn giao