chương 3: cấu trúc lặp và rẽ nhánh

46
Chương 3: Cấu trúc lặp và rẽ nhánh

Upload: tana-booker

Post on 30-Dec-2015

93 views

Category:

Documents


0 download

DESCRIPTION

Chương 3: Cấu trúc lặp và rẽ nhánh. Nội chung chính. Bài 9: Cấu trúc rẽ nhánh Rẽ nhánh là gì? Câu lệnh IF-THEN Câu lệnh ghép Một số ví dụ Bài 10: Cấu trúc lặp Lặp Lặp với số lần biết trước với câu lệnh FOR-DO Lặp với số lần chưa biết trước với câu lệnh WHILE-DO. Từ khóa. Bài 9. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Chương 3: Cấu trúc lặp và rẽ nhánh

Chương 3:Cấu trúc lặp và rẽ nhánh

Page 2: Chương 3: Cấu trúc lặp và rẽ nhánh

Nội chung chính

• Bài 9: Cấu trúc rẽ nhánh– Rẽ nhánh là gì?– Câu lệnh IF-THEN– Câu lệnh ghép– Một số ví dụ

• Bài 10: Cấu trúc lặp– Lặp– Lặp với số lần biết trước với câu lệnh FOR-DO– Lặp với số lần chưa biết trước với câu lệnh WHILE-

DO

Page 3: Chương 3: Cấu trúc lặp và rẽ nhánh

Từ khóa

Page 4: Chương 3: Cấu trúc lặp và rẽ nhánh

Bài 9

Page 5: Chương 3: Cấu trúc lặp và rẽ nhánh

“Nếu chăm học thì các bạn sẽ

đạt kết quả tốt.”

1. RẼ NHÁNH

Page 6: Chương 3: Cấu trúc lặp và rẽ nhánh

Ê..ê, mai tụi mình đi trượt tuyết ngen…

Hihi...Nếu trời có tuyết rơi thì tụi mình sẽ đi, nếu không thì đi khu

vui chơi

Page 7: Chương 3: Cấu trúc lặp và rẽ nhánh

Nếu...thì...

Cấu trúc dùng để mô tả các mệnh đề có dạng như trên gọi là :

Cấu trúc rẽ nhánh.

Cấu trúc dùng để mô tả các mệnh đề có dạng như trên gọi là :

Cấu trúc rẽ nhánh.

Page 8: Chương 3: Cấu trúc lặp và rẽ nhánh

Hãy nêu các bước giải phương trình bậc hai?

• Nhập hệ số a,b,c

• Tính Delta=b2 - 4ac • Nếu Delta<0 thì thông báo

PT vô nghiệm, ngược lại tính và đưa ra nghiệm

Ví dụ: Giải phương trình bậc hai ax2+bx+c=0 (a0)

Page 9: Chương 3: Cấu trúc lặp và rẽ nhánh

Các em hãy vẽ sơ đồ thuật toán giải phương trình bậc 2 (với a0)

Sau khi tính Delta, tuỳ thuộc vào giá trị Delta, một trong hai thao tác sẽ thực hiện.

Nhập a, b, c

Tính Delta = b2 – 4ac

Kiểm tra

Delta < 0

Tính và đưa ra nghiệm

Thông báo vô nghiệm

Kết thúc

Sai Đúng

Page 10: Chương 3: Cấu trúc lặp và rẽ nhánh

IF <Điều kiện> THEN <Câu lệnh>;

CÂU LỆNH

• Nếu <điều kiện> đúng thì <câu lệnh> được thực hiện, sai <câu lệnh> bị bỏ qua.

Sai

a. Dạng thiếu:

- Điều kiện là biểu thức logic.- Câu lệnh là một câu lệnh của Pascal.

Trong đó:

Ví dụ: IF a mod 2=0 THEN Writeln(‘ a la so chan’);

ĐúngĐIỀU KIỆN

2. Câu lệnh IF - THEN

Page 11: Chương 3: Cấu trúc lặp và rẽ nhánh

IF <Điều kiện> THEN <Câu lệnh 1> ELSE <câu lệnh 2>;

ĐIỀU KIỆN

Đúng

Câu lệnh 1

Sai

Câu lệnh 2

Nếu <Điều kiện> đúng thì <Câu lệnh 1> được thực hiện, ngược lại thì <Câu lệnh 2> được thực hiện.

Ví dụ: IF a mod 2=0 THEN Writeln(‘a la so chan’) ELSE Writeln(‘a la so

le’);

b. Dạng đủ:

2. Câu lệnh IF - THEN

Page 12: Chương 3: Cấu trúc lặp và rẽ nhánh

Hãy dùng câu lệnh IF – THEN viết lệnh để xét các trường hợp của DELTA

IF Delta<0 THEN Writeln(‘Phuong trinh vo nghiem.’’)

ELSE

X1:= (-B + SQRT(Delta))/(2*A);

X2:= (-B - SQRT(Delta))/(2*A);

Writeln(‘ Nghiem X1= ’, X1:5:1);

Writeln(‘ Nghiem X2= ’, X2:5:1);

2. Câu lệnh IF - THEN

Page 13: Chương 3: Cấu trúc lặp và rẽ nhánh

Trong TP cho phép gộp nhiều câu lệnh thành một câu lệnh gọi là câu lệnh ghép, có dạng:

BEGIN < Các câu lệnh>;

END;

BEGIN < Các câu lệnh>;

END;

IF Delta<0 THEN Writeln(‘Phuong trinh vo nghiem.’)

ELSE

BEGIN

X1:= (-B + SQRT(Delta))/(2*A);

X2:= (-B - SQRT(Delta))/(2*A);

Writeln(‘ Nghiem X1= ’, X1:5:1);

Writeln(‘ Nghiem X2= ’, X2:5:1);

END;

Ví dụ:

3. CÂU LỆNH GHÉP

Page 14: Chương 3: Cấu trúc lặp và rẽ nhánh

Program GPTB2;Uses crt;

Var . . . ;

BEGIN

. . . Nhập vào 3 hệ số a,b,c .. .

Delta :=. . .;

Readln;END.

• Nếu Delta<0 thì Writeln(‘PTVN’)

ngược lại Tính và in nghiệm;

Em hãy hoàn thiện chương trình giải phương trình bậc 2 (a0) theo dàn ý sau:

Ví dụ 1:

4. MỘT SỐ VÍ DỤ

Page 15: Chương 3: Cấu trúc lặp và rẽ nhánh
Page 16: Chương 3: Cấu trúc lặp và rẽ nhánh

Hãy xác định Input và Output

của bài?

•Input: N được nhập từ bàn phím.•Output: Đưa ra số ngày của năm N ra màn hình.

Nếu N chia hết cho 400 hoặc N chia hết cho 4 nhưng không chia hết cho 100

Thì In ra số ngày của năm nhuận là 366,ngược lại In ra số ngày là 365

Ví dụ 2: Tìm số ngày của năm N, biết rằng năm nhuận là năm chia hết cho 400 hoặc chia hết cho 4 nhưng không chia hết cho 100. Ví dụ, các năm 2000, 2004 là năm nhuận và có số ngày là 366, các năm như 1900, 1945 không phải là năm nhuận và có số ngày 365.

Page 17: Chương 3: Cấu trúc lặp và rẽ nhánh

Khai báo biến cho bài toán trênViết điều kiện: Nếu N chia hết cho 400 hoặc chia hết cho 4 nhưng không chia hết cho 100

thì nhận số ngày của năm nhuận, ngược lại nhận số ngày của năm thườngNhập vào Năm cần tính số lượng ngàyIn ra kết quả

Page 18: Chương 3: Cấu trúc lặp và rẽ nhánh

GHI NHỚ

IF <Điều kiện> THEN <câulệnh>;

Cấu trúc mô tả các mệnh đề:“Nếu … thì…”

“Nếu … thì …, nếu không… thì …”

gọi là Cấu trúc rẽ nhánh.

IF <Điều kiện> THEN <Câu lệnh 1>

ELSE <Câu lệnh 2>;

Lệnh rẽ nhánh dạng thiếu:

Lệnh rẽ nhánh dạng đủ:

Câu lệnh ghép:

BEGIN <Các câu lệnh>;END;

Page 19: Chương 3: Cấu trúc lặp và rẽ nhánh

Bài 10

Page 20: Chương 3: Cấu trúc lặp và rẽ nhánh

Tính tổng các số từ 1 đến N (với N=10)

Với N = 10 ta có S gồm:

S = 1 + 2 + 3 + … + 9 + 10 = ???

20

Với S = N! thì ta có:

S = 1 x 2 x 3 x … x 8 x 9 x 10 = ???

Kết quả bao nhiêu

Kết quả bao nhiêu

Tính giai thừa của N! với (N=10)

Page 21: Chương 3: Cấu trúc lặp và rẽ nhánh

S = 1 + 2 + 3 + … + 9 + 10 = ???- Ban đầu: Cho tổng S = 0.- Thực hiện: Cho 1 biến i chạy từ 1 đến 10, với mỗi biến i:

+ i = 1: thì S = S + i (S = 0 + 1 = 1).

+ i = 2: thì S = S + i (S = 1 + 2 = 3).

+ i = 3: thì S = S + i (S = 3 + 3 = 6)

+ i = 4: thì S = S + i (S = 6 + 4 = 10)

+ i = 5: thì S = S + i (S = 10 + 5 = 15)

+ i = 6: thì S = S + i (S = 15 + 6 = 21)

+ i = 7: thì S = S + i (S = 21 + 7 = 28)

+ i = 8: thì S = S + i (S = 28 + 8 = 36)

+ i = 9: thì S = S + i (S = 36 + 9 = 45)

+ i = 10: thì S = S + i (S = 45 + 10 = 55)

- Cuối cùng xuất ra S = 55.

Page 22: Chương 3: Cấu trúc lặp và rẽ nhánh

S = 1 x 2 x 3 x … x 9 x 10 = ???- Ban đầu: Cho S = 1.- Thực hiện: Cho 1 biến i chạy từ 1 đến 10, với mỗi biến i:

+ i = 1: thì S = S x i (S = 1 x 1 = 1).

+ i = 2: thì S = S x i (S = 1 x 2 = 2).

+ i = 3: thì S = S x i (S = 2 x 3 = 6)

+ i = 4: thì S = S x i (S = 6 x 4 = 24)

+ i = 5: thì S = S x i (S = 24 x 5 = 120)

+ i = 6: thì S = S x i (S = 120 x 6 = 720)

+ i = 7: thì S = S x i (S = 720 x 7 = 5040)

+ i = 8: thì S = S x i (S = 5040 x 8 = 40320)

+ i = 9: thì S = S x i (S = 40320 x 9 = 362880)

+ i = 10: thì S = S x i (S = 362880 x 10 = 3628800)

- Cuối cùng xuất ra S = 3628800.

Page 23: Chương 3: Cấu trúc lặp và rẽ nhánh

S = 1 x 2 x 3 x … x 9 x 10 = ???

- Ban đầu: Cho S = 1.- Thực hiện: Cho 1 biến i chạy từ 1 đến 10, với mỗi biến i:

+ i = 1: thì S = S x i (S = 1 x 1 = 1).

+ i = 2: thì S = S x i (S = 1 x 2 = 2).

+ i = 3: thì S = S x i (S = 2 x 3 = 6)

+ i = 4: thì S = S x i (S = 6 x 4 = 24)

+ i = 5: thì

S = S x i (S = 24 x 5 = 120)

+ i = 6: thì

S = S x i (S = 120 x 6 = 720)

+ i = 7: thì

S = S x i (S = 720 x 7 = 5040)

+ i = 8: thì

S = S x i (S = 5040 x 8 = 40320)

+ i = 9: thì

S = S x i (S = 40320 x 9 = 362880)

+ i = 10: thì

S = S x i (S = 362880 x 10 = 3628800)

- Cuối cùng xuất ra S = 3628800.

S = 1 + 2 + 3 + … + 9 + 10 = ???

- Ban đầu: Cho tổng S = 0.- Thực hiện: Cho 1 biến i chạy từ 1 đến 10, với mỗi biến i:

+ i = 1: thì S = S + i (S = 0 + 1 = 1).

+ i = 2: thì S = S + i (S = 1 + 2 = 3).

+ i = 3: thì S = S + i (S = 3 + 3 = 6)

+ i = 4: thì S = S + i (S = 6 + 4 = 10)

+ i = 5: thì S = S + i (S = 10 + 5 = 15)

+ i = 6: thì S = S + i (S = 15 + 6 = 21)

+ i = 7: thì S = S + i (S = 21 + 7 = 28)

+ i = 8: thì S = S + i (S = 28 + 8 = 36)

+ i = 9: thì S = S + i (S = 36 + 9 = 45)

+ i = 10: thì

S = S + i (S = 45 + 10 = 55)

- Cuối cùng xuất ra S = 55.

Page 24: Chương 3: Cấu trúc lặp và rẽ nhánh

Ví dụ:Chương trình tính điểm cho HS một lớp (50HS). Sẽ phải lặp lại một số thao tác như sau:+ Nhập họ tên HS (hoặc SBD).+ Nhập điểm (các môn).+ Tính tổng điểm hoặc tính điểm trung bình.

24

Cấu trúc lặp

Page 25: Chương 3: Cấu trúc lặp và rẽ nhánh

Bài 10

Cấu trúc lặp

25

Page 26: Chương 3: Cấu trúc lặp và rẽ nhánh

Đặc điểm:

- Có một biến điều khiển (biến đếm), dùng để điều khiển việc lặp đi lặp lại.

- Số lần lặp ta có thể biết trước.

- Phải xác định được giá trị đầu và giá trị cuối của vòng lặp.

26

Lặp với số lần biết trước

Page 27: Chương 3: Cấu trúc lặp và rẽ nhánh

Xét bài toán tính tổng:S = 1 + 2 + 3 + … + 98 + 99 + 100.

Các bước chính:

27

Bước 1:

Bước 2:

Bước 3:

Bước 4:

Bước 5:

Gán S : = 0; i := 0

Cho biến điều khiển i chạy từ 1 100

Kiểm tra biến đ.khiển > 100 thì dừng.

Với mỗi biến điều khiển ta thực hiện:

Cộng dồn biến điều khiển vào S

Xuất ra tổng SBước 5:

Lặp với số lần biết trước

Page 28: Chương 3: Cấu trúc lặp và rẽ nhánh

28

S 0i 0

i > 100

i i + 1

S S + i

Xuất S

Begin

End

Sơ đồ 1

{Bước 1}

{Bước 2}

{Bước 3}

{Bước 4}

{Bước 5}

sai

đúng

Vòng lặp diễn ra ở chỗ nào?

Giá trị đầu tiên biến i

tham gia vòng lặp là bao

nhiêu?

Giá trị cuối biến i tham

gia vòng lặp là bao nhiêu?

Khi nào thì quá trình lặp chấm dứt?

Page 29: Chương 3: Cấu trúc lặp và rẽ nhánh

29

S 0i 101

i < 1

i i – 1

S S + i

Xuất S

Begin

End

Sơ đồ 2

{Bước 1}

{Bước 2}

{Bước 3}

{Bước 4}

{Bước 5}

sai

đúng

Giá trị đầu tiên biến i

tham gia vòng lặp là bao

nhiêu?

Giá trị cuối biến i tham

gia vòng lặp là bao nhiêu?

Khi nào thì quá trình lặp chấm dứt?

Page 30: Chương 3: Cấu trúc lặp và rẽ nhánh

30

S 0i 0

i > 100

i i + 1

S S + i

Xuất S

Begin

End

sai

đúng

Sơ đồ 1

S 0i 101

i < 1

i i – 1

S S + i

Xuất S

Begin

End

sai

đúng

Sơ đồ 2Dạng tiến Dạng lùi

Page 31: Chương 3: Cấu trúc lặp và rẽ nhánh

Nhận xét về 2 Sơ đồ khối?- Giống nhau:

+ Đều có 5 bước thực hiện.

+ Đều thực hiện quá trình lặp lại cộng dồn vào S.

+ Đều cho ra màn hình tổng S như nhau.

+ Biến i tham gia vòng lặp 100 lần.

- Khác nhau:

+ Bước 1 biến i được gán khác nhau.

+ Bước 3 kiểm tra điều kiện của biến i cũng khác.

+ Giá trị đầu và giá trị cuối biến i tham gia vòng lặp khác nhau.

+ Bước 2 biến i thay đổi khác nhau.

31

Page 32: Chương 3: Cấu trúc lặp và rẽ nhánh

- Dạng lặp tiến: for <biến đếm> := <giá trị đầu> to <giá trị cuối> do <câu lệnh>;

Câu lệnh for - do trong Pascal:

32

- Dạng lặp lùi: for <biến đếm> := <giá trị cuối> downto <giá trị đầu> do <câu lệnh>;

Page 33: Chương 3: Cấu trúc lặp và rẽ nhánh

Tính tổng S = 1 + 2 + … + 99 + 100

+ Dạng lặp tiến:

for i:=1 to 100 do

S:=S+i;

+ Dạng lặp lùi:

for i:=100 downto 1 do

S:=S+i;33

Câu lệnh for - do trong Pascal:

Page 34: Chương 3: Cấu trúc lặp và rẽ nhánh

Một số lưu ý:

- Giá trị đầu < giá trị cuối.

- Biến đếm là một biến đơn, thường kiểu nguyên.

- Không được sử dụng giá trị của biến đếm sau khi kết thúc vòng lặp.

- Không được thay đổi giá trị biến đếm trong câu lệnh sau “do”.

34

Page 35: Chương 3: Cấu trúc lặp và rẽ nhánh

3. Ví dụ

Tính tổng S (với a là số nguyên nhập vào từ bàn phím và a>2).

100

1...

2

1

1

11

aaaaS

? Hãy xác định giá trị khởi đầu của S, quy luật thay đổi giá trị của S và số lần lặp. Viết chương trình để giải bài toán trên.

- S:=1/a;

- S:= S + 1/(a+i);

- i chạy từ 1 đến 100 => Số lần lặp là 100 lần.

Page 36: Chương 3: Cấu trúc lặp và rẽ nhánh

1. Bài toán

Dữ liệu ra (Output) : Tổng S

Dữ liệu vào (Input) : Nhập aHãy xác định INPUT, OUTPUT và nêu thuật toán giải bài toán trên?

...1

...2

1

1

11

NaaaaS

Cho đến khi 1

0.0001a N

Tính giá trị tổng S, với a là số nguyên và a>2.

thì dừng lại.

II. LẶP VỚI SỐ LẦN LẶP KHÔNG BIẾT TRƯỚC

Page 37: Chương 3: Cấu trúc lặp và rẽ nhánh

Bước 2: S:=1/a; N:=1; {Khởi tạo S và N}

Bước 3: Nếu 1/(a+N) < 0.0001 => Bước 5

Bước 4: S:=S+1/(a+N); N:=N+1; => quay lại bước 3

THUẬT TOÁN

Bước 1: Nhập a.

S:=1/a ; N:=1

Đưa ra S => Kết thúc

S:= S+1/(a+N);

N:= N+1;

Vòng lặp chỉ dừng khi 1/(a+N)<0.0001

Nhập a

S

§

1/(a+N) >= 0.0001

Bước 5: In S => Kết thúc.

Page 38: Chương 3: Cấu trúc lặp và rẽ nhánh

WHILE <Điều kiện> DO <Câu lệnh>;

Điều kiện

Đúng

Câu lệnh

Điều kiện: Là biểu thức quan hệ hoặc lôgic.

Câu lệnh: Là một câu lệnh của Pascal.

Sai

2. Lặp với số lần lặp không biết trước

Trong đó:

Chừng nào điều kiện còn đúng thì câu lệnh còn được thực hiện.

Page 39: Chương 3: Cấu trúc lặp và rẽ nhánh

WHILE 1/(a+N) >= 0.0001 DO BEGIN

S:=S+1/(a+N); N:=N+1; END;

3. Một số ví dụ

a Bài toán đặt vấn đề:

Nhận xét:

Chừng nào 1/(a+N)>=0.0001 thì còn thực hiện: + Tăng giá trị của tổng S thêm 1/(a+N). + Tăng N thêm 1 đơn vị.

...1

...2

1

1

11

NaaaaS

10.0001

a N

Tính giá trị tổng S, với a là số nguyên và a>2

thì dừng lại. Cho đến khi

Page 40: Chương 3: Cấu trúc lặp và rẽ nhánh

Chương trình

Program Bai_toan;Uses Crt;Var a,N:Integer; S:Real;BEGIN Clrscr; Write(‘Nhap gia tri cua a= ‘);Readln(a); S:=1/a;N:=1; WHILE 1/(a+N)>=0.0001 DO BEGIN S:=S+1/(a+N); N:=N+1;

END; Writeln(‘Gia tri cua tong S = ‘,S:8:3); Readln;END.

Page 41: Chương 3: Cấu trúc lặp và rẽ nhánh

1. Bài toán

Dữ liệu ra (Output) : ƯCLN(M,N)

Dữ liệu vào (Input) : Nhập M,N Hãy xác định INPUT, OUTPUT và nêu thuật toán giải bài toán trên?

Lập chương trình nhập vào hai số nguyên dương M,N. Tìm ƯCLN của hai số đó.

II. LẶP VỚI SỐ LẦN LẶP KHÔNG BIẾT TRƯỚC

Page 42: Chương 3: Cấu trúc lặp và rẽ nhánh

• Sơ đồ luồng dữ liệu:

Page 43: Chương 3: Cấu trúc lặp và rẽ nhánh

• Qui trình xử lý:

Page 44: Chương 3: Cấu trúc lặp và rẽ nhánh

d. Phân tích bài toán

+ Dữ liệu: • M, N : Integer (M>0, N>0) (Input)

+ Xử lý: • Nhập vào số nguyên dương M,N.

• Trong khi M<>N thì

• Nếu M >N thực hiện phép tính

• M = M-N;

• Ngược lại N = N – M;

• Xuất ra M.

Page 45: Chương 3: Cấu trúc lặp và rẽ nhánh

• Thiết kế chương trình:

Page 46: Chương 3: Cấu trúc lặp và rẽ nhánh

THE END