+ 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.. + Viết đúng các lệnh lặp kiểm tra điều kiện trước, lệnh lặp với số lần định trước.. + Tiếp tục rèn luyệ
Trang 1Tuần : 6,7 Ngày soạn : 10/09/07 Tiết : 12,13,14
I/- Mục đích – yêu cầu :
Về 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
+ Biết cách vận dụng đúng đắn từng loại cấu trúc lặp vào tình huống cụ thể
Về kỹ năng :
+ 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
+ Viết đúng các lệnh lặp kiểm tra điều kiện trước, lệnh lặp với số lần định trước
+ Viết được thuật toán giải một số bài toán đơn giản
Về thái độ :
+ Tạo sự ham muốn cho HS giải toán bằng NNLT trên máy tính
+ Tiếp tục rèn luyện các phẩm chất cần thiết của người lập trình như xem xét giải quyết vấn đề 1 cách cẩn thận, chu đáo, có sáng tạo, không thoả mãn với kết quả ban đầu đạt được Điều này thể hiện trong suốt quá trình từ khi phân tích bài toán đến khi lựa chọn dữ liệu, cấu trúc điều khiển thực hiện thuật toán, viết chương trình và cuối cùng là dịch, sửa lỗi, kiểm thử, cải tiến thích ứng với các bộ dữ liệu và trạng thái bài toán khác nhau
II/- Chuẩn bị :
GV : + Phải có giáo án và các đồ dùng dạy học liên quan đến bài dạy
+ Cần nêu rõ ý nghĩa của cấu trúc lặp ( thông qua ví dụ trong SGK 42)
+ Chuẩn bị minh hoạ Tong_1a và Tong_1b trên giấy khổ lớn
HS : + Đọc trước sách giáo khoa ở nhà
PP : + Diễn giảng ,phát vấn và các hình vẽ trực quan (nếu có )
III/- Hoạt động dạy học :
1 Ổn định lớp : Kiểm tra sĩ số (1’)
2 Kiểm tra bài cũ : (4’)
? Hãy viết cú pháp của câu lệnh rẽ nhánh dạng thiếu và dạng đủ đồng thời nêu quá trình thực hiện lệnh ?
3 Nội dung bài mới :
TG Hoạt Động Của GV Hoạt Động Của HS Nội Dung Bài
Tiết
12 + Đặt vấn đề : Cấu trúc lặp là
điều khiển thực hiện công việc
lặp đi lặp lại khi chưa đủ số lần
lặp hoặc khi 1 điều kiện nào đó
còn đúng Sau đây ta xét khái
Trang 2niệm lặp
Vd 1 : VCT tính điểm cho HS 1
lớp (giả sử lớp có 50 HS) sẽ
phải lặp lại 1 số thao tác như
sau với mỗi HS :
+ Nhập họ tên HS (hoặc SBD)
+ Nhập điểm các môn
+ Tính tổng điểm hoặc tính
điểm trung bình
- Nếu ctrình trên viết đi viết lại
các câu lệnh trên nhiều lần thì
rõ ràng không thuận tiện Vì
thế NNLT sẽ đưa ra cấu trúc
lặp, ta chỉ cần viết các câu lệnh
đó cho 1 HS Sau đó cho ctrình
thực hiện lặp lại các thao tác
đó với các HS khác Quá trình
dừng lại khi ta nhập đủ số điểm
cho 50 HS.hoặc nhập chưa đủ
số điển cho 50 HS.( Lặp với số
lần biết trước và lặp với số lần
chưa biết trước)
- Quá trình lặp không thể dừng
được gọi là quá trình lặp vô
hạn Do đó cần phải có 1 đk sai
để sau 1 số lần lặp thì vòng lặp
sẽ kết thúc
Vd 2 : Bài toán gửi tiền tiết
kiệm vào ngân hàng Hàng
tháng phải tính lãi và cộng
thêm vào gốc đang gửi hay nói
cách khác gốc của tháng sau =
gốc + lãi tháng trước
Vd 3 : Tính tổng của một đoạn
số nguyên mà không được
dùng công thức
? Hãy cho biết 2 thuật toán trên
có những gì giống và khác
nhau
+ Giống nhau : đều thực hiện vòng lặp
1/- Khái niệm lặp :
Xét 2 bài toán như sau với a là số nguyên và a >2
Bài toán 1 : Tính và sau đó đưa
kết quả ra màn hình tổng
S = 1a + a 11 + a 12+ + a 1100
Bài toán 2 : Tính và sau đó đưa
kết quả ra màn hình tổng
S = 1
a + 1
1
a + 1
2
a + + 1
a N
Cho đến khi 1
a N < 0,0001
Cách giải :
S được gán giá trị 1a ;
Tiếp theo mỗi lần cộng vào tổng S một giá trị a N1
với N= 1,2,3,
- Đối với bài toán 1, số lần lặp là 100 và việc cộng vào tổng S sẽ kết thúc 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 chưa biết trước nhưng việc cộng vào tổng
S sẽ kết thúc khi thoả điều kiện 1
a N < 0.0001 Trong lập trình, có những thao tác phải thực hiện lặp đi lặp lại nhiều lần, khi đó ta gọi là cấu trúc lặp.Cấu trúc lặp thường có 2 loại :
- Lặp với số lần biết trước
- Lặp với số lần chưa biết trước Các NNLT nào cũng cung cấp 1 số câu lệnh để mô tả các cấu trúc lặp
2/- Lặp với số lần biết trước và câu lệnh For – Do :
Xét 2 thuật toán Tong_1a và Tong_1b (Xem SGK trang 43 )
Trang 313
Sau khi so sánh và giải thích 2
thuật toán trên ta kết luận như :
- Ở Tong_1a thì chúng ta áp
dụng câu lệnh lặp dạng tiến
- Ở Tong_1b thì chúng ta áp
dụng câu lệnh lặp dạng lùi
+ Sau đây chúng ta sang phần
cú pháp
- Dạng tiến : Sau mỗi lần thực
hiện biến đếm tăng lên 1 hoặc
ta có thể dùng hàm succ(i)
- Dạng lùi : Sau mỗi lần thực
hiện biến đếm giảm đi 1 hoặc
ta có thể dùng hàm Pred(i)
? Ở dạng tiến vòng lặp kết thúc
khi nào ?
? Ở dạng lùi vòng lặp kết thúc
khi nào ?
+ Đặt vấn đề: ở tiết trước
chúng ta đã học câu lệnh lặp ở
2 dạng tiến và lùi, hôm nay
chúng ta vận dụng 2 dạng này
để áp dụng cho 2 thuật toán
Tong_1a và Tong_1b như sau :
và lặp lại 100 lần
+ Khác nhau : ở thuật toán tong_1a tăng N lên 1 sau mỗi lần thực hiện (N N+ 1 ) , còn ở thuật toán Tong_1b thì giảm đi 1 sau mỗi lần thực hiện (N N-1)
+ Vòng lặp kết thúc khi Biến đếm >= giá trị cuối
+ Vòng lặp kết thúc khi Biến đếm <= giá trị đầu
Cú pháp lặp :
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 có kiểu nguyên
- Giá trị đầu và 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ì dòng lặp không được thực hiện
Quá trình thực hiện lệnh :
- Dạng tiến : Được thực hiện tuần tự, với biến đếm nhận lần lượt các giá trị liên tiếp tăng từ giá trị đầu đến giá trị cuối
- Dạng lùi : Được thực hiện tuần tự, với biến đếm nhận lần lượt các giá trị liên tiếp giảm từ giá trị cuối đến giá trị đầu
Ví dụ 1 : Xét 2 chương trình tính : Tong_1a và Tong_1b
Program Tong_1a ; Uses crt ;
Var S : real ;
a, N : integer ;
Begin
Write(‘Nhap vao gia tri a :’) ;
Trang 4Vd 1 : VCT tính tổng các số
nguyên chẳn hoặc lẽ từ 1 đến
50
Program sochan ;
Uses crt ;
Var T, I : integer ;
Begin
For I := 1 to 50 do
If I (mod 2 = 0 ) Then
T := T + I ;
Writeln( Tong =’, T );
Readln ;
End.
Vd 2 : VCT tổng S = 1 + 2 + 3
+ + N
Program Vi_du 2;
Uses crt ;
Var N, I,S : integer ;
Begin
Write(‘Nhap vao gia tri N:’) ;
Readln(N) ;
S := 0 ;
For I := 1 to N do
S := S + I ;
Writeln(‘ Tong S =’ , S ) ;
Readln ;
End.
Readn(a) ;
S := 1/a ;
For N := 1 to 100 do
S := S + 1/(a+ N) ; Writeln(‘ Tong S la : ‘, S :8:2) ; Readln ;
End.
Program Tong_1b ; Uses crt ;
Var S : real ;
a,N : integer ;
Begin
Write(‘Nhap vao gia tri a :’) ; Readn(a) ;
S := 1/a ;
For N := 100 Downto 1 do
S := S + 1/(a+ N) ; Writeln(‘ Tong S la : ‘, S :8:2) ; Readln ;
End.
Ví dụ 2 : VCT nhập vào 2 số nguyên dương dương M và N(M < N ) , sau đó 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
Program Vi_du 2 ; Uses crt ;
Var M, N, I : integer ;
T : longint ;
Begin
Write(‘Nhap vao 2 gia tri M va N (M < N) :’) ;
Readn(M,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 LA : ‘, T) ;
Tiết
Trang 5Điều Kiện
Câu lệnh
chúng ta đã được học câu lệnh
lặp dạng tiến và dạng lùi đó là
2 dạng lặp với số lần biết
trước, nghĩa là chúng ta sẽ biết
được nó sẽ lặp lại bao nhiêu
lần rồi sau đó kết thúc, hôm
nay chúng ta tiếp tục tìm hiểu
thêm 1 dạng lặp nữa nhưng
chúng ta không biết trước số
lần lặp và dừng lại khi nào Đó
là câu lệnh lặp dạng While –
Do
? Em hãy cho biết vòng lặp
While – Do kết thúc khi nào ?
- Mỗi lần thực hiện công việc
có thể làm thay đổi giá trị của
điều kiện nên đến 1 lúc nào đó
đk lặp không còn đúng nữa và
cấu trúc sẽ kết thúc
+ Vòng lặp kết thúc khi 1 điều kiện cho trước được thoả mãn
End
3/- Lặp với số lần chưa biết trước và câu lệnh While – Do :
Để giải bài toán 2 ta xây dựng thuật
toán Tong_2 như sau :
B1 : S 1/a ; N 0 ; {ktạo s và N}
B2 : Nếu 1/(a+N) < 0.0001 chuyển
sang B5 ;
B3 : N N + 1 ;
B4 : S S + 1/(a+N) rồi quay lại B2;
B5 : Đưa S ra màn hình, rồi kết thúc ;
Cú pháp : While < điều kiện > Do
< Câu lệnh > ; Trong đó :
- Điều kiện : là biểu thức lôgic ;
- Câu lệnh : là 1 câu lệnh đơn hoặc ghép
Lưu đồ :
sai đúng
Trang 6+ Nhắc lại bài toán gửi tiền
vào ngân hàng : Số tiền ban
đầu là A, muốn gởi và ngân
hàng và có số tiền là B và
(B>A) thì cần gởi trong bao lâu
với lãi suất hàng tháng là K %
+ Trong thuật toán Tong_1a ,
câu lệnh lặp
For N := 1 to 100 do
S := S + 1/(a+N) ;
Đã bao gồm cả ba bước 2, 3, 4
của thuật toán
Quá trình thực hiện lệnh :
- Kiểm tra và tính giá trị của biểu thức điều kiện
- Nếu điều kiện đúng thì thực hiện công việc(1 lần), ngược lại sẽ kết thúc vòng lặp
Sơ đồ khối,thuật toán và chương trình của 2 ví dụ hãy xem SGK trang 46,47và 48
Chú y ù : 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
4 Củng cố :(4’)
- Nhắc lại các khái niệm về cấu trúc lặp
- Cấu trúc lặp với số lần biết trước :
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>;
- Cấu trúc lặp với số lần chưa biết trước :
While < điều kiện > Do
< Câu lệnh > ;
5 Dặn dò :(1’)
- VCT Tính tổng S= 1/1 + 1/2 + 1/3 + + 1/N ,sau đó in kết quả ra màn hình
- Học bài và chuẩn bị Bài Tập Và Thực Hành 2 trong SGK trang 49 và 50.
Châu Thành,ngày……Tháng ……Năm 2007