X

Giải bài tập Tin học lớp 11

Giải Tin học 11 Chương 3: Cấu trúc rẽ nhánh và lặp


Giải Tin học 11 Chương 3: Cấu trúc rẽ nhánh và lặp

Haylamdo biên soạn và sưu tầm lời giải Tin học 11 Chương 3: Cấu trúc rẽ nhánh và lặp hay, chi tiết được biên soạn bám sát nội dung sách giáo khoa Tin học lớp 11 giúp bạn dễ dàng trả lời câu hỏi từ đó đạt điểm cao trong các bài thi môn Tin học 11.

Giải Tin học 11 Chương 3: Cấu trúc rẽ nhánh và lặp

Tin học 11 Bài 9: Cấu trúc rẽ nhánh

1. Rẽ nhánh

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.

a) Dạng thiếu

      if<điều kiện> then <câu lệnh>;

b) Dạng đủ

      if<điều kiện> then <câu lệnh 1> else <câu lệnh 2>;

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
	<các câu lệnh>;
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:

ax2+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.

..............................................

..............................................

..............................................

Tin học 11 Bài 10: Cấu trúc lặp

1. Lặp

Với a là số nguyên và a>2, xét các bài toán sau đây:

Bài toán 1. Tính và đưa két quả ra màn hình tổng

Giải bài tập Tin học 11 | Để học tốt Tin học 11

Bài toán 2. Tính và đưa kết quả ra màn hình tổng.

Giải bài tập Tin học 11 | Để học tốt Tin học 11

Với cả hai bài toán, cách để tính tổng S có các điểm tương đồng .

   + Xuất phát, S được gán giá trị 1/a

   + Sau mỗi lần lặp giá trị tổng S được cộng thêm một giá trị 1/(a+N) N=1,2,3,..

Việc cộng này sẽ được lặp lại một số lần.

Đối với bài toán 1, số lần lặp sẽ là 100. Bài toán sẽ dừng sau khi thực hiện việc cộng 100 lần.

Đối với bài toán 2, số lần lặp sẽ chưa biết trước nhưng việc cộng vào sẽ kết thúc khi:

1/(a+N)<0.0001

Nói chung, trong một số thuật toán có những thoa tác phải lặp lại một số lần. Một trong các đặc trưng của máy tính là có khả năng thực hiện hiệu quả các thao tác lặp. Cấu trúc lặp mô tả thao tác lặp và có 2 dạng là :

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

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

2. Lặp với số lần biết trước và câu lệnh for-do.

Có 2 thuật toán để giải bài toán 1 như sau:

Cách 1:

Bước 1: Gán cho S:=1/a ; gán cho N=0;

Bước 2: Tăng giá trị N lên 1. N:=N+1;

Bước 3: Nếu N > 100 thì chuyển đến bước 5;

Bước 4: S:=S+1/(a+N); quay lại bước 2 (Thao tác lặp ở đây).

Bước 5: Đưa S ra màn hình rồi kết thúc.

Cách 2:

Bước 1: Gán cho S:=1/a ; gán cho N=101;

Bước 2: Giảm giá trị N xuống 1. N:=N-1;

Bước 3: Nếu N<1 thì chuyển đến bước 5;

Bước 4: S:=S+1/(a+N); quay lại bước 2 (Thao tác lặp ở đây).

Bước 5: Đưa S ra màn hình rồi kết thúc.

Ở cách 1 ta thực hiện cộng xuôi:

Giải bài tập Tin học 11 | Để học tốt Tin học 11

Dù cách nào thì cũng vẫn phải lặp 100 lần.

Trong Pascal câu lệnh dùng để mô tả lặp với số lần biết trước là câu lệnh lặp for-do với hai dạng tiến và lùi.

-Dạng tiến:

      for<biến đếm>:=<giá trị đầu> to<giá trị cuối> do <câu lệnh>;

-Dạng lùi:

      for<biến đếm>:=<giá trị cuối> downto<giá trị đầu> do <câu lệnh>;

Trong đó:

- Biến đếm: Là biến đơn, thường có kiểu nguyên.

- Giá trị đầu, Giá trị cuối: là các biểu thức cùng kiểu với biến đếm và giá trị đầu phải nhỏ hơn hoặc bằng giá trị cuối. Nếu giá trị đầu lớn hơn giá trị cuối thì vòng lặp không thực hiện.

Cơ chế hoạt động của câu lệnh for-do:

- Ở dạng lặp tiến, câu lệnh viết sau từ khóa do được thực hiện tuần tự, mỗi lần thực hiện thì biến đếm nhận giá trị tăng liên tiếp từ giá trị đầu đến giá trị cuối.

- Ở dạng lặp lùi, câu lệnh viết sau từ khóa do được thực hiện tuần tự, mỗi lần thực hiện thì biến đếm nhận giá trị giảm liên tiếp từ giá trị đầu đến giá trị cuối.

Ví dụ:

Chương trình tính bài toán 1 dưới dạng tiến.

	program Tongtien;
uses crt;
var S:real;
    a,n: integer;
begin
	clrscr;
	writeln('hay nhap gia tri cua a ');
	readln(a);
	S:=1.0/a;
	for N:=1 to 100 do
	S:=S+1.0/(a+N);
	writeln('Tong S la:',S:8:4);
	readln;
end.
 
Giải bài tập Tin học 11 | Để học tốt Tin học 11

Chương trình tính bài toán 1 dưới dạng lùi.

program Tonglui;
uses crt;
var S:real;
    a,n: integer;
begin
	clrscr;
	writeln('hay nhap gia tri cua a ');
	readln(a);
	S:=1.0/a;
	for N:=100 downto 1 do
	S:=S+1/(a+N);
	writeln('Tinh tong lui-Tong S la:',S:8:4);
	readln;
end.

Kết quả:

Giải bài tập Tin học 11 | Để học tốt Tin học 11

Ví dụ 2: Viết chương tình thực hiện việc nhập từ bàn phím hai số nguyên dương M và N (M<N), tính và đưa ra màn hình tổng các số chia hết cho 3 hoặc cho 5 trong phạm vi từ M đến N.

Phân tích: Thực hiện việc lặp tiến hoặc lùi trong khoảng M và N. Giả sử ta có biến đếm I sẽ nhận giá trị lần lượt từ M đến N (trong đếm tiến) và từ N giảm dần về M (trong đếm lùi). Với mỗi giá trị của I ta sẽ kiểm tra nếu I chia hết cho 3 hoặc I chia hết cho 5 thì ta sẽ cộng nó vào tổng (Tổng ban đầu được gán là 0). Cuối cùng ta in ra tổng rồi kết thúc bài toán.

Code:

program tongchiahet3va5;
uses crt;
var S:integer;
    M,N,i: integer;
begin
	clrscr;
	writeln('hay nhap gia tri cua M va N ');
	readln(M,N);
	S:=0;
	for i:=M to N do
	if(i mod 3=0) or (i mod 5=0)
	then
	S:=S+i;
	writeln('Tong cua cac so chia het cho 3 hoac 5 trong doan M N la ',S);
	readln;
end.

Kết quả:

Giải bài tập Tin học 11 | Để học tốt Tin học 11

3. Lặp với số lần chưa biết.

Sử dụng phương pháp lặp với số lần chưa biết ta có thể xây dựng cách giải bài toán 2 như sau:

Bước 1: S:=1/a; N:=0;

Bước 2: Nếu 1/(a+N)<0.0001 thì chuyển đến bước 5;

Bước 3: Tăng giá trị N lên 1. N:=N+1;

Bước 4: S:=S+1/(a+N); rồi quay lại bước 2.

Bước 5: Đưa S ra màn hình rồi kết thúc.

Như vậy việc lặp không biết trước sẽ chỉ kết thúc khi mọt điều kiện cho trước không được thỏa mãn.

Trong Pascal mô tả cấu trúc lặp với số lần chưa biết trước như sau:

While<điều kiện> do<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 đơn hoặc ghép.

Chương trình tính bai toán 2:

program baitoan2;
uses crt;
var S:integer;
    a,N: integer;
begin
	clrscr;
	writeln('hay nhap gia tri cua a ');
	readln(a);
	S:=0;
	S:=S+1.0/a;
	N:=0;
	while not (1/(a+N)<0.0001) do
	begin
	N:=N+1;
	S:=S+1.0/(a+N);
	end; 
	writeln('Tong S la ',S:8:4);
	readln;
end.

Kết quả:

Giải bài tập Tin học 11 | Để học tốt Tin học 11

Ví dụ 2: Tìm ước chung lớn nhất của hai số nguyên dương M và N.

Có nhiều giải thuật tìm ước chung lớn nhất của 2 số. Sau đây là một thuật toán.

Bước 1: Nhập M,N;

Bước 2: Nếu M=N thì lấy giá trị chung này làm ước chung lớn nhất rối chuyển đến bước 5.

Bước 3: Nếu M>N thì M:=M-N ngược lại N:=N-M;

Bước 4: Quay lại bước 2.

Bước 5: Đưa ra kết quả ước chung lớn nhất rồi kết thúc.

Chương trình:

program ucln;
uses crt;
var M,N:integer;
begin
	clrscr;
	writeln('Nhap gia tri M va N :');
	readln(M,N);
	while M<>N do
	if M>N
	then
	M:=M-N
	else
	N:=N-M;
	writeln('uoc chung lon nhat la ',M);
	readln;
end.

..............................................

..............................................

..............................................

Xem thêm các bài giải bài tập sgk Tin học 11 hay khác: