
8
T r
ầ
n H o à i N a m
–
K 5
6
A
-
C N T T
-
Đ H S P H N
Page
1
Giáo án số 2:
BÀI THỰC HÀNH SỐ 3
Giáo viên hướng dẫn: Thầy Trần DoãnVinh
Sinh viên thực hiện: Trần Hoài Nam
A. Mục đích yêu cầu.
I. Mục đích
- Củng cố cho học sinh những hiểu biết về kiểu dữ liệu mảng ;
- Tổ chức những hoạt động trong phòng máy để học sinh có được các
kĩ năng cơ bản làm việc với kiểu mảng trong lập trình, cụ thể là:
.Khai báo dữ liệu mảng;
.Nhập dữ liệu cho mảng, đưa ra màn hình chỉ số và giá trị
các phần tử của mảng;
.Duyệt qua tất cả các phần tử của mảng để xử lý từng phần
tử.
II. Yêu cầu
- Góp phần hình thành và rèn luyện tư duy lập trình, tác phong của
người lập trình.
- Giới thiệu hàm random(N) cho học sinh thấy có thể dùng lệnh để
máy lấy ngẫu nhiên một số nguyên trong khoảng từ 0 đến N-1, giới
hạn N do người lập trình đưa ra.
B. Phương pháp, phương tiện:
I. Phương pháp:
- Phòng máy vi tính, máy chiếu để minh họa.
- Vấn đáp, thuyết minh, chạy thử chương trình.
II. Phương tiện:
- Sách giáo khoa lớp 11.
- Sách tham khảo (nếu có).
C. Tiến trình lên lớp và nội dung:
I. Ổn định lớp(1’):
- Yêu cầu lớp trưởng báo cáo sĩ số.
- Ổn định trật tự lớp.
II. Kiểm tra bài cũ và gợi động cơ(7’):
1.Nêu định nghĩa mảng một chiều, mảng hai chiều?
2.Em hãy trình bày các cách khai báo biến mảng một chiều, mảng hai
chiều?

8
T r
ầ
n H o à i N a m
–
K 5
6
A
-
C N T T
-
Đ H S P H N
Page
2
3. Nếu em muốn làm việc với một dãy các số ngẫu nhiên với máy tính
thì em phải làm như thế nào? (Dùng thủ tục gì để sinh ra số ngẫu
nhiên)
4. Đưa ra khai báo biến mảng với mảng nhiều chiều?
III. Nội dung(30’):
Như vậy qua bài cũ (một số bạn vừa trả lời) ta biết được việc
khai báo biến mảng trong TP như thế nào rồi đúng không? Hôm nay
chúng ta sẽ tìm hiểu sâu hơn nữa về mảng một chiều trong TP và một
số thuật toán cơ bản khi làm việc với dữ liệu kiểu mảng thông qua các
bài toán sau:
Bài 1 (15’): Tạo mảng A gồm n (n<=100) số nguyên, mỗi số có
trị tuyệt đối không vượt quá 300. Tính tổng các phần tử của mảng là
bội số của một số nguyên dương k cho trước.
a) Hãy tìm hiểu và chạy thử chương trình sau đây:
program Bài_1;
uses crt;
const nmax=100;
type mang = array[1..nmax] of integer;
var A:mang;
s,n,i,p,q,k:integer;
begin
clrscr;
randomize;
write(' Nhap so phan tu n= ');
readln(n);{Tao ngau nhien mang gom n so nguyen}
for i:=1 to n do A[i]:= random(300) - random(300);
for i:=1 to n do write(A[i]:8); writeln;
write('nhap k= ');
readln(k);
S:=0;
for i:=1 to n do if A[i] mod k=0 then s:=s+A[i];
writeln('Tong can tim la: ’ , s);
readln;
end.

8
T r
ầ
n H o à i N a m
–
K 5
6
A
-
C N T T
-
Đ H S P H N
Page
3
b) Hãy đưa các câu lệnh sau đây vào những vị trí cần thiết nhằm sửa đổi
chương trình trong câu a) để có được chương trình đưa ra số các số
dương và số các số âm trong mảng.
duong, am: interger;
duong: = 0; am: = 0;
if A[i] >0 then duong := duong +1 else if A[i] <0 then am:=am +1;
writeln('Phan tu duong la: ‘,duong:3);
writeln(‘ Phan tu am la: ‘,am:4);
Giáo viên hỏi cho học sinh trả lời. Gợi ý đáp án nếu học sinh không trả
lời được.
Các em cho cô biết:
Câu hỏi 1: mang là tên kiểu dữ liệu hay tên một biến?
Học sinh trả lời: …
Gợi ý: mang là tên kiểu dữ liệu
Câu hỏi 2: Những dòng lệnh nào nhằm tạo ra mảng A?
Học sinh trả lời: …
Gợi ý: Lệnh khai báo kiểu và khai báo biến
Câu hỏi 3: Lệnh gán: A[i]:= random(300) - random(300); có ý nghĩa gì?
Học sinh trả lời: …
Gợi ý: Đây là dòng lệnh sinh ngẫu nhiên giá trị cho mảng A
từ -299 đến 299.
Câu hỏi 4: Lệnh for i:=1 to n do write(A[i]:8); có ý nghĩa gì?
Học sinh trả lời: ...
Gợi ý: In ra màn hình giá trị của từng phần tử trong mảng A.
Câu hỏi 5: Lệnh for i:=1 to n do ở cuối thực hiện nhiệm vụ gì?
Học sinh trả lời:…
Gợi ý: Cộng các phần tử chia hết cho k.
Câu hỏi 6: Lệnh s:=s+A[i]; thực hiện bao nhiêu lần?
Học sinh trả lời: …
Gợi ý: Có số lần đúng bằng số phần tử A[i] chia hết k.

8
T r
ầ
n H o à i N a m
–
K 5
6
A
-
C N T T
-
Đ H S P H N
Page
4
Ta có màn hình Pascal khi đánh chương trình vào như sau:
Thực hiện chương trình ta thu được kết quả như sau: (VD: với n=6 và
k=3 ta được kết quả như hình sau )
Câu hỏi 7: Quan sát ta thấy biến duong, am có ý nghĩa gì? Và duong: = 0;
am: = 0; để làm gì?
Học sinh trả lời: …
Gợi ý : Hai biến duong, am dùng để lưu số lượng đếm được của các số
dương và âm. Biến duong:=0, am:=0 dùng để khởi tạo hai biến duong, am
ban đầu là rỗng.
Câu hỏi 8: if A[i] >0 then duong := duong +1
else if A[i] <0 then am:=am +1; nêu chức năng của câu lệnh này?
Học sinh trả lời: …
Gợi ý: Đếm số dương và số âm và lưu vào biến duong, am.
Các em hãy gõ lại nội dung và lưu lại với tên Câu1_b.pas. Thực hiện chương
trình và báo cáo kết quả.

8
T r
ầ
n H o à i N a m
–
K 5
6
A
-
C N T T
-
Đ H S P H N
Page
5
Hỏi kết quả của học sinh và đưa ra kết quả của mình để so sánh chỉ ra chỗ
sai của học sinh và nhận xét bài của các em .
Kết quả sau khi sửa câu a ta được câu b như sau:
Màn hình dữ liệu là:
Màn hình kết quả nhập là: (ứng với: n=7 ta thu được kết quả như hình dưới)
Bài 2: (15’) Viết chương trình tìm phần tử có giá trị lớn nhất của mảng và
đưa ra màn hình chỉ số và giá trị của phần tử tìm được. Nếu có nhiều phần tử
có cùng giá trị lớn nhất thì đưa ra phần tử có chỉ số nhỏ nhất.
a) Hãy tìm hiểu chương trình sau:
program Bài_2;
uses crt;
const nmax =100;
type mang = array[1..nmax] of integer;
var A:mang; n,i,j,max : integer;

