Bài 7. Câu lệnh lặp tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập lớn về tất cả các lĩnh vực kinh tế,...
Trang 1Ngµy so¹n: 12/01/2017
Tiết 39-40-41-42-43
CHỦ ĐỀ 2: LẶP VỚI SỐ LẦN ĐỊNH TRƯỚC
Số tiết dạy: 5
Địa điểm Lớp học Lớp học Lớp học Phòng máy Phòng máy Ngày dạy
Sĩ số lớp 8A
8B
Tên HS
vắng
8A 8B
1 Mục tiêu
Kiến thức
Biết nhu cầu cần có cấu trúc lặp 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 để chỉ dẫn máy tính thực hiện lặp đi lặp lại công việc nào đó một số lần
Hiểu hoạt động của câu lệnh với số lần biết trước for do trong Pascal
Biết được các tình huống sử dụng lệnh lặp
Kĩ năng
Viết đúng lệnh lặp với số lần định trước.
Thái độ:
Rèn tính cẩn thận, chính xác, thái độ nghiêm túc khi học tập
Năng lực cần hướng tới
Viết được chương trình có sử dụng lệnh lặp với số lần định trước
2 Phương pháp:
- Thuyết trình-trực quan
- Đặt và giải quyết vấn đề
3 Chuẩn bị:
Giáo viên: Bảng phụ, SGK, phòng máy, máy chiếu
Học sinh: Đọc bài trước khi đến lớp.
Trang 24 Tổ chức dạy học :
Hoạt động khởi động:
* Các công việc phải thực hiện nhiều lần.
Trong cuộc sống hằng ngày, nhiều hoạt động được thực hiện lặp đi lặp lại nhiều lần vớ dụ:
Cỏc ngày trong tuần cỏc em đều lặp đi lặp lại hoạt động buổi sỏng đến trường và buổi trưa trở về nhà
Hóy cho thờm một vài vớ dụ trong thực tế trong đời sống hằng ngày mà ta phải thực hiện cỏc thao tỏc được lặp đi lặp nhiều lần?
Khi viết chương trỡnh mỏy tớnh cũng vậy, trong nhiều trường hợp ta cũng phải viết lặp lại nhiều cõu lệnh chỉ để thực hiện 1 phộp tớnh nhất định
Hoạt động hình thành kiến thức:
1 Chuyển giao nhiệm vụ học tập:
* Câu lệnh lặp - một lệnh thay thế cho nhiều lệnh
Gv gọi 1 hs lờn bảng vẽ một hỡnh vuụng cạnh 1 đơn vị độ dài (20cm) và yờu cầu cả lớp theo dừi bạn thực hiện cỏc thao tỏc trờn bảng
Vậy khi bạn vẽ 1 hỡnh vuụng đó thực hiện bao nhiờu thao tỏc?
VD1: Giả sử cần vẽ 3 hình vuông có cạnh 1 đơn vị Mỗi hình vuông là ảnh của
hình bên trái nó dịch chuyển 1 khoảng các 2 đơn vị Vậy ta cần bao nhiờu thao tỏc?
Mụ tả thuật toỏn?
Bớc 1: vẽ hình vuông(vẽ liên tiếp 4 cạnh và trở về đỉnh ban đầu)
Bớc 2: Nếu số hình vuông đã đợc vẽ ít hơn 3 , di chuyển bút vẽ về bên phải 2 đơn vị
và trở lại bớc 1; ngợc lại thì kết thúc thuật toán
Riêng với 1 bài toán vẽ hình vuông thì thao tác chính là vẽ bốn cạnh bằng
nhau,hay lặp lại 4 lần thao tác vẽ đoạn thẳng
Thuật toỏn mụ tả cỏc bước để vẽ hỡnh vuụng
Bước 1: k ← 0 (k là số đoạn thẳng đó vẽ được)
Bước 2: k ← k+1 Vẽ đoạn thẳng 1 đơn vị độ dài và quay thước 900 sang phải Bước 3: Nếu k<4 thỡ quay lại bước 2; ngược lại kết thỳc
k là biến đếm
* Tỡnh huống dẫn đến cõu lệnh lặp
VD2: Mụ tả thuật toỏn tớnh tổng cỏc số tự nhiờn từ 1→ 100: S= 1+2+3+ … + 100
Bước 1: S ← 0; i ← 0
Bước 2: i← i + 1
Trang 3Bước 3: nếu i ≤ 100, thì S ← S + i và quay lại bước 2; ngược lại kết thúc.
i là biến đếm
Mô tả thuật toán trên gọi là cấu trúc lặp
Mọi ngôn ngữ lập trình đều có cách chỉ thị cho máy tính thực hiện cấu trúc lặp chỉ với 1 câu lệnh Đó là câu lệnh lặp
2 Thùc hiÖn nhiÖm vô häc tËp
* Cấu trúc c©u lÖnh lÆp
Cú Pháp câu lệnh lặp với số lần biết trước trong Pascal
for<biến đếm>:= <giá trị đầu> to <giá trị cuối> do <câu lệnh>
trong đó:
+ for, to, do là các từ khóa
+ 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ó cùng kiểu với biến đếm và giá trị cuối phải lớn hơn giá trị đầu
+ câu lệnh có thể là câu lệnh đơn giản hay câu lệnh ghép
VD 3: Lệnh lặp nào sau đây là đúng?
A.For <biến đếm>= <giá trị đầu> to <giá trị cuôí> do <câu lệnh>
B.For <biến đếm>:= <giá trị đầu> to <giá trị cuôí> do <câu lệnh>
C.For <biến đếm>:= <giá trị cuôí> downto <giá trị đầu> do <câu lệnh>
D.For <biến đếm>: <giá trị cuôí> downto <giá trị đầu> do <câu lệnh>
VD 4: Câu lệnh pascal nào sau đây là hợp lệ?
A For i:=100 to 1 do writeln(‘A’);
B For i:=1.5 to 10.5 do writeln(‘A’);
C For i= 1 to 10 do writeln(‘A’);
D For i:= 1 to 10 do writeln(‘A’);
3 B¸o c¸o kÕt qu¶ vµ th¶o luËn
* VÝ dô vÒ c©u lÖnh lÆp
VD 5: Hãy chỉ ra các lỗi trong các câu lệnh sau đây:
a) s := 10; for x := 10 to 1 do s := x + 5;
c) s=0; for i:=1 to 10 do s=s+i;
VD 6: Cho biết kết quả sau khi chạy đoạn chương trình sau:
s:=0;
For i:=1 to 5 do
Trang 4Begin j:=i+5;s:=s+j; end;
4 Đánh giá kết quả thực hiện nhiệm vụ học tập
VD 7 :
Yờu cầu HS chia lớp hoạt động nhúm
Nhúm 1,3 : Viết chương trỡnh in ra màn hỡnh thứ tự lần lặp
Nhúm 2,4: Viết chương trỡnh ghi nhận vị trớ 10 chữ O rơi từ trờn xuống
Chương trỡnh mong muốn nhận được như sau:
Chuong trỡnh in ra màn hỡnh thứ tự lần lặp
Program lap;
var i:integer;
begin
for i:= 1 to 20 do writeln(‘Day la lan lap thu’,i); readln;
end.
Chương trỡnh ghi nhận vị trớ 10 chữ O rơi từ trờn xuống
ues crt;
var i:integer;
begin
clrscr;
for i:= 1 to 20 do begin writeln(‘O’);delay(200); end;
readln;
end.
*Lưu ý: Cõu lệnh đơn giản Writeln(‘O’) và Delay(200) đợc đặt trong từ khoá BEGIN và END để tạo thành câu lệnh ghép trong PASCAL
VD 8:Chương trỡnh pascal sau sẽ in ra màn hỡnh nội dung gỡ?
Var i: integer;
BEGIN
For i:=1 to 10 do Writeln(‘Day la lan lap thu ‘,i);
Readln;
END
Hoạt động luyện tập
Trang 5VD 9: Yêu cầu HS hoạt động nhóm viết chương trình tính tổng của 100 số tự
nhiên đầu tiên Đây là chương trình đầu tiên về câu lệnh lặp, chủ yếu để học sinh suy nghĩ và làm quen Chương trình mong muốn nhận được như sau:
Program tinh_tong;
var s,i:integer;
begin
s:=0;
for i:= 1 to 100 do s:=s+i;
writeln(‘Ket qua la: ’,s); readln;
end.
* TÝnh tæng vµ tÝch b»ng c©u lÖnh lÆp
Mô tả thuật toán tính tổng các số tự nhiên từ 1→ 100?
Từ đó mô tả thuật toán tính tổng các số tự nhiên từ 1 đến n? thuật toán tính tích của các số tự nhiên từ 1 đến n( n!)?
Chương trình mong muốn nhận được như sau:
VD 9:Chương trình tính tổng N số tự nhiên đầu tiên, với N là số tự nhiên được
nhập từ bàn phím S = 1+2+3+ … + N
program Tinh_tong;
var N,i:integer; S:longint;
begin
write(‘Nhap so N = ‘);readln(N);
S:= 0;
for i:= 1 to N do S:= S+i;
writeln(‘Tong cua’, N, ‘so tư nhien dau tien S = ‘, S);
readln;
end.
VD 10: Chương trình tính tích N số tự nhiên, với N là số tự nhiên được nhập từ
bàn phím
N! = 1.2.3….N
program Tinh_Giai_Thua;
var N,i:integer; P:longint;
begin
write(‘Nhap so N = ‘); readln(N);
P:= 1;
Trang 6for i:= 1 to N do P:= P*i;
writeln( N, ‘! = ‘, P);
readln;
end.
*Kiểu longint cú phạm vi từ -231 đến 231 – 1
VD 11: Sử dụng cõu lệnh For… do… viết chương trỡnh tớnh tổng cỏc số tự nhiờn
trong khoảng 100 đến 1000
Hoạt động vận dụng:
* Thực hành
Yờu cầu HS mở mỏy gừ lại các bài tập trờn, sau khi gừ xong mỗi bài cần thử với 3
bộ test và kiểm tra kết quả
VD 12 : Viết chương trỡnh in ra tất cả cỏc ước của một số n (Với n được nhập từ
bàn phớm)
a Hướng dẫn:
- Cho biến i chạy từ 1 đến n Nếu n chia hết cho i thỡ in ra i
Chương trỡnh mong muốn:
Program Tim_uoc;
uses crt;
Var n, i: integer;
Begin
clrscr;
Write('Nhap so n ='); readln(n);
For i:=1 to n do if n mod i = 0 then write(i:3,',');
readln
end
* Thực hành
Yờu cầu HS mở mỏy gừ lại bài tập trờn
* Hướng dẫn thực hành
VD 13: Viết chơng trình nhập vào từ bàn phím 2 số x,y Nếu x<y thì đếm và in ra
các số chia hết cho 3 trong khoảng từ x đến y, nếu x > y thì in số 0 ra màn hình
HS nghiên cứu bài toán, tìm input và output
GV phân tích bài toán và hớng dẫn HS viết chơng trình
HS đọc, phân tích câu lệnh tìm hiểu hoạt động của chơng trình
Trang 7GVyêu cầu một học sinh đứng tại vị trí trình bày hoạt động của chơng trình, các nhóm khác cùng tham gia phân tích
* Thực hành
HS gõ bài tập lên máy và test kết quả
Program baitap;
Uses crt;
Var i, x,y,dem: integer;
Begin
Clrscr;
Writeln(‘Nhap vao so x’); readln(x);
Writeln(‘Nhap vao so y’); readln(y);
If x>y then write(‘0’) else
Begin
Dem:=0;
For i:=x to y do if i mod 3=0 then
Begin write(i:6); dem:=dem+1 end;
Writeln(’Co tat ca ’,dem,’ so chia het cho 3’);
End;
Readln;
End
Hoạt động tỡm tũi mở rộng:
VD 14: Viết chương trỡnh in ra cỏc số lẻ nhỏ hơn hoặc bằng n (Với n được nhập).
Hướng dẫn:
- Cho biến i chạy từ 1 đến n
- Nếu i chẵn ( i chia 2 dư 0) thỡ in ra số n
Chương trỡnh mong muốn
Program In_So_Le;
Uses crt;
var i,n: integer;
Begin
Clrscr;
Write('Nhap so n ='); readln(n);
For i:=1 to n do
if i mod 2 =1 then Write(i:3,',');
readln
Trang 8VD 15: Viết chương trình in ra tổng các số lẻ nhỏ hơn hoặc bằng n ( Với n được
nhập)
Hướng dẫn:
- Cho S = 0
- Cho biến i chạy từ 1 đến n
- Nếu i chẵn ( i chia 2 dư 0) thì cộng thêm i vào S
- In ra S
Chương trình mong muốn:
Program In_So_Le;
Uses crt;
var S,i,n: integer;
Begin
Clrscr;
Write('Nhap so n ='); readln(n);
S:= 0;
For i:=1 to n do if i mod 2 =1 then S:= S+i;
Writeln('Tong cac so le nho hon ',n,' la: ',S);
readln
end
Chú ý: Ta dùng biến S để cộng dồn nên nó được khởi tạo giá trị đầu bằng 0.
16/01/2017 BGH duyÖt
Đặng Thị Thanh Xuân