Bài 8 Cấu Trúc Rẽ Nhánh Lớp 8 / Top 5 # Xem Nhiều Nhất & Mới Nhất 3/2023 # Top View | Nhatngukohi.edu.vn

Bài 9. Cấu Trúc Rẽ Nhánh

Ngày soạn 16/10/2020Tiết: 12 TÊN BÀI: Cấu trúc rẽ nhánhI-MỤC TIÊU CỦA BÀI DẠY 1. Kiến thức.-Nắm được khái niệm rẽ nhánh dạng thiếu và đủ-Nắm được câu lệnh If – then dạng thiếu và đủ -Nắm được cú pháp câu lệnh ghép2. Kỹ năng.-Mô phỏng được lược đồ rẽ nhánh dạng thiếu và đủ3. Thái độ: Nghiêm túc trong học tập để biết cách sử dụng câu lệnh If- then, câu lệnh ghép4. Đinh hướng phát triển năng lực : Năng lực tự học, năng lực hợp tác, năng lực giao tiếp, năng lực quan sát, năng lực phát hiện và giải quyết vấn đề, năng lực tính toán, năng lực vận dụng kiến thức vào cuộc sống II. CHUẨN BỊ CỦA GIÁO VIÊN VÀ HỌC SINH1-Giáo viên: SGK, SGV, giáo án,2-Học sinh:SGK, vở ghi.III. PHƯƠNG PHÁP, KỸ THUẬT DẠY HỌC1-Phương pháp: Thuyết trình, vấn đáp2- Kỹ thuật dạy học XYZ, ổ bi, bể cáIV.TIẾN TRÌNH BÀI DẠY ( TỔ CHỨC CÁC HOẠT ĐỘNG ) *Ổn định lớp: Kiểm tra sĩ số, nội vụ lớp họcLớp11A611A7

Ngày giảng:

A. Hoạt động khởi động1- Kiểm tra bài cũ: Không kiểm tra bài cũ mà kết hợp trong bài mới2-Tạo tình huống ( vào bài mới )Hôm nay chúng ta học sang chương mới, Chương III Cấu trúc rẽ nhánh và lặp. Bài hôm nay là bài 9. Cấu trúc rẽ nhánhB.Hoạt động hình thành kiến thức

MỤC TIÊU( Hoặc ghi cả Nội dung là do từng GV)HOẠT ĐỘNG CỦA GVHOẠT ĐỘNG CỦA HỌC SINH

Hoạt động 1: Rẽ nhánh

Thường ngày, có rất nhiều việc chỉ được thực hiện khi một điều kiện cụ thể nào đó được thoả mãn. Ví dụ, Châu và Ngọc thường cùng nhau chuẩn bị các bài thực hành môn tin học.Một lần Châu hẹn với Ngọc: Chiều mai nếu trời không mưa thì Châu sẽ đến nhà Ngọc .Ta gọi cách diễn đạt đó là dạng thiếu:Nếu … thì ….Một lân khác, Ngọc hẹn với Châu: Chiều mai nếu trời không mưa thì Ngọc sẽ đến nhà Châu, nếu mưa thì sẽ gọi điện cho Châu để trao đổi.Ta nói cách diễn đạt đó thuộc dạng đủ:Nếu …. thì …, nếu không thì …GV: Theo em hiểu rẽ nhánh là gì ?

Từ đó có thể thấy, trong nhiều thuật toán, các thao tác tiếp theo sẽ phụ thuộc vào kết quả nhận được từ các bước trước đó.Ví dụ, để giải phương trình bậc hai:ax2+ bx + c (a≠0)Trước tiên, ta tính biệt số deltaD = b2 – 4ac.Nếu D không âm, ta sẽ đưa ra các nghiệm.Trong trường hợp ngược lại ta phải thông báo phương trình vô nghiệm.

Hs: Rẽ nhánh giống như đi đến ngã ba hoặc ngã tư đường rồi rẽ theo một hướng (nhánh) nào đó.

Lắng nghe, ghi chép

Hoạt động 2: Câu lệnh If – then

Bài 7: Cấu Trúc Rẽ Nhánh Trong Python

Chào các bạn! Các bạn đang xem loạt bài thuộc khóa học lập trìnhPython miễn phí do tổ chức. Rất vui được gặp lại các bạn ở bài 7.

#coding: utf-8 print "Đây là khối lệnh thứ nhất" print "Nó nằm trực tiếp từ đầu dòng" print "Đây là khối lệnh thứ hai" print "Nó được lùi vào 1 tab so với khối lệnh thứ nhất" print "Nó có thể coi là khối lệnh con của khối lệnh thứ nhất" print "Đây là khối lệnh thứ ba", print "Nó được lùi vào 1 khoảng trắng so với khối lệnh thứ hai" print "Nó có thể coi là khối lệnh con của khối lệnh thứ hai"

Điều kiện sẽ xác định xem có thực hiện khối lệnh con của if hay không. Điều kiện sẽ được trả về giá trị logic True hoặc False. Cách thức thực hiện của IDE sẽ là:

Kiểm tra điều kiện, nếu điều kiện trả về giá trị đúng thì thực hiện khối lệnh con ngay sau if, nếu điều kiện sai kiểm tra tiếp có else hay không, nếu có else sẽ thực hiện tiếp khối lệnh con sau else, còn không có else sẽ chuyển tiếp sang lệnh tiếp theo.

Cú pháp của câu lệnh if ….. elif: . . else:

thang = int(raw_input('Nhap vao thang nay (0 < thang < 13): ')) nam = int(raw_input('Nhap vao nam nay (0 < nam): ')) if thang in [1,3,5,7,8,10,12]: print "Thang %s nam %s co 31 ngay." % (thang,nam) elif thang in [4,6,9,11]: print "Thang %s nam %s co 30 ngay." % (thang,nam) else: print "Thang hai nam %s co 29 ngay." % nam else: print "Thang hai nam %s co 28 ngay." % nam

Viết chương trình nhập vào 3 cạnh của tam giác, sau đó đưa ra xem đó là tam giác thường, vuông, cân, đều, vuông cân hay đó không phải là 3 cạnh của tam giác.

Giải và biện luận hệ phương trình tuyến tính bậc nhất hai ẩnax + by = cdx + ey = fvới các hệ số thực a, b, c, d, e, f được nhập vào từ bàn phím.

Xác định thứ của một ngày nào đó trong năm. Trong đó giá trị ngày, tháng, năm nhập vào từ bàn phím. In kết quả ra màn hình theo dạng: Ngày 19/5/2010 là ngày thứ sáu.

Cấu Trúc Rẽ Nhánh If, If

Các cấu trúc điều khiển

Java cung cấp hai loại lệnh để kiểm soát luồng điều khiển:

lệnh rẽ nhánh (branching) chọn một hành động từ danh sách gồm nhiều hành động.

lệnh lặp (loop) thực hiện lặp đi lặp lại một hành động cho đến khi một điều kiện dừng nào đó được thỏa mãn.

Hai loại lệnh đó tạo thành các cấu trúc điều khiển (control structure) bên trong chương trình.

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

Lệnh if-else

Lệnh if-else (hay gọi tắt là lệnh if) cho phép rẽ nhánh bằng cách lựa chọn thực hiện một trong hai hành động. Ví dụ, trong một chương trình xếp loại điểm thi, nếu điểm của sinh viên nhỏ hơn 4.0, sinh viên đó được coi là trượt, nếu không thì được coi là đỗ. Thể hiện nội dung đó bằng một lệnh if-else của Java, ta có đoạn mã:

if

(score <

4.0

)

   

System.

out

.print(

"Failed"

);

else

   

System.

out

.print(

"Passed"

);

Khi chương trình chạy một lệnh if-else, đầu tiên nó kiểm tra biểu thức điều kiện nằm trong cặp ngoặc đơn sau từ khóa if. Nếu biểu thức có giá trị bằng true thì lệnh nằm sau từ khóa if sẽ được thực hiện. Ngược lại, lệnh nằm sau else sẽ được thực hiện. Chú ý là biểu thức điều kiện phải được đặt trong một cặp ngoặc đơn.

package

codelean.sample;

import

java.util.Scanner;

public class

IfElseExample {

   

public static void

main(String[] args) {

      

// write your code here

       

Scanner input =

new

Scanner(System.

in

);

       

double

score;

       

System.

out

.println(

“Enter your score: “

);

       

score = input.nextDouble();

       

if

(score <

4.0

){

           

System.

out

.println(

“Sorry! You’ve

 

failed the course.”

);

       

}

else

{

           

System.

out

.println(

“Congratulations! You’ve passed the courese.”

);

       

}

   

} }

Chương trình ví dụ trong Hình 2.5 yêu cầu người dùng nhập điểm rồi in ra các thông báo khác nhau tùy theo điểm số đủ đỗ hoặc trượt.

Trong cấu trúc rẽ nhánh if-else, ta có thể bỏ phần else nếu không muốn chương trình thực hiện hành động nào nếu điều kiện không thỏa mãn. Chẳng hạn, nếu muốn thêm một lời khen đặc biệt cho điểm số xuất sắc từ 9.0 trở lên, ta có thể thêm lệnh if sau vào trong chương trình tại

System.

out

.print(

"Excellent!"

);

Ta có thể dùng các cấu trúc

if-else

lồng nhau để tạo ra điều kiện rẽ nhánh phức tạp. Lấy một ví dụ phức tạp hơn: cho trước điểm số (lưu tại biến score kiểu double), xác định xếp loại học lực A, B, C, D, F tùy theo điểm đó. Quy tắc xếp loại là: nếu điểm từ 8.5 trở lên thì đạt loại A, điểm từ 7.0 tới dưới 8.5 đạt loại B, v.v.. Tại đoạn mã xét các trường hợp của xếp loại điểm, ta có thể dùng cấu trúc if-else lồng nhau như sau:

   

grade =

“A”

;

   

grade =

“B”

;

   

grade =

“C”

;

   

grade =

“D”

;

else

   

grade =

“F”

;

Một điều cần đặc biệt lưu ý là nếu muốn thực hiện nhiều hơn một lệnh trong mỗi trường hợp của lệnh if-else, ta cần dùng cặp ngoặc { } bọc tập lệnh đó thành một khối lệnh. Ví dụ, phiên bản phức tạp hơn của lệnh if trong Hình 2.5:

if

(score <

4.0

){

   

System.

out

.println(

“Failed”

);

   

System.

out

.println(

“You have to take this course again”

); }

else

{

   

System.

out

.println(

“Congratulations!!!”

);

   

System.

out

.println(

“You passed this course.”

); }

Lệnh switch

Khi chúng ta muốn viết một cấu trúc rẽ nhánh có nhiều lựa chọn, ta có thể sử dụng nhiều lệnh if-else lồng nhau. Tuy nhiên, trong trường hợp việc lựa chọn rẽ nhánh phụ thuộc vào giá trị (kiểu số nguyên hoặc kí tự, hoặc xâu kí tự kể từ JDK 7.0) của một biến hay biểu thức, ta có thể sử dụng cấu trúc switch để chương trình dễ hiểu hơn. Lệnh switch điển hình có dạng như sau:

switch

(bieu_thuc){

   

case

hang_1:

       

tap_lenh;

       

break

;

   

case

hang_1:

       

tap_lenh;

       

break

;

   

   

default

:

       

tap_lenh_mac_dinh; }

Khi lệnh switch được chạy, biểu_thức được tính giá trị và so sánh với hằng_1. Nếu bằng nhau, chuỗi lệnh kể từ tập_lệnh_1 được thực thi cho đến khi gặp lệnh

break

đầu tiên, đến đây chương trình sẽ nhảy tới điểm kết thúc cấu trúc switch. Nếu biểu_thức không có giá trị bằng hằng_1, nó sẽ được so sánh với hằng_2, nếu bằng nhau, chương trình sẽ thực thi chuỗi lệnh kể từ tập_lệnh_2 tới khi gặp lệnh break đầu tiên thì nhảy tới cuối cấu trúc switch. Quy trình cứ tiếp diễn như vậy. Cuối cùng, nếu biểu_thức có giá trị khác với tất cả các giá trị đã được liệt kê (hằng_1, hằng_2, …), chương trình sẽ thực thi tập_lệnh_mặc_định nằm sau nhãn

default:

nếu như có nhãn này (không bắt buộc).

Ví dụ, lệnh sau so sánh giá trị của biến grade với các hằng kí tự ‘A’, ‘B’, ‘C’ và in ra các thông báo khác nhau cho từng trường hợp.

switch

(grade){

   

case

“A”

:

       

System.

out

.println(

“Grade = A”

);;

       

break

;

   

case

“B”

:

 

      

System.

out

.println(

“Grade = B”

);;

       

break

;

   

case

“C”

:

       

System.

out

.println(

“Grade = C”

);

       

break

;

   

default

:

       

System.

out

.println(

“Grade’s not A, B or C”

);; }

Nó tương đương với khối lệnh if-else lồng nhau sau:

if

(grade.equals(

"A"

)){

   

System.

out

.println(

"Grade = A"

);; }

else if

(grade.equals(

"B"

)){

   

System.

out

.println(

"Grade = B"

);; }

else if

(grade.equals(

"C"

)){

   

System.

out

.println(

"Grade = C"

); }

else

{

   

System.

out

.println(

"Grade's not A, B or C"

);; }

Lưu ý, các nhãn

case

trong cấu trúc switch phải là hằng chứ không thể là biến hay biểu thức. Nếu cần so sánh với biến hay biểu thức, ta nên dùng khối lệnh if-else lồng nhau.

Vấn đề đặc biệt của cấu trúc switch là các lệnh break. Nếu ta không tự gắn một lệnh break vào cuối chuỗi lệnh cần thực hiện cho mỗi trường hợp, chương trình sẽ chạy tiếp chuỗi lệnh của trường hợp sau chứ không tự động nhảy tới cuối cấu trúc switch. Ví dụ, đoạn chương trình sau sẽ chạy lệnh in thứ nhất nếu grade nhận một trong ba giá trị ‘A’, ‘B’, ‘C’ và chạy lệnh in thứ hai trong trường hợp còn lại:

switch

(grade){

   

case

"A"

:

   

case

"B"

:

   

case

"C"

:

       

System.

out

.println(

"Grade is A, B or C."

);

       

break

;

   

default

:

       

System.

out

.println(

"Grade is not A, B or C."

); }

Chương các thông báo khác nhau tùy theo xếp loại học lực (grade) mà người dùng nhập từ bàn phím. Trong đó, case ‘A’ kết thúc với break sau chỉ một lệnh, còn case ‘B’ chạy tiếp qua case ‘C’, ‘D’ rồi mới gặp break và thoát khỏi lệnh switch. Nhãn default được dùng để xử lý trường hợp biến grade giữ giá trị không hợp lệ đối với xếp loại học lực. Trong nhiều chương trình, phần default thường được dùng để xử lý các trường hợp không mong đợi, chẳng hạn như để bắt lỗi các kí hiệu học lực không hợp lệ mà người dùng có thể nhập sai.

Có một lưu ý nhỏ là Scanner không hỗ trợ việc đọc từng kí tự một. Do đó, để đọc giá trị của grade do người dùng nhập, ta dùng phương thức next() để đọc một chuỗi (không chứa kí tự trắng), rồi lấy kí tự đầu tiên bằng hàm charAt(0) (mà kiểu String cung cấp) làm giá trị của grade.

import

java.util.Scanner;

public class

SwitchExample {

   

public static void

main(String[] args) {

       

Scanner input =

new

Scanner(System.

in

);

  

     

String grade =

"F"

;

       

switch

(grade){

           

case

"A"

:

               

System.

out

.println(

"Excellent!"

);

               

break

;

           

case

"B"

:

               

System.

out

.println(

"Great!"

);

               

break

;

           

case

"C"

:

           

case

"D"

:

               

System.

out

.println(

"Well done!"

);

               

break

;

           

case

"F"

:

               

System.

out

.println(

"Excellent!"

);

               

break

;

           

default

:

               

System.

out

.println(

"Error! Invalid grade."

  

     

}

   

} }

);} }

Kết quả chạy chương trình:

Bài 9 : Cấu Trúc Rẽ Nhánh Trong Pascal ( If … Then … Else … ; )

Cấu trúc rẽ nhánh: Cấu trúc dùng để diễn đạt một việc sẽ được thực hiện khi một điều kiện cụ thể được thỏa mãn.

Rẽ nhánh bao gồm 2 loại:

+ Dạng thiếu: Nếu … thì

Ví dụ: Nếu trời nắng thì chúng ta sẽ đi chơi.

Vậy nếu trời không nắng thì chúng ta làm gì còn chưa biết.

+ Dạng đủ: Nếu … thì …,nếu không thì.

Ví dụ: Nếu trời nắng thì chúng ta sẽ đi chơi, nếu không thì chúng ta sẽ ở đọc truyện ở nhà.

Vậy nếu trời không nắng chúng ta sẽ ở nhà đọc truyện.

2. Câu lệnh if-then

Để mô tả cấu trúc rẽ nhánh, Pascal dùng câu lệnh if-then. Tương ứng với hai dạnh thiếu và đủ nói ở trên, Pascal có hai câu lệnh if-then.

Trong đó:

+ Điều kiện là biểu thức logic.

+ Câu lệnh, câu lệnh 1, câu lệnh 2 là một câu lệnh của Pascal.

Ở dạng thiếu: điều kiện sẽ được tính và kiểm tra. Nếu điều kiện đúng (có giá trị true) thì câu lệnh sẽ được thực hiện, ngược lại thì câu lệnh sẽ bị bỏ qua.

Ở dạng đủ: điều kiện cũng được tính và kiểm tra. Nếu điều kiện đúng thì câu lệnh 1 sẽ được thực hiện, ngược lại thì câu lệnh 2 sẽ được thực hiện.

Ví dụ:

If d<=0 writeln('day la so duong'); If a mod 3=0 then writeln('a chia het cho 3') Else writeln('a khong chia het cho 3');

3. Câu lệnh ghép

Trong nhiều trường hợp ,sau một số từ khóa (như then hoặc else ) phải là một lệnh đơn. Nhưng trong nhiều trường hợp các thao tác sau những tên dành riêng đòi hỏi không chỉ một mà là nhiều câu lệnh để mô tả. Trong trường hợp như vậy, ngôn ngữ lập trình cho phép gộp một dãy các câu lệnh thành một câu lệnh ghép.

Trong Pascal câu lệnh ghép có dạng:

Begin End;

Thuật ngữ câu lệnh, câu lệnh 1, câu lệnh 2 trong các câu lệnh if-then ở mục trên có thể là câu lệnh ghép.

Ví dụ:

If D<0 then writeln('Phuong trinh vo nghiem ') Else Begin X1:=(-b-sqrt(b*b-4*a*c))/(2*a); X2:=-b/a-x1; End;

Ví dụ 2:

Viết chương trình tìm nghiệm thực của phương trình bậc hai:

ax 2+bx+c = 0 với a ≠ 0.

Program gptb2; Uses crt; Var a,b,c:real; D,X1,X2:real; Begin Clrscr; Write('a,b,c:'); Readln(a,b,c); D:=b*b-4*a*c; If D<0 then writeln('Phuong trinh vo nghiem ') Else Begin X1:=(-b-sqrt(D))/(2*a); X2:=-b/a-X1; Writeln('X1=',X1:8:3,' X2=',X2:8:3); End; Readln; End.