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
Câu trả lời của bạn
uses crt;
var m,n,t,i:integer;
begin
clrscr;
write('Nhap m='); readln(m);
write('Nhap n='); readln(n);
t:=0;
for i:=m to n do
if i mod 2=0 then t:=t+i;
writeln('Tong cac so chan tu ',m,' den ',n,' la: ',t);
readln;
end.
Câu trả lời của bạn
uses crt;
var a:array[1..100]of integer;
m,n,dem,i:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
write('Nhap m='); readln(m);
dem:=0;
for i:=1 to n do
if a[i]=m then inc(dem);
writeln('So phan tu bang ',m,' la: ',dem);
readln;
end.
Câu trả lời của bạn
var a,b:longint;
begin
readln(a,b);
if a>b then
begin
a:=1; b:=2;
end;
writeln(a,' ',b);
readln;
end.
Câu trả lời của bạn
#include <bits/stdc++.h>
using namespace std;
int main() {
double a, b, c;
cin >> a >> b >> c;
if(a==b)
{if (b!=c) {cout << "Ba so da nhap la do dai ba canh cua mot tam giac can";}
if(b==c) {cout << "Ba so da nhap la do dai ba canh cua mot tam giac deu";}}
if(b==c)
{if(a!=b) {cout << "Ba so da nhap la do dai ba canh cua mot tam giac can";}}
if(a==c)
{if(a!=b) {cout << "Ba so da nhap la do dai ba canh cua mot tam giac can";}}
if(a!=b)
{if(b!=c) {cout << "Ba so da nhap khong la do dai ba canh cua mot tam giac can";}}
return 0;
}
Câu trả lời của bạn
#include <bits/stdc++.h>
using namespace std;
int main() {
int N=100, dem=0;
for(int i=1; i<=N; i++)
{if(i%3==0) dem+=1;}
cout << dem << endl;
return 0;
}
(|N| <250)n
nếu N âm đưa ra giá trị lập phương của n
nếu N không âm đưa ra giá trị bình phương của n
Câu trả lời của bạn
uses crt;
var n:integer;
begin
clrscr;
write('Nhap n='); readln(n);
if n<0 then writeln(n*n*n)
else writeln(sqr(n));
readln;
Câu trả lời của bạn
uses crt;
var a,b,c,kt:integer;
begin
clrscr;
write('Nhap a='); readln(a);
write('Nhap b='); readln(b);
write('Nhap c='); readln(c);
if (a+b>c) and (a+c>b) and (b+c>a) then
begin
kt:=0;
if sqr(a)=sqr(b)+sqr(c) then kt:=1;
if sqr(b)=sqr(a)+sqr(c) then kt:=1;
if sqr(c)=sqr(a)+sqr(b) then kt:=1;
end
else kt:=0;
if kt=0 then writeln('Day khong la bo ba Pytago')
else writeln('Day la bo ba Pytago');
readln;
end.
Câu trả lời của bạn
uses crt;
var a,b:real;
begin
clrscr;
write('Nhap a='); readln(a);
write('Nhap b='); readln(b);
if a>b then writeln('So lon hon la: ',a:4:2)
else if b>a then writeln('So lon hon la: ',b:4:2)
else writeln('Hai so bang nhau');
readln;
end.
input: a,b
ouput: đưa ra số lớn hơn
Câu trả lời của bạn
uses crt;
var a,b:integer;
begin
clrscr;
repeat
write('Nhap a='); readln(a);
write('Nhap b='); readln(b);
until (a>0) and (b>0);
if a>b then writeln(a,' la so lon hon')
else if a<b then writeln(b,' la so lon hon')
else writeln('Hai so bang nhau');
readln;
end.
Câu trả lời của bạn
uses crt;
var diem:real;
begin
clrscr;
write('Nhap diem='); readln(diem);
writeln('Diem cua ban do la: ',diem:4:2);
readln;
end.
Câu trả lời của bạn
uses crt;
var a,b,c:real;
begin
clrscr;
repeat
write('Nhap a='); readln(a);
write('Nhap b='); readln(b);
write('Nhap c='); readln(c);
until (a>0) and (b>0) and (c>0);
if (a+b>c) and (b+c>a) and (a+c>b) then
begin
if sqr(a)=sqr(b)+sqr(c) then writeln('Vuong')
else if sqr(b)=sqr(a)+sqr(c) then writeln('Vuong')
else if sqr(c)=sqr(a)+sqr(b) then writeln('Vuong')
else writeln('La tam giac khong vuong');
end
else writeln('Khong la ba canh trong mot tam giac');
readln;
end.
Câu trả lời của bạn
*Dạng thiếu
nn:=a;
if nn>b then nn:=b;
if nn>c then nn:=c;
*Dạng đủ
nn:=a;
if nn>b then nn:=b
else if nn>c then nn:=c;
Câu trả lời của bạn
uses crt;
var i,dem:integer;
begin
clrscr;
dem:=0;
for i:=100 to 999 do
if i mod 6=2 then inc(dem);
writeln('so luong cac so tu nhien co 3 chu so chia cho 6 du 2 la: ',dem);
readln;
end.
Câu trả lời của bạn
Được
Vd:
*Cấu trúc rẽ nhánh dạng đủ
if a mod 2=0 then writeln('chan')
else writeln('le');
-Vd này có thể chuyển sang cấu trúc rẽ nhánh dạng thiếu như sau:
if a mod 2=0 then writeln('chan');
if a mod 2=1 then writeln('le');
Câu trả lời của bạn
uses crt;
var a,b,c,d,kt:integer;
begin
clrscr;
write('a='); readln(a);
write('b='); readln(b);
write('c='); readln(c);
write('d='); readln(d);
if (a>0) and (b>0) and (c>0) and (d>0) then
begin
kt:=0;
if (a=b) and (c=d) then kt:=1;
if (a=c) and (b=d) then kt:=1;
if (a=d) and (b=c) then kt:=1;
if (b=c) and (a=d) then kt:=1;
if (b=d) and (a=c) then kt:=1;
if (c=d) and (a=b) then kt:=1;
if kt=0 then writeln('day khong la 4 canh trong mot hinh binh hanh')
else writeln('day la 4 canh trong mot hinh binh hanh');
end
else writeln('vui long nhap 4 canh lon hon 0');
readln;
end.
Câu trả lời của bạn
uses crt;
var a,b,c:integer;
begin
clrscr;
write('nhap a='); readln(a);
write('nhap b='); readln(b);
write('nhap c='); readln(c);
if (a>0) and (b>0) and (c>0) then
begin
if (a+b>c) and (a+c>b) and (b+c>a) then writeln('day la 3 canh trong mot tam giac')
else writeln('day khong la 3 canh trong mot tam giac');
end
else writeln('vui long nhap lai');
readln;
end.
Câu trả lời của bạn
Uses CRT;
Var a,b,c,D,x,x1,x2: real;
Begin
Clrscr;
Writeln('GIAI PHUONG TRINH BAC II: ');
Writeln('-------------------------------------------');
Write('Nhap he so a='); readln(a);
Write('Nhap he so b='); readln(b);
Write('Nhap he so c='); readln(c);
If a=0 then
If b=0 then
If c=0 then
Writeln('Phuong trinh co vo so nghiem')
Else Writeln('Phuong trinh vo nghiem')
Else Writeln('Phuong trinh co mot nghiem: x=',-c/b: 4: 2)
Else
Begin
D:=b*b-4*a*c;
If D=0 then Writeln('Phuong trinh co nghiem kep: x=',-b/(2*a): 4: 2)
Else
If D<0 then Writeln('Phuong trinh vo nghiem')
Else
Begin
x1:=(-b-sqrt(D))/(2*a);
x2:=(-b+sqrt(D))/(2*a);
Writeln('Phuong trinh co 2 nghiem la x1= ',x1:4:2 ,' va x2= ',x2:4:2);
End;
End;
Readln;
End.
Câu trả lời của bạn
Số lượng phần tử chia hết cho 3: 2
Tổng các phần tử chia hết cho 3 là 21+3=24
Câu trả lời của bạn
uses crt;
var a:array[1..100,1..100]of integer;
m,n,i,j,k,g,tam:integer;
begin
clrscr;
write('nhap so n='); readln(n);
write('nhap so m='); readln(m);
for i:=1 to n do
for j:=1 to m do
begin
write('a[',i,',',j,']='); readln(a[i,j]);
end;
{----------------------------------------------------------}
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;
{----------------------------------------------------------}
writeln('day tang dan cua ma tran la: ');
for i:=1 to n do
for j:=1 to m do
for k:=1 to n do
for g:=1 to m do
if a[i,j]<a[k,g] then begin
tam:=a[k,g];
a[k,g]:=a[i,j];
a[i,j]:=tam;
end;
writeln;
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;
{---------------------------------------------------------}
writeln('day giam dan cua ma tran la: ');
for i:=1 to n do
for j:=1 to m do
for k:=1 to n do
for g:=1 to m do
if a[i,j]>a[k,g] then begin
tam:=a[k,g];
a[k,g]:=a[i,j];
a[i,j]:=tam;
end;
writeln;
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;
readln;
Câu trả lời của bạn
uses crt;
var n,t,i,t1:integer;
begin
clrscr;
write('nhap n='); readln(n);
if (n>0) and (n<=50) then
begin
t:=0;
t1:=0;
for i:=1 to n do
begin
if i mod 2=1 then t:=t+i;
if (i mod 3=0) or (i mod 5=0) then t1:=t1+i;
end;
writeln('tong cac so le trong khoang tu 1 toi ',n,' la: ',t);
writeln('tong cac so chia het cho 3 hoac 5 trong khoang tu 1 toi ',n,' la: ',t1);
end
else writeln('vui long nhap lai');
readln;
end.
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 *