Nhập môn lập trình - Basic Logics - Võ Quang Hoàng Khang

Tài liệu Nhập môn lập trình - Basic Logics - Võ Quang Hoàng Khang: NHẬP MÔN LẬP TRÌNH Basic Logics Logic Constructs Programming Style Walkthroughs NHẬP MÔN LẬP TRÌNH Ôn tập • Biến là một tên tham chiếu đến một vị trị trong bộ nhớ. • Một kiểu dữ liệu xác định: dữ liệu lưu trữ như thế nào và các toán tử thao tác tương ứng. • 4 kiểu dữ liệu cơ bản trong C: int, char, float, double • Dữ liệu lưu trữ dưới dạng nhị phân. • Khai báo biến trong C: type var [=initialValue]; • Tên biến phải bắt đầu bằng ký tự hoặc ‘_’, • Tên định danh không trùng từ khóa trong C. 2Basic Logics NHẬP MÔN LẬP TRÌNH Mục tiêu • Làm thế nào để viết 1 chương trình C cấu trúc logic • Khi viết chương trình C, những điều nên làm là gì? Programming styles • Làm thế để có thể hiểu một chương trình?  Walkthroughs 3Basic Logics NHẬP MÔN LẬP TRÌNH Nội dung 1- Các cấu trúc logic 2- Programming Styles 3- Walkthroughs 4- Bonus – Redirect a Program ( a technique is used in the ACM Contest) 4Basic Logics NHẬP MÔN LẬP TRÌNH 1- Logic Constructs – Lập tr...

pdf52 trang | Chia sẻ: putihuynh11 | Lượt xem: 737 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Nhập môn lập trình - Basic Logics - Võ Quang Hoàng Khang, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
NHẬP MÔN LẬP TRÌNH Basic Logics Logic Constructs Programming Style Walkthroughs NHẬP MÔN LẬP TRÌNH Ôn tập • Biến là một tên tham chiếu đến một vị trị trong bộ nhớ. • Một kiểu dữ liệu xác định: dữ liệu lưu trữ như thế nào và các toán tử thao tác tương ứng. • 4 kiểu dữ liệu cơ bản trong C: int, char, float, double • Dữ liệu lưu trữ dưới dạng nhị phân. • Khai báo biến trong C: type var [=initialValue]; • Tên biến phải bắt đầu bằng ký tự hoặc ‘_’, • Tên định danh không trùng từ khóa trong C. 2Basic Logics NHẬP MÔN LẬP TRÌNH Mục tiêu • Làm thế nào để viết 1 chương trình C cấu trúc logic • Khi viết chương trình C, những điều nên làm là gì? Programming styles • Làm thế để có thể hiểu một chương trình?  Walkthroughs 3Basic Logics NHẬP MÔN LẬP TRÌNH Nội dung 1- Các cấu trúc logic 2- Programming Styles 3- Walkthroughs 4- Bonus – Redirect a Program ( a technique is used in the ACM Contest) 4Basic Logics NHẬP MÔN LẬP TRÌNH 1- Logic Constructs – Lập trình có cấu trúc – Các cấu trúc logic • Cấu trúc tuần tự - Sequence constructs • Cấu trúc chọn - Selection constructs (1/2, 1/n) • Cấu trúc lặp - Iteration constructs 5Basic Logics NHẬP MÔN LẬP TRÌNH 1.1- Structured Programming • Cấu trúc của code chương trình nên tổ chức theo cách có thể hiểu được, kiểm chứng và dễ dàng chỉnh sửa. • sử dụng các cấu trúc logic đơn giản, mỗi cấu trúc có một điểm bắt đầu và một điểm kết thúc. • Bước đầu tiên để phát triển một chương trình là sử dụng DESIGN – pseudo-coding hoặc – flow charting 6Basic Logics NHẬP MÔN LẬP TRÌNH Structured Programming: Pseudo-code • Ví dụ: Tính giá trị tuyệt đối của một số nguyên được nhập từ bàn phím.  Nhắc người dùng nhập một giá trị số nguyên  Nhận một số nguyên từ người dùng và lưu trữ vào x  Nếu x là số am thì x = -x  Hiển thị x 7Basic Logics NHẬP MÔN LẬP TRÌNH Structured Programming: Flowcharting • Describe the flow of a program unit symbolically 8Basic Logics NHẬP MÔN LẬP TRÌNH Flowcharting • Ví dụ: 9Basic Logics NHẬP MÔN LẬP TRÌNH 1.2- Cấu trúc tuần tự • Một dãy tuần tự các lệnh đơn hoặc khối lệnh • Simple Statements expression ; • Code Blocks – Một khối lệnh là tập hợp các lệnh được đặt trong cặp móc nhọn { statement ... statement } 10Basic Logics NHẬP MÔN LẬP TRÌNH 1.3- Cấu trúc chọn Select 1/2 Select 1/n if if else If else if . else ? : (operator) switch Condition ? Operation 1 Operation 2 TRUE FALSE Integral expression Op1 Op2 Op3 Op4 c1 c2 c3 default 11Basic Logics NHẬP MÔN LẬP TRÌNH Selection Constructs: if else if (condition) { statements } if (condition) { statements } else { statements } 12Basic Logics NHẬP MÔN LẬP TRÌNH Selection Constructs: if else if (condition) { statements } else { statements } Trình biên dịch không thể xác định câu lệnh if trước câu lệnh else. 13Basic Logics NHẬP MÔN LẬP TRÌNH Selection Constructs: if else if (condition 1) { statements } else if (condition2) { statements } else { statements } Nested if  Mua N T-shirts với quảng cáo:  N<=3: 120000$/item  From 4th to 6th: 90000$/item  From 7th to 10th: 85000$/item  From 11th : 70000$/item  Mô tả biểu thức tính tiền phải trả. N: số áo T-shirts mua, t: tiền phải trả. if (N <=3) t = N*120000 ; else if (N<=6) t= 3*120000 + (N-3) * 90000; else if (N<=10) t= 3*120000 + 3*90000 + (N-6)*85000; else t= 3*120000 + 3*90000 + 4*85000 + (N-10)*70000; Begin N,t  int Accept N Compute t Print out t End 14Basic Logics NHẬP MÔN LẬP TRÌNH Selection Constructs: if else if (condition 1) { statements } else if (condition2) { statements } else { statements } Begin N,t  int Accept N Compute t Print out t End 950 1250 1350 1550 100 150 200 Number of kwhs prices  Tương tự, mô tả biểu thức tính giá trị sẽ trả khi chúng ta sử dụng điện năng.  Implement it to a program. 15Basic Logics NHẬP MÔN LẬP TRÌNH Selection Constructs: Dangling Else • Ambiguity may arise in the case of nested if else constructs. Sử dụng { } để xác định rõ rang các câu lệnh ? ? 16Basic Logics NHẬP MÔN LẬP TRÌNH Selection Constructs: toán tử ? : (condition) ? True_Value : False_Value 17Basic Logics NHẬP MÔN LẬP TRÌNH Selection Constructs: The switch statement switch (variable or expression) { case constant : statement(s); break; case constant : statement (s); break; default: statement (s); } char / int Nếu thiếu break, lệnh tiếp theo sẽ được thực hiện cho đến khi gặp break hoặc tất cả các lệnh trong switch được thực hiện Each case is an entry of a selection Integral expression Op1 Op2 Op3 Op4 c1 c2 c3 default 18Basic Logics NHẬP MÔN LẬP TRÌNH Selection Constructs: The switch statement If input is 8, what are outputs? a) 200000 , 2 b) 300000, 3 c) 0, 0 d) 1000000, 4 e) 1500000, 10 f) None of the others If input is 7, what are outputs? 19Basic Logics NHẬP MÔN LẬP TRÌNH Selection Constructs: switch Viết chương trình cho phép người dùng nhập một biểu thức đơn giản có chứa một trong bốn toán tử +, -, *, / sau đó in kết quả ra màn hình. Input format: num1 operator num2, Example: 4*5 Analysis double num1, num2; char op result  double result Begin Accept num1, op, num2  “%lf%c%lf” switch (op) { case ‘+’ : result = num1 + num2; print out result; break; case ‘-’ : result = num1 - num2; print out result; break; case ‘*’ : result = num1 * num2; print out result; break; case ‘/’ : if ( num2==0) print out “Divide by 0 “ else { result = num1 / num2; print out result; } break; default: print out “Op is not supported” } End Implement it. 20Basic Logics NHẬP MÔN LẬP TRÌNH 1.4- Iteration (loop) Constructs • Loop/Iteration: Một số lệnh được thực hiện lặp đi lặp lại • Structure of a loop: – Khởi tạo - Initial block. – Điều kiện - Condition. – Các tác vụ trong mỗi lần thực hiện • Các loại lặp: lặp xác định (fixed loops), variable loops • Các cấu trúc lặp: while do while for 21Basic Logics NHẬP MÔN LẬP TRÌNH Iteration Xác định một vòng lặp: • Tính S= 1+2+3+4+5+6+7+ + 100 Some addition are performed  Loop • Tổng của một số con số được nhập cho đến khi người dùng nhập vào 0. Accept and add numbers  Loop 22Basic Logics NHẬP MÔN LẬP TRÌNH Iteration Xác định vòng lặp cho một biểu thức: Left side  Initial block Right side  Condition Hoạt động và chuẩn bị cho lần lặp tiếp theo: Các nhiệm vụ trong mỗi lần lặp S=1+2+3+4+ + 100  S=0+1+2+3+4+ + 100 S=1*2*3*4* * 100 S=1*1*2*3*4* * 100 S=0 i=1 i<=100(1) S=S+i; (2) i=i+1; S=1 i=1 i<=100(1) S=S*i; (2) i=i+1; S=1 i=2 23Basic Logics NHẬP MÔN LẬP TRÌNH Iteration S= 0 , n<=0 1 + 3 + 5 + + n, n is odd 2 + 4 + 6 + + n, n is even S= 1 + 1/10 + 1/ 21 + 1/32 + + 1 /nn-1 S= 0 , n<=0 n + (n-2) + (n-4) + + 0 Initial value: S = 0 i = (n%2==1)? 1: 2; Condition i <=n Tasks: S += i; i+=2; Initial value: S = 0; i = n; Condition i>0 Tasks: S += i; i -=2; Initial value: S = 1.0; i = 1; Condition i <=n Tasks: S += 1.0/ pow ( i, i-1 ); i = i +1; 24Basic Logics math.h NHẬP MÔN LẬP TRÌNH Iteration: for statement • for ( InitBlock; Condition; Task2) Task1; • for ( Init1, Init2; Condition ; Task1, Task2); • InitBlock; for ( ; Condition ; Task2) Task1; • InitBlock; for ( ; Condition ;) { Task1; Task2; } InitBlock Condition? Task1 Task2 yes no Điều kiện sẽ được kiểm tra trước khi thực hiện nhiệm vụ. 25Basic Logics NHẬP MÔN LẬP TRÌNH Iteration • Write a program that will print out the ASCII table. ASCII code : 0  255 Initialize: int code =0 Condition: code <256 Task: Print the code using 4 format: %c, %d, %o, %X code = code +1 26Basic Logics NHẬP MÔN LẬP TRÌNH Iteration • Write a program that will calculate 1+2+3++n. Accepted variable: int n Sum 1 .. N  int sum Algorithm Accept n Loop: Initialize i=1, sum=0 Condition i<=n Tasks: sum += i; i++; Print out sum 27Basic Logics NHẬP MÔN LẬP TRÌNH Iteration: while/dowhile statements /* Initializations */ while (condition) { statements; } InitBlock Condition? Task1 Task2 yes no Điều kiện sẽ được kiểm tra sau khi các nhiệm vụ được thực hiện. /* Initializations */ do { statements; } while (condition) ; InitBlock Condition? Task1 Task2 yes no Điều kiện sẽ được kiểm tra trước khi thực hiện nhiệm vụ. 28Basic Logics NHẬP MÔN LẬP TRÌNH Iteration: while/dowhile statements • Write a program that will print out the ASCII table. ASCII code : 0  255 Initialize: code =0 Condition: code <256 Task: Print the code using 4 formats: %c, %d, %o, %X code = code +1 29Basic Logics NHẬP MÔN LẬP TRÌNH Iteration • Viết một chương trình sẽ in ra tổng số các số nguyên được nhập vào bởi người dùng. Việc nhập sẽ dừng nếu người dùng nhập vào giá trị 0. Nouns: inputted integer  int x, sum of integers  int sum Tasks (algorithm) Begin sum =0 do { accept x; sum += x; } while (x!=0); Print out sum End Implement it by yourself. 30Basic Logics NHẬP MÔN LẬP TRÌNH Iteration • Viết một chương trình cho phép người dùng nhập vào một số ký tự cho đến khi nhấn phím ENTER (mã 10). Chương trình sẽ in ra số chữ số, số chữ cái, số phím khác đã được nhập. Accept a character: c=getchar(); Nouns: character inputted  char c, Number of digits  int noDigits Number of letters  noLetters, Number of other keys  noOthers #define ENTER 10 Algorithm Begin noDigits = noLetters = noOthers = c= 0 printf(“Enter a string:”); While (c!=ENTER) { accept c; if ( c>=‘0’ && c <=‘9’) noDigits++; else if ( (c>=‘a’ && c =‘A’ && c <=‘Z’) ) noLetters++; else noOthers++; } Print out noDigits, noLetters, noOthers End Implement it by yourself. The while statement is intentionally used. So, c=0 is assigned and the condition c!=ENTER is evaluated to TRUE 31Basic Logics Input form: abc1234fGH+-*/?(ENTER) NHẬP MÔN LẬP TRÌNH Iteration: Break/ Bypass a loop 0 1 2 3 4 5 0 1 2 3 4 5 32Basic Logics NHẬP MÔN LẬP TRÌNH Iteration Constructs: Flags • To improve readability, programmers advocated: – the use of whitespace to identify the logical structure of the code – the abolition of all goto statements – the abolition of all continue statements – the abolition of all break statements, except with switch • A technique for avoiding jumps is called flagging. A flag is a variable that keeps track of a true or false state. 33Basic Logics NHẬP MÔN LẬP TRÌNH Iteration Constructs: Flags Nên dùng if thay thế cho continue 34Basic Logics NHẬP MÔN LẬP TRÌNH Iteration Constructs: Flags Loop vô hạn 35Basic Logics NHẬP MÔN LẬP TRÌNH Iteration Constructs: Flags No flag is used. A flag is used. 36Basic Logics NHẬP MÔN LẬP TRÌNH 2- Phong cách lập trình - Programming Styles – Thói quen trong lập trình • Một chương trình viết tốt giúp các lập trình viên khác có thể dễ dàng hiểu nó. Coding style là phải rõ ràng và nhất quán. Đề xuất – Naming: tên – Indentation: thụt lề – Comments: ghi chú – Magic Values – General Guidelines: hướng dẫn chung 37Basic Logics NHẬP MÔN LẬP TRÌNH Programming Styles: Naming • Sử dụng các tên có tính mô tả để làm rõ ý nghĩa của chúng • Sử dụng các tên mô tả hoàn chỉnh để nhận dạng, tránh tên bí ẩn • Ưu tiên DANH TỪ cho tên biến • Dùng tên biến ngắn - studentName chứ không phải NameOfAStudent • Các tên chỉ số rất ngắn – sử dụng trong là ký hiệu toán học 38Basic Logics NHẬP MÔN LẬP TRÌNH Programming Styles: Indentation • Thụt lề phần thân của cấu trúc khi được nhúng trong một cấu trúc khác. For example, •Use in-line opening braces or start opening braces on a newline but don't mix the two styles. 39Basic Logics NHẬP MÔN LẬP TRÌNH Programming Styles: Comment • Use comments to declare what is done, rather than describe how it is done. • Comments introduce what follows. • Keep them brief and avoid decoration. 40Basic Logics NHẬP MÔN LẬP TRÌNH Programming Styles: Magic Values • Đây có thể là hằng số toán học, thuế suất, giá trị mặc định hoặc tên. • Để cải thiện khả năng đọc, chỉ định các tên tượng trưng cho các giá trị Magic Values này và sử dụng trong suốt đoạn mã. • Sử dụng chỉ thị #define SYMBOLIC_NAME value 41Basic Logics NHẬP MÔN LẬP TRÌNH Programming Styles: Guidelines • Chiều dài dòng tối đa 80 ký tự - cả comment và code • Tránh sử dụng biến toàn cục (global variables) • Chọn loại dữ liệu cho các biến một cách khôn ngoan và cẩn thận • Khởi tạo giá trị cho biến nếu cần thiết • Nếu giá trị ban đầu là một phần của một thuật toán, sử dụng một câu lệnh gán riêng. • Tránh dung goto, continue, break trừ trong lệnh switch. • Sử dụng một khoảng trắng bên cạnh một toán tử (phép toán). • Sử dụng dấu ngoặc mở trên cùng dòng hoặc bắt đầu trên một dòng mới, nhưng không kết hợp hai kiểu. 42Basic Logics NHẬP MÔN LẬP TRÌNH Programming Styles: Guidelines • Tránh các thuật toán kỳ quặc có thể hiệu quả nhưng rất khó đọc • Thêm các ghi chú tại vị trí mã đã được tinh chỉnh để thực hiện hiệu quả • Loại bỏ các biến không được sử dụng 43Basic Logics NHẬP MÔN LẬP TRÌNH 3- Walkthroughs • Hiểu code là một kỹ năng của lập trình. • Để hiểu được mã, chúng ta nên biết làm thế nào mã thực hiện. • Để biết cách thực thi mã lệnh, chúng ta nên thực hiện từng lệnh. 44Basic Logics NHẬP MÔN LẬP TRÌNH Walkthroughs: Demo. a b a+b c 5 2 7 1 6 4 10 9 7 6 13 17 8 8 18 25 9 10 19 33 10 12 22 41 Output 41 45Basic Logics NHẬP MÔN LẬP TRÌNH Walkthroughs: Demo. int n, i, S=0; scanf(“%d”, &n); for (i=1; i<=n; i+=3) if (i%2!=0 && i%3!=0) S+=i; printf(“%d”, S); What is the output if the input is 15? n 15 i 1 4 7 10 13 16 S 0+1 1 1+7  8 8+1321 S=21 46Basic Logics NHẬP MÔN LẬP TRÌNH Walkthroughs: Demo. int m,n, i, S=0; scanf(“%d%d”, &n, &m); for (i=m; i<=n; i++) S+=i; printf(“%d”, S); What is the output if the input are 8 12? Test the program: int m,n, i, S=0; scanf(“%da%d”, &n, &m); for (i=m; i<=n; i++) S+=i; printf(“%d”, S); What is the output if the input are 8a12? Modify Input “%d %d” 12 8 “%d%d” 12 8 “%d%d” 12 8 “%d-%d” 12-8 47Basic Logics NHẬP MÔN LẬP TRÌNH Walkthroughs: Demo. Study the following code: int n=15; int S=0; i=1; while (i<2*n) { S+= i; i*=4; } Give your opinion. a) S=21 b) S= 85 c) A syntax error 48Basic Logics NHẬP MÔN LẬP TRÌNH i= 1 2 3 4 5 6 Extra Demo: Print star characters Print out 1*, “\n” Print out 2*, “\n” Print out 3*, “\n” Print out 4*, “\n” Print out 5*, “\n” Print out 6*, “\n” i Accept N; for ( i=1; i<=N; i++) { for (j=1; j<=i; j++) printf(“*”); printf (“\n”); } N=6 * ** *** **** ***** ****** 49Basic Logics NHẬP MÔN LẬP TRÌNH Extra Demo: Multiplication Table N=5 5x 1= 5 5x 2=10 5x 3=15 5x 4=20 5x 5=25 5x 6=30 5x 7=37 5x 8=40 5x 9=45 5x10=50 Accept n; for ( i=1; i<=10; i++) Print out “%dx%2d=%2d\n”, n, i, n*i 50Basic Logics NHẬP MÔN LẬP TRÌNH Summary • Logic constructs = Statements can be used in a program. – 3 Basic constructs: Sequence, selection constructs (if, ifelse, ?:, switch), Iteration constructs (for/ while/ do while) • Walkthrough: Code are executed by yourself, Tasks in a walkthrough: a record of the changes that occur in the values of program variables and listing of the output, if any, produced by the program. 51Basic Logics NHẬP MÔN LẬP TRÌNH Thank You 52Basic Logics

Các file đính kèm theo tài liệu này:

  • pdfnhap_mon_lap_trinh_3_4_basic_logics_3623_1985377.pdf
Tài liệu liên quan