Nội dung bài học Bài 9: Cấu trúc rẽ nhánh dưới đây sẽ trình bày về cấu trúc rẽ nhánh trong môt tả thuật toán của một số bài toán đơn giản; hướng dẫn các em viết câu lệnh rẽ nhánh dạng đủ, dạng thiếu thông qua một số bài toán vận dụng cụ thể;... Mời các em cùng theo dõi nội dung chi tiết của bài học.
Ví dụ 1: Để giải phương trình bậc hai: ax2 +bx +c = 0 (a \(\neq\) 0 ) ta phải: Tính Delta = b*b - 4*a*c
Hoặc có thể nói: Nếu Delta < 0 thì phương trình vô nghiệm, ngược lại phương trình có nghiệm.
Ta có mệnh đề sau:
Cấu trúc này được gọi là cấu trúc rẽ nhánh thiếu và đủ.
Để 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ạng mệnh đề thiếu và đủ nói ở trên, Pascal có hai dạng câu lệnh if-then:
Cú pháp: If < Điều kiện > then < Câu lệnh >;
Trong đó:
Sơ đồ:
Hình 1. Sơ đồ cấu trúc rẽ nhánh dạng thiếu
Ý nghĩa: Điều kiện sẽ được tính và kiểm tra. Nếu điều kiện đúng thì câu lệnh được thực hiện, nếu điều kiện sai thì câu lệnh sẽ bị bỏ qua.
Ví dụ 2:
if Delta < 0 then writeln('Phuong trinh vo nghiem.');
Cú pháp:
If < Điều kiện > then < Câu lệnh 1 >
else < Câu lệnh 2 >;
Trong đó:
Sơ đồ:
Hình 2. Sơ đồ cấu trúc rẽ nhánh dạng đủ
Ý nghĩa: Điều kiện sẽ được tính và kiểm tra. Nếu điều kiện đúng thì thực hiện câu lệnh 1, ngược lại thì thực hiện câu lệnh 2.
Chú ý 1: Trước từ khóa Else không có dấu chấm phẩy (;).
Ví dụ 3:
if a mod 3 = 0 then write('a chia het cho 3')
else write('a khong chia het cho 3');
Trong Pascal câu lệnh ghép có dạng:
Begin
< Các câu lệnh >;
End;
Chú ý 2: Sau END phải có dấu chấm phẩy (;)
Ví dụ 4:
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ụ 5. Tìm nghiệm thực của phương trình bậc hai:
ax2 + bx + c = 0 , với a \(\neq\) 0.
Xây dựng ý tưởng:
Dùng câu lệnh if-then dạng đủ.
Xác định bài toán:
program Giai_PTB2;
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.
Ví dụ 5:
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 1900, 1945 không phải là năm nhuận và có số ngày là 365.
Hướng dẫn:
Biểu thức điều kiện: ((N mod 400 = 0) or (N mod 4 = 0) and (N mod 100<>0))
Xác định bài toán:
program Nam_nhuan;
uses crt;
var N, SN: integer;
begin
clrscr;
write('Nam: '); readln(N);
if (N mod 400 = 0)or((N mod 4 = 0)and( N mod 100 <> 0))
then SN:= 366 else SN:= 365;
writeln(' So ngay cua nam ', N,' la ', SN);
readln
end.
Sau khi học xong Bài 9: Cấu trúc rẽ nhánh, các em cần nắm vững các nội dung trọng tâm:
If < Điều kiện > then < Câu lệnh 1 >
else < Câu lệnh 2 >;
Các em có thể hệ thống lại nội dung kiến thức đã học được thông qua bài kiểm tra Trắc nghiệm Tin học 11 Bài 9 cực hay có đáp án và lời giải chi tiết.
Để mô tả cấu trúc rẽ nhánh trong thuật toán, nhiều ngôn ngữ lập trình bậc cao dùng câu lệnh IF – THEN, sau IF là < điều kiện > . Điều kiện là
Với cấu trúc rẽ nhánh IF < điều kiện > THEN < câu lệnh >, câu lệnh đứng sau THEN được thực hiện khi
Câu 3-5: Mời các em đăng nhập xem tiếp nội dung và thi thử Online để củng cố kiến thức về bài học này nhé!
Trong quá trình học tập nếu có thắc mắc hay cần trợ giúp gì thì các em hãy comment ở mục Hỏi đáp, Cộng đồng Tin học DapAnHay sẽ hỗ trợ cho các em một cách nhanh chóng!
Chúc các em học tập tốt và luôn đạt thành tích cao trong học tập!
-- Mod Tin Học 11 DapAnHay
Để mô tả cấu trúc rẽ nhánh trong thuật toán, nhiều ngôn ngữ lập trình bậc cao dùng câu lệnh IF – THEN, sau IF là < điều kiện > . Điều kiện là
Với cấu trúc rẽ nhánh IF < điều kiện > THEN < câu lệnh >, câu lệnh đứng sau THEN được thực hiện khi
Với cấu trúc rẽ nhánh IF < điều kiện > THEN < câu lệnh 1 > ELSE < câu lệnh 2 >, câu lệnh 2 được thực hiện khi
Muốn dùng biến X lưu giá trị nhỏ nhất trong các giá trị của hai biến A, B có thể dùng cấu trúc rẽ nhánh như sau:
Phát biểu nào sau đây có thể lấy làm biểu thức điều kiện trong cấu trúc rẽ nhánh?
Họ và tên
Tiêu đề câu hỏi
Nội dung câu hỏi
Phát biểu điều kiện | Biểu thức điều kiện trong Pascal |
a không nhỏ hơn b | |
k lớn hơn hay bằng m và q nhỏ hơn n | |
biến OK (thuộc kiểu boolean) có giá trị đúng |
Câu trả lời của bạn
Phát biểu điều kiện | Biểu thức điều kiện trong Pascal |
a không nhỏ hơn b | a>=b |
k lớn hơn hay bằng m và q nhỏ hơn n | k>=m and q<n |
biến OK (thuộc kiểu boolean) có giá trị đúng | OK = true |
Câu trả lời của bạn
Thuật toán ở hình bên trái là cấu trúc rẽ nhánh dạng thiếu.
Thuật toán ở hình bên phải là cấu trúc rẽ nhánh dạng đủ.
Trong mô tả của hai thuật toán trên, có một thuật toán chỉ thể hiện "cấu trúc tuần tự", còn thuật toán kia thể hiện "cấu trúc rẽ nhánh". Theo em thuật toán nào có thể hiện cấu trúc rẽ nhánh?
Câu trả lời của bạn
a,
Bài toán | Mô tả thuật toán liệt kê các bước | Mô tả thuật toán sử dụng sơ đồ |
Bài toán 1 | B | C |
Bài toán 2 | A | D |
b, Thuật toán D của bài toán 2 có thể hiện cấu trúc rẽ nhánh.
a, Để giải quyết bài toán trên, em có đồng ý với thuật toán của bạn Thùy Anh ở hình bên không?
b, Em có thể hiện được thuật toán này trong môi trường Scratch không?
c, Dòng chữ "HOAN HO BAN" sẽ được hiển thị trong điều kiện nào?
Câu trả lời của bạn
a, Em có đồng ý với thuật toán của bạn Thùy Anh.
b, Thể hiện thuật toán bằng chương trình Scratch
c, Dòng chữ "HOAN HO BAN" sẽ được hiển thị trong điều kiện a chia hết cho b.
if a < b then writeln (a) else writeln (b);
Câu trả lời của bạn
Lệnh trên nhằm thực hiện việc đưa ra màn hình số bé hơn trong hai số a, b.
Lệnh này thể hiện cấu trúc lệnh rẽ nhánh.
A. if a > b; then c := a; else c := b;
B. if a > b then c := a; else c := b;
C. if a > b then c := a else c := b;
D. if a > b then c := a; c := b;
Câu trả lời của bạn
Đoạn chương trình A, B, D sai cú pháp.
Câu trả lời của bạn
Đoạn chương trình C. if a > b then c := a else c := b; thực hiện được mục đích đề ra.
Chương trình Pascal:
A. if a > 8 then a := 8;
B. if a < 5 then a := 5;
C. if a < 7 then a := 7 else a := 13;
D. if a mod 2 = 0 then a := 6;
Câu trả lời của bạn
A. Vì a = 10 > 8 nên gán a bằng 8.
B. Vì a = 10 không nhỏ hơn 5 nên a vẫn bằng 10.
C. Vì a = 10 không nhỏ hơn 7 nên gán a bằng 13.
D. Vì a = 10 chia hết cho 2 nên gán a = 6.
a, Hãy cho biết chương trình trên nhằm mục đích gì?
b, Hãy soạn thảo, dịch và chạy thử chương trình với các bộ dữ liệu sau đây (180, 200); (200, 180); (200, 200). Quan sát và nhận xét kết quả nhận được.
c, Tìm chỗ chưa đúng trong chương trình và sửa lại để chương trình có kết quả đúng.
Câu trả lời của bạn
a, Chương trình trên nhằm mục đích so sánh khối lượng của con trâu và tê giác
b, Sau khi chạy thử chương trình với 3 bộ dữ liệu trên thì bộ dữ liệu (180, 200) và (200, 200) cho kết quả chính xác. Còn bộ dữ liệu (200, 180) đưa ra 2 kết quả là "Te giac nang hon Trau" và "Hai con vat nang bang nhau"
c, Chương trình sai ở cấu trúc rẽ nhánh
Chương trình sau khi sửa:
Uses crt:
Var
a,b, max, min: real:
Begin
clrscr:
write('Nhap vao 2 so:');
readln(a,b) ;
if a> b then
begin
max:=a; min:=b;
end
else
begin
max:=b; min:=a;
end;
writeln('So lon hon:' , max:15:3) ;
writeln('So be hon:' , min:15:3) ;
readln;
End.
Câu trả lời của bạn
Chương trình trên thực hiện công việc đưa ra màn hình số lớn và số bé trong hai số a, b được nhập từ bàn phím.
Hãy lập trình trong môi trường Free Pascal để thực hiện yêu cầu trên.
Câu trả lời của bạn
Chương trình Pascal:
30% thuế thu nhập nếu lương là 15 triệu
20% thuế thu nhập nếu lương từ 7 đến 15 triệu
10% thuế thu nhập nếu lương dưới 7 triệu
Câu trả lời của bạn
#include <iostream> #include <conio.h> using namespace std; int main() { int thuesuat; float luong,sothue,luongrong=0; cout << "Nhap so tien luong : "; cin>>luong; if(luong>15) { sothue=luong*30/100; thuesuat=30; } else if(luong>=7) { sothue=luong*20/100; thuesuat=20; } else { sothue=luong*10/100; thuesuat=10; } luongrong=luong-sothue; cout << "Luong = " << luong << endl; cout << "Thue thu nhap voi muc thue suat " << thuesuat << "% = " << sothue << endl; cout << "So tien luong ban nhan la = " << luongrong << endl; return 0; }
Phí thuê bao bắt buộc là 25 nghìn.
600 đồng cho mỗi gọi của 50 phút đầu tiên.
400 đồng cho mỗi phút gọi của 150 phút tiếp theo.
200 đồng cho bất kỳ mỗi phút nào sau 200 phút đầu tiên.
Câu trả lời của bạn
#include <iostream> #include <conio.h> using namespace std; int main() { long int sophut,phi=0; float tong; const int phicodinh=25; cout << "Nhap so phut da su dung : "; cin>>sophut; if(sophut>200) phi=(sophut-200)*200+150*400+50*600; else if(sophut>50) phi=(sophut-50)*400+50*600; else phi=sophut*600; tong=0.01*phi+phicodinh; cout << "Ban da goi " << sophut << " phut." << endl; cout << "So tien phai nop cua ban la " << tong; return 0; }
5% nếu tổng doanh số nhỏ hơn hoặc bằng 100 triệu.
10% nếu tổng doanh số nhỏ hơn hoặc bằng 300 triệu.
20 % nếu tổng doanh số là lớn hơn 300 triệu.
Dựa vào dữ liệu trên, bạn viết chương trình C++ để tính hoa hồng đại lý bạn sẽ nhận được.
Câu trả lời của bạn
#include <iostream> #include <conio.h> using namespace std; int main() { long int doanhso; float hoahong; cout << "Nhap gia tri tong doanh so ban hang : " << endl; cin>>doanhso; if(doanhso<=100) { hoahong=doanhso*5/100; cout << "Voi tong doanh so la " << doanhso << ", "; cout << "Thi hoa hong nhan duoc la " << hoahong; } else if(doanhso<=300) { hoahong=doanhso*10/100; cout << "Voi tong doanh so la " << doanhso << ", "; cout << "Thi hoa hong nhan duoc la " << hoahong; } else if(doanhso>300) { hoahong=doanhso*20/100; cout << "Voi tong doanh so la " << doanhso << ", "; cout << "Thi hoa hong nhan duoc la " << hoahong; } return 0; }
Nếu a và b cùng bằng 0 thì phương trình vô nghiệm.
Nếu a=0 thì phương trình có một nghiệm là (-c/b).
Nếu b2-4ac là âm, thì phương trình vô nghiệm.
Nếu không, phương trình có hai nghiệm.
Câu trả lời của bạn
#include <iostream> #include <conio.h> #include <math.h> using namespace std; int main() { float a,b,c,d,x1,x2; cout << "Nhap ba he so a, b, c tuong ung la: " << endl; cin>>a>>b>>c; if(!a){ if(!b) cout << "Ca a va b khong the cung bang 0 trong phuong trinh ax^2 + bx + c = 0" << "\n"; else { d=-c/b; cout << "Phuong trinh co nghiem duy nhat : " << d << endl; } } else { d=b*b-4*a*c; if(d>0) x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); cout << "Nghiem thu nhat x1 = " << x1 << endl; cout << "Nghiem thu hai x2 = " << x2 << endl; } return 0; }
Điểm trung bình >= 9.0 là hạng A.
Điểm trung bình >=7.0 và < 9.0 là hạng B
Điểm trung bình >=5.0 và < 7.0 là hạng C
Điểm trung bình <5.0 là hạng F
Câu trả lời của bạn
#include <cstdlib> #include <iostream> #include<iomanip> using namespace std; int main(int argc, char *argv[]) { float x; float y; float z; float trungbinh; cout<<"Nhap ba diem (diem kiem tra, diem giua ky va diem cuoi ky) tuong ung la:"; cin>>x>>y>>z; trungbinh=(x+y+z)/3; if(trungbinh>=9.0)cout<<"Hang A"; else if((trungbinh>=7.0) && (trungbinh<90)) cout<<"Hang B"; else if((trungbinh>=5.0) && (trungbinh<70))cout<<"Hang C"; else if(trungbinh<5.0) cout<<"Hang F"; else cout<<"Khong hop le"; cout<<"\n"; return 0; }
Câu trả lời của bạn
#include <iostream> #include <conio.h> using namespace std; int main(){ int x; cout << "Nhap mot so nguyen : " << endl; cin>>x; if(x>100) { cout << x << " la lon hon 100." << endl; } else { cout << x << " la nho hon 100." << endl; } return 0; }
Câu trả lời của bạn
#include <cstdlib> #include <iostream> #include<iomanip> using namespace std; int main(int argc, char *argv[]) { int a,b,c,max; cin>>a>>b>>c; max=a; //Gia su gia tri dau tien la lon nhat if(max<b) max=b; // So sanh max voi b va cap nhat gia tri lon nhat nay if(max<c) max=c; //So sanh max voi c va cap nhat gia tri lon nhat nay cout<<"Gia tri lon nhat cua ba so la: "<<max; //Ket qua return 0; }
Câu trả lời của bạn
#include <iostream> #include <conio.h> using namespace std; int main() { int tuoi; cout << "Nhap tuoi hoc sinh : " << endl; cin>>tuoi; if(tuoi==16) { cout << "Tuoi cua hoc sinh la " << tuoi << " tuoi." << endl; cout << "Hoc sinh du tuoi vao lop 10 !" << endl; } else { cout << "Tuoi cua hoc sinh la " << tuoi << " tuoi." << endl; cout << "Hoc sinh khong du tuoi vao lop 10 !" << endl; } return 0; }
Câu trả lời của bạn
#include<stdio.h>
#include<conio.h>
int main()
{
int n;
int SoNghichDao = 0;
do
{
printf("\nNhap n: ");
scanf("%d", &n);
}while(n < 0 && printf("\nLoi: (n >= 0)"));
printf("\nSo dao nguoc cua %d la: ", n);
do
{
printf("%d", n % 10);
}while(n /= 10); // tương đương n = n / 10; n != 0;
// có thể viết
/*do
{
SoNghichDao = SoNghichDao * 10 + n % 10;
n /= 10;
}while(n != 0);
printf("\n%d", SoNghichDao);*/
getch();
return 0;
}
0 Bình luận
Để lại bình luận
Địa chỉ email của hạn sẽ không được công bố. Các trường bắt buộc được đánh dấu *