Giáo án Tin học Lớp 8 - Bài 7 đến 9

Giáo án Tin học Lớp 8 - Bài 7 đến 9

Lưu ý:

+ Để tránh phức tạp, gây khó hiểu với HS, mô tả hoạt động của lệnh for.do ở trên là dựa trên mặc định biến đếm, giá trị đầu, giá trị cuối là số nguyên. Một cách tổng quát, biến đếm, giá trị đầu, giá trị cuối có thể là kiểu kí tự, kiểu đoạn con. Tuy nhiên, ở đây không đề cập đến những vấn đề này với mục đích để giản lược nội dung, giúp HS dễ tiếp thu kiến thức mà vẫn đảm bảo những kiến thức, kĩ năng cần thiết theo yêu cầu.

+ Trong Pascal cấu trúc for.do có hai dạng tiến và lùi:

 Trong SGK chỉ giới thiệu dạng tiến. Về cơ bản dạng tiến gần gũi với cách suy nghĩ tự nhiên của HS THCS hơn và chỉ cần dạng tiến là đủ, không yêu cầu phải giới thiệu thêm dạng lùi.

 Khi thực hiện câu lệnh lặp for.do các giá trị đầu và giá trị cuối phải được xác định trước. Chính vì thế mà ta biết trước được số lần thực hiện câu lệnh sau từ khóa do (số lần lặp bằng giá trị cuối - giá trị đầu + 1). Chính vì vậy, câu lệnh for.do còn được gọi là câu lệnh lặp với số lần biết trước.

 

doc 28 trang Người đăng tuvy2007 Lượt xem 478Lượt tải 0 Download
Bạn đang xem 20 trang mẫu của tài liệu "Giáo án Tin học Lớp 8 - Bài 7 đến 9", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Bài 7. Lặp với số lần biết trước
1. Mục đích, yêu cầu
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 lặp với số lần biết trước for...do trong Pascal.
Viết đúng được lệnh for...do trong một số tình huống đơn giản.
Hiểu lệnh ghép trong Pascal
2. Những điểm cần lưu ý và gợi ý dạy học
	Giống với cấu trúc rẽ nhánh, cần xuất phát từ những hoạt động trong đời sống thực tiễn có tính chất lặp đi lặp lại để HS hiểu về khái niệm lặp. Ví dụ, tiếng gà trống gáy, tiếng chim hót, tiếng chuông đồng hồ báo thức gọi em dạy mỗi buổi sáng; 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 chiều trở về nhà; Hoặc trên lớp, giờ trả bài kiểm tra cô giáo lặp đi lặp lại việc gọi tên HS và ghi điểm của HS vào sổ điểm, cô giáo sẽ ngừng lại khi đã vào điểm cho tất cả HS trong lớp. 
	Giả sử cô giáo đề nghị em viết chương trình Pascal để chào từng bạn của lớp em (hoặc của nhóm em), cụ thể chương trình cho phép từng bạn nhập tên của mình từ bàn phím và in ra lời chào tương ứng, ví dụ khi một bạn nhập tên là Mai, thì chương trình sẽ in ra 'Chao ban Mai', một bạn khác nhập tên là Trung thì sẽ in ra 'Chao ban Trung'. Như vậy em sẽ cần viết một chương trình Pascal cho phép lặp đi lặp lại việc nhập tên và hiển thị ra màn hình lời chào. Làm thế nào để chương trình Pascal của em có thể thực hiện việc lặp này?
	Giả sử lớp của em có 40 bạn, em hoàn toàn có thể viết 40 lần lệnh để nhập tên và lệnh hiển thị dòng chào. Các lệnh này hoàn toàn giống nhau. Tuy nhiên, một chương trình như vậy thì vừa dài, vừa nhàm chán, dễ sai sót.
	Trong Pascal cung cấp một câu lệnh lặp như sau:
for := to do ;
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ó 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.
	Hoạt động của câu lệnh lặp này như sau: Ban đầu biến đếm được gán bằng giá trị đầu, mỗi lần câu lệnh viết sau từ khoá do được thực hiện biến đếm được tăng lên một đơn vị, câu lệnh được thực hiện cho đến khi biến đếm lớn hơn giá trị cuối.
	Lưu ý:
+ Để tránh phức tạp, gây khó hiểu với HS, mô tả hoạt động của lệnh for...do ở trên là dựa trên mặc định biến đếm, giá trị đầu, giá trị cuối là số nguyên. Một cách tổng quát, biến đếm, giá trị đầu, giá trị cuối có thể là kiểu kí tự, kiểu đoạn con. Tuy nhiên, ở đây không đề cập đến những vấn đề này với mục đích để giản lược nội dung, giúp HS dễ tiếp thu kiến thức mà vẫn đảm bảo những kiến thức, kĩ năng cần thiết theo yêu cầu.
+ Trong Pascal cấu trúc for...do có hai dạng tiến và lùi:
Dạng tiến: 
for := to do ;
Dạng lùi: 
for := downto do ;
	Trong SGK chỉ giới thiệu dạng tiến. Về cơ bản dạng tiến gần gũi với cách suy nghĩ tự nhiên của HS THCS hơn và chỉ cần dạng tiến là đủ, không yêu cầu phải giới thiệu thêm dạng lùi. 
	Khi thực hiện câu lệnh lặp for...do các giá trị đầu và giá trị cuối phải được xác định trước. Chính vì thế mà ta biết trước được số lần thực hiện câu lệnh sau từ khóa do (số lần lặp bằng giá trị cuối - giá trị đầu + 1). Chính vì vậy, câu lệnh for...do còn được gọi là câu lệnh lặp với số lần biết trước.
	GV nên sử dụng chương trình Lap trong SGK, phân tích ví dụ này để cho HS hiểu rõ về hoạt động của câu lệnh lặp, hiểu về biến đếm, giá trị đầu, giá trị cuối và câu lệnh. 
program Lap;
var i: Integer;
begin 
for i := 1 to 10 do
writeln('Day la lan lap thu ',i);
end. 
Có thể hướng dẫn học sinh lập bảng quá trình thực hiện chương trình trên như dưới đây:
Lần lặp thứ
i
Kết quả viết ra màn hình
1
1
Day la lan lap thu 1
2
2
Day la lan lap thu 2
3
3
Day la lan lap thu 3
4
4
Day la lan lap thu 4
5
5
Day la lan lap thu 5
6
6
Day la lan lap thu 6
7
7
Day la lan lap thu 7
8
8
Day la lan lap thu 8
9
9
Day la lan lap thu 9
10
10
Day la lan lap thu 10
	Sau khi cùng với HS phân tích chương trình Lap, GV có thể cùng HS sử dụng câu lệnh for...do để viết đoạn câu lệnh nhập tên và hiển thị ra màn hình dòng chào hỏi. Giả sử lớp có 40 bạn thì đoạn câu lệnh có thể như sau:
	For i:= 1 to 40 do 
	Begin
	write('Nhap ten cua ban'); Readln(Ten);
	write('Chao ban ', Ten);
	end;
	Lưu ý: Cần dành thời để giới thiệu về câu lệnh ghép. Khác với chương trình Lap, sau từ khoá do chỉ có một câu lệnh cần thực hiện, ở chương trình Chao_hoi, sau từ khoá do có hai câu lệnh cần thực hiện. Muốn vậy, hai câu lệnh này cần phải được "gói" trong từ khoá begin...end. Một cách đơn giản có thể hiểu cấu trúc begin...end là một câu lệnh của Pascal, câu lệnh này có thể chứa nhiều câu lệnh khác của Pascal. Lưu ý HS trong cấu trúc câu lệnh ghép này sau end là dấu chấm phẩy (;), không phải là dấu chấm (.).
	Cần lấy thêm một số ví dụ khác để HS biết và tập làm quen với các tình huống sử dụng câu lệnh for...do và lệnh ghép. Có thể yêu cầu HS đọc hiểu ví dụ có trong SGK (như chương trình Tinh_tong, Tinh_giai_thua) hoặc đưa ra bài toán đơn giản cần sử dụng đến câu lệnh for...do và hướng dẫn HS viết chương trình.
	GV cần khái quát cho HS cấu trúc lặp với số lần biết trước có ở mọi ngôn ngữ lập trình, mỗi ngôn ngữ lập trình có câu lệnh riêng để mô tả cấu trúc này. Trên đây các em đã được tìm hiểu về câu lệnh lặp với số lần biết trước trong Pascal (for...do).
	Cuối bài này, giao nhiệm vụ cho HS hoàn thiện chương trình thực hiện chào hỏi các bạn trong lớp (hoặc trong nhóm) để chuẩn bị cho buổi thực hành tới.
	Căn cứ vào tình hình tiếp thu của HS, GV cần lựa chọn và giao một số bài tập cho HS luyện tập, không nhất thiết phải làm hết tất cả các bài tập cuối bài này.
3. Hướng dẫn trả lời câu hỏi và bài tập
Có thể nêu rất nhiều vài ví dụ về các hoạt động lặp. Dưới đây là một số ví dụ:
Hàng ngày em đặt đồng hồ báo thức lúc 6 giờ để dậy sớm tập thể dục.
Hàng ngày (hoặc hàng tuần) bác lái xe khách lái xe để chuyên chở hành khách xuất phát từ một địa điểm và thời gian nhất định và đi theo một tuyến đường đã được xác định trước.
Mỗi lần được khởi động, máy tính của em sẽ thực hiện cùng các hoạt động tự kiểm tra các thành phần máy tính, sau đó khởi động hệ điều hành theo một trình tự đã được quy định trước. 
a) Có thể thấy, để vẽ được hình ...a, thao tác chính cần thực hiện là vẽ nửa đường tròn có bán kính 1 đơn vị từ một điểm A tới điểm B theo một trong bốn hướng: lên trên, xuống dưới, sang trái, sang phải (chẳng hạn, hình...b là nửa đường tròn được vẽ từ điểm A tới điểm B theo hướng lên trên). 
a)	b)
Hình 1
Có thể mô tả các bước của thuật toán để vẽ hình ... a) như sau:
Bước 1. Xác định điểm bắt đầu vẽ là X. 
.
Bước 2. Vẽ nửa đường tròn theo hướng lên trên. 
Bước 3. Vẽ nửa đường tròn theo hướng sang trái. 
Bước 4. Vẽ nửa đường tròn theo hướng xuống dưới.
Bước 5. Vẽ nửa đường tròn theo hướng sang phải. 
Bước 6. Tô màu và kết thúc thuật toán. 
Lưu ý đối với giáo viên. Có thể trình bày thuật toán vẽ hình trên dưới dạng một cách hình thức như sau.
Ta gọi thao tác vẽ nửa đường tròn theo hướng x là vẽ nửa đường tròn có bán kính 1 đơn vị bắt đầu từ một điểm xác định, đường kính nối điểm đầu và điểm cuối của nửa đường tròn vuông góc với hướng x và nửa đường tròn "cong về hướng x". Ta chỉ xét x là một trong bốn hướng: lên trên, xuống dưới, sang trái, sang phải.
Với các hướng, ta định nghĩa phép toán sau: lên trên + 1 = sang trái, sang trái +1 = xuống dưới, xuống dưới +1 = sang phải, sang phải +1 = lên trên. Khi đó có thể mô tả các bước của thuật toán để vẽ hình 1a như sau:
Có thể mô tả các bước của thuật toán để vẽ hình ... a) như sau:
Bước 1. Xác định điểm bắt đầu vẽ là X. 
Bước 2. Đặt i = 0 và đặt hướng = lên trên.
Bước 3. Vẽ nửa đường tròn theo hướng đã đặt. 
Bước 4. i = i + 1. 
Bước 5. Nếu i > 4, chuyển bước 6; ngược lại, đặt hướng = hướng + 1 và quay lại bước 3.
Bước 6. Tô màu và kết thúc thuật toán. 
b) Thuật toán tương tự như trên. Thao tác chính cần lặp lại là vẽ hình vuông. Tại mỗi bước, giữ nguyên tâm hình vuông và thay đổi hướng vẽ một góc 30o.
Lưu ý đối với giáo viên. Bài này không yêu cầu học sinh mô tả một cách chính xác các bước của thuật toán. Điều quan trọng là học sinh nhận biết được: muốn vẽ được các hình đã cho chỉ cần lặp thao tác vẽ nửa đường tròn bốn lần hoặc lặp thao tác vẽ hình vuông ba lần.
Câu lệnh lặp có tác dụng chỉ dẫn cho máy tính thực hiện lặp lại một câu lệnh hay nhóm câu lệnh với một số lần nhất định. Câu lệnh lặp làm đơn giản và giảm nhẹ công sức của người viết chương trình.
Chúng ta nói rằng khi thực hiện các hoạt động lặp, chương trình kiểm tra một điều kiện. Với lệnh lặp 
for := to do ;
của Pascal, điều kiện cần phải kiểm tra chính là giá trị của biến đếm lớn hơn giá trị cuối. Nếu điều kiện không được thoả mãn, câu lệnh được tiếp tục thực hiện; ngược lại, chuyển sang câu lệnh tiếp theo trong chương trình.
Tuy có vòng lặp 1000 lần, nhưng chương trình Pascal nêu trong câu hỏi không thực hiện bất kì một hoạt động nào. Tuy nhiên đây vẫn là câu lệnh hợp lệ.
Thuật toán tính tổng A = 
Bước 1. Gán A ¬ 0, i ¬ 1. 
Bước 2. A ¬ .
Bước 3. i ¬ i + 1. 
Bước 4. Nếu i £ n, quay lại bước 2. 
Bước 5. Ghi kết quả A và kết thúc thuật toán.
Trừ d), tất cả các câu lệnh đều không hợp lệ: 
a) Giá trị đầu của biến đếm phải nhỏ hơn giá trị cuối của biến đếm; 
b) Các giá trị đầu và giá trị cuối của biến đếm phải là số nguyên; 
c) Thiếu dấu hai chấm khi gán giá trị đầu; 
d) Thừa dấu chấm phẩy thứ nhất, nếu như ta muốn lặp lại câu lệnh writeln('A') mười lần, ngược lại câu lệnh là hợp lệ; 
e) Biến x đã được khai báo như là biến có dữ liệu kiểu số thực và vì thế không thể dùng để xác định giá trị đầu và giá trị cuối trong câu lệnh lặp.
Thuật toán:
Bước 1. Nhập các số n và x. 
Bước 2. A ¬ 1, i ¬ 0 (A là biến lưu luỹ thừa bậc n của x). 
Bước 3. i¬i + 1, A ¬ A.x. 
Bước 4. Nếu i < n, quay lại bước 3.
Bước 5. Thông báo kết quả A là luỹ thừa bậc n của x và kết thúc thuật toán.
Chương trình Pascal có thể như sau:
var n,i,x: integer; a: longint;
begin
write('Nhap x='); readln(x);
write('Nhap n='); readln(n);
A:=1;
for i:=1 to n do A:=A*X;
writeln(x,' mu ',n,' bang ',A);
end.
Thuật toán:
Bước 1. Nhập số n. 
Bước 2. A¬ -32768 (gán số nhỏ nhất có thể trong các số kiểu nguyên cho A), i ¬1. 
Bước 3. Nhập số thứ i và gán giá trị đó vào biến A.
Bước 4. Nếu Max < A, Max ¬ A. 
Bước 5. i ¬i + 1.
Bước 6. Nếu i ≤ n, quay lại bước 3.
Bước 7. Thông báo kết quả Max là số lớn nhất và kết thúc thuật toán.
Chương trình Pascal có thể như sau:
uses crt;
var n,i,Max,A: integer;
begin
clrscr;
write('Nhap N='); readln(n);
Max:=-32768;
for i:=1 to n do
 begin write('Nhap so thu ',i,':'); readln(A);
 if Max<A then Max:=A end;
writeln('So lo ... có thể còn qua một số dấu hiệu bổ trợ khác, ví dụ như: độ dài của số (có một số duy nhất có hai chữ số) chẳng hạn. Với những dấu hiệu bổ trợ, khả năng quan sát và tư duy, con người nhanh chóng "khoanh vùng" được đáp án và nhanh chóng tìm ra đáp án. Tức là phương án giải của con người không tuần tự mà có thể bỏ qua một số bước khi cần thiết. Do vậy, trong trong nhiều tình huống con người giải các bài toán hiệu quả hơn nhiều máy tính.
Tuy nhiên, khả năng này con người lại bị hạn chế trong tình huống dãy số rất lớn (hàng ngàn, hàng triệu, hàng tỉ số chẳng hạn). Khi đó máy tính lại thể hiện được sức mạnh của mình bởi ưu thế về tốc độ xử lí.
Để HS hiểu được máy tính làm việc như thế nào, GV có thể yêu cầu các em thực hiện như sau: Viết 10 số nguyên, mỗi số vào một mảnh giấy. Gấp 10 mảnh giấy này lại và bỏ vào một hộp A. Đặt một hộp B rỗng bên cạnh. Yêu cầu HS chuyển lần lượt đến hết từng mảnh giấy ở hộp A sang hộp B. Sau khi chuyển xong HS cho biết số số lớn nhất trong các số được ghi trên các mảnh giấy. HS được phép xem số trên mảnh giấy khi chuyển mảnh giấy đó từ hộp A sang hộp B. Yêu cầu HS không ghi chép ra giấy. Mục đích của việc không cho học sinh ghi chép là để HS mô phỏng hoạt động của máy tính: Chỉ cần nhớ số lớn nhất tại thời điểm hiện tại, so sánh với số vừa lấy ra từ hộp A (đang cầm trên tay) và nhớ lấy số lớn hơn và cứ tiếp tục như vậy đến khi hết các số trong hộp, số được nhớ cuối cùng là số lớn nhất.
	Để thực hiện công việc này cần hướng dẫn HS thực hiện mô phỏng theo giải thuật tìm dãy số lớn nhất của dãy số nguyên. Nhặt mảnh giấy đầu tiên ở hộp A, mở ra nhớ giá trị của mảnh giấy này (coi là số lớn nhất tạm thời), gấp lại và bỏ vào hộp B. Nhặt mảnh giấy thứ hai, mở ra và so sánh với giá trị lớn nhất tạm thời, và nhớ giá trị lớn nhất mới nếu thấy lớn hơn. Lặp lại công việc này đến khi hết các mảnh giấy của hộp A.
	GV có thể thêm, bớt các mảnh giấy để HS làm lại. Sau khi HS làm đề nghị các em mô tả lại cách các em đã thực hiện để tìm ra số lớn nhất. Cách mà HS làm giống với cách máy tính tính thực hiện theo thuật toán ở trên. Máy tính chỉ có thể tham chiếu đến từng số trong dãy số, máy tính không có khả năng quan sát cả dãy số vì vậy máy tính phải thực hiện theo thuật toán như trên. Máy tính thực hiện tuần tự theo đúng chỉ dẫn của con người, máy tính không có trí thông minh.	Tất nhiên, ngược lại máy tính lại có ưu điểm vượt trội đó là tốc độ xử lí.
Có thể cải biến nội dung dạy học trên đây thành nhiều trò chơi khác nhau. Ví dụ, yêu cầu các em không sử dụng giấy, bút, GV lần lượt viết từng số lên bảng, rồi xoá đi luôn, HS quan sát để tìm ra số lớn nhất (hoặc nhỏ nhất). Hoặc mời một nhóm HS đứng lên phía trên lớp. Mời một em đi qua từng bạn một, khi em này đến bên bạn nào đó thì bạn này phải đưa ra một số nào đó (có thể là nói thầm hoặc viết ra một mảnh giấy). Đi hết lượt HS phải nói được bạn nào đã đưa ra số lớn nhất (hoặc nhỏ nhất). Kết quả này được kiểm chứng công khai bởi các bạn đã đưa ra các số.
Thuật toán tìm Max của dãy số nguyên nhập từ bàn phím như sau:
Bước 1. Nhập N và dãy A1,..., An
Bước 2. Max ¬ A1
Bước 3. Lần lượt gán giá trị từ 2 đến N cho i. Với mỗi giá trị của i thì thực hiện: Nếu Max <Ai thì Max¬Ai
Bước 4. Đưa ra màn hình giá trị Max rồi kết thúc.
Sau khi giới thiệu xong thuật toán tìm Max giáo viên hướng dẫn HS xác định các biến, kiểu biến và viết khai báo biến; viết câu lệnh thực hiện các bước nhập N, nhập các phần tử của mảng, tìm Max, in Max ra màn hình. Chương trình có thể được xây dựng dần từng phần và cuối cùng có được một chương trình như dưới đây.
program P_Max;
Var
 i, N, Max : integer;
 A: array[1..100] of integer;
Begin
	{Nhap N}
 write('Hay nhap do dai cua day so, N = '); readln(N);
	{Nhap day so}
 writeln('Nhap cac phan tu cua day so:');
 For i:=1 to N do
 Begin
 write('a[',i,']='); readln(a[i]);
 End;
	{Tim Max}
 Max:=a[1];
 for i:=2 to n do if Max<a[i] then Max:=a[i];
	{Hien thi Max ra man hinh}
 write('So lon nhat la Max = ',Max);
 readln;
End.
	Yêu cầu HS chỉnh sửa chương trình trên để tìm giá trị nhỏ nhất của dãy số nguyên, tính tổng dãy số. Sau khi đã hiểu -rõ thuật toán và chương trình tìm Max, Min có thể yêu cầu HS kết hợp tìm Max, Min trong cùng một chương trình như trong SGK.
3. Hướng dẫn trả lời câu hỏi và bài tập
Đúng.
Lợi ích chính của việc sử dụng biến mảng là rút gọn việc viết chương trình, có thể sử dụng câu lệnh lặp để thay nhiều câu lệnh. Ngoài ra chúng ta còn có thể lưu trữ và xử lí nhiều dữ liệu có nội dung liên quan đến nhau một cách hiệu quả.
Đáp án a) Sai. Phải thay dấu phẩy bằng hai dấu chấm; b) và c) Sai, vì giá trị nhỏ nhất và lớn nhất của chỉ số mảng phải là số nguyên; d) Sai, vì giá trị đầu của chỉ số mảng phải nhỏ hơn hoặc bằng chỉ số cuối; e) Đúng.
Không. Giá trị nhỏ nhất và lớn nhất của chỉ số mảng phải được xác định ngay khi khai báo biến mảng.
Chương trình có thể như sau:
var N, i: integer;
 A: array[1..100] of real;
begin
write('Nhap so phan tu cua mang, n= '); read(n);
for i:=1 to n do
begin
write('Nhap gia tri ',i,'cua mang, a[',i,']= ');
readln(a[i]) 
end;
end.
Đúng.
a) Nếu không sử dụng biến mảng, chương trình có thể dài như sau:
uses crt;
var So_1, So_2, So_3, So_4, So_5, Max: integer;
begin
clrscr;
write('Nhap so thu nhat: '); readln(So_1);
write('Nhap so thu hai: '); readln(So_2);
write('Nhap so thu ba: '); readln(So_3);
write('Nhap so thu tu: '); readln(So_4);
write('Nhap so thu nam: '); readln(So_5);
Max:=So_1;
If Max<So_2 then Max:=So_2;
If Max<So_3 then Max:=So_3;
If Max<So_4 then Max:=So_4;
If Max<So_5 then Max:=So_5;
writeln('So lon nhat: ',Max);
end.
b) Nếu sử dụng biến mảng, chương trình chỉ ngắn gọn như sau:
uses crt;
var i, Max: integer;
 A: array[1..5] of integer;
begin
clrscr;
for i:=1 to 5 do
 begin write('Nhap so thu ',i,':'); readln(A[i]) end;
Max:=a[1];
for i:=2 to 5 do If Max<a[i] then Max:=a[i];
writeln('So lon nhat: ',Max);
end.
Lưu ý. Xem cách viết chương trình ngắn gọn hơn và không sử dụng biến mảng trong bài tập 9, bài 7. Tuy nhiên, cách viết đó sẽ không cho kết quả mong muốn nếu sau khi nhập giá trị của các biến còn cần thực hiện các thao tác dữ liệu khác với các giá trị đó.
Viết chương trình sử dụng biến mảng để tính giá trị trung bình của tổng N số nguyên được nhập vào từ bàn phím.
uses crt;
var N, i: integer;
 TB: real;
 A: array[1..100] of real;
begin
clrscr;
write('Nhap so phan tu cua mang, n= '); read(n);
for i:=1 to n do
 begin 
 write('Nhap gia tri ',i,'cua mang, a[',i,']= ');
 readln(a[i])
 end;
TB:=0;
for i:=1 to n do TB:=TB+a[i];
TB:=TB/n;
write('Trung binh bang ',TB);
end.
Chương trình nhập n số nguyên từ bàn phím và tính tổng các số dương: 
uses crt;
var n,k,S: integer;
 	X: array[1..1000] of integer;
begin
clrscr;
write('Nhap so tu nhien n: '); readln(n);
for k:=1 to n do
 begin write('Nhap X[',k,']='); readln(X[k]) end;
S:=0;
for k:=1 to n do
 if X[k]>0 then S:=S+X[k];
writeln('Tong cac duong S=',S);
readln;
end.
Nội dung bài 2 của bài thực hành 6 là viết chương trình nhận biết một số tự nhiên có phải là số nguyên tố hay không. Nội dung của bài tập 9, bài 8, là viết chương trình tính tổng các ước số thực sự của một số nguyên, nhưng chưa liệt kê được các ước số đó. Để có thể liệt kê, chương trình cần phải ghi lại chúng. ý tưởng chính là sử dụng một biến mảng phục vụ cho điều này. Chương trình tương tự như trong bài tập 9, Bài 8:
uses crt;
var n,i,k,S: integer;
 X: array[1..10000] of integer;
begin
clrscr;
i:=2; S:=0;
for k:=1 to (n-1) do X[k]:=0; {Dat lai = 0}
write('Cho so tu nhien n>2: n= '); readln(n);
while i<=(n-1) do {Ghi lai uoc so vao X[i]}
 begin if (n mod i)=0 then begin X[i]:=i; S:=S+X[i] end;
 i:=i+1;
 end;
writeln('Tong cac uoc so thuc su cua ',n,' la: ',S);
if S0 then begin write('Cac uoc so cua ',n,' la: ');
for i:=1 to (n-1) do if X[i]0 then write(X[i],' ') end
else writeln(n,' la so nguyen to.');
readln;
end.
Bài thực hành 7. Xử lí dãy số trong chương trình
1. Mục đích, yêu cầu
Thực hành khai báo và sử dụng các biến mảng ;
Ôn luyện cách sử dụng câu lệnh lặp if...then, for...do;
Củng cố kĩ năng đọc, hiểu và chỉnh sửa chương trình.
Hiểu và viết được chương trình với thuật toán tìm giá trị lớn nhất, nhỏ nhất của một dãy số, tính tổng dãy số.
2. Những điểm cần lưu ý và gợi ý dạy học
	Để gây hứng thú cho HS, cần dành thời gian để HS gõ, chạy thử chương trình tìm Max, Min, Tính tổng dãy số. Hơn thế nữa, việc thực hiện các bài học là cần thiết do yêu cầu trong Chương trình. HS cần viết được các chương trình này. Chương trình tìm Max đã được tiến hành ở bài lí thuyết, GV cần hướng dẫn HS tham khảo chương trình P_Max để tự viết được chương trình P_Min và chương trình tính tổng P_Sum.
	Chương trình tìm Max đã được giới thiệu ở trên, dưới đây là chương trình P_Min và chương trình P_Sum.
Chương trình tìm giá trị nhỏ nhất trong dãy số nguyên P_Min:
Program P_Min;
Var
 i, n, Min : integer;
 A: array[1..100] of integer;
Begin
 write('Hay nhap do dai cua day so, N = '); readln(n);
 writeln('Nhap cac phan tu cua day so:');
 For i:=1 to n do
 Begin
 write('a[',i,']='); readln(a[i]);
 End;
 Min:=a[1];
 for i:=2 to n do if Min>a[i] then Min:=a[i];
 write('So nho nhat la Min = ',Min);
 readln;
End.
	Chương trình tính tổng dãy số, trong chương trình này có thêm câu lệnh in ra màn hình dãy số vừa nhập để người sử dụng có thể thuận tiện kiểm chứng kết quả chương trình. Nhưng đây cũng nhằm mục đích luyện tập với việc in phần tử của mảng ra màn hình.
Program P_Sum;
Var
 i, n, Sum : integer;
 A: array[1..100] of integer;
Begin
 write('Hay nhap do dai cua day so, N = '); readln(n);
 writeln('Nhap cac phan tu cua day so:');
 For i:=1 to n do
 Begin
 write('a[',i,']='); readln(a[i]);
 End;
 Sum:=0;
 for i:=1 to n do Sum:= Sum + a[i];
 write('Day so vua nhap la: ');
 for i:=1 to n do write(a[i], ' ');
 writeln;
 write('Tong day so la = ',Sum);
 readln;
End.
	Thời gian còn lại dành để HS thực hành với các bài sử dụng kết hợp nhiều câu lệnh, biểu thức điều kiện... trong SGK.
	Lưu ý: Theo yêu cầu của chuẩn kiến thức, kĩ năng, kết thúc bài này phải đảm bảo HS hiểu được thuật toán, tự viết được chương trình tìm số lớn nhất, nhỏ nhất của dãy số, kiểm tra điều kiện ba số a, b, c có phải là độ dài của ba cạnh của một tam giác hay không (hoặc các bài toán tương đương). HS cần tự viết được chương trình nhập giá trị phần tử mảng, in ra màn hình các phần tử của mảng, tính tổng các phần tử của mảng. Do vậy, trong trường hợp cần thiết GV cần lựa chọn, xây dựng nội dung tiết bài tập , ôn tập trên lớp hoặc thực hành trên phòng máy để đảm bảo đạt được yêu cầu quy định trong chuẩn kiến thức, kĩ năng.

Tài liệu đính kèm:

  • docTin 8.doc