1
KIỂU MẢNG (tt)
BÀI TẬP KIỂU MẢNG MỘT CHIỀU
I. MỤC TIÊU
1. Kiến thức:
 Biết khai báo kiểu, biến mảng một chiều.
 Biết cách tham chiếu dến các phần tử trong mảng.
2. Kĩ năng:
Học sinh sử dụng được biến kiểu mảng một chiều để giải quyết một bài toán đơn
giản.
II. PHƯƠNG TIỆN DẠY HỌC :
1. Giáo viên:
Giáo án,sgk,slide về thuật toán tráo đổi (Exchange Sort) đã học ở lớp 10/Bài 4
toán và thuật toán,trang 38-39-40.
2. Học sinh: sgk,sách tin học 10(để ôn lại thuật toán exchange sort)
III. HOẠT ĐỘNG DẠY VÀ HỌC
Hoạt động 1:Ổn định lớp
Mục tiêu:Ổn định và để chuẩn bị dạy
1) Ổn định tổ chức: Kiểm tra sĩ số lớp.
2) Giảng bài mới:
Hoạt động 2: (20 phút)Vận dụng kiểu mảng một chiều
Mục tiêu: Biết khai báo kiểu, biến mảng một chiều.
Giáo viên Học sinh Nội Dung
1. Nêu đề bài toán (Nội
dung)
Yêu cầu học sinh xác định
In/Output của bài toán.
2. Ở lớp 10 ta đã xây dựng
thuật toán cho bài toán này
rồi. Yêu cầu học sinh nhắc
lại thuật toán.
GV chiếu slide về thuật toán
này
1.In:Số nguyên dương
N(N<=250) và dãy A gồm N
số nguyên dương
A1,A2,..,AN, mỗi số không
vượt quá 500.
Out: Dãy số A được sắp xếp
không giảm (Tăng dần).
2.Liệt kê:
Bước 1: Nhập N,các số hạng
A1,A2,..,AN
Bước 2: j  N;
Bước 3: Nếu j < 2 thì đưa ra
dãy A đã được sắp xếp
rồi kết thúc.
Bước 4: j  j -1 ,i 0;
Bước 5: i  i+1;
Bài 1: Viết chương trình tạo mảng
A gồm N (N250) số nguyên.
Sắp xếp lại mảng A này bằng
thuật toán tráo đổi (Exchange
Sort) đã học ở lớp 10/Bài 4 toán
và thuật toán,trang 38-39-40.
2
3. Yêu cầu học sinh cho biết
các việc chính cần thực hiện
trong chương trình là gì?
4. Yêu cầu hs cho biết các
biến chính cần sử dụng là
gì?
- Yêu cầu học sinh khác lên
viết phần khai báo các biến
đó?
5. Tiếp tục y/cầu hs lên viết
phần chtrình tạo giá trị cho
các ptử của mảng A. (lưu ý
nhập số lượng ptử của mảng
trước)
Gọi hs khác nhận xét
Bước 6: Nếu i > j thì quay
lại bước 3;
Bước 7: Nếu Ai > Ai+1 thì
tráo đổi Ai , Ai+1 cho
nhau;
Bước 8: Quay lại bước 5;
3.Trả lời
+ Cho biết số ptử của mảng
A.
+ Nhập giá trị cho các ptử
của mảng A
+ Sắp xếp các phần tử của
mảng A.
 Hoán đổi vị trí của
phần tử phía trước và
phía sau nếu như
phần tử phía trước
lớn hơn phần tử phía
sau.
4.Mảng A
Biến đơn: N, i,j
Lên bảng trình bày:
var
a:array [1..100] of
integer;
f,g : text;
i,j,t,n:integer;
am,duong:integer;
5. Sử dụng cấu trúc lặp For.
program sx;
var
a:array [1..100] of integer;
f,g : text;
i,j,t,n:integer;
begin
(*doc file*)
assign(f,'sx.inp');
reset(f);
read(f,n);
for i:= 1 to n do
read(f,a[i]);
close(f);
3
* Chỉnh sửa đoạn chtrình hs
vừa hoàn thành.
6. Để viết tiếp đoạn chtrình
còn lại (sắp xếp mảng A)
theo thuật toán ta phải kiểm
tra so sanh Ai > Ai+1 hay
không?Sau đó ta mới hoán
đổi vị trí của Ai ,Ai+1 . Vậy
ta sử dụng câu lệnh gì ở
đây?
- Hỏi: Trong phần sắp xếp
này chúng ta sử dụng mấy
vòng lặp?Vòng lặp đó dùng
làm gì?Lặp từ vị trí nào tới
vị trí nào(GV gợi ý dựa vào
thuật toán tráo đổi
(Exchange Sort), bổ sung)
Trong 2 vòng lặp thì khi
điều kiện if a[i] > a[i+1] nếu
đúng sẽ làm gì tiếp theo?
- Y/cầu hs khác lên viết
đoạn chtrình còn lại?
Chạy thử chtrình
A= { 3 ,5 ,2,9,1,0} N=6
6.if a[i] > a[i+1] then
begin
{ Trao doi a[i] va a[i+1] }
t :=
a[i] ;
a[i]
:= a[i+1] ;
a[i+1] := t;
2 vòng lặp,vòng lặp đầu tiên
dùng để duyệt từ p/tử vị trí
cuối cùng đến p/tử ở vị trí
thứ 2(mục đích để loại bỏ
dần các phần tử lớn nhất sau
mỗi lần sắp xếp)
Vòng lặp thứ 2,lặp từ p/tử ở
vị trí đầu tiên đến p/tử ở vị
trí thứ N-1,dùng để so sánh
từng đôi một kề nhau từ vị
trí 1  N
Hoán đổi vị trí A[i] và
A[i+1]
t := a[i]
a[i] := a[i+1] ;
a[i+1] := t;
1 HS Lên bảng trình bày
(*Xu ly*)
for j:= n downto 2 do
for i:=1 to j-1 do
begin
if( a[i] >a[i+1])
then
begin
t:=a[i];
a[i]:=a[i+1];
a[i+1] :=
t;
end;
end;
(*Xuat file*)
assign(g,'sx.out');
rewrite(g);
for i:= 1 to n do
write(g,' ',a[i]) ;
close(g);
end.
4
Hoạt động 3: (15 phút) Mở rộng bài toán có vận dụng mảng một chiều
Mục tiêu: Biết cách tham chiếu đến các phần tử trong mảng.
Giáo viên Học sinh Nội Dung
Chiếu Silde chứa nội dung
câu lệnh cần thêm vào
chtrình ở bài 1.
1. Yêu cầu học sinh nghiên
cứu nội dung các câu lệnh
và hỏi:
- Ý nghĩa của biến am,
duong?
- Chức năng của lệnh (3)?
- Lệnh (4) đưa ra thông tin
gì?
2. Yêu cầu học sinh tìm vị trí
bổ sung các lệnh vào cho
phù hợp để chtrình đếm
được số dương, số âm.
.
3. Yêu cầu học sinh lên
hoàn chỉnh lại chtrình?
1. Nghiên cứu ý nghĩa các
câu lệnh và trả lời:
- Dùng để lưu số lượng đếm
được.
- Đếm số dương hoặc đếm số
âm.
- Số các số dương, số các số
âm.
2. Chỉ ra vị trí cần bổ sung
và các câu lệnh cần loại bỏ
bớt
Lên bảng , chỉnh sửa lại
chtrình.
** Chuẩn hoá lại chương
trình.
* Chạy thử chương trình với
1 bộ giá trị:
Chạy thử chương trình
N = 8 A: 5, 6, -8, 13, 24, 7,
-4, -12
A 5 6 - 8 13 24
7 - 4 - 12
duong 1 2 2 3
4 5 5 5
program sx;
var
a:array [1..100] of integer;
f,g : text;
i,j,t,n:integer;
am,duong:integer;
begin
(*doc file*) (1)
assign(f,'sx.inp');
reset(f);
read(f,n);
for i:= 1 to n do
read(f,a[i]);
close(f);
(*Xu ly*) (2)
for j:= n downto 2 do
for i:=1 to j-1 do
begin
if( a[i] >a[i+1])
then
begin
t:=a[i];
a[i]:=a[i+1];
a[i+1] :=
t;
end;
end;
{dem so p/t am duong}
am := 0; duong := 0;
{dem} (3)
5
am 0 0 1 1 1
1 2 3
for i:=1 to n do
if a[i] >0 then
duong := duong + 1
else if a[i]<0 then
am := am + 1;
(*Xuat file*) (4)
assign(g,'sx.out');
rewrite(g);
for i:= 1 to n do
write(g,' ',a[i]) ;
writeln(g);
writeln(g,'so luong phan tu am
= ',am);
writeln(g,'so luong phan tu
duong =',duong);
close(g);
end.
III. ĐÁNH GIÁ CUỐI BÀI (5phút)
1. Nội dung đã học
- Sắp xếp mảng 1 chiều bằng thuật toán tráo đổi.
- Đếm số phần tử trong mảng thoả mãn một điều kiện.
2. Câu hỏi, bài tập về nhà
- Cho 2 mảng A, B gồm n (n<=250) số nguyên. Hãy viết chương trình xây dựng
mảng C[1..n], trong đó C[i] là tổng của 2 phần tử thứ i thuộc mảng A và mảng B.
(tức là: C[i] = A[i] + B[i]).
Lưu ý:Dùng vòng lặp while để thay thế vòng lặp for để tính.
- Xem trước Mảng hai chiều

Bài 11 Kiểu mảng(tt)

  • 1.
    1 KIỂU MẢNG (tt) BÀITẬP KIỂU MẢNG MỘT CHIỀU I. MỤC TIÊU 1. Kiến thức:  Biết khai báo kiểu, biến mảng một chiều.  Biết cách tham chiếu dến các phần tử trong mảng. 2. Kĩ năng: Học sinh sử dụng được biến kiểu mảng một chiều để giải quyết một bài toán đơn giản. II. PHƯƠNG TIỆN DẠY HỌC : 1. Giáo viên: Giáo án,sgk,slide về thuật toán tráo đổi (Exchange Sort) đã học ở lớp 10/Bài 4 toán và thuật toán,trang 38-39-40. 2. Học sinh: sgk,sách tin học 10(để ôn lại thuật toán exchange sort) III. HOẠT ĐỘNG DẠY VÀ HỌC Hoạt động 1:Ổn định lớp Mục tiêu:Ổn định và để chuẩn bị dạy 1) Ổn định tổ chức: Kiểm tra sĩ số lớp. 2) Giảng bài mới: Hoạt động 2: (20 phút)Vận dụng kiểu mảng một chiều Mục tiêu: Biết khai báo kiểu, biến mảng một chiều. Giáo viên Học sinh Nội Dung 1. Nêu đề bài toán (Nội dung) Yêu cầu học sinh xác định In/Output của bài toán. 2. Ở lớp 10 ta đã xây dựng thuật toán cho bài toán này rồi. Yêu cầu học sinh nhắc lại thuật toán. GV chiếu slide về thuật toán này 1.In:Số nguyên dương N(N<=250) và dãy A gồm N số nguyên dương A1,A2,..,AN, mỗi số không vượt quá 500. Out: Dãy số A được sắp xếp không giảm (Tăng dần). 2.Liệt kê: Bước 1: Nhập N,các số hạng A1,A2,..,AN Bước 2: j  N; Bước 3: Nếu j < 2 thì đưa ra dãy A đã được sắp xếp rồi kết thúc. Bước 4: j  j -1 ,i 0; Bước 5: i  i+1; Bài 1: Viết chương trình tạo mảng A gồm N (N250) số nguyên. Sắp xếp lại mảng A này bằng thuật toán tráo đổi (Exchange Sort) đã học ở lớp 10/Bài 4 toán và thuật toán,trang 38-39-40.
  • 2.
    2 3. Yêu cầuhọc sinh cho biết các việc chính cần thực hiện trong chương trình là gì? 4. Yêu cầu hs cho biết các biến chính cần sử dụng là gì? - Yêu cầu học sinh khác lên viết phần khai báo các biến đó? 5. Tiếp tục y/cầu hs lên viết phần chtrình tạo giá trị cho các ptử của mảng A. (lưu ý nhập số lượng ptử của mảng trước) Gọi hs khác nhận xét Bước 6: Nếu i > j thì quay lại bước 3; Bước 7: Nếu Ai > Ai+1 thì tráo đổi Ai , Ai+1 cho nhau; Bước 8: Quay lại bước 5; 3.Trả lời + Cho biết số ptử của mảng A. + Nhập giá trị cho các ptử của mảng A + Sắp xếp các phần tử của mảng A.  Hoán đổi vị trí của phần tử phía trước và phía sau nếu như phần tử phía trước lớn hơn phần tử phía sau. 4.Mảng A Biến đơn: N, i,j Lên bảng trình bày: var a:array [1..100] of integer; f,g : text; i,j,t,n:integer; am,duong:integer; 5. Sử dụng cấu trúc lặp For. program sx; var a:array [1..100] of integer; f,g : text; i,j,t,n:integer; begin (*doc file*) assign(f,'sx.inp'); reset(f); read(f,n); for i:= 1 to n do read(f,a[i]); close(f);
  • 3.
    3 * Chỉnh sửađoạn chtrình hs vừa hoàn thành. 6. Để viết tiếp đoạn chtrình còn lại (sắp xếp mảng A) theo thuật toán ta phải kiểm tra so sanh Ai > Ai+1 hay không?Sau đó ta mới hoán đổi vị trí của Ai ,Ai+1 . Vậy ta sử dụng câu lệnh gì ở đây? - Hỏi: Trong phần sắp xếp này chúng ta sử dụng mấy vòng lặp?Vòng lặp đó dùng làm gì?Lặp từ vị trí nào tới vị trí nào(GV gợi ý dựa vào thuật toán tráo đổi (Exchange Sort), bổ sung) Trong 2 vòng lặp thì khi điều kiện if a[i] > a[i+1] nếu đúng sẽ làm gì tiếp theo? - Y/cầu hs khác lên viết đoạn chtrình còn lại? Chạy thử chtrình A= { 3 ,5 ,2,9,1,0} N=6 6.if a[i] > a[i+1] then begin { Trao doi a[i] va a[i+1] } t := a[i] ; a[i] := a[i+1] ; a[i+1] := t; 2 vòng lặp,vòng lặp đầu tiên dùng để duyệt từ p/tử vị trí cuối cùng đến p/tử ở vị trí thứ 2(mục đích để loại bỏ dần các phần tử lớn nhất sau mỗi lần sắp xếp) Vòng lặp thứ 2,lặp từ p/tử ở vị trí đầu tiên đến p/tử ở vị trí thứ N-1,dùng để so sánh từng đôi một kề nhau từ vị trí 1  N Hoán đổi vị trí A[i] và A[i+1] t := a[i] a[i] := a[i+1] ; a[i+1] := t; 1 HS Lên bảng trình bày (*Xu ly*) for j:= n downto 2 do for i:=1 to j-1 do begin if( a[i] >a[i+1]) then begin t:=a[i]; a[i]:=a[i+1]; a[i+1] := t; end; end; (*Xuat file*) assign(g,'sx.out'); rewrite(g); for i:= 1 to n do write(g,' ',a[i]) ; close(g); end.
  • 4.
    4 Hoạt động 3:(15 phút) Mở rộng bài toán có vận dụng mảng một chiều Mục tiêu: Biết cách tham chiếu đến các phần tử trong mảng. Giáo viên Học sinh Nội Dung Chiếu Silde chứa nội dung câu lệnh cần thêm vào chtrình ở bài 1. 1. Yêu cầu học sinh nghiên cứu nội dung các câu lệnh và hỏi: - Ý nghĩa của biến am, duong? - Chức năng của lệnh (3)? - Lệnh (4) đưa ra thông tin gì? 2. Yêu cầu học sinh tìm vị trí bổ sung các lệnh vào cho phù hợp để chtrình đếm được số dương, số âm. . 3. Yêu cầu học sinh lên hoàn chỉnh lại chtrình? 1. Nghiên cứu ý nghĩa các câu lệnh và trả lời: - Dùng để lưu số lượng đếm được. - Đếm số dương hoặc đếm số âm. - Số các số dương, số các số âm. 2. Chỉ ra vị trí cần bổ sung và các câu lệnh cần loại bỏ bớt Lên bảng , chỉnh sửa lại chtrình. ** Chuẩn hoá lại chương trình. * Chạy thử chương trình với 1 bộ giá trị: Chạy thử chương trình N = 8 A: 5, 6, -8, 13, 24, 7, -4, -12 A 5 6 - 8 13 24 7 - 4 - 12 duong 1 2 2 3 4 5 5 5 program sx; var a:array [1..100] of integer; f,g : text; i,j,t,n:integer; am,duong:integer; begin (*doc file*) (1) assign(f,'sx.inp'); reset(f); read(f,n); for i:= 1 to n do read(f,a[i]); close(f); (*Xu ly*) (2) for j:= n downto 2 do for i:=1 to j-1 do begin if( a[i] >a[i+1]) then begin t:=a[i]; a[i]:=a[i+1]; a[i+1] := t; end; end; {dem so p/t am duong} am := 0; duong := 0; {dem} (3)
  • 5.
    5 am 0 01 1 1 1 2 3 for i:=1 to n do if a[i] >0 then duong := duong + 1 else if a[i]<0 then am := am + 1; (*Xuat file*) (4) assign(g,'sx.out'); rewrite(g); for i:= 1 to n do write(g,' ',a[i]) ; writeln(g); writeln(g,'so luong phan tu am = ',am); writeln(g,'so luong phan tu duong =',duong); close(g); end. III. ĐÁNH GIÁ CUỐI BÀI (5phút) 1. Nội dung đã học - Sắp xếp mảng 1 chiều bằng thuật toán tráo đổi. - Đếm số phần tử trong mảng thoả mãn một điều kiện. 2. Câu hỏi, bài tập về nhà - Cho 2 mảng A, B gồm n (n<=250) số nguyên. Hãy viết chương trình xây dựng mảng C[1..n], trong đó C[i] là tổng của 2 phần tử thứ i thuộc mảng A và mảng B. (tức là: C[i] = A[i] + B[i]). Lưu ý:Dùng vòng lặp while để thay thế vòng lặp for để tính. - Xem trước Mảng hai chiều