- Biết ngôn ngữ lập trình dùng cấu trúc lặp với số lần chưa biết trước để chỉ dẫn máy tính thực hiện lặp đi lặp lại công việc đến khi một điều kiện nào đó được thỏa mãn.. - Hiểu hoạt độn[r]
Trang 1Ngày soạn: 03/03/2013 Ngày dạy: 05/03/2013
Bài 7 : LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC
I MỤC TIÊU:
1 Kiến thức:
- Biết nhu cầu cần có cấu trúc lặp với số lần chưa biết trước trong ngôn ngữ lập trình
- Biết ngôn ngữ lập trình dùng cấu trúc lặp với số lần chưa biết trước để chỉ dẫn máy tính thực hiện lặp đi lặp lại công việc đến khi một điều kiện nào đó được thỏa mãn
- Hiểu hoạt động của câu lệnh lặp với số lần chưa biết trước while do trong Pascal
2 Kĩ năng: Viết đúng lệnh while do trong một số tình huống đơn giản
3 Thái độ: Có ý thức tư duy, có thái độ ham học hỏi, tác phong làm việc nghiêm túc.
II CHUẨN BỊ:
1 Giáo viên: SGK, giáo án, máy chiếu
2 Học sinh: Đọc trước bài, SGK, đồ dùng học tập
III TIẾN TRÌNH TIẾT DẠY:
1 Ổn định tổ chức lớp : (1’)
2 Kiểm tra bài cũ: (4’)
Câu hỏi:
? Hãy cho biết đoạn chương trình in ra giá trị của i, j, k là bao nhiêu ?
J :=3 ;k :=4 ; For i :=1 to 5 do j :=j+1 ;
K :=k+j ; Writeln(j,’ ‘,k,’ ‘, i) ;
Trả lời:
j = 8 , k = 12, i = 5
3 Bài mới: (37’)
Hoạt động của giáo viên Hoạt động của học sinh Kiến thức ghi bảng
Hoạt đông 1: Các hoạt động lặp với số lần chưa biết trước (20’)
GV: Kể một số hoạt động được
lặp đi lặp lại với số lần biết
trước?
GV: VD: Tính tổng số tự nhiên
từ 1 đến 100, đánh răng, đi
học…
? Nêu một vài hoạt động với số
lần không biết trước
GV: Trong thực tế có nhiều
hoạt động được thực hiện lặp đi
lặp lại với số lần chưa biết
trước
VD: Nhặt thóc không biết khi
nào thị nhặt xong
VD: Bạn Long gọi cho bạn
Hs: Ăn cơm ngày 3 bữa, tính tổng 100 số tự nhiên đầu tiên
Hs: Học bài không biết khi nào thì thuộc
`
1 Các hoạt động lặp với số lần chưa biết trước:
* Ví du:Nhặt thóc, nhặt rau, học bài cũ
* Ví dụ 1:
* Ví dụ 2:
* Sơ đồ:
Sai
Tuần: 26
Tiết: 49
Trang 2Trang mà không có ai nhấc
máy Vậy bạn Long cứ 10 phút
gọi cho bạn Trang cho đến khi
nhấc máy thì thôi Vậy bạn
Long có biết trước được gọi
mấy lần thì bạn Trang nhấc
máy không?
GV: Khi nào thì kết thúc hoạt
động bạn Long gọi cho bạn
Trang?
GV: Hãy hình dung
Trong khi <không có ai nhấc
máy> thì < bạn Long cứ mười
phút lại gọi 1 lần> cho đến khi
< có người nhấc máy>
VD2: Gv mời 1 em đọc bài
toán
GV: Phân tích bài toán
Phép cộng 1+2+3….n Cho đến
khi S>1000 thì dừng lại và in ra
kết quả S
Gv: Yêu cầu học sinh mô tả
thuật toán
Gv: Hoạt động này chỉ dừng lại
khi điều kiện đó sai S>1000 thì
dừng lại
Gv: Vẽ sơ đồ
Sai
Đúng
Gv: Yêu cầu - HS vẽ sơ đồ theo
bài toán trên
Gv: Dựa vào 2 VD trên giới
thiệu câu lệnh có dạng lặp với
số lần chưa biết trước
Hs: Không biết được
Hs: Khi có người nhấc máy
Hs: đọc bài
B1: S 0,n 0;
B2: trong khi s<=1000, nn+1;
Ngược lại chuyển tới bước 4;
B3: S s + n và quay lại bước 2;
B4: In kết quả: S và n là số tự nhiên nhỏ nhất sao cho S>1000 Kết thúc thuật toán
Hs: Vẽ sơ đồ theo bài toán trên
Sai
Đúng
Trang 3Đúng
Hoạt động 2: Ví dụ về lệnh lặp với số lần chưa biết trước (17’)
Gv: Giới thiệu lệnh lặp với số
lần chưa biết trước
Trong Pascal câu lệnh lặp với
số lần chưa biết trước có dạng:
While <điều kiện> do câu lệnh;
Trong đó: điều kiện thường là
một phép so sánh
Câu lệnh có thể là câu lệnh đơn
giản hay câu lệnh ghép
Gv: Câu lệnh này được thực
hiện thế nào?
VD3: Viết chương trình tính số
n nhỏ nhất để 1/n nhỏ hơn sai
số cho trước (Sai số=0.005);
Gv: Cho học sinh giải bài toán
Gv: Xác định bài toán
Gv: Mô tả thuật toán
Gv: Viết chương trình sử dụng
vòng lặp while do
Gv: Gợi ý cho - HS viết
Khai báo biến như thế nào?
Khai báo hằng?
Tại sao gán giá trị ban đầu là 1?
Sử dụng lệnh while<điều kiện>
do <câu lênh>
Tại sao lại bỏ trong begin end?
Nếu không bỏ trong begin
end thì điều gì sẽ xảy ra?
Gv: Chỉ thực hiện lệnh n+1 và
sẽ ra hiện tượng lặp đi lặp lại
mãi
Hs: 1 Kiểm tra điều kiện
2 Nếu điều kiện đúng thực hiện câu lệnh và quay lại bước
1, câu lệnh sai sẽ bị bỏ qua và việc thực hiện lệnh sẽ kết thúc
Hs: 1/n=0.005 ==> n= 200;
Hs: Input: sai số = 0.005>1/n Output: n
B1: x=1,n=1 B2: khi x>= 0.005 thì nn+1;
x1/n B3: in ra giá trị n;
Program VD3;
Uses crt;
Var x: real;
N:integer;
Const saiso=0.005 Begin
Clrsrcr;
X:=1;n:=1;
While x>=saiso do Begin
N:=n+1;x:=1/n;
End;
Writeln(‘ So n nhỏ nhất để 1/n nhỏ hơn 0.005 là’, n);
Readln End
Hs: Tính phép tính n=1001
2 Ví dụ về lệnh lặp với số lần chưa biết trước:
* Cú pháp:
While <điều kiện> do <câu lệnh>;
- Trong đó:
+ Điều kiện thường là một phép so sánh
+ Câu lệnh có thể là câu lệnh đơn giản hay câu lệnh ghép
- Cách thức hoạt động:
1 Kiểm tra <điều kiện>
2 Nếu <Điều kiện>Sai, câu
lệnh sẽ bị bỏ qua và việc thực hiện lệnh lặp kết thúc Nếu
<điều kiện> đúng, thực hiện
câu lệnh và quay lại bước 1
Trang 4Gv: Khi khai báo saiso=0.005,
em thử thay saiso=0.001 thì n
sẽ bằng bao nhiêu?
4 Củng cố: (2’)
- Câu lệnh lặp với số lần biết trước và câu lệnh lặp với số lần chưa biết trước
- Cú pháp câu lệnh lặp chưa biết trước?
5 Hướng dẫn về nhà: (1’)
- Làm bài tập trong SGK\T71, học bài
- Tiếp tục xem trước Bài 8
6 Rút kinh nghiệm:
Ngày soạn: 04/03/2013 Ngày dạy: 08/03/2013
Bài 7 : LẶP VỚI SỐ LẦN CHƯA BIẾT TRƯỚC (t2)
I MỤC TIÊU:
1 Kiến thức:
- Biết nhu cầu cần có cấu trúc lặp với số lần chưa biết trước trong ngôn ngữ lập trình
- Biết ngôn ngữ lập trình dùng cấu trúc lặp với số lần chưa biết trước để chỉ dẫn máy tính thực hiện lặp đi lặp lại công việc đến khi một điều kiện nào đó được thỏa mãn
- Hiểu hoạt động của câu lệnh lặp với số lần chưa biết trước while do trong Pascal
2 Kĩ năng: Viết đúng lệnh while do trong một số tình huống đơn giản
3 Thái độ: Có ý thức tư duy, có thái độ ham học hỏi, tác phong làm việc nghiêm túc.
II CHUẨN BỊ:
Tuần: 26
Tiết: 50
Trang 51 Giáo viên: SGK, giáo án, máy chiếu
2 Học sinh: Đọc trước bài, SGK, đồ dùng học tập
III TIẾN TRÌNH TIẾT DẠY:
1 Ổn định tổ chức lớp : (1’)
2 Kiểm tra bài cũ: (4’)
Câu hỏi:
Viết cú pháp của lệnh lặp chưa biết trước? Giải thích, nêu cách thức hoạt động
Trả lời:
* Cú pháp:
While <điều kiện> do <câu lệnh>;
- Trong đó:
+ Điều kiện thường là một phép so sánh
+ Câu lệnh có thể là câu lệnh đơn giản hay câu lệnh ghép
- Cách thức hoạt động:
1 Kiểm tra <điều kiện>
2 Nếu <Điều kiện>Sai, câu lệnh sẽ bị bỏ qua và việc thực hiện lệnh lặp kết thúc Nếu <điều kiện> đúng, thực hiện câu lệnh và quay lại bước 1.
3 Bài mới: (37’)
Hoạt động của giáo viên Hoạt động của học sinh Kiến thức ghi bảng
Hoạt động 1: Ví dụ về lệnh lặp với số lần chưa biết trước (22’) VD4: Viết chương trình
tìm n để khi Tn <1000
Gv : Cho Hs xác định bài
toán
Gv?: Nhắc lại thuật toán
Gv: Gợi ý cho - Hs viết
chương trình sử dụng vòng
lặp while do
Gv? Khai báo những biến
nào?
Gv? Ban đầu gán giá trị cho
s,n là bao nhiêu?
Gv: Cho Hs lên bảng viết
chương hoàn chỉnh
Gv: Nhận xét sửa lại để
được một chương trình hoàn
chỉnh
Hs: Xác định bài toán
* Xác định bài toán
Input: Tổng n số <1000 Output: S, n
Hs: Mô tả thuật toán
* Mô tả thuật toán
B1: S 0,n 0;
B2: trong khi s<=1000, nn+1;
Ngược lại chuyển tới bước 4;
B3: S s + n và quay lại bước 2;
B4: In kết quả: S và n là số tự nhiên nhỏ nhất sao cho S>1000
Kết thúc thuật toán
Hs: Suy nghĩ viết chương trình
Hs: Biến S để chứa tổng và biến
n là số tự nhiên Hs: S:= 0; n:=1;
Hs: Lên bảng viết chương trình
Hs: Theo dõi
2 Ví dụ về lệnh lặp với số lần chưa biết trước:
VD4: Viết chương trình tìm n
để khi Tn <1000
* Xác định bài toán
Input: Tổng n số <1000 Output: S, n
* Mô tả thuật toán
B1: S 0,n 0;
B2: trong khi s<=1000, nn+1; Ngược lại chuyển tới bước 4; B3: S s + n và quay lại bước 2;
B4: In kết quả: S và n là số tự nhiên nhỏ nhất sao cho S>1000 Kết thúc thuật toán
*Viết chương trình
Program timn;
Uses crt;
Var n,s: integer;
Begin S:=0;n:=0 While s<=1000 do Begin
S:=s+n;
N:=n+1;
End;
Trang 6Gv: Chạy bộ chương trình
theo từng bước của câu lệnh
để - Hs hình dung
Gv: Giải thích thêm cặp
lệnh nằm giữa Begin và End
VD5: Viết chương trình
tính tổng sau:
T= 1+1/2+1/3….1/100
Gv: Gọi - HS lên viết
chương trình sử dụng for
do
Gv: Mời Hs khác nhận xét
Gv: Với bài toán này có thể
dùng while do được
không?
Gv Gợi ý
Gv: Cho Hs Viết chương
trình theo nhóm (5’)
Gv: Cho các nhóm trao đổi
phiếu học tập
Gv: Sửa chương trình
Gv: Nhận xét và cho điểm
KL: có thể sử dụng câu lệnh
while do thay cho câu
lệnh for do
Hs: Lên viết chương trình
Hs: Nhận xét Hs: Có thể sử dụng lệnh While
để viết chương trình cho bài toán này
Hs: Chú ý theo dõi
Hs: Lập nhóm và viết chương trình
Hs: Trao đổi phiếu Hs: Sửa bài của nhóm bạn
Writeln(‘so n nho nhat de tong>1000 là:’,n);
Writeln(‘ tổng dau tiên>1000 là:’,s);
Readln End
VD5: Viết chương trình để tính tổng T= 1+ 1/2+1/3 + + 1/100
* Nội dung chương trình:
tinhtong;
Program tinhtong;
Uses crt;
Var i,s: integer;
Begin S:=0;i:=0 While i<=100 do begin
S:=s+1/I;
I:=i+1;
End;
Writeln(‘tổng là:’,s);
Readln End
Hoạt động 2: Lặp vô hạn lần – Lỗi lập trình cần tránh (15’)
Gv: Cho ví dụ lặp không
bao giờ ngừng và việc viết
chương trình cần tránh vòng
lặp không bao giờ kết thúc
*Ví dụ:
Var x: integer;
Begin
X:=5;
While x<7 do writeln(‘Chao
ban’);
End
Gv?: Phân tích các lệnh trên
Gv: Giải thích về lặp vô
hạn
VD:
S:=0; i:=0;
Hs: Phân tích ví dụ: Cho x ban đầu bằng 5
Khi x<5 thì viết ra chào bạn
Nhưng x luôn < 5 nên vòng lặp được thực hiện không bao giờ kết thúc Lặp đi lặp lại vô hạn lần
3 Lặp vô hạn lần – Lỗi lập trình cần tránh:
- Vòng lặp vô hạn là vòng lặp
không kết thúc
* Nguyên nhân: Do điều kiện sau While luôn đúng nên câulệnh sau Do luôn được thực hiện
* Cách khắc phục: Muốn khắc phục thì trong câu lệnh sau Do cần phải có câu lệnh làm cho điều kiện sau while dần đi đến sai
Trang 7While i<=100 do
S:=s+1/I;
GV: Lấy ví dụ bài trên
Thực hiện vô hạn lần vì I
lúc nào cũng nhỏ hơn 100
4 Củng cố: (2’)
- Câu lệnh lặp với số lần biết trước và câu lệnh lặp với số lần chưa biết trước Sử dụng câu lệnh lặp chưa biết trước vào các bài toán
- Cú pháp câu lệnh lặp chưa biết trước? Lỗi lặp vô hạn lần
5 Hướng dẫn về nhà: (1’)
- Làm bài tập trong SGK\T71
- Tiết sau tiết bài tập
6 Rút kinh nghiệm: