Bài giảng Nhập môn lập trình - Basic logics
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Nhập môn lập trình - Basic logics", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
bai_giang_nhap_mon_lap_trinh_basic_logics.pdf
Nội dung text: Bài giảng Nhập môn lập trình - Basic logics
- 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. Basic Logics 2
- 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 Basic Logics 3
- 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) Basic Logics 4
- 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 Basic Logics 5
- 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 Basic Logics 6
- 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 Basic Logics 7
- NHẬP MÔN LẬP TRÌNH Structured Programming: Flowcharting • Describe the flow of a program unit symbolically Basic Logics 8
- NHẬP MÔN LẬP TRÌNH Flowcharting • Ví dụ: Basic Logics 9
- 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 } Basic Logics 10
- NHẬP MÔN LẬP TRÌNH 1.3- Cấu trúc chọn Select 1/2 Select 1/n if switch if else If else if . else ? : (operator) Integral expression Condition ? c1 c2 c3 default TRUE FALSE Op1 Op2 Op3 Op4 Operation 1 Operation 2 Basic Logics 11
- NHẬP MÔN LẬP TRÌNH Selection Constructs: if else if (condition) { statements } if (condition) { statements } else { statements } Basic Logics 12
- NHẬP MÔN LẬP TRÌNH Selection Constructs: if else if (condition) { statements Trình biên dịch không thể } xác định câu lệnh if trước else câu lệnh else. { statements } Basic Logics 13
- NHẬP MÔN LẬP TRÌNH Selection Constructs: if else Begin N,t int if (condition 1) Mua N T-shirts với quảng cáo: { statements Accept N N<=3: 120000$/item Compute t } th th From 4 to 6 : 90000$/item Print out t else if (condition2) th th From 7 to 10 : 85000$/item End { statements From 11th : 70000$/item } Nested if Mô tả biểu thức tính tiền phải trả. else { statements } 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; Basic Logics 14
- NHẬP MÔN LẬP TRÌNH Selection Constructs: if else if (condition 1) Tương tự, mô tả biểu thức Begin { statements tính giá trị sẽ trả khi chúng ta N,t int } Accept N else if (condition2) sử dụng điện năng. Compute t { statements Print out t } Implement it to a program. End else { statements } 100 150 200 Number of kwhs 950 1250 1350 1550 prices Basic Logics 15
- 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 ? Basic Logics 16
- NHẬP MÔN LẬP TRÌNH Selection Constructs: toán tử ? : (condition) ? True_Value : False_Value Basic Logics 17
- NHẬP MÔN LẬP TRÌNH Selection Constructs: The switch statement switch (variable or expression) { Integral char / int expression case constant : statement(s); c1 c2 c3 default break; case constant : Op1 Op2 Op3 Op4 statement (s); break; default: statement (s); 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 Basic Logics 18
- 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? Basic Logics 19
- NHẬP MÔN LẬP TRÌNH Selection Analysis double num1, num2; char op result double result Constructs: Begin Accept num1, op, num2 “%lf%c%lf” switch switch (op) { case ‘+’ : result = num1 + num2; Viết chương trình cho print out result; phép người dùng nhập break; một biểu thức đơn case ‘-’ : result = num1 - num2; print out result; giản có chứa một break; trong bốn toán tử +, -, case ‘*’ : result = num1 * num2; *, / sau đó in kết quả print out result; break; ra màn hình. case ‘/’ : if ( num2==0) print out “Divide by 0 “ Input format: else num1 operator num2, { result = num1 / num2; print out result; Example: 4*5 } break; default: print out “Op is not supported” Implement it. } Basic LogicsEnd 20
- 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 Basic Logics 21
- 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 Basic Logics 22
- 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=1*2*3*4* * 100 S=0+1+2+3+4+ + 100 S=1*1*2*3*4* * 100 S=0 (1) S=S+i; i<=100 S=1 (1) S=S*i; i<=100 i=1 (2) i=i+1; i=1 (2) i=i+1; S=1 i=2 Basic Logics 23
- NHẬP MÔN LẬP TRÌNH Iteration S= 0 , n 0 Condition i <=n Tasks: S += i; Tasks: S += i; i -=2; i+=2; S= 1 + 1/10 + 1/ 21 + 1/32 + + 1 /nn-1 Initial value: math.h S = 1.0; i = 1; Condition i <=n Tasks: S += 1.0/ pow ( i, i-1 ); i = i +1; Basic Logics 24
- 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 • InitBlock; no for ( ; Condition ;) Condition? { Task1; yes Task2; Task1 } Task2 Điều kiện sẽ được kiểm tra trước khi thực hiện nhiệm vụ. Basic Logics 25
- 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 Basic Logics 26
- 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 Basic Logics 27
- NHẬP MÔN LẬP TRÌNH Iteration: while/do while statements InitBlock InitBlock no Condition? Task1 yes Task2 Task1 Task2 yes no Condition? /* Initializations */ /* Initializations */ while (condition) do { statements; { statements; } } while (condition) ; Điều kiện sẽ được kiểm tra trước khi thực hiện nhiệm vụ. Điều kiện sẽ được kiểm tra sau khi các nhiệm vụ được thực hiện. Basic Logics 28
- NHẬP MÔN LẬP TRÌNH Iteration: while/do while 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 Basic Logics 29
- 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 Implement it by { accept x; yourself. sum += x; } while (x!=0); Print out sum End Basic Logics 30
- 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 The while statement is noDigits = noLetters = noOthers = c= 0 intentionally used. So, Implement printf(“Enter a string:”); c=0 is assigned and the it by While (c!=ENTER) condition c!=ENTER is yourself. { accept c; evaluated to TRUE if ( c>=‘0’ && c =‘a’ && c =‘A’ && c <=‘Z’) ) noLetters++; else noOthers++; } Input form: Print out noDigits, noLetters, noOthers abc1234fGH+-*/?(ENTER) End Basic Logics 31
- 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 Basic Logics 32
- 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. Basic Logics 33
- NHẬP MÔN LẬP TRÌNH Iteration Constructs: Flags Nên dùng if thay thế cho continue Basic Logics 34
- NHẬP MÔN LẬP TRÌNH Iteration Constructs: Flags Loop vô hạn Basic Logics 35
- NHẬP MÔN LẬP TRÌNH Iteration Constructs: Flags No flag is used. A flag is used. Basic Logics 36
- 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 Basic Logics 37
- 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 Basic Logics 38
- 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. Basic Logics 39
- 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. Basic Logics 40
- 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 Basic Logics 41
- 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. Basic Logics 42
- 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 Basic Logics 43
- 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. Basic Logics 44
- 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 Basic Logics 45
- 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 Basic Logics 46
- 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? Modify Input Test the program: “%d %d” 12 8 int m,n, i, S=0; “%d%d” 12 8 scanf(“%da%d”, &n, &m); “%d%d” 12 for (i=m; i<=n; i++) S+=i; 8 “%d-%d” 12-8 printf(“%d”, S); What is the output if the input are 8a12? Basic Logics 47
- 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 Basic Logics 48
- NHẬP MÔN LẬP TRÌNH Extra Demo: Print star characters N=6 i i= 1 * Print out 1*, “\n” 2 Print out 2*, “\n” Accept N; for ( i=1; i<=N; i++) 3 Print out 3*, “\n” { for (j=1; j<=i; j++) printf(“*”); printf (“\n”); 4 Print out 4*, “\n” } 5 Print out 5*, “\n” 6 Print out 6*, “\n” Basic Logics 49
- 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 Accept n; 5x 5=25 for ( i=1; i<=10; i++) Print out “%dx%2d=%2d\n”, n, i, n*i 5x 6=30 5x 7=37 5x 8=40 5x 9=45 5x10=50 Basic Logics 50
- 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, if else, ?:, 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. Basic Logics 51
- NHẬP MÔN LẬP TRÌNH Thank You Basic Logics 52



