Tải bản đầy đủ (.doc) (7 trang)

GIAO AN CAU TRUC LAP PP GOI DONG CO

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (150.13 KB, 7 trang )

Tiết PPCT: 13,14

CHƯƠNG III: CẤU TRÚC RẼ NHÁNH VÀ LẶP
BÀI 10: CẤU TRÚC LẶP
I.
1.
-

MỤC TIÊU:
Kiến thức:
Hiểu nhu cầu của cấu trúc lặp trong biểu diễn thuật toán;
Hiểu cấu trúc lặp với số lần biết trước, cấu trúc lặp kiểm tra điều
kiện trước;
Mô tả được thuật toán của một số bài toán đơn giản có sử dụng lệnh
lặp.
2. Kĩ năng:
Vận dụng đúng đắn từng loại cấu trúc lặp vào tình huống cụ thể;
Viết đúng các lệnh lặp với số lần biết trước, lệnh lặp kiểm tra điều
kiện trước
3. Thái độ:
- Giúp học sinh nâng cao kiến thức về sử dụng ngôn ngữ lập trình, từ đó
thêm yêu thích môn học.
II.
PHƯƠNG PHÁP DẠY HỌC ĐƯỢC SỬ DỤNG:
Sử dụng phương pháp Gợi động cơ hoạt động để giảng dạy.
III.
PHƯƠNG TIỆN DẠY HỌC:
1. Chuẩn bị của giáo viên:
Máy tính, máy chiếu (nếu có);
Bài giảng thiết kế trên các Slide nếu có máy tính và máy chiếu;
Sách giáo khoa và sách giáo viên Tin học 11;


2. Chuẩn bị của học sinh:
Vở ghi lý thuyết; Sách giáo khoa tin học 11.
3. Tài liệu tham khảo:
- Bài tập tin học 11 – Nhà xuất bản giáo dục – Hồ Sĩ Đàm, Nguyễn Thanh
Tùng.
IV.
HOẠT ĐỘNG DẠY - HỌC:
1.
Ổn định lớp: yêu cầu lớp trưởng báo cái sĩ số, ổn định lớp.
2.
Kiểm tra bài cũ::
Giáo viên cho câu hỏi, gọi học sinh trả lời:


Câu hỏi 1: Em hãy nêu cú pháp câu lệnh IF trong ngôn ngữ lập
trình Pascal?
HS trả lời: Ngôn ngữ lập trình Pascal sử dụng câu lệnh IF – THEN để mô tả
rẽ nhánh tương ứng với hai loại mệnh đề rẽ nhánh cú pháp như sau:
+ Dạng thiếu: IF <điều kiện> THEN <câu_lệnh>;
+ Dạng đầy đủ: 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 quan hệ hoặ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.
+ Trước Else không chứa chứa dấu chấm phẩy (;).
Câu hỏi 2: Hãy nêu cách viết câu lệnh ghép?
HS trả lời: Trong ngôn ngữ lập trình Pascal, câu lệnh ghép có dạng:
Begin
<các_câu_lệnh>
End;

+ Sau End phải là dấu chấm phẩy (;)
3.
Giảng bài mới:
* Gợi động cơ: Trong một số thuật toán có những thao tác phải lặp đi lặp
lại nhiều lần. Nếu ta phải viết đi viết lại các thao tác đó thì rõ ràng không
thuân tiện rất mất thời gian và lại dễ dẫn tới nhàm chán.
Ví dụ: Chương trình tính điểm cho một lớp học sinh thì ta phải lặp lại
nhiều lần một số thao tác: Nhập họ tên học sinh, nhập điểm các môn, tính
tổng điểm cho từng môn hoặc trung bình chung.
Nếu lớp có 40 hs thì ta phải viết lại 40 lần, nếu lớp có 50 hs thì ta phải viết
lại 50 lần, như vậy một trường có hàng ngàn học sinh thì ta phải viết lại các
tháo tác đó đến hàng nghìn lần. Làm như vậy chương trình của chúng ta sẽ rất
công kênh và rất mất thời gian. Vì thế ngôn ngữ lập trình đã đưa ra cấu trúc
lặp, chỉ cần viết các câu lệnh thực hiện các thao tác trên một lần, sau đó sử
dụng câu lệnh lặp cho chương trình tự thực hiện lặp lại các thao tác đó. Bài
hôm nay chúng ta tìm hiểu vể cấu trúc lặp..
Nội dung

Hoạt động của Giáo viên

Hoạt động của Học
sinh

Hoạt động 1: Lặp
Xét 2 bài toán như GV: Đưa ra bài toán, yêu cầu học HS: Đưa ra cách giải


sau với a > 2 là số
nguyên cho trước.
Bài toán 1: Tính

tổng
S1= 1/a + 1/(a+1)
+ 1/(a+2) + … + 1/
(a+100)

sinh tìm cách lập trình để giải các
bài toán này.
+ Gợi ý phương pháp:
Ta xem S như là một cái thùng, các
số hạng như là những cái ca có dung
tích khác nhau, khi đó việc tính tổng
trên tương tự như việc đổ các ca
nước đó vào thùng S.
- Có bao nhiêu lần đổ nước vào
thùng?
- Mỗi lần đổ một lượng là bao
nhiêu? Lần thứ i là bao nhiêu?
- Phải viết bao nhiêu lệnh?
GV: Đưa ra cách giải cho bài toán.
Bài toán 2: Tính tổng
S2 = 1/a + 1/(a+1) + 1/(a+2) + … +
1/(a+N) + …
Với điều kiện 1/(a+N) < 0,0001
GV: Tương tự bài toán 1, em hãy
cho ý tưởng để giải bài toán 2?
Cách giải bài toán 2:
S1:=0;
If(1/a > 0,0001) then s1:=s1+1/a;
If(1/(a+1) > 0,0001) then s1:=s1+1/
(a+1);

If(1/(a+2) > 0,0001) then s1:=s1+1/
(a+2);
If(1/(a+3) > 0,0001) then s1:=s1+1/
(a + 3)

GV: Hãy nhận xét 2 cách giải như
trên?

Cách giải BT 1:
S1:=0;
S1:=S1+1/a;
S1:=S1+1/(a+1);
S1:=S1+1/(a+2);
S1:=S1+1/(a+3);

S1:=S1+1/(a+100)
Với cách giải bài
toán 1 việc cộng
thêm dừng khi N =
100  số lần lặp
đã biết trước.
Trong lập trình, có
những thao tác
phải lặp lại nhiều
lần, khi đó ta gọi là
cấu trúc lặp.
NNLT nào cũng
cung cấp một số
câu lệnh để mô tả
các cấu trúc lặp

như trên.
Lặp thường có 2
GV chốt: Với cách giải bài toán 2
loại:
việc cộng thêm dừng khi 1/(a+N) <
- Lặp với số lần
0.0001  số lần lặp chưa biết

của mình, học sinh
có thể đưa ra những
cách giải khác nhau.

- Phải thực hiện 100
lần đổ nước vào
thùng.
- Mỗi lần đổ

1
a+i

- Phải viết 100 lệnh

- Để giải bài toán
trên, đầu tiên ta gán
giá trị S =

1
sau đó
a


lần lượt cộng vào S
một giá trị

1
với
a+N

N = 1, 2, … cho đến
khi

1
< 0,0001 thì
a+N

dừng.

Giống: cả hai bài
toán đều lặp lại nhiều
lần bước cộng giá trị
1
vào tổng S
a+N

Khác: bài toán 1:
ta cộng vào S giá trị
1
a+N

với N= 1…


100 lần thì dừng. Bài
toán 2 ta cộng vào S
giá trị N=1, 2, 3,.......


biết trước;
- Lặp với số lần
không biết trước.

trước.
cho
tới
lúc
1
Nhưng giải bài toán theo cả 2
< 0,0001 thì
trường hợp trên đều quá dài, gây a + N
dừng
khó khăn trong việc lập trình.
HS: Chăm chú nghe
GV: Em có đề xuất phương án gì giảng.
mới để giải quyết dạng bài toán như
vậy không?
Sau đây, chúng ta sẽ tìm hiểu các
câu lệnh lặp trong NNLT Pascal
Hoạt động 2: Lặp với số lần biết trước và câu lệnh FOR –DO
Trong Pascal có 2 GV: Đưa ra ví dụ: so sánh 2 thuật HS: Quan sát 2 thuật
toán.
loại câu lệnh lặp toán sau:
có số lần biết Thuật

toán Thuật
toán
trước: lặp dạng tong_1a
tong_1b
B1.S:=1/a;
tiến và lặp dạng B1.S:=1/a;
N:=0;
N:=101;
lùi.
B2. N:=N+1
B2. N:=N-1;
Lặp dạng tiến:
B3. Nếu N>100 B3. Nếu N < 1
FOR
thì sang B5.
thì sang B5.
<bien_dem>:=
S:=S+1/ B4.
S:=S+1/
<gia_tri_dau> TO B4.
(a+N) rồi quay (a+N) rồi quay
<gia_tri_cuoi>
lại B2.
lại B2.
DO <cau_lenh>
B5. Đưa ra S B5. Đưa ra S
Lặp dạng lùi:
rồi kết thúc.
rồi kết thúc.
FOR

GV: Gọi một vài học sinh nhận xét HS: Đưa ra nhận xét
<bien_dem>:=
về 2 thuật toán trên về một số vấn của mình, tham gia
<gia_tri_cuoi>
xây dựng bài.
đề:
DOWNTO
- Có
Thuật
toán

lặp
không?
<gia_tri_dau>
- Cùng lặp lại 100 lần
- Lặp bao nhiêu lần?
-Giống: hai thuật
DO <cau_lenh>
Hai
thuật
toán
giống
nhau

khác
toán đều tính tổng
Trong đó:
theo cùng 1 công
- bien_dem thường nhau như thế nào?
thức và lặp lại 100

là biến kiểu số - Cái gì thay đổi trong 2 thuật toán
lần.
này?
nguyên.
-Khác:
gia_tri_dau, - Ta nói cách khác là lặp trong thuật +tong_1a: bắt đầu từ
N=0 và khi tham gia
gia_tri_cuoi: là các toán tong_1a là dạng tiến, trong
vòng lặp n tăng lên 1
biểu thức cùng thuật toán tong_1b là dạng lùi
kiểu với biến đếm. Như vậy dạng lặp với số lần biết cho đến khi bằng
N=100 thì kết thúc
gia_tri_dau
phải trước được dùng để thực hiện câu
vòng lặp.
nhỏ hơn hay bằng


gia_tri_cuoi.
- Ở dạng lặp tiến:
bien_dem tự tăng
dần từ gia_tri_dau
đến gia_tri_cuoi.
- Ở dạng lặp lùi:
bien_dem tự giảm
dần từ gia_tri_cuoi
đến gia_tri_dau.
- Tương ứng với
mỗi giá trị của
bien_dem,

câu
lệnh sau DO thực
hiện 1 lần.

lệnh một số lần xác định. Dạng này +tong_1b: bắt đầu từ
dùng biến điều khiền để điều khiển N=101 và khi tham
gia vòng lặp N giảm
vòng lặp. Trong NNLT Pascal mỗi đi 1 cho đến khi bằng
lần thực hiện câu lệnh thì biến điều N<1 thì kết thúc
khiển được tự động tăng (dạng tiến) vòng lặp.
- N và S thay đổi
hoặc giảm (dạng lùi). Đến khi biến
trong thuật toán.
điều khiển đạt giá trị xác định thì
dừng vòng lặp và lặp với số lần biết
trước thể hiện qua câu lệnh for-do
HS: Suy nghĩ xây
GV: Lấy thêm ví dụ để minh họa dựng thuật toán, tiến
trong Pascal để các em thấy được sự hành viết chương
thay đổi giá trị của biến đếm trong trình tính tổng trên.
một chương trình thực sự của
Pascal.
+ Lặp lại (N-M) lần.
VD: Viết chương trình tính tổng các
+for i:=M to N do
số nguyên chia hết cho 3 hoặc 5
if (i mod 3=0) or
trong phạm vi từ M đến N (M < N).
(i mod 5=0) then
Tong:=Tong+I;

+ Thuật toán lặp lại bao nhiêu lần?
+ Lệnh lặp trong chương trình được
+ Viết chương trình
viết như thế nào?
Pascal thực hiện.
+ Viết chương trình thực hiện phép
tính trên.
Hoạt động 3: Lặp với số lần chưa biết trước và câu lệnh WHILE – DO
Cú pháp:
GV: Để giải bài toán 2 ta dùng HS: Trật tự, chú ý
lắng nghe. Ghi bài
WHILE
thuật toán như sau:
đầy đủ.
<dieu_kien> DO B1: S:= 1/a; N:= 0;
<cau_lenh>
B2: Nếu 1/(a+N) < 0.0001 thì
Trong đó:
chuyển đến bước 5.
- dieu_kien: là biểu B3: N:= N+1;
thức quan hệ hoặc B4: S:= S+1/(a+N) rồi quay lại B2;
logic;
B5: Đưa kết quả S ra màn hình rồi
- cau_lẹnh: là một kết thúc.
câu lệnh trong Từ bước 2 đến bước 4 được lặp lại
NNLT Pascal.
nhiều lần nếu điều kiện 1/(a+N) <
Ý nghĩa:
0.0001 chưa được thỏa mãn
Khi dieu_kien còn  Pascal có câu lệnh lặp WHILE

đúng thì còn thực - DO để tổ chức lặp với số lần
chưa biết như trên.


hiện cau_lenh sau
DO, sau đó quay
lại kiểm tra
dieu_kien.
VD: Thuật toán tìm UCLN của M và N:
Bước 1: Nhập M, N;
Bước 2: Nếu M = N thì UCLN:= M 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ả UCLN rồi kết thúc
Chương trình:
Program USCLN;
Uses crt;
Var m, n: byte;
Begin
Clrscr;
Write(‘Nhap so m: ‘);
Readln(m);
Write(‘Nhap so n: ‘);
Readln(n);
While (m<>n) do
If m > n then
m:= m - n
Else
n:= n - m;
Writeln(‘UCLN của M và N là: ‘, m);

Readln;
End.
4.
Củng cố, dặn dò:
Nhắc lại cho học sinh một só khái niệm mới:
2 dạng của cấu trúc lặp với số lần biết trước:
+ Tiến: FOR <bien_dem>:=<gia_tri_dau> TO <gia_tri_cuoi> DO
<cau_lenh>
+ Lùi: FOR <bien_dem>:=<gia_tri_cuoi> DOWNTO <gia_tri_dau> DO
<cau_lenh>
Trong đó:
+ bien_dem thường là biến kiểu số nguyên.
+ gia_tri_dau, gia_tri_cuoi: là các biểu thức cùng kiểu với biến đếm,
gia_tri_dau phải nhỏ hơn hoặc bằng gia_tri_cuoi.


+ Tương ứng với mỗi giá trị của bien_dem, câu lệnh sau DO thực hiện
1 lần.
Câu trúc lặp với số lần chưa biết trước:
WHILE <dieu_kien> DO <cau_lenh>
Trong đó:
+ dieu_kien: là biểu thức quan hệ hoặc logic;
+ cau_lenh: là một câu lệnh trong ngôn ngữ lập trình Pascal.
5.
Bài tập về nhà:
Đọc trước bài tập thực hành 2: “Bài toán bộ số Pi – ta – go” chuẩn bị cho
tiết thực hành tiếp theo.
Làm bài tập 1, 2, 6, 7 và 8 trang 50, 51 SGK.
V.
RÚT KINH NGHIỆM BỔ SUNG:

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



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×