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
switch
if if … else If … else if …. else ? : (operator)
Integral expression
Select 1/n Select 1/2
Condition ?
TRUE
FALSE
c1 c2 c3 default
Op1 Op2 Op3 Op4
Basic Logics
11
Operation 1 Operation 2
NHẬP MÔN LẬP TRÌNH
Selection Constructs: if … else
if (condition) { statements }
Basic Logics
12
if (condition) { statements } else { statements }
NHẬP MÔN LẬP TRÌNH
Selection Constructs: if … else
Trình biên dịch không thể xác định câu lệnh if trước câu lệnh else.
Basic Logics
13
if (condition) { statements } else { statements }
NHẬP MÔN LẬP TRÌNH
Selection Constructs: if … else
Begin N,t int Accept N Compute t Print out t End
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ả.
if (condition 1) { statements } else if (condition2) { statements } else { statements }
Nested if
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)
else
t= 3*120000 + 3*90000 + (N-6)*85000;
Basic Logics
14
t= 3*120000 + 3*90000 + 4*85000 + (N-10)*70000;
NHẬP MÔN LẬP TRÌNH
Selection Constructs: if … else
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.
if (condition 1) { statements } else if (condition2) { statements } else { statements }
Begin N,t int Accept N Compute t Print out t End
100 150 200 Number of kwhs
950
1250
1350
1550
Basic Logics
15
prices
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ử ? :
Basic Logics
17
(condition) ? True_Value : False_Value
NHẬP MÔN LẬP TRÌNH
Selection Constructs: The switch statement
switch (variable or expression) {
Integral expression
char / int
c1 c2 c3 default
Op1 Op2 Op3 Op4
case constant : statement(s); break; case constant : 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
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;
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
} break;
default: print out “Op is not supported”
Implement it.
} End
Basic Logics
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*1*2*3*4*… * 100
S=1+2+3+4+… + 100 S=0+1+2+3+4+… + 100
i<=100 i<=100
(1) S=S+i; (2) i=i+1; (1) S=S*i; (2) i=i+1; S=0 i=1 S=1 i=1
Basic Logics
23
S=1 i=2
NHẬP MÔN LẬP TRÌNH
Iteration…
S= 0 , n<=0
S= 0 , n<=0
n + (n-2) + (n-4) + … + 0
1 + 3 + 5 +… + n, n is odd 2 + 4 + 6 + … + n, n is even
Initial value:
Initial value:
S = 0; i = n;
Condition i>0 Tasks: S += i; i -=2;
S = 0 i = (n%2==1)? 1: 2;
S= 1 + 1/10 + 1/ 21 + 1/32 + … + 1 /nn-1
Condition i <=n Tasks: S += i; i+=2;
math.h
Initial value: S = 1.0; i = 1;
Condition i <=n Tasks: S += 1.0/ pow ( i, i-1 );
Basic Logics
24
i = i +1;
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
Condition?
yes
Task1
for ( ; Condition ;) { Task1; Task2;
}
Task2
Basic Logics
25
Điều kiện sẽ được kiểm tra trước khi thực hiện nhiệm vụ.
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:
Basic Logics
26
Print the code using 4 format: %c, %d, %o, %X code = code +1
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++;
Basic Logics
27
Print out sum
NHẬP MÔN LẬP TRÌNH
Iteration: while/do…while statements
InitBlock
InitBlock
no
Condition?
Task1
yes
Task2
Task1
yes no
Task2
Condition?
/* Initializations */ do { statements; } while (condition) ;
/* Initializations */ while (condition) { statements; } Điều kiện sẽ được kiểm tra trước khi thực hiện nhiệm vụ.
Basic Logics
28
Điều kiện sẽ được kiểm tra sau khi các nhiệm vụ được thực hiện.
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:
Basic Logics
29
Print the code using 4 formats: %c, %d, %o, %X code = code +1
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
Implement it by yourself.
Tasks (algorithm) Begin sum =0 do { accept x; sum += x;
Basic Logics
30
} while (x!=0); Print out sum End
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();
Implement it by yourself.
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; The while statement is intentionally used. So, c=0 is assigned and the condition c!=ENTER is evaluated to TRUE
if ( c>=‘0’ && c <=‘9’) noDigits++; else if ( (c>=‘a’ && c <=‘z’) || (c>=‘A’ && c <=‘Z’) ) noLetters++; else noOthers++;
Input form: abc1234fGH+-*/?(ENTER)
Basic Logics
31
} Print out noDigits, noLetters, noOthers End
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…
A flag is used.
Basic Logics
36
No flag is used.
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
Basic Logics
45
41
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 8+1321 1+7 8
Basic Logics
46
S=21
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 “%d %d” Input 12 8
“%d%d” 12 8
“%d%d”
“%d-%d”
12-8
12 8
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?
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
i
Accept N; for ( i=1; i<=N; i++) { for (j=1; j<=i; j++) printf(“*”);
}
i= 1 2 3 4 5 6
printf (“\n”);
Print out 1*, “\n” Print out 2*, “\n” Print out 3*, “\n” Print out 4*, “\n” Print out 5*, “\n” Print out 6*, “\n”
N=6 * ** *** **** ***** ******
Basic Logics
49
NHẬP MÔN LẬP TRÌNH
Extra Demo: Multiplication Table
Accept n; for ( i=1; i<=10; i++) Print out “%dx%2d=%2d\n”, n, i, n*i
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
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