Bài10:vòng_lặp_trong_Pascal_THPT-NguyenHue-11a1-Q9-Tphcm
Chia sẻ bởi Lê Thanh Tùng |
Ngày 10/05/2019 |
51
Chia sẻ tài liệu: bài10:vòng_lặp_trong_Pascal_THPT-NguyenHue-11a1-Q9-Tphcm thuộc Tin học 11
Nội dung tài liệu:
Vòng lặp trong Pascal
1: Các khái niệm
- lặp:là thực hiện 1 công việc nhiều lần
Vậy trong đây cần xác định rõ hai yếu tố
+công việc gì?
+nhiều lần là mấy lần, khi nào thì dừng.
lặp với số lần chưa biết là thực hiện đến 1 giai đoạn nào đó thì dừng chứ chưa biết là bao nhiêu lần. Ngược lại nếu đã biết được số lần làm là lặp với số lân biết trước.
I: Lý thuyết chung.
-cấu trúc lặp: trong Pascal có hai cách thể hiện cho việc lặp lại đó là
+for-do: lặp với số lần biết trước.
+while-do và repeat-until: lặp với số lần chưa biết.
-chặn dừng: đối với
+for-do: là số lần lặp lại
+while-do và repeat-until: là điều kiện dừng lại
Vd:
+ đi 100 bước thì dừng?chặn dừng là 100.
+ đi đến kia thì dừng? chặn dừng là chỗ kia
I: Lý thuyết chung.
I: Lý thuyết chung.
2:cấu trúc for-do
(lặp với số lần biết trước)
-công thức:
For:= to do
For:= downto do
-cần xác định:
+công việc lặp lại.
+giá trị đầu, giá trị cuối.
+kiểu biến đếm
VD1: xét bài toán: tính tổng của các số chẵn trong khoảng từ 1 đến n với n nhập từ bàn phÍm (1<=n<=1000);
VD1: xét bài toán: tính tổng của các số chẵn trong khỏang từ 1 đến n với n nhập từ bàn phím (1<=n<=1000);
+công việc: tính tổng của các số chẵn
?phải làm 2 công việc:
+kiểm tra xem nó có phải số chẵn không
+nếu là số chẵn thì tính tổng của chúng
+giá trị đầu: 1; giá trị cuối: n (1<=n<=1000)
?số lần lặp không quá 1000
?kiểu biến đếm là số nguyên(integer,longint.)
Lưu ý:biến đếm thường là hai kiểu sau: số nguyên và kiểu ký tự (char). Theo kinh nghiệm của mình kiểu của biến đếm sẽ cùng kiểu với giá trị đầu (cuối).
Var I,n:integer;tong:longint;
Begin
Tong:=0;
Writeln(`nhap n`);
Readln(n);
For i:=1 to n do
if I mod 2=0 then {kiểm tra số chẵn}
tong:=tong+I; {tính tổng}
Writeln(`tong can tim `,tong);
Readln
End.
Lưu ý:
+số a chia hết cho b được Pascal thể hiện là
a mod b=0?chia hết cho 2 là mod2=0
+tinh tổng lần lượt
.i=1?sai, không làm
.i=2?đúng, tong:=0+2;
.i=3?sai, không làm
.i=4?đúng, tong:=2+4;
....................
?vậy tổng lần thứ k thì= tổng lần thứ k-1 cộng thêm với I
+tại sao phải gán tong:=0 ngay từ đầu chương trình?
Vì nếu xét tổng đầu tiên, ta có tổng đầu tiên=tổng nào cộng cho nó ?chính là tong được gán =0
?tổng đầu là 0, tích đầu là 1
-for-downto gần giống for-to-do nhưng nó đi ngược lại từ lớn đến nhỏ, nghĩa là biến đếm sẽ giảm dần.
3:lưu ý chung
-không thay đổi giá trị biến đếm khi vòng lặp đang chạy.
-"to"; từ nhỏ đến lớn.
-"downto":từ lớn đến nhỏ.
-hoạt động của vòng lặp là hoạt động tuần tự, có thể làm ngoài nháp để thử kết quả (xem lại VD1)
4:cấu trúc while-do hay repeat_until
a: while-do
-công thức:
While <điều kiện> do
-ý nghĩa: trong khi điều kiện đúng thì làm.
?làm gì???
*điều quan trọng nhất của dạng lặp không biết trước số lần lặp này là tính dừng?nghĩa là điều kiện phải bị vi phạm.
Xét lại VD1 nhưng viết bằng While-do
4:cấu trúc while-do hay repeat-until
a: while-do
-lưu đồ của While-do
Điều kiện
Công việc
End.
true
False
Nếu Đk đúng thì cứ tiếp tục, sai thì thoát khỏi vòng lặp
VD1: xét bài toán: tính tổng của các số chẵn trong khoãng từ 1 đến n với n nhập từ bàn phim (1<=n<=1000);
Var n,i:integer;tong:longint;
Begin
Writeln(`nhap n`);
Readln(n);
k:=0;
While ( k<>n)and(k<>n+1) do
begin
tong:=tong+k;
inc(k,2); {tăng k lên 2 đơn vi ?k:=k+2}
end;
Writeln(`tong can tim `,tong);
Readln;
End.
Tại sao điều kiện lại là như vậy?
inc(k,2):tăng k lên 2 đơn vị thì k sẽ là 0,2,4,6,8..?không cần kiểm tra số chẵn
-xét điều kiện:
+nếu n chẵn (vd n=10) thì sau 5 lần k=n vòng lặp sẽ dừng
+nếu n lẻ (vd n=11) thì k=0,2,4,6,8,10,12 sẽ không bao giờ là 11 ?không bao giờ dừng nên phải xét k=n+1
Có 2 TH: n=k hay n=k+1 thì vòng lặp dừng.
? Trong khi (n<>k)and(k<>n+1) thì làm
ĐKiện tùy từng bài nhưng phải ước lượng các TH xảy ra nếu không chương trình sẽ "treo" ?đảm bảo tính dừng
b:repeat-until
-công thức:
repeat until <điều kiện>
-ý nghĩa: khi nào thì dừng.
*điều quan trọng nhất của dạng lặp không biết trước số lần lặp này là tính dừng?nghĩa là điều kiện ở đây phải xảy ra
Xét lại VD1 nhưng viết bằng repeat-until
4:cấu trúc while-do hay repeat-until
b: repeat-until
-lưu đồ của While-do
Điều kiện
Công việc
End.
true
False
Làm việc trước rồi mới so sánh điền kiện nếu sai thí tiếp tục đúng thì dừng
Trở lại từ đầu
VD1: xét bài toán: tính tổng của các số chẵn trong khoãng từ 1 đến n với n nhập từ bàn phim (1<=n<=1000);
Var n,i:integer;tong:longint;
Begin
Writeln(`nhap n`);
Readln(n);
k:=0;
repeat
tong:=tong+k;
inc(k,2);
unitl (k=n)or(k=n+1)
Writeln(`tong can tim `,tong);
Readln;
End.
Tại sao điều kiện lại là như vậy?
inc(k,2):tăng k lên 2 đơn vị thì k sẽ là 0,2,4,6,8..?không cần kiểm tra số chẵn
-xét điều kiện:
+nếu n chẵn (vd n=10) thì sau 5 lần k=n vòng lặp sẽ dừng
+nếu n lẻ (vd n=11) thì k=0,2,4,6,8,10,12 sẽ không bao giờ là 11 nên phải xét k=n+1
Có 2 TH: n=k hay n=k+1 thì vòng lặp dừng.
đảm bảo tính dừng
so sánh repeat-until và While-do
II: Bài tập.
BT5/sgk-tr51.
Xác định:
-biết số lần thực hiện (50)?for-do
-Công viêc tính;
?k:=k+i/(i+1);
-kiểu biến đếm: integer;
Chương trinh mẫu ???
Var k:integer;n:real;
Begin
n:=0;
For k:=1 to 50 do
n:=n+k/(k+1);
Writeln(`gia tri can tinh`,n:7:2);
Readln
End.
BT8/sgk-tr51;
Var a,b,tien:real;I,k:integer;
Begin
Writeln(`nhap so tien gui va tien B`);
Readln(a,b);
Tien:=0;k:=0;
Repeat
tien:=tien+a*0.3;
Inc(K);
until (tien>=b)
Writeln(`so thang co the lay tien gui ra la`,k);
End.
Bài tập:
1: tính N! với N nhập từ bàn phím (N nguyên và không quá 11)
2: tìm ước chung lớn nhất, bội chung nhỏ nhất của 2 số a,b không âm nhập từ bàn phím (a,b, nguyên)
3: tìm max, min của n số nhập từ bàn phím (số nhập đầu tiên cho biết số các số tìm max?có n+1 dòng nhập)
4: số nguyên tố là số chỉ có 2 ước số là 1 và chính nó. Nhưng trong các bài toán tin học người ta đã chứng minh được rằng số nguyên tố là số không chia hết cho các số nguyên trong khoảng từ 2?căn bậc hai của nó. Ví dụ 7 là số nguyên tố vì 7 không chia hết 2,3 (căn 7=2.6).viết chương trình kiểm tra xem số N nhập từ bàn phím có phải sô nguyên tố không.
(các ví dụ xem sau phần bài tập)
Bài tập:
5: tính kết quả của phép toán với n nhập từ bàn phím(N<100)
6:viết chương trình in ra màn hình bảng cửu chương.
7:viết chương trình tính tổng, tích của các số nguyên trong khoảng m,n nhập từ bàn phím (08:tính tổng các số chính phương trong khoảng từ 1 đến N với n nhập từ bàn phím ( số chính phương là số có căn là số nguyên)
9:xuất ra màn hình giống như hình chữ nhật sau với n,m nhập từ bàn phím lần lượt là chiều dài chiều rộng của nó (0II: Bài tập.
1: Các khái niệm
- lặp:là thực hiện 1 công việc nhiều lần
Vậy trong đây cần xác định rõ hai yếu tố
+công việc gì?
+nhiều lần là mấy lần, khi nào thì dừng.
lặp với số lần chưa biết là thực hiện đến 1 giai đoạn nào đó thì dừng chứ chưa biết là bao nhiêu lần. Ngược lại nếu đã biết được số lần làm là lặp với số lân biết trước.
I: Lý thuyết chung.
-cấu trúc lặp: trong Pascal có hai cách thể hiện cho việc lặp lại đó là
+for-do: lặp với số lần biết trước.
+while-do và repeat-until: lặp với số lần chưa biết.
-chặn dừng: đối với
+for-do: là số lần lặp lại
+while-do và repeat-until: là điều kiện dừng lại
Vd:
+ đi 100 bước thì dừng?chặn dừng là 100.
+ đi đến kia thì dừng? chặn dừng là chỗ kia
I: Lý thuyết chung.
I: Lý thuyết chung.
2:cấu trúc for-do
(lặp với số lần biết trước)
-công thức:
For
For
-cần xác định:
+công việc lặp lại.
+giá trị đầu, giá trị cuối.
+kiểu biến đếm
VD1: xét bài toán: tính tổng của các số chẵn trong khoảng từ 1 đến n với n nhập từ bàn phÍm (1<=n<=1000);
VD1: xét bài toán: tính tổng của các số chẵn trong khỏang từ 1 đến n với n nhập từ bàn phím (1<=n<=1000);
+công việc: tính tổng của các số chẵn
?phải làm 2 công việc:
+kiểm tra xem nó có phải số chẵn không
+nếu là số chẵn thì tính tổng của chúng
+giá trị đầu: 1; giá trị cuối: n (1<=n<=1000)
?số lần lặp không quá 1000
?kiểu biến đếm là số nguyên(integer,longint.)
Lưu ý:biến đếm thường là hai kiểu sau: số nguyên và kiểu ký tự (char). Theo kinh nghiệm của mình kiểu của biến đếm sẽ cùng kiểu với giá trị đầu (cuối).
Var I,n:integer;tong:longint;
Begin
Tong:=0;
Writeln(`nhap n`);
Readln(n);
For i:=1 to n do
if I mod 2=0 then {kiểm tra số chẵn}
tong:=tong+I; {tính tổng}
Writeln(`tong can tim `,tong);
Readln
End.
Lưu ý:
+số a chia hết cho b được Pascal thể hiện là
a mod b=0?chia hết cho 2 là mod2=0
+tinh tổng lần lượt
.i=1?sai, không làm
.i=2?đúng, tong:=0+2;
.i=3?sai, không làm
.i=4?đúng, tong:=2+4;
....................
?vậy tổng lần thứ k thì= tổng lần thứ k-1 cộng thêm với I
+tại sao phải gán tong:=0 ngay từ đầu chương trình?
Vì nếu xét tổng đầu tiên, ta có tổng đầu tiên=tổng nào cộng cho nó ?chính là tong được gán =0
?tổng đầu là 0, tích đầu là 1
-for-downto gần giống for-to-do nhưng nó đi ngược lại từ lớn đến nhỏ, nghĩa là biến đếm sẽ giảm dần.
3:lưu ý chung
-không thay đổi giá trị biến đếm khi vòng lặp đang chạy.
-"to"; từ nhỏ đến lớn.
-"downto":từ lớn đến nhỏ.
-hoạt động của vòng lặp là hoạt động tuần tự, có thể làm ngoài nháp để thử kết quả (xem lại VD1)
4:cấu trúc while-do hay repeat_until
a: while-do
-công thức:
While <điều kiện> do
-ý nghĩa: trong khi điều kiện đúng thì làm.
?làm gì???
*điều quan trọng nhất của dạng lặp không biết trước số lần lặp này là tính dừng?nghĩa là điều kiện phải bị vi phạm.
Xét lại VD1 nhưng viết bằng While-do
4:cấu trúc while-do hay repeat-until
a: while-do
-lưu đồ của While-do
Điều kiện
Công việc
End.
true
False
Nếu Đk đúng thì cứ tiếp tục, sai thì thoát khỏi vòng lặp
VD1: xét bài toán: tính tổng của các số chẵn trong khoãng từ 1 đến n với n nhập từ bàn phim (1<=n<=1000);
Var n,i:integer;tong:longint;
Begin
Writeln(`nhap n`);
Readln(n);
k:=0;
While ( k<>n)and(k<>n+1) do
begin
tong:=tong+k;
inc(k,2); {tăng k lên 2 đơn vi ?k:=k+2}
end;
Writeln(`tong can tim `,tong);
Readln;
End.
Tại sao điều kiện lại là như vậy?
inc(k,2):tăng k lên 2 đơn vị thì k sẽ là 0,2,4,6,8..?không cần kiểm tra số chẵn
-xét điều kiện:
+nếu n chẵn (vd n=10) thì sau 5 lần k=n vòng lặp sẽ dừng
+nếu n lẻ (vd n=11) thì k=0,2,4,6,8,10,12 sẽ không bao giờ là 11 ?không bao giờ dừng nên phải xét k=n+1
Có 2 TH: n=k hay n=k+1 thì vòng lặp dừng.
? Trong khi (n<>k)and(k<>n+1) thì làm
ĐKiện tùy từng bài nhưng phải ước lượng các TH xảy ra nếu không chương trình sẽ "treo" ?đảm bảo tính dừng
b:repeat-until
-công thức:
repeat
-ý nghĩa: khi nào thì dừng.
*điều quan trọng nhất của dạng lặp không biết trước số lần lặp này là tính dừng?nghĩa là điều kiện ở đây phải xảy ra
Xét lại VD1 nhưng viết bằng repeat-until
4:cấu trúc while-do hay repeat-until
b: repeat-until
-lưu đồ của While-do
Điều kiện
Công việc
End.
true
False
Làm việc trước rồi mới so sánh điền kiện nếu sai thí tiếp tục đúng thì dừng
Trở lại từ đầu
VD1: xét bài toán: tính tổng của các số chẵn trong khoãng từ 1 đến n với n nhập từ bàn phim (1<=n<=1000);
Var n,i:integer;tong:longint;
Begin
Writeln(`nhap n`);
Readln(n);
k:=0;
repeat
tong:=tong+k;
inc(k,2);
unitl (k=n)or(k=n+1)
Writeln(`tong can tim `,tong);
Readln;
End.
Tại sao điều kiện lại là như vậy?
inc(k,2):tăng k lên 2 đơn vị thì k sẽ là 0,2,4,6,8..?không cần kiểm tra số chẵn
-xét điều kiện:
+nếu n chẵn (vd n=10) thì sau 5 lần k=n vòng lặp sẽ dừng
+nếu n lẻ (vd n=11) thì k=0,2,4,6,8,10,12 sẽ không bao giờ là 11 nên phải xét k=n+1
Có 2 TH: n=k hay n=k+1 thì vòng lặp dừng.
đảm bảo tính dừng
so sánh repeat-until và While-do
II: Bài tập.
BT5/sgk-tr51.
Xác định:
-biết số lần thực hiện (50)?for-do
-Công viêc tính;
?k:=k+i/(i+1);
-kiểu biến đếm: integer;
Chương trinh mẫu ???
Var k:integer;n:real;
Begin
n:=0;
For k:=1 to 50 do
n:=n+k/(k+1);
Writeln(`gia tri can tinh`,n:7:2);
Readln
End.
BT8/sgk-tr51;
Var a,b,tien:real;I,k:integer;
Begin
Writeln(`nhap so tien gui va tien B`);
Readln(a,b);
Tien:=0;k:=0;
Repeat
tien:=tien+a*0.3;
Inc(K);
until (tien>=b)
Writeln(`so thang co the lay tien gui ra la`,k);
End.
Bài tập:
1: tính N! với N nhập từ bàn phím (N nguyên và không quá 11)
2: tìm ước chung lớn nhất, bội chung nhỏ nhất của 2 số a,b không âm nhập từ bàn phím (a,b, nguyên)
3: tìm max, min của n số nhập từ bàn phím (số nhập đầu tiên cho biết số các số tìm max?có n+1 dòng nhập)
4: số nguyên tố là số chỉ có 2 ước số là 1 và chính nó. Nhưng trong các bài toán tin học người ta đã chứng minh được rằng số nguyên tố là số không chia hết cho các số nguyên trong khoảng từ 2?căn bậc hai của nó. Ví dụ 7 là số nguyên tố vì 7 không chia hết 2,3 (căn 7=2.6).viết chương trình kiểm tra xem số N nhập từ bàn phím có phải sô nguyên tố không.
(các ví dụ xem sau phần bài tập)
Bài tập:
5: tính kết quả của phép toán với n nhập từ bàn phím(N<100)
6:viết chương trình in ra màn hình bảng cửu chương.
7:viết chương trình tính tổng, tích của các số nguyên trong khoảng m,n nhập từ bàn phím (0
9:xuất ra màn hình giống như hình chữ nhật sau với n,m nhập từ bàn phím lần lượt là chiều dài chiều rộng của nó (0
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Lê Thanh Tùng
Dung lượng: |
Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)