Nội dung bài học Bài 10: Cấu trúc lặp dưới đây nhằm giúp các em hiểu được nhu cầu của cấu trúc lặp trong biểu diễn thuật toán và biết cách sử dụng cấu trúc lặp với số lần biết trước bằng câu lệnh for … do … .Mời các em cùng theo dõi nội dung chi tiết của bài học.
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
\(S= \frac{1}{a}+\frac{1}{a+1}+\frac{1}{a+2}+...+\frac{1}{a+100}\)
Bài toán 2. Tính và đưa kết quả ra màn hình tổng
\(S= \frac{1}{a}+\frac{1}{a+1}+\frac{1}{a+2}+...+\frac{1}{a+N}+...\)
cho đến khi \(\frac{1}{a+N}< 0,0001.\)
Nhận xét:
Tóm lại:
Có hai thuật toán Tong_1a và Tong_1b để giải bài toán 1 như sau:
Thuật toán Tong_1a:
Thuật toán Tong_1b:
Một số lưu ý:
Để mô tả cấu trúc lặp với số lần biết trước, Pascal dùng câu lệnh for-do với hai dạng tiến và lùi như sau:
for < biến đếm > := < giá trị đầu > to < giá trị cuối > do < câu lệnh >;
for < biến đếm > := < giá trị cuối > downto < giá trị đầu > do < câu lệnh >;
Trong đó:
Chú ý 1: Giá trị của biến đếm được điều chỉnh tự động, vì vậy câu lệnh viết sau do không được thay đổi giá trị biến đếm.
Ví dụ 1. Sau đây là hai chương trình cài đặt các thuật toán Tong_1a và Tong_1b.
Chương trình cài đặt thuật toán Tong_1a:
program Tong_1a;
uses crt;
var S: real;
a, N: integer;
begin
clrscr;
write('Hay nhap gia tri a vao!');
readln(a);
S:=1.0/a; {Buoc 1}
for N:= 1 to 100 do Buoc 2, Buoc 3}
S:= S+1.0/(a+N); {Buoc 4}
writeln('Tong S la: ', S:8:4); {Buoc 5}
readln
end.
Chương trình cài đặt thuật toán Tong_1b:
program Tong_1b;
uses crt;
var S: real;
a, N: integer;
begin
clrscr;
write ('Hay nhap gia tri a vao!');
readln(a);
S:=1.0/a; {Buoc 1}
for N:= 100 downto 1 do {Buoc 2 va Buoc 3}
S:= S+1.0/(a+N); {Buoc 4}
writeln('Tong S la: ', S:8:4); {Buoc 5}
readln
end.
Ví dụ 2. Chương trình sau 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 5 trong phạm vi từ M đến N.
Chương trình cài đặt:
program Vi_du_2;
uses crt;
var M, N, I: integer;
T: longint;
begin
clrscr;
writeln('Nhap so M nho hon N');
write('M = '); readln(M);
write('N = '); readln(N);
T:= 0;
for I:= M to N do
if(I mod 3 = 0) or (I mod 5 = 0) then
T:=T+I;
writeln('KET QUA: ', T);
readln
end.
Thuật toán Tong_2:
Như vậy, việc lặp với số lần chưa biết trước sẽ chỉ kết thúc khi một điều kiện cho trước được thoả mãn.
Để mô tả cấu trúc lặp như vậy, Pascal dùng câu lệnh while-do có dạng:
while < điều kiện > do < câu lệnh >;
Trong đó:
Việc thực hiện lệnh while-do được thể hiện trên sơ đồ ở hình 1 dưới đây:
Hình 1. Sơ đồ lặp với số lần lặp chưa biết trước
Ví dụ 3. Sau đây là chương trình cài đặt thuật toán Tong_2.
Hình 2. Sơ đồ khối của thuật toán Tong_2
program Tong_2;
uses crt;
var S: real;
a, N: integer;
begin
write ('Hay nhap gia tri a vao!');
readln(a);
S:= 1.0/a; N:= 0; {Buoc 1}
while not (1/(a+N)<0.0001) do {Buoc 2}
begin
N:= N+1; {Buoc 3}
S:= S+1.0/(a+N); {Buoc 4}
end;
writeln('Tong S la: ', S: 8: 4); {Buoc 5}
readln
end.
Ví dụ 4. Tìm ước chung lớn nhất (UCLN) của hai số nguyên dương M và N.
Thuật toán tìm ước chung lớn nhất:
Hình 3. Sơ đồ khối của thuật toán tìm ước chung lớn nhất
Chương trình sau thể hiện thuật toán tìm ước chung lớn nhất:
program UCLN;
uses crt;
var M,N:integer;
begin
clrscr;
write('M, N = ');
readln(M,N);
while M <> N do
if M > N then M:= M-N else N:= N-M;
writeln('UCLN = ', M);
readln
end.
Chú ý 2: Các câu lệnh trong vòng lặp thường được lặp lại nhiều lần, vì vậy để tăng hiệu quả của chương trình thì những thao tác không cần lặp lại nên đưa ra ngoài vòng lặp.
Sau khi học xong Bài 10: Cấu trúc lặp, các em cần nắm vững các nội dung trọng tâm:
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 10 cực hay có đáp án và lời giải chi tiết.
Chọn phát biểu sai trong các phát biểu sau đây:
Em hãy chọn phát biểu đúng trong các phát biểu sau đây:
Cho hai dạng lặp FOR – DO trong PASCAL như sau:
Dạng lặp tiến:
FOR < biến đếm > := < giá trị đầu > TO < giá trị cuối > DO < câu lệnh >;
Dạng lặp lùi:
FOR < biến đếm > := < giá trị cuối > DOWNTO < giá trị đầu > DO < câu lệnh >;
Chọn phát biểu sai trong các phát biểu đưới dây:
Câu 4-10: 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
Chọn phát biểu sai trong các phát biểu sau đây:
Em hãy chọn phát biểu đúng trong các phát biểu sau đây:
Cho hai dạng lặp FOR – DO trong PASCAL như sau:
Dạng lặp tiến:
FOR < biến đếm > := < giá trị đầu > TO < giá trị cuối > DO < câu lệnh >;
Dạng lặp lùi:
FOR < biến đếm > := < giá trị cuối > DOWNTO < giá trị đầu > DO < câu lệnh >;
Chọn phát biểu sai trong các phát biểu đưới dây:
Trong ngôn ngữ lập trình Pascal, về mặc cú pháp câu lệnh nào sau đây là đúng với cấu trúc lặp For có một lệnh con?
Trong ngôn ngữ lập trình Pascal, về mặc cú pháp câu lệnh nào sau đây là đúng với cấu trúc lặp For có một lệnh con?
Trong ngôn ngữ lập trình Pascal, về mặt cú pháp câu lệnh nào sau đây là đúng với cấu trúc lặp For có nhiều lệnh con?
Begin
a := a – 1 ;
b := a – c ;
End;
Vòng lặp While – do kết thúc khi nào
Mọi quá trình tính toán đều có thể mô tả và thực hiện dựa trên cấu trúc cơ bản là:
Tính tống S = 1 + 2 + 3 + … + n + … cho đến khi S>108. Điều kiện nào sau đây cho vòng lặp while – do là đúng:
Cú pháp lệnh lặp For – do dạng lùi:
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
Câu trả lời của bạn
uses crt;
var i,n,m,k,d:integer;
{---------------chuong-trinh-con-tim-ucln--------------------}
function ucln(x,y:integer):integer;
var t:integer;
begin
while y<>0 do
begin
t:=x mod y;
x:=y;
y:=t;
end;
ucln:=x;
end;
{------------chuong-trinh-con-kiem-tra-so-nguyen-to-------------------}
function nt(b:longint):boolean;
var j:longint;
begin
nt:=true;
if (b=2) or (b=3) then exit;
nt:=false;
if (b=1) or (b mod 2=0) or (b mod 3=0) then exit;
j:=5;
while j<=trunc(sqrt(b)) do
begin
if (b mod j=0) or (b mod (j+2)=0) then exit;
j:=j+6;
end;
nt:=true;
end;
{---------------chuong-trinh-chinh---------------------}
begin
clrscr;
write('Nhap N: '); readln(N);
write('Nhap M: '); readln(M);
d:=0;
k:=ucln(N,M);
for i:=1 to k do
if nt(i) then d:=d+1;
if d>0 then writeln('2 so nay tuong duong voi nhau')
else writeln('2 so nay khong tuong duong voi nhau');
readln;
end.
Câu trả lời của bạn
uses crt;
var i,j:integer;
begin
clrscr;
for i:=2 to 9 do
begin
for j:=1 to 10 do
writeln(i,'*',j,'=',i*j);
end;
readln;
end.
Câu trả lời của bạn
Program Hoc24;
Var i: integer;
s: longint;
begin
s:=0;
for i:=1 to 100 do if i mod 2=1 then s:=s+i;
writeln('S=',s);
readln
end.
Câu trả lời của bạn
Program i: integer;
s: longint;
Begin
s:=0;
for i:=1 to 99 do s:=s + i*(i+1);
write('S=',s);
readln
end.
Câu trả lời của bạn
2 bài toán có dùng cấu trúc lặp:
-Xuất 20 số bắt đầu từ số 1
-Tính tổng 10 số bắt đầu từ số 1
Thuật toán
-Tính tổng 10 số bắt đầu từ số 1
+Bước 1: t←0; a←1; i←1;
+Bước 2: t←t+a;
+Bước 3: a←a+1;
+Bước 4: i←i+1;
+Bước 5: Nếu i<=10 thì quay lại bước 2
+Bước 6: Xuất t
+Bước 7: Kết thúc
Câu trả lời của bạn
uses crt;
var i,n:longint;
s:real;
begin
clrscr;
write('Nhap n='); readln(n);
s:=0;
for i:=1 to n do
s:=s+sqr(i);
writeln(s:0:0);
readln;
end.
Câu trả lời của bạn
uses crt;
var n,i:longint;
s:real;
{------------ham-tinh-giai-thua---------------------}
function gthua(x:longint):real;
var i:longint;
gt:real;
begin
gt:=1;
for i:=1 to x do
gt:=gt*i;
gthua:=gt;
end;
{------------chuong-trinh-chinh------------------}
begin
clrscr;
write('Nhap n='); readln(n);
s:=0;
for i:=1 to n do
s:=s+gthua(i);
writeln(s:0:0);
readln;
end.
Câu trả lời của bạn
uses crt;
var n,i,t,x,y,d:integer;
st:string;
begin
clrscr;
write('Nhap n='); readln(n);
str(n,st);
d:=length(st);
t:=0;
for i:=1 to d do
begin
val(st[i],x,y);
t:=t+x;
end;
writeln('Tong cac chu so cua ',n,' la: ',t);
readln;
end.
Câu trả lời của bạn
uses crt;
var a:array[1..100]of integer;
i,n,j,dem,k:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
write('Nhap k='); readln(k);
dem:=0;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]+a[j]=k then inc(dem);
writeln(dem);
readln;
end.
1+ \(\dfrac{1}{2}\)+\(\dfrac{1}{3}\)+...+\(\dfrac{1}{N}\) >a
Biết a được nhập từ bàn phím.
Câu trả lời của bạn
uses crt;
var s:real;
a,n:integer;
begin
clrscr;
write('Nhap a='); readln(a);
n:=0;
s:=0;
while s<=a do
begin
n:=n+1;
s:=s+1/n;
end;
writeln(n);
readln;
end.
Câu trả lời của bạn
uses crt;
var i:integer;
begin
clrscr;
for i:=0 to 9999 do
if trunc(sqrt(i))=sqrt(i) then write(i:4);
readln;
end.
Câu trả lời của bạn
Program HOC24;
var n,i: integer;
begin
write('Nhap so nguyen: '); readln(n);
for i:=1 to 10 do
writeln(n,' x ',i,' = ',n*i);
readln
end.
Câu trả lời của bạn
Câu lệnh ghép là một câu lệnh được hợp thành từ nhiều câu lệnh thành phần (đơn hoặc kép). Câu lệnh ghép nhằm thực hiện thao tác gồm nhiều thao tác thành phần. Mỗi thao tác thành phần tương ứng với một câu lệnh đơn hoặc câu lệnh ghép khác. Về mặt ngôn ngữ lập trình, câu lệnh ghép là một trong các yếu tố để tạo khả năng chương trình có cấu trúc.
Câu lệnh ghép trong Pascal.
Begin
<các câu lệnh>
End;
Câu trả lời của bạn
Có thể thay thế đoạn chương trình chứa câu lệnh for-đo (dạng lặp tiến) for <biến đếm>:= <giá trị đầu> to <giá trị cuối> do <câu lệnh>;
bằng đoạn chương trình chứa câu lệnh while-do như sau:
i:= <giá trị đầu>;
while <i< = <giá trị cuối> do
begin
<câu lệnh>;
<tăng i một đơn vị>,
end;
Như vậy, chương trình tính Tong_la viết bằng lệnh for-do
program Tong__la;
uses crt;
var S:real,
a, N: integer;
begin
clrscr;
write('Hay nhap gia tri a vao!'); 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.
được viết lại bằng lệnh while-do như sau:
Program Tong_la;
uses crt;
var S:real;
a, N: integer;
Begin
clrscr;
write('Hay nhap gia tri a vao!'); readln(a);
S:= 1.0/a;
N:= 1;
while N<=100 do
begin
S:= s + 1.0/(a+N);
N:= N + 1;
end;
writeln('Tong s la:', S:8:4);
readln;
End.
Câu trả lời của bạn
Câu lệnh rẽ nhánh như sau:
a)
If (sqr(x)+sqr(y))<=1 Then z:=sqr(x)+sqr(y)
else if y>=x then z:=x+y
else z:=0.5;
b)
If sqr(x-a)+sqr(y-b)<=sqr(r) Then z:=abs(x)+abs(y)
Else z:=x+y;
b) \(e\left(n\right)=1+\frac{1}{1!}+\frac{1}{2!}+...+\frac{1}{n!}\)1+..., cho đến khi \(\frac{1}{n!}\)<2x10-6
Đưa giá trị e(n) ra màn hình
Câu trả lời của bạn
a)
program Tong_5a;
uses crt;
var y: real;
n: byte;
Begin
clrscr
y:=0;
for n :=1 to 50 do
y:=y + n / ( n +1 ) ;
writeln('Tong y la: y:0:18);
readln;
End.
Nếu biến y khai báo theo kiểu extended thì chương trình tính tổng y sẽ là như sau:
($e+, N+}
program Tong_5a;
uses crt;
var y:real;
n:byte;
Begin
clrscr;
y:= 0;
for n:= 1 to 50 do
y:= y + n/(n+1);
writeln('Tong y la:', y:0:18);
readln;
End.
b)
program Tong_5b;
uses crt;
var n:longint;
e, sh:real;
Begin
clrscr;
sh:=1/2;
n:= 2;
e:= 2 + sh;
while sh>= 2*1E-16 do
begin
inc(n);
sh:=sh*(1/n);
e:= e + sh;
end;
writeln('Gia tri e(n)la: ',e:10:6);
readln;
End.
S= -1/3*1 + 1/3*2 + -1/3*3 + .... 1/3*10
Câu trả lời của bạn
Program hotrotinhoc;
var n,i: integer;
s: real;
begin
s:=0;
n:=0;
while n<10 do
begin
n:=n+1;
if n mod 2=1 then s:=s-(1/3*n) else s:=s+(1/3*n);
end;
write(s:1:2);
readln
end.
Câu trả lời của bạn
uses crt;
var i,n,dem:integer;
begin
clrscr;
write('nhap n='); readln(n);
dem:=0;
for i:=1 to n do
if i mod 2=1 then inc(dem);
writeln('So so le trong khoang tu 1 toi ',n,' la: ',dem);
readln;
end.
Câu trả lời của bạn
Program DapAnHay;
var a,b,i,t: integer;
function ucln(x,y: integer): integer;
var tg:integer;
begin
while y<>0 do
begin
tg:=x mod y;
x:=y;
y:=tg;
end;
ucln:=x;
end;
begin
write('Nhap a : '); readln(a);
write('Nhap b : '); readln(b);
t:=0;
for i:=1 to ucln(a,b) do
if ucln(a,b) mod i=0 then t:=t+i;
write(t);
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 *