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+1321 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