Kĩ năng - Sử dụng cấu trúc rẽ nhánh trong mô tả thuật toán của một số bài toán đơn giản - Viết đợc câu lệnh rẽ nhánh dạng thiếu, rẽ nhánh dạng đủ và áp dụng để thể hiện đợc thuật toán củ
Trang 1- Hiểu nhu cầu của cấu trúc rẽ nhánh trong biểu diễn thuật toán.
- Hiểu câu lệnh rẽ nhánh Hiểu câu lệnh ghép
2 Kĩ năng
- Sử dụng cấu trúc rẽ nhánh trong mô tả thuật toán của một số bài toán đơn giản
- Viết đợc câu lệnh rẽ nhánh dạng thiếu, rẽ nhánh dạng đủ và áp dụng để thể hiện đợc thuật toán của một số bài toán đơn giản
3 Thái độ
- Tiếp tục khơi gợi lòng ham thích giải toán bằng lập trình 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
II Chuẩn bị của Giáo viên và học sinh:
1 Giáo viên: SGK, giáo án, STK (máy chiếu nếu có)
2 Học sinh: SGK, chuẩn bị trớc bài ở nhà
III Ph ơng pháp giảng dạy
Trang 23 Bài mới:
ĐVĐ: Bây giờ cô có 1 ví dụ nh sau: Giải phơng trình bậc 2 ax2+ bx + c =0 (a# 0) trớc tiên, ta tính biệt số delta D= b2- 4ac
Nếu D không âm, ta sẽ đa ra các nghiệm Trong trờng hợp ngợc lại, ta phải thông báo
là phơng trình vô nghiệm Với bài toán này trong lập trình chúng ta đã làm đợc các
b-ớc nh nhập hệ số a, b, c (a ≠ 0) tính đợc D, còn xét các trờng hợp của D thì trong lập trình làm nh thế nào, thì trong chơng này chúng ta sẽ nghiên cứu 1 vấn đề mới đó là cấu trúc rẽ nhánh
* Hoạt động 1: Giới thiệu cho HS biết rẽ nhánh là gì?
Ghi đầu bài và phần 1.
- HS: Dựa vào phần kiến thức đã
đọc trả lời câu hỏi
+ VD2: “Nếu Châu không học bài thì sẽ bị điểm
kém, nếu học bài thì sẽ có điểm cao”
Ta nói cách diễn đạt nh vậy thuộc dạng đủ:
Nếu thì , nếu không thì
* Vậy cấu trúc rẽ nhánh là thể hiện sự lựa
chọn công việc phù hợp với điều kiện.
* Hoạt động 2: Giới thiệu và hớng dẫn cách viết và thực hiện câu lệnh If – Then.
- HS: Chú ý nghe giảng và ghi bài.
2 Câu lệnh If- then
Trong đó: + Điều kiện là biểu thức lôgic
+ Câu lệnh, câu lệnh 1, câu lệnh 2 là
Trang 3- GV: Treo bảng phụ 2 về sơ đồ
khối để sau đó giải thích hoạt động
của câu lệnh If- then ở hai dạng
thiếu và đủ
- HS: Chú ý và tự giác ghi bài.
- GV: Lấy ví dụ 3 để HS hiểu rõ và
so sánh giữa hai cách làm Gọi HS
so sánh giữa hai cách làm trên
- HS: So sánh về cách thực hiện
của hai cau lệnh trong VD 3
- GV: Nhận xét.
một câu lệnh của Pascal
+ VD3: Để tìm số lớn nhất Max trong 2 số a,b
If b > a then Max := b else Max := a;
+ ở dạng thiếu: điều kiện sẽ đợc tính và kiểm tra Nếu điều kiện đúng (có giá trị True) thì câu lệnh sẽ đợc thực hiện, ngợc lại thì câu lệnh sẽ bị
bỏ qua
+ ở dạng đủ: điều kiện cũng đợc tính và kiểm tra Nếu điều kiện đúng (có giá trị True) thì câu lệnh 1 sẽ đợc thực hiện, ngợc lại thì câu lệnh 2
sẽ đợc thực hiện
* Hoạt động 3: Giới thiệu và hớng dẫn cách viết và thực hiện câu lệnh If – Then
- GV: Trong câu lệnh if - then muốn thực
hiện nhiều lệnh sau then hay nhiều lệnh
sau else thì ta phải làm thế nào ?
- GV: Khi đó ta cần gộp nhiều lệnh đó lại
là một câu lệnh trong chơng trình Các
NNLT thờng có cấu trúc để giúp ta thực
hiện điều này
- GV: Giải thích cho học sinh thấy tại sao
lại cần có câu lệnh ghép và câu lệnh ghép
có ý nghĩa gì? sau đó giáo viên đa ra cấu
trúc câu lệnh ghép trong Pascal
- GV: đa ra VD (quay lại bài toán giải
3 Câu lệnh ghép
* Cú pháp:
Begin <các câu lệnh>;
Trang 4writeln ('x1 = ', x1:8:3, 'x2 = ',x2:8:3);
end ;
* Hoạt động 4: Lấy một số ví dụ để làm sáng tỏ câu lệnh rẽ nhánh và câu lệnh ghép.
- HS: xác định Input, Output của bài, xác
định kiểu dữ liệu của a,b,c,d
- Thảo luận theo nhóm (4 hs/1 nhóm- 2
bàn liền nhau) để viết bài toán bằng ngôn
Biết rằng năm nhuận là năm chia hết cho
400 hoặc chia hết cho 4 nhng không chia hết cho 100
Trang 5- 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
2 Kĩ năng
- Biết vận dụng đúng đắn từng loại cấu trúc lặp vào tình huống cụ thể
- Biết 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 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
- Viết đợc thuật toán của một số bài toán đơn giản
3 Thái độ
- Tiếp tục khơi gợi lòng ham thích giải toán bằng lập trình 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
II Chuẩn bị của Giáo viên và học sinh:
1 Giáo viên: SGK, giáo án, STK (máy chiếu nếu có)
2 Học sinh: SGK, chuẩn bị trớc bài ở nhà
III Ph ơng pháp giảng dạy
2 Kiểm tra bài cũ:
Trang 6Em hãy cho biết sự giống và khác
nhau của hai dạng lệnh If – Then
Câu lệnh If – then có hai dạng:
+ ở dạng thiếu: điều kiện sẽ đợc tính và kiểm tra Nếu điều kiện đúng (có giá trị True) thì câu lệnh sẽ đợc thực hiện, ngợc lại thì câu lệnh sẽ bị bỏ qua
+ ở dạng đủ: điều kiện cũng đợc tính và kiểm tra Nếu điều kiện đúng (có giá trị True) thì câu lệnh 1 sẽ đợc thực hiện, ng-
ợc lại thì câu lệnh 2 sẽ đợc thực hiện
3 Bài mới:
Tiết 12
GVĐVĐ: Ở bài trước chỳng ta đó học về lệnh rẽ nhỏnh nhưng khụng phải lỳc nào
chỳng ta cũng cú thể sử dụng được cấu trỳc rẽ nhỏnh Nhiều bài toỏn cũn phức tạp hơn
mà cấu trỳc rẽ nhỏnh khụng đỏp ứng được Hụm nay chỳng ta làm quen với một dạng cấu trỳc khỏc đú là cấu trỳc lặp
* Hoạt động 1: Giới thiệu cho HS biết rẽ nhánh là gì?
- GV: Đưa ra hai bài toỏn, yờu cầu HS
tỡm cỏch để giải bài toỏn này
- HS: Đưa ra cỏch giải bài toỏn của mỡnh,
cú thể cú nhiều cỏch giải khỏc nhau
- GV: Trỡnh bày cỏch giải bài toỏn từng
Sau đú gọi học sinh nhận xột về cỏch giải
bài toỏn này
1 Lặp
- Xột 2 bài toỏn với a là số nguyờn và a>2
Bài toỏn 1: Tớnh và đưa ra kết quả màn
hỡnh tổng:
100
1
2
1 1
1 1
a a
S
+ + + +
+ + +
2
1 1
1 1 2
cho đến khi 1 < 0 , 0001
+N a
Cỏch giải:
- B1: Khởi tạo S:=1/a;
Trang 7- HS: Nếu giải theo cách này thì ta phải
viết 100 lần câu lệnh nếu như N=100,
Nêu N>100 thì số lần phải viết chưa biết
trước Nếu áp dụng cho cả hai bài toán thì
đều quá dài
- GVDD: Vậy ta có thể giải bài toán này
theo cách nào ngắn nhất mà vẫn chính
xác
- GV: Lấy 1 ví dụ thực tế về việc tính
toán lặp đi lặp lại nhiều lần để học sinh
hiểu được khái niệm lặp
- B2: Tiếp theo mỗi lần thì cộng thêm vào
S là 1/(a+N) với N=1,2,3,
- Với bài toán 1 thì việc cộng thêm dừng khi N=100 có nghĩa là đã biết được số lần lặp biết trước
- Với bài toán 2 thì việc cộng thêm dừng khi 1/(1+N)<0,0001 Có nghĩa là số lần lặp chưa biết trước
Vậy: Trong lập trình có những thao tác
phải lặp đi lặp lại nhiều lần, khi đó gọi là cấu trúc lặp.
Trong lập trình thường có hai loại cấu trúc lặp:
+ Lặp vớí số lần biết trước
+ Lặp với số lần không biết trước
Ý nghĩa của cấu trúc lặp: 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 một điều kiện nào đó còn đúng.
* Hoạt động 2: Trình bày cho HS biết Lặp với số lần biết trước và cấu trúc lệnh lặp
For-do trong ngôn ngữ lập trình Pascal
GV dẫn dắt vào vấn đề: Trong lập trình
có hai loại cấu trúc lặp, đó là lặp với số
lần biết trước và lặp với số lần không biết
trước Chúng ta đi tìm hiểu lần lượt từng
cấu trúc lặp
GV: Gọi 2 HS lên bảng biểu diễn 2 thuật
2 Lặp với số lần biết trước và
câu lệnh for-do
- Dạng lặp với số lần biết trước dùng để thực hiện câu lệnh một số lần xác định Dạng này dùng biến điều khiển để điều khiển vòng lặp
Trang 8toỏn trờn bảng phụ bằng phương phỏp vẽ
sơ đồ khối
HS: Lờn bảng biểu diễn sơ đồ khối của
hai thuật toỏn trờn
GV: Thuật toỏn trờn cú lặp khụng?
HSTL: Thuật toỏn trờn lặp
GV: Hai thuật toỏn trờn giống và khỏc
nhau như thế nào?
HS: Trả lời theo sự hiểu biết của mỡnh
GV: Nhận xột tổng họp những ý kiến của
HS và dẫn dắt đưa HS biết dạng lặp với
số lần biết trước và sau đú đưa ra hai
dạng cấu trỳc lặp với số lần biết trước
trong Pascal
GV: Núi rừ cho HS biết khi nào dựng
dạng lặp tiến và khi nào dựng dạng lặp
lựi
- Để mụ tả cấu trỳc lặp với số lần biết trước, Pascal dựng cõu lệnh lặp for-do với hai dạng tiến lựi
+ Dạng lặp tiến: Biến đếm tự tăng dần từ giỏ trị đầu đến giỏ trị cuối
+ Dạng lặp lựi: Biến đếm tự giảm dần từ giỏ trị cuối đến giỏ trị đầu
* Chỳ ý: Trong vũng lặp khụng được chứa lệnh làm thay đổi giỏ trị của biến điều khiển
Tiết 13
* Hoạt động 3: Rèn luyện kỹ năng vận dụng lệnh For - do
HĐ 2: Vận dụng kiến thức
MT: Vận dụng câu lệnh For – do vào
biểu diễn thuật toán Tong_1a
GV: Ví dụ cài đặt thuật toán Tong_1a
HS: Nghe giảng, ghi bài
HS: Nghiên cứu 2 ví dụ
Trang 9GV: H·y so s¸nh hai thuËt to¸n trªn.
HS: Nh¾c l¹i kiÕn thøc cò vÒ thuËt to¸n
GV: Cñng cè thªm tr¶ lêi cña häc sinh
GV: ¸p dông vµo thuËt to¸n Tong_1a
h·y tr×nh bµy thuËt to¸n cña Tong_1b
HS: Lªn tr×nh bµy thuËt to¸n Tong_1b
Writeln(‘Tong s la: ’,S:8:4);
ReadlnEnd
VD2: NhËp vµo tõ bµn phÝm 2 sè nguyªn d¬ng M vµ N, 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.
Đặt vấn đề:
Treo nội dung bài toán Tong_2 lên bảng
- GV: Sự khác nhau về giới hạn lặp của
bài toán này với bài toán 1?
3 LÆp víi sè lÇn ch a biÕt tr íc C©u –
lÖnh While do.–Cấu trúc chung:
While <điều kiện> do <câu lệnh lặp>;
Trang 10- HS: Quan sỏt suy nghĩ và trả lời.
Bài toỏn 1: Lặp đến khi N>100
Bài toỏn 2: Lặp đến khi điều kiện 1/
(1+N)<0.0001 được thỏa món
- GV: Nhận xét và đa ra kết luận.
* KL: Qua vớ dụ ta thấy cú một dạng bài
toỏn cú sự lặp lại một số lệnh nhưng
khụng biết trước được số lần lặp Cần cú
một cấu trỳc điều khiển lặp lại một cụng
việc nhất định khi thỏa món một điều
- GV: Đối với bài lập trỡnh này cõu lệnh
sau do ta sử dụng là cõu lệnh đơn hay cõu
- Chú ý: Trong cấu trúc lặp While do–
phải có lệnh tăng biến chỉ số.
* ý nghĩa: Khi điều kiện còn đúng thì
cong thực hiện câu lẹnh sau Do sau đó lại
quay lại kiểm tra điều kiện
* Vớ dụ 1: Tớnh và đưa kết quả ra màn
hỡnh tổng:
1
2
1 1
1 1
N a a
a a
S
+ +
+ + +
0001 0
1 <
+N a
Vớ dụ 2: Tỡm ƯCLN của hai số nguyờn
dương M, NPhõn tớch để xỏc định <điều kiện> và
Trang 11- Nhắc lại cấu trỳc lệnh lặp với số lần biết trước trong Pascal.
- Về nhà dựng ngụn ngữ lập trỡnh Pascal để thực hiện hai thuật toỏn Tong_1a
và Tong_1b SGK/43.- Xem trước vớ dụ 1 và vớ dụ 2 SGK/44-45.
- Viết một chơng trình Pascal sử dụng cấu trúc rẽ nhánh
- Soạn thảo, lu, dịch, sửa lỗi và thực hiện chơng trình
- Đọc, hiểu đoạn chơng trình
2 Kỹ năng:
- Rèn luyện cho HS có khả năng đọc hiểu chơng trình
- Tổ chức trong phòng máy để HS có đợc các kỹ năng cơ bản trong việc bớc đầu làm quen với “Môi trờng Turbo Pascal và lập trình sau này”
3 Thái độ:
- Có thái độ tích cực trong giờ thực hành
- Biết vai trò quan trọng của giờ thực hành đầu tiên
- Bảo quan phòng máy theo sự chỉ đạo của GV
II Chuẩn bị:
- GV: Giáo án, tài liệu, SGK, SGV và đồ dùng dạy học
- HS: Tìm hiểu nội dung bài thực hành ở nhà và các kiến thức có liên quan
III /các b ớc lên lớp
1 ổ n định tổ chức :
Trang 12- Xem nội dung bài tập và thực hành.
* Những yêu cầu về kiến thức, kỹ năng,
thái độ của học sinh
- Nhấn phím F7 liên tục khi thực hiện đến
câu lệnh nào sẽ có một vết sáng đi đến
Trang 13•Ôn lại toàn bộ CT đã học giở sau ôn tập cuối năm Ngày soạn: 21/11/2009
- Khơi gợi lòng ham muốn yêu thích học lập trình
- Rèn luyện đức tính cần cù, chăm chỉ và có t duy khái quát
II - Chuẩn bị
Gv: Chuẩn bị các kiến thức liên quan, một số bài toán đơn giản
Hs: Xem lại các KN, cấu trúc, hoạt động của câu lệnh rẽ nhánh và lặp đã học
III - – Ph ơng pháp : - Gợi mở vấn đáp
Trang 1411A7 16
2.Kiểm tra bài cũ ( Lồng vào bài mới)
3.Bài tập
Bài tập 4: Hãy viết câu lệnh re nhánh để
If y>=x then z: =x+y Else z:= 0.5;
b) If sqr(x-a)+sqr(y-b)<= sqr(r) then z:=abs(x)+abs(y)
3
2 2
For n:=1 to 50 do Y:=Y+n/(n+1); Writeln(‘ tong Y=’,Y:8:2);
ReadlnEnd
b) Program bt5b;
Trang 15Gv: Em nhận xét bài toán này sử dụng cấu
trúc nào?
Hs:
Gv: Hãy khai baos các biến sử dụng một
biến để tính giai tha?
While not(1/giaithua< 0.000002) do Begin
Trang 17Ch¬ng IV : d÷ liÖu cã cÊu tróc
Ngµy so¹n: 26/11/2009
Ngµy gi¶ng: 28/11/2009
TiÕt : 18- 21
Trang 18Bài 11 Kiểu mảng
I mục tiêu của bài:
1 Kiến thức
- Hiểu khái niệm mảng một chiều và mảng hai chiều
- Hiểu cách khai báo và truy cập đến các phàn tử trong mảng
- Tiếp tục khơi gợi lòng ham thích giải toán bằng lập trình 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
II Chuẩn bị của Giáo viên và học sinh:
1 Giáo viên: SGK, giáo án, STK (máy chiếu nếu có)
2 Học sinh: SGK, chuẩn bị trớc bài ở nhà
III Ph ơng pháp giảng dạy
Trang 19* Hoạt động 1: Trình bày cho HS biết khái niệm của kiểu mảng một chiều.
- GV: ĐVĐ Với những kiểu dự liệu đã
biết, làm thế nào để lu trữ đợc một dãy
số?
- HS: Suy nghĩ và trả lời.
- GV: Các ngôn ngữ lập trinhg thờng
cung cấp một số kiểu dự liệu đợc xây
dựng từ những kiểu dự liệu chuẩn đợc gọi
là kiểu dự liệu có cấu trúc Bây giờ chúng
ta tìm hiểu kiểu mảng một chiều
- GV: Đa ra một số ví dụ cần lập trình đa
ra một dãy các số nguyên, hãy tìm cách
l-u trữ một dãy số ngl-uyên trong lập trình?
Bằng cách nào lu trữ một dãy các số
nguyên dới dạng bảng?
- HS: Suy nghĩ và trả lời câu hỏi
- GV: Nhận xét câu trả lời của HS sau đó
đa ra khái niệm mảng một chiều và một
số yếu tố liên quan
- Với mảng một chiều ta cần quan tâm
Trang 20- GV: Em nào hãy xác định Input và
Output của bài toán?
- HS: Đứng tại chỗ trả lời câu hỏi
- GV: Ghi nháp lên bảng
- GV: Ghi hai chơng trình lên bảng và
Phân tích rõ hai chơng trình để HS nhận
thấy sự tiện lợi khi sử dụng mảng
- HS: Trong khi GV phân tích hai chơng
trình, HS đa ra ý kiến nhậm xét hai chơng
trình
+ Cách khai báo biến mảng một chiều.+ Cách truy cập đến từng phần tử trong mảng
* Xét hai ví dụ:
+ Ví dụ 1: Nhập vào nhiệt độ (trung bình)
của mỗi ngày trong tuần Tính và đa ra màn hình nhiệt độ trung bình của tuần và
số lợng ngày có nhiệt độ TB cao hơn nhiệt trung bình trong tuần?
If t1 > TB then Dem :=dem + 1;
If t2 > TB then Dem :=dem + 1;
If t3 > TB then Dem :=dem + 1;
If t4 > TB then Dem :=dem + 1;
If t5 > TB then Dem :=dem + 1;
If t6 > TB then Dem :=dem + 1;
If t7 > TB then Dem :=dem + 1;Writeln(‘Nhiet do trung binh tuan
+ Ví dụ 2: Nhập vào nhiệt độ (trung bình)
của mỗi ngày trong năm Tính và đa ra màn hình nhiệt độ trung bình của năm và
Trang 21- GV: Nhận xét ý kiến của HS và đa ra ý
kiến để HS hiểu rõ hơn sự cần thiết của
mảng một chiều trong cài đặt thuật toán
số lợng ngày có nhiệt độ TB cao hơn nhiệt trung bình trong năm?
Program Nhietdo_Nngay;
Uses Crt;
Var Nhietdo : Array[1 365] of Integer;
Dem, i, n: Byte; Tong, TB:Real;
Begin
Write(‘Nhap so ngay n = ’); readln(n);Tong:=0; Dem:=0
For i:=1 to n do Begin
Write(Nhap nhiet do ngay thu
If Nhietdo[i]>TB then dem:=dem+1;
Writeln(‘Nhiet do trung binh ’,n,’ ngay
* Hoạt động 2: Giới thiệu cách hai báo mảng một chiều và Phân tích một số các ví dụ
để HS hiểu và biết cách vận dụng khai báo mảng một chiều trong cài đặt
* ổn định lớp: (1 phút)
- Kiểm tra bài cũ (lồng trong bài
a
Khai báo mảng một chiều
* Cách 1: Khai báo gián tiếp.
Trang 22- GV: Đặt vấn đề, và đa ra cách khai báo
mảng một chiều trong ngôn ngữ lập trình
Pascal Giải thích các từ khoá mới
- GV: Khai báo bằng cách nào thuận tiện
hơn?
- HS: Suy nghĩ và trả lời.
- GV: Tuỳ vào từng trờng hợp cụ thể
những thờng sử dụng cách 2
- GV: Lấy ví dụ cụ thể để HS truy vấn
đến các phần tử trong mảng, sau đó lấy
một số ví dụ có sử dụng kiểu mảng trong
cài đặt
- GV: Em nào hãy xác định Input và
Output của bài toán?
- HS: Suy nghĩ và trả lời
- GV: Ghi lên bảng Input và Output.
- GV: Hãy nêu ý tởng của thuật toán tìm
max?
Type <tên kiểu mảng>=array[<chỉ số
đầu> <chỉ số cuối>] of <kiểuphần tử>;
Var <ds biến mảng> : <tên kiểu mảng>;
* Ví dụ:
Type nhietdo = array[1 365] of integer; Var A: nhietdo;
* Cách 2: Khai báo trực tiếp
Var <Ds biến mảng> : array[<chỉ số
đầu> <chỉ số cuối>] of <kiểuphần tử>;
+ Kiểu chỉ số thờng là đoạn số nguyên liên tục có n1 n2, với n1 là chỉ số đầu, n2
là chỉ số cuối
+ Kiểu phần tử là kiểu dự liệu của các phần tử trong mảng
+ Để truy cập đến các phần tử trong mảng, ta làm:
Trang 23- GV: Vừa viết chơng trình vừa phân tích
cho HS hiểu rõ cách thực hiện chơng
trình GV trình bày rõ các thao tác khi
viết chơng trình
- GV: Phát vấn HS về kiến thức đã học ở
những bài trớc để xây dựng bài toán mới
- HS: Xem lại toàn bộ kiến thức đã học
Var A: Array[1 100] of Integer;
N, i, Vt: Byte; Max: Integer;
Begin
Write(‘Nhap so cac phan tu n = ‘);
Readln(n);
For i:=1 to n do Begin
- KT bài cũ: Hãy viết cách cú pháp khai
báo mảng một chiều và trình bày chức
năng các từ khoá trong cú pháp khai báo?
b Các ví dụ (Tiếp)
* Ví dụ 2: Sắp xếp dãy các số nguyên
bằng thuật toán tráo đổi
- Input: Số nguyên dơng n, và dãy A1,
A2, ,An
Trang 24- GV: Em nào hãy xác định Input và
Output của bài toán sắp xếp?
- HS: Suy nghĩ và trả lời.
- GV: Ghi lên bảng Input và Output.
- GV: Hãy nêu ý tởng của thuật toán sắp
Var A: Array[1 100] of Integer;
N,i,j: Byte; tg: Integer;
Begin
Write(‘Nhap so cac phan tu n = ‘);
Readln(n);
For i:=1 to n do Begin
Write(‘A[‘,i,’]= ‘); readln(a[i]);
End;
For i:=1 to n-1 do For j:=i+1 to n do
If A[i]>A[j] then Begin
Tg:=A[i]; A[i]:=A[j]; A[j]:=tg;
End;
Writeln(‘Mang sau khi sap xep la’);
For i:=1 to n do Write(A[i]:5);
Trang 25- GV: Em nào hãy xác định Input và
Output của bài toán?
- HS: Suy nghĩ và trả lời.
- GV: Ghi lên bảng Input và Output.
- GV: Hãy nêu ý tởng của thuật toán tìm
dãy A, ta so sánh k với số hạng AGiữa trong
đó Giữa = (n+1/2) Khi đó sảy ra 1 trong 3 trờng hợp
+ Nếu AGiữa=k thì Giữa là chỉ số cần tìm Việc tìm kiếm kết thúc
+ Nếu Agiữa>k thì việc tìm kiếm trong phạm vi từ A1,A2, ,AGiữa
+ Nếu Agiữa<k thì việc tìm kiếm trong phạm vi từ AGiữa, Agiữa+1, ,An
+ Việc tìm kiếm sẽ lặp lại một số lần hoặc đã tìm thấy khoá k trong dãy A hoặc phạm vi tìm kiếm bằng rỗng
Program VD2;
Var A: Array[1 250] of Integer;
N, i, Dau, Cuoi, Giua: Byte;
k: Integer; ok: Boolean;
Begin
Write(‘Nhap so cac phan tu n = ‘);
Readln(n);
For i:=1 to n do Begin
Write(‘A[‘,i,’]= ‘); readln(a[i]);
End;
Write(‘Nhap so k = ’); Readln(k);
Dau:=1; Cuoi:=n; ok:=false;
While Dau <=Cuoi and not ok do Begin
If ok then Writeln(‘Chi so can tim
la:’,Giua) Else Writeln(‘Khong tim
Trang 26Readln;
End.
Tiết 21
- GV: Đặt vấn đề, và đa ra những vấn đề
cần thiết về nlu trữ dự liệu dới dạng bảng
để các em thấy nhu cầu sử dụng mảng hai
cột và kiểu của mỗi phần tử trong mảng
- GV: Gọi HS lên bảng khai báo một số
biến mảng hai chiều theo yêu cầu của
GV
2 Kiểu mảng hai chiều
- KN: Mảng hai chiều là một bảng các phần tử cùng kiểu
- Với mảng hai chiều ta cần quan tâm đến:+ Tên kiểu mảng hai chiều
+ Số lợng các phần tử của mỗi chiều trong mảng
+ Kiểu dữ liệu của các phần tử
+ Cách khai báo biến mảng hai chiều.+ Cách truy cập đến từng phần tử trong mảng
a Khai báo mảng hai chiều.
* Cách 1: Khai báo gián tiếp.
Type <tên kiểu mảng>=array[<Kiểu chỉ
* Cách 2: Khai báo trực tiếp
Var <Ds biến mảng> : array[<Kiểu chỉ
số hàng>,<Kiểu chỉ số cột>] of <kiểuphần tử>;
* Ví dụ:
Var A : array[1 100,1 100] of integer;
Trang 27- HS: Lên bảng và làm theo yêu cầu của
GV
+ Để truy cập đến các phần tử trong mảng, ta làm:
<Tên biến mảng>[chỉ số hàng,chỉ số cột]
* Ví dụ: A[2,13], B[23,55],…
- GV: Viết chơng trình để HS có thể dễ
dàng nhận ra các thao tác phải thực hiện
khi viết chơng trình Và giải thích và
phân tích các câu lệnh trong chơng trình
và cách thực hiện của các câu lệnh
- HS: Chú ý nghe giảng và ghi bài
- GV: Vừa viết chơng trình, vừa phát vấn
Program Cuu chuong;
Var A: Array[1 9,1 10] of integer;
i,j: Byte;
Begin For i:=1 to 9 do For j:=1 to 10 do
A[i,j]:=i*j;
For i:=1 to 9 do Begin
- Nhắc lại một số khái niệm mới
- Nhắc lại cấu trúc câu lệnh bằng cách chia bảng thành 4 đồng thời gọi bốn HS nhắc lạ
Trang 282 Kĩ năng: Nâng cao kĩ năng sử dụng một số lệnh kiểu dữ liệu mảng một chiều trong
lập trình, cụ thể:
+ Khai báo kiểu dữ liệu mảng một chiều
+ Nhập/xuất dữ liệu cho mảng
+ Duyệt qua tất cả các phần tử của mảng để xử lý từng phần tử
- Biết giải một số bài toán cơ bản thường gặp:
+ Tính tổng các phần tử thoả mãn điều kiện nào đó
+ Đếm số các phần tử thoả mãn điều kiện nào đó
+ Tìm phần tử lớn nhất, nhỏ nhất
3 Thái độ
- Góp phần rèn luyện tác phong, tư duy lập trình:
- Tự giác, tich cực, chủ động và sáng tạo trong tìm kiếm kiến thức
1 Tìm hiểu chương trình ở câu a,
sách giáo khoa, trang 63 và chạy thử
chương trình
1 Quan sát, chú ý và trả lời
Trang 29- Chiếu chương trình lên bảng.
- Hỏi: Khai báo Uses CRT; có ý
nghĩa gì?
- Hỏi: Myarray là tên kiểu dữ liệu
hay tên biến?
- Hỏi: Vai trò của nmax và n có gì
- Thực hiện lại chương trình lần cuối
để học sinh thấy kết quả
2 Sửa chương trình câu a để được
chương trình giải quyết bài toán ở
câu b
- Chiếu lên màn hình các lệnh cần
thêm vào chương trình ở câu a
- Hỏi: Ý nghĩa của biến Posi và neg?
- Hỏi: Chức năng của lệnh?
If a[i]>0 then posi:=posi+1
else if a[i]<0 then neg:=neg+1;
- Yêu cầu học sinh thêm vào vị trí
cần thiết để chương trình đếm được
số
- Khai báo thư viện chương trình con Crt để
sử dụng được thủ tục Clrscr;
- Tên kiểu dữ liệu
- nmax là số phần tử tối đa có thể chứa của biến mảng a n là số phần tử thực tế của a
- Lệnh khai báo kiểu và khai báo biến
- Quan sát chương trình thực hiện và kết quả trên màn hình
- Lệnh sinh ngẫu nhíên giá trị cho mảng a từ -299 đến 299
- In ra màn hình giá trị của từng phần tử trong mảng a
- Cộng các phần tử chia hết cho k
- Có số lần đúng bằng số phần tử a[i] chia hết k
- Quan sát giáo viên thực hiện chương trình
- Dùng để lưu số lượng đếm được
- Đếm số dương hoặc đếm số âm
- Chỉ ra vị trí cần thêm vào trong chương trình
- Lưu chương trình Thực hiện chương trình
và thông báo kết quả
Trang 30- Yêu cầu học sinh gõ nội dung và
lưu lại với tên caub.pas Thực hiện
chương trình và báo cáo kết quả
2 Hoạt động 2: Rèn luyện kĩ năng lập trình.
1 Lấy một ví dụ thực tiễn: Người mù
tìm viên sỏi có kích thước lớn nhất
trong một dãy các viên sỏi để gợi ý
cho học sinh thuật toán tìm giá trị lớn
- Hỏi: Nếu muốn tìm phần tử lớn nhất
với chỉ số lớn nhất ta sửa ở chỗ nào?
3 Đặt yêu cầu mới: Viết chương trình
- Yêu cầu học sinh nhập dữ liệu vào
của giáo viên và báo kết quả
1 Theo dõi ví dụ của giáo viên
- So sánh lần lượt từ trái sang phải, giữ lại chỉ số của phần tử lớn nhất
2 Quan sát chương trình, suy nghĩ và trả lời
- Giữ lại chỉ số của phần tử có giá trị lớn nhất
- Sau khi tìm được giá trị lớn nhất
- Soạn chương trình vào máy Thực hiện chương trình và thông báo kết quả
- Nhập dữ liệu vào và thông báo cho giáo viên dữ liệu ra
Trang 31- Đánh giá kết quả của học sinh.
IV Củng cố
1 Những nội dung đã học
Một số thuật toán cơ bản:
+ Tính tổng các phần tử thoả mãn điều kiện nào đó
+ Đếm số các phần tử thoả mãn điều kiện nào đó
+ Tìm phần tử lớn nhất, nhỏ nhất
2 Câu hỏi và bài tập về nhà
- Xem nội dung của bài chuÈn bÞ cho thi häc kú
……… Ngµy so¹n: 26/11/2009
1 Chuẩn bị của giáo viên
- Máy chiếu qua đầu, bìa trong, sách giáo khoa
2 Chuẩn bị của học sinh
- Sách giáo khoa, một số chương trình bài tập
III HOẠT ĐỘNG DẠY-HỌC
Trang 32For lùi.
While <> do
- Array
2 Hoạt động 2: Rèn luyện kĩ năng.
Trang 331 Xác định bài toán.
- Chiếu nội dung đề bài lên bảng
- Chia lớp làm hai nhóm
Nhóm 1: Nêu câu hỏi phân tích
Nhóm 2: Trả lời câu hỏi phân tích
- Yêu cầu: Viết chương trình hoàn
thiện lên bìa trong
- Thu phiếu học tập, chiếu kết quả
lên bảng Gọi học sinh của nhóm
khác nhận xét đánh giá và bổ sung
3 Chuẩn hóa kiến thức bằng
chương trình mẫu của giáo viên
- Thảo luận theo nhóm để viết chương trình
- Báo cáo kết quả
- Nhận xét, đánh giá và bổ sung những thiếu sót của nhóm khác
3 Theo dõi và ghi nhớ
IV ĐÁNH GIÁ CUỐI BÀI
1 Những nội dung đã học
- Giáo viên yêu cầu học sinh nhắc lại một số nội dung chính đã được ôn tập trong tiết học
2 Câu hỏi và bài tập về nhà
- Chuẩn bị kiến thức cho tiết sau kiểm tra học kỳ 1: Xem lại toàn bộ các kiến thức đã được ôn tập, đặc biệt chú trọng cấu trúc lặp và rẽ nhánh, kiểu mảng
Bµi kiÓm tra häc kú i
M«n : Tin häc
Trang 341 5 ,
x
y z x
n ≤
Bµi lµm
Trang 36- Củng cố lại các kiến thức cơ bản khi lập trình với kiểu dữ liệu mảng.
- Làm quen với thuật toán sắp xếp đơn giản
Trang 372 Chuẩn bị của học sinh
- Sách giáo khoa, chương trình đã được viết sẵn
III HOẠT ĐỘNG DẠY-HỌC
1 Hoạt động 1: Tìm hiểu chương trình diễn đạt của thuật toán sắp xếp.
1 Gợi ý cho học sinh thuật toán sắp
xếp tăng dần
- Lấy một ví dụ thực tiễn: Người mù
sắp xếp một dãy các viên bi theo kích
thước không giảm
- Yêu cầu: Vạch ra các bước để sắp
xếp các phần tử của một mảng không
giảm
2 Tìm hiểu chương trình ví dụ, sách
giáo khoa, trang 65
1 Chú ý theo dõi những dẫn dắt của giáo viên
để trả lời câu hỏi
- Lần lượt lấy từng phần tử từ trái qua phải
- Cứ mỗi phần tử ta đem so sánh lần lượt với các phần tử đứng bên phải của nó
- Nếu nhỏ hơn thì đổi chỗ
2 Quan sát chương trình, suy nghĩ câu hỏi và trả lời
- Biến i, j dùng làm chỉ số
- Mỗi vòng lặp For ứng với mỗi phép duyệt lần
Trang 38- Chiếu chương trình ví dụ lên bảng.
- Hỏi: Vai trò của biến i, j trong
chương trình? mỗi vòng lặp For
trong đoạn chương trình sắp xếp có ý
- Đặt yêu cầu mới: Khai báo thêm
biến nguyên Dem và bổ sung vào
chương trình đoạn lệnh cần thiết để
biến Dem tính số lần thực hiện tráo
đổi trong thuật toán In kết quả tìm
được ra màn hình
- Hỏi: Đoạn chương trình nào dùng
để thực hiện tráo đổi giá trị?
- Yêu cầu hoc sinh viết lệnh để đếm
- Yêu cầu học sinh nhập dữ liệu vào
của giáo viên và thông báo kết quả
- Đánh giá kết quả của học sinh
lượt
- Dùng để đổi giá trị của hai phần tử a[i] với a[i+1]
- Quan sát giáo viên thực hiện chương trình
- Chương trình sắp xếp dãy số thao thứ tự không giảm
3 Quan sát yêu cầu mới, chú ý định hướng giải quyết của giáo viên
tg:=a[i]; a[i]:=a[i+1]; a[i+1]:=tg;
- Dem := Dem+1;
- Ngay sau đoạn lệnh tráo đổi
- Soạn chương trình vào máy, thực hiện chương trình và thông báo kết quả
- Nhập dữ liệu theo yêu cầu của giáo viên, thực hiện chương trình và thông báo kết quả sau khi thực hiện
2 Hoạt động 2: Rèn luyện kĩ năng nhận xét, phân tích và đề xuất cách giải bài toán
sao cho chương trình chạy nhanh hơn
Trang 391 Xác định bài toán.
- Chiếu đề bài lên bảng
- Yêu cầu: Xác định dữ liệu vào, dữ
- Thực hiện chương trình để học sinh
biết thời gian thực hiện chương trình
và kết quả của chương trình
- Hỏi: Trong chương trình phải thực
hiện bao nhiêu phép cộng?
- Hỏi: Có cách nào để cải tiến?
- Lệnh này được thay lệnh nào trong
chương trình? Viết ở vị trí nào?
3 Yêu cầu: Viết chương trình hoàn
thiện
4 kết luận: Cùng một bài toán, có
nhiều cách giải quyết khác nhau
Người lập trình cần chọn cách sao
cho máy thực hiện nhanh nhất
1 Quan sát đề bài và tả lời câu hỏi
- Vào: Mảng A gồm n phần tử
- Ra: Mảng B gồm n phần tử
- Tại vị trí i ta tính tổng giá trị các phần tử từ
1 đến i
2 Quan sát chương trình trên bảng
- Quan sát giáo viên thực hiện, nhận xét về thời gian thực hiện chương trình
- Phải thực hiện n(n+1)/2 phép cộng
- Để tính bước thứ i, ta sử dụng kết quả đã tính ở bước thứ i-1
B[i]:=B[i-1]+A[i];
- Thay đoạn lệnhFor j:=1 to i do B[i]:=B[i]+A[j];
3 Soạn chương trình vào máy, thực hiện chương trình và thông báo kết quả
- Nhận xét về thời gian thực hiện của chương trình này so với chương trình trước khi cải tiến
IV Củng cố- dặn dò
1 Những nội dung đã học
- Thuật toán sắp xếp đơn giản
- Một bài toán có thể có nhiều cách viết thành một chương trình Cần chọn cách
có số phép tính ít nhất
2 Câu hỏi và bài tập về nhà