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 . 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á. ®ã. 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