470 likes | 822 Views
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.
E N D
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
Bài 9 CẤU TRÚC RẼ NHÁNH
1. RẼ NHÁNH “Nếu chăm học thì các bạn sẽ đạt kết quả tốt.”
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 Ê..ê, maitụimìnhđitrượttuyếtngen…
Nếu...thì... Nếu không...thì. 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.
Hãy nêu các bước giải phương trình bậc hai? Ví dụ: Giải phương trình bậc hai ax2+bx+c=0 (a0) • 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
Các em hãy vẽ sơ đồ thuật toán giải phương trình bậc 2 (với a0) Nhập a, b, c Tính Delta = b2 – 4ac Kiểm tra Delta <0 Sai Đúng 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. Tính và đưa ra nghiệm Thông báo vô nghiệm Kết thúc
2. Câu lệnh IF - THEN a. Dạng thiếu: IF<Điều kiện>THEN<Câu lệnh>; Trong đó: - Điều kiện là biểu thức logic. - Câu lệnh là một câu lệnh của Pascal. ĐIỀU KIỆN CÂU LỆNH Đúng Sai • Nếu<điều kiện>đúngthì<câu lệnh> được thực hiện, sai <câu lệnh> bị bỏ qua. IF a mod 2=0 THEN Writeln(‘ a la so chan’); Ví dụ:
2. Câu lệnh IF - THEN b. Dạng đủ: IF<Điều kiện> THEN <Câu lệnh 1>ELSE <câu lệnh 2>; ĐIỀU KIỆN Đúng Sai Câu lệnh 2 Câu lệnh 1 IF a mod 2=0 THEN Writeln(‘a la so chan’) ELSE Writeln(‘a la so le’); 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ụ:
2. Câu lệnh IF - THEN 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);
3. CÂU LỆNH GHÉP 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; Ví dụ: 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;
4. MỘT SỐ VÍ DỤ Emhãyhoànthiệnchươngtrìnhgiảiphươngtrìnhbậc 2 (a0) theodàn ý sau: Ví dụ 1: Program GPTB2; Uses crt; Var . . . ; BEGIN . . . Nhập vào 3 hệ số a,b,c .. . Delta :=. . .; • Nếu Delta<0 thì Writeln(‘PTVN’) ngược lại Tính và in nghiệm; Readln; END.
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. • 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. Hãyxácđịnh Input và Output củabài? 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ạiIn ra số ngày là 365
Viế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 Khai báo biến cho bài toán trên 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ường Nhập vào Năm cần tính số lượng ngày In ra kết quả
GHI 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. Lệnh rẽ nhánh dạng thiếu: IF<Điều kiện>THEN <câulệ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 đủ: • Câu lệnh ghép: BEGIN <Các câu lệnh>; END;
Bài 10 CẤU TRÚC LẶP
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 = ??? Kết quả bao nhiêu Tính giai thừa của N! với (N=10) Kết quả bao nhiêu Với S = N! thì ta có: S = 1 x 2 x 3 x … x 8 x 9 x 10 = ??? 20
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.
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 x 2 x 3 x … x 9 x 10 = ??? S = 1 + 2 + 3 + … + 9 + 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. • 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.
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. Cấu trúc lặp 24
Bài 10 Cấu trúc lặp 25
Đặ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. Lặp với số lần biết trước 26
Xét bài toán tính tổng:S = 1 + 2 + 3 + … + 98 + 99 + 100. Các bước chính: Lặp với số lần biết trước Bước 1: Gán S : = 0; i := 0 Bước 2: Cho biến điều khiển i chạy từ 1 100 Bước 3: Kiểm tra biến đ.khiển > 100 thì dừng. Bước 4: 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 Bước 5: Bước 5: Xuất ra tổng S 27
Giá trị đầu tiên biến i tham gia vòng lặp là bao nhiêu? S 0 i 0 Vòng lặp diễn ra ở chỗ nào? Begin {Bước 1} i i + 1 {Bước 2} Sơ đồ 1 i > 100 sai S S + i {Bước 3} 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? {Bước 4} đúng Xuất S End {Bước 5} 28
Giá trị đầu tiên biến i tham gia vòng lặp là bao nhiêu? S 0 i 101 Begin {Bước 1} i i – 1 {Bước 2} Sơ đồ 2 i < 1 sai S S + i {Bước 3} 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? {Bước 4} đúng Xuất S End {Bước 5} 29
Sơ đồ 1 Sơ đồ 2 Dạng lùi Dạng tiến S 0 i 101 Begin S 0 i 0 Begin i i – 1 i i + 1 i < 1 i > 100 sai sai S S + i S S + i đúng đúng Xuất S End Xuất S End 30
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
- 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: - Dạng lặp lùi:for <biến đếm> := <giá trị cuối> downto <giá trị đầu> do <câu lệnh>; 32
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; Câu lệnh for - do trong Pascal: 33
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
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). 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.
II. LẶP VỚI SỐ LẦN LẶP KHÔNG BIẾT TRƯỚC 1. Bài toán Tính giá trị tổng S, với a là số nguyên và a>2. Cho đến khi thì dừng lại. Dữ liệu vào (Input) : Nhập a Hãy xác định INPUT, OUTPUT và nêu thuật toán giải bài toán trên? Dữ liệu ra (Output) : Tổng S
Nhập a S:=1/a ; N:=1 1/(a+N) >= 0.0001 S:= S+1/(a+N); N:= N+1; THUẬT TOÁN Bước 1: Nhập a. 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 S Đưa ra S => Kết thúc Bước 4: S:=S+1/(a+N); N:=N+1; => quay lại bước 3 § Bước 5: In S => Kết thúc. Vònglặpchỉdừngkhi 1/(a+N)<0.0001
2. Lặp với số lần lặp không biết trước WHILE <Điềukiện> DO <Câulệnh>; Trong đó: Điều kiện Sai Đ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. Đúng Câu lệnh Chừng nào điều kiện còn đúng thì câu lệnh còn được thực hiện.
3. Một số ví dụ a Bài toán đặt vấn đề: Tính giá trị tổng S, với a là số nguyên và a>2 Cho đến khi thì dừng lại. WHILE 1/(a+N) >= 0.0001 DO BEGIN S:=S+1/(a+N); N:=N+1; END; 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ị.
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.
II. LẶP VỚI SỐ LẦN LẶP KHÔNG BIẾT TRƯỚC 1. Bài toá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ố đó. Hãy xác định INPUT, OUTPUT và nêu thuật toán giải bài toán trên? Dữ liệu vào (Input) : Nhập M,N Dữ liệu ra (Output) : ƯCLN(M,N)
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.