II. XUẤT NHẬP TRấN DỮ LIỆU KIỂU MẢNG
5.1. Viết chương trỡnh nhập vào một dĩy n số a[1], a[2], , a[n] và in ra màn
hỡnh cỏc thụng tin sau:
- Tổng cỏc phần tử của dĩy.
- Số lượng số dương và tổng của cỏc số dương của dĩy. - Số lượng số õm và tổng của cỏc số õm của dĩy.
- Trung bỡnh cộng của dĩy.
5.2. Viết chương trỡnh nhập vào một dĩy n số a[1], a[2],..., a[n] và in ra màn
hỡnh cỏc thụng tin sau:
- Số hạng dương lớn nhất của dĩy và chỉ số (vị trớ) của nú.
- Số hạng dương nhỏ nhất của dĩy và chỉ số (vị trớ) của nú. - Số hạng õm lớn nhất của dĩy và chỉ số (vị trớ) của nú. - Số hạng õm nhỏ nhất của dĩy và chỉ số (vị trớ) của nú.
******************************************************
****************************************************** Ngày soạn: 30/11/2008 Ngày dạy:3/12/2008
Tiết 31-32-33: MẢNG MỘT CHIỀU
1.Kiến thức: Học sinh nắm được cỏch viết dữ liệu dạng mảng một chiều, làm
được cỏc bài toỏn trờn mảng một chiều
2.Kỹ năng:Cú kỹ năng phõn tớch bài toỏn, viết cõu lệnh chớnh xỏc
3.Thỏi độ: Học sinh tớch cực, tự giỏc, hứng thỳ trong giải toỏn bằng mảng B. PHƯƠNG PHÁP: Thuyết trỡnh, gợi mở, vấn đỏp
C. CHUẨN BỊ CỦA THẦY VÀ TRề
GV: Giỏo ỏn, phấn màu vẽ sơ đồ HS: ễn tập cỏc cõu lệnh cơ bản
D. TIẾN TRèNH LấN LỚP1. Ổn định: Sĩ số 1. Ổn định: Sĩ số
2.Kiểm tra bài cũ:
Bài tập 1: Viết chương trỡnh in ra màn hỡnh tam giỏc Pascal. Vớ dụ, với n=4 sẽ in ra hỡnh sau: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 í tưởng:
Tam giỏc Pascal được tạo ra theo qui luật sau: + Mỗi dũng đều bắt đầu và kết thỳc bởi số 1.
+ Phần tử thứ j ở dũng k nhận được bằng cỏch cộng 2 phần tử thứ j-1 và j ở dũng thứ k-1.
Program Bai1;
Uses Crt;
Var Dong:Array[0..20] Of Byte; n,i,j:Byte; Begin Write('n= '); Readln(n); Clrscr; Dong[0]:=1; Writeln(Dong[0]:4);
{Khoi tao gia tri cua dong} For i:=1 To n Do Dong[i]:=0; {Voi moi dong i}
For i:=1 To n Do Begin
For j:=i DownTo 1 Do Begin Dong[j]:=Dong[j-1]+Dong[j]; Write(Dong[j]:4); End; Writeln(Dong[i]:4); End; Readln; End.
Bài tập 2: Viết chương trỡnh nhập vào 2 mảng số nguyờn A, B đại diện cho 2 tập hợp (khụng thể cú 2 phần tử trựng nhau trong một tập hợp). Trong quỏ trỡnh nhập, phải kiểm tra: nếu phần tử vừa nhập vào đĩ cú trong mảng thỡ khụng bổ sung vào mảng. In ra màn hỡnh cỏc phần tử là giao của 2 tập hợp A, B.
í tưởng:
Duyệt qua tất cả cỏc phần tử ai∈A. Nếu ai∈B thỡ viết ai ra màn hỡnh.
Program Bai2;
Uses Crt;
Type Mang=ARRAY[1..50] Of Integer; Var A,B:Mang;
n,m:Byte;
Function KiemTra(x:Integer; n:Byte; A:Mang):Boolean;
Var i:Byte; Found:Boolean; Begin
Kiemtra:=False; i:=1;
While (i<=n) AND (not Found) Do
If x=A[i] Then Found:=True Else i:=i+1; KiemTra:=Found;
End;
Procedure NhapMang(Var n:Byte; Var A:Mang);
Var ch:Char;
x:Integer; Begin
n:=0; Repeat
Write('x='); Readln(x);
If not KiemTra(x,n,A) Then Begin
n:=n+1; A[n]:=x; End;
Writeln('An ESC de ket thuc nhap!'); ch:=Readkey;
Until ch=#27; End;
Procedure GiaoAB(n:Byte; A:Mang;m:Byte; B:Mang);
Var i:Byte; Begin
For i:=1 To n Do
If KiemTra(A[i],m,B) Then Write(A[i]:4); End; Begin Clrscr; Writeln('Nhap mang A: '); NhapMang(n,A); Writeln('Nhap mang B: '); NhapMang(m,B);
Writeln('Giao cua 2 mang A&B la: '); GiaoAB(n,A,m,B);
Readln;
End.
Bài tập 3: Nhập vào một mảng cỏc số nguyờn. a/ Xếp lại mảng đú theo thứ tự giảm dần.
b/ Nhập vào một số nguyờn từ bàn phớm. Chốn số đú vào mảng sao cho mảng vẫn cú thứ tự giảm dần. (khụng được xếp lại mảng)
Gợi ý:
- Tỡm vị trớ cần chốn: i.
- Đẩy cỏc phần tử từ vị trớ i tới n sang phải 1 vị trớ. - Gỏn: A[i]=x;
4. CŨNG CỐ: Học sinh nhắc lại thuật toỏn sắp xếp dĩy tăng dần 5. HƯỚNG DẪN, DẶN Dề
Bài tập 1: Cho 2 mảng số nguyờn: Mảng A cú m phần tử, mảng B cú n phần tử. a/ Sắp xếp lại cỏc mảng đú theo thứ tự giảm dần.
b/ Trộn 2 mảng đú lại thành mảng C sao cho mảng C vẫn cú thứ tự giảm dần (Khụng được xếp lại mảng C).
Gợi ý:
- Dựng 2 chỉ số i,j để duyệt qua cỏc phần tử của 2 mảng A, B và k là chỉ số cho mảng C.
- Trong khi (i<=m) và (j<=n) thỡ:
{Tức là khi đồng thời cả 2 dĩy A, B đều chưa duyệt hết} + Nếu A[i]>B[j] thỡ: C[k]:=A[i]; i:=i+1;
+ Ngược lại: C[k]:=B[j]; j:=j+1;
- Nếu dĩy nào hết trước thỡ đem phần cũn lại của dĩy kia bổ sung vào cuối dĩy C.
Bài tập 2: Viết chương trỡnh nhập vào một dĩy số nguyờn a1, a2, ..., an. Tỡm trong dĩy {a} một dĩy con tăng dần dài nhất (cú số phần tử lớn nhất) và in ra màn hỡnh dĩy con đú.
***************************************************************
*************************************************************** Ngày soạn: 30/11/2008 Ngày dạy:6/12/2008
Tiết 34-35-36: THỰC HÀNH
1.Kiến thức: Học sinh vận dụng cỏc kiến thức đĩ học làm được cỏc bài toỏn về
mảng một chiều
2.Kỹ năng: Cú kỹ năng thực hành trờn mỏy nhanh, chớnh xỏc 3.Thỏi độ: Học sinh tớch cực, tự giỏc, hứng thỳ trong thực hành B. PHƯƠNG PHÁP: Thuyết trỡnh, gợi mở, vấn đỏp
C. CHUẨN BỊ CỦA THẦY VÀ TRề
GV: Bài tập, phũng mỏy HS: Làm cỏc bài tập ở nhà
D. TIẾN TRèNH LấN LỚP1. Ổn định: Sĩ số 1. Ổn định: Sĩ số
2. Thực hành
Bài tập 1: Cho 2 mảng số nguyờn: Mảng A cú m phần tử, mảng B cú n phần tử. a/ Sắp xếp lại cỏc mảng đú theo thứ tự giảm dần.
b/ Trộn 2 mảng đú lại thành mảng C sao cho mảng C vẫn cú thứ tự giảm dần (Khụng được xếp lại mảng C).
Gợi ý:
- Dựng 2 chỉ số i,j để duyệt qua cỏc phần tử của 2 mảng A, B và k là chỉ số cho mảng C.
- Trong khi (i<=m) và (j<=n) thỡ:
{Tức là khi đồng thời cả 2 dĩy A, B đều chưa duyệt hết}
+ Nếu A[i]>B[j] thỡ: C[k]:=A[i]; i:=i+1; + Ngược lại: C[k]:=B[j]; j:=j+1;
- Nếu dĩy nào hết trước thỡ đem phần cũn lại của dĩy kia bổ sung vào cuối dĩy C.
Bài tập 2: Viết chương trỡnh nhập vào một dĩy số nguyờn a1, a2, ..., an. Tỡm trong dĩy {a} một dĩy con tăng dần dài nhất (cú số phần tử lớn nhất) và in ra màn hỡnh dĩy con đú.
Bài 3:Hĩy nghiờn cứu quy luật tạo ra cỏc bảng số sau đõy và lập chương trỡnh để in ra cỏc bảng số đú. Cho biết số phần tử N của dũng đầu tiờn và cỏc phần tử của dũng đầu tiờn đựợc nhập từ bàn phớm 1 4 9 12 3 5 3 2 -2 -4 21 8 2 13 -13 -6 11 7 17 10 Bài 3: Program Inbang;
Var A:Array [1..16] of integer;
N,I,p,q;Integer; BEGIN
Repeat
Write(‘Cho biet hang dau co may so’); Readln(N); Until N<=16; For i:=1 to N do Begin Write(‘A[‘,i,’]=’); Readln(A[i]); End; p;=1; q:=5; While N>0 do Begin For i:=1 to N do Begin Gotoxy(p+6*i,q); Write(A[i]:6);
If i<N then A[i]:=A[i+1]-A[i]; End; Writeln; n:=n-1; q:=q+1; p:=p+3; end; Readln; 37
END.
4.CŨNG CỐ: Nhận xột giừo thực hành 5. HƯỚNG DẪN DẶN Dề
Bài 1: Dĩy số Fibonaci là dĩy số
1 1 2 3 5 8 1321...
được xỏc định như sau: a1=a2 =1 An = an-1+an-2 với n>=3
Lập chương trỡnh tỡm và in ra cỏc số Fibonaci nhỏ hơn hoặc bằng một số K cho trước
Bài 2: Viết chương trỡnh nhập vào mảng a gồm 10 phần tử nguyờn, sau đú, nhập
một giỏ trị x. Tỡm trong mảng a nếu cú phần tử nào cú giỏ trị bằng với x thỡ hiển thị lờn màn hỡnh vị trớ của nú trong mảng a.
*********************************************************
Ngày soạn: 6/9/2008 Ngày dạy:10/9/2008
Tiết 37-38-39: MẢNG HAI CHIỀU
1.Kiến thức: Học sinh nắm được cỏch viết dữ liệu dạng mảng một chiều, làm
được cỏc bài toỏn trờn mảng một chiều
2.Kỹ năng:Cú kỹ năng phõn tớch bài toỏn, viết cõu lệnh chớnh xỏc
3.Thỏi độ: Học sinh tớch cực, tự giỏc, hứng thỳ trong giải toỏn bằng mảng B. PHƯƠNG PHÁP: Thuyết trỡnh, gợi mở, vấn đỏp
C. CHUẨN BỊ CỦA THẦY VÀ TRề
GV: Giỏo ỏn, phấn màu vẽ sơ đồ HS: ễn tập cỏc cõu lệnh cơ bản
D. TIẾN TRèNH LấN LỚP1. Ổn định: Sĩ số 1. Ổn định: Sĩ số
2.Kiểm tra bài cũ:
Phần này chủ yếu trỡnh bày cỏc mảng hai chiều. Cỏc mảng nhiều hơn hai chiều được suy diễn một cỏch tự nhiờn. Việc khai bỏo mảng hai chiều cũng 38
giống như mảng một chiều, chỉ cú điều khỏc là nú cú hai tập chỉ số được viết cỏch nhau bởi dấu ‘,’.
Vớ dụ:
TypeMang1 = Array[1.. 30, 1.. 50] of Integer; Mang2 = Array[1.. 3, 0.. 2] of Real; Var A : Mang1;
B : Mang2;
Trong đú, số phần tử của mảng số thực B là 3 x 3 = 9 (phần tử), sắp đặt trong bộ nhớ theo thứ tự như sau:
B[1, 0] B[1, 1] B[1 ,2] B[2, 0] B[2, 1] B[2 ,2] B[3, 0] B[3, 1] B[3 ,2]
* Chỳ ý: Mảng hai chiều cũn gọi là ma trận. Trong vớ dụ trờn, B là ma trận cấp
3 ì 3. Trong mảng hai chiều, chỉ số sau truy cập nhanh hơn chỉ số trước. Để truy
cập đến phần tử hàng thứ i, cột thứ j của mảng hai chiều B ta dựng cỏch viết:
B[ i ][ j ] hoặc B[ i , j ]
Vớ dụ: Nhập một ma trận m hàng, n cột từ bàn phớm. Tớnh và in ra màn hỡnh tổng của mỗi cột và tổng của mỗi hàng.
Const mMax = 30, nMax = 30;
Type Mang = Array[1.. mMax, 1.. nMax] of Real; Var n, m, i, j : Integer;
sum : Real; a : Mang; Begin
Write( ‘ Ban muon nhap ma tran bao nhieu hang va cot ? ‘ ); Readln( m, n ); For i := 1 to m do For j := 1 to n do Begin Write( ' PT thu [ ' , i , ' , ‘ , j, ‘ ] = ' ); Readln( a[ i, j ] ); End; For j := 1 to n do Begin sum := 0; For i := 1 to m do Sum := sum + a[ i, j ];
Write( ‘ Tong cot ‘ , j ,’ = ‘ , sum : 0 : 5 ); End; For i := 1 to m do Begin sum := 0; For j := 1 to n do Sum := sum + a[ i, j ];
Write( ‘ Tong hang ‘ , i ,’ = ‘ , sum : 0 : 5 ); End;
Readln;
End.
Bài tập 5.6: Viết chương trỡnh tỡm ma trận chuyển vị của ma trận A.
í tưởng:
Dựng mảng 2 chiều để lưu trữ ma trận. Gọi B là ma trận chuyển vị của ma trận A, ta cú: Bij = Aji.
Uses Crt;
Type Mang = ARRAY[1..10,1..10] Of Integer; Var A,B:Mang; m,n,i,j:Integer; Begin {Nhập ma trận} Write(‘Nhap số dũng m=’); Readln(m); Write(‘Nhap số cột n=’); Readln(n); For i:=1 To m Do For j:=1 To n Do Begin Write(‘A[‘,i,j,’]=’); Readln(A[i,j]); End; {Tỡm ma trận chuyển vị} For i:=1 To m Do For j:=1 To n Do B[i,j]:=A[j,i]; {In ma trận chuyển vị ra màn hỡnh} For i:=1 To m Do Begin For j:=1 To n Do Write(B[i,j]:5); Writeln; End; Readln; End.
Bài tập 5.7: Cho một mảng 2 chiều A cấp mxn gồm cỏc số nguyờn và một số nguyờn x. Viết chương trỡnh thực hiện cỏc cụng việc sau:
a/ Đếm số lần xuất hiện của x trong A và vị trớ của chỳng. b/ Tớnh tổng cỏc phần tử lớn nhất của mỗi dũng.
Uses Crt;
Type Mang = ARRAY[1..10,1..10] Of Integer; Var A:Mang; m,n,i,j,x,dem,S,max:Integer; Begin {Nhập ma trận} Write(‘Nhap số dũng m=’); Readln(m); 40
Write(‘Nhap số cột n=’); Readln(n); For i:=1 To m Do For j:=1 To n Do Begin Write(‘A[‘,i,j,’]=’); Readln(A[i,j]); End; {Nhập x} Write(‘Nhap x=’); Readln(x);
{Đếm số lĩn xuất hiện của x và vị trớ của x} dem:=0;
Writeln(‘Vi tri cua x trong mang A: ‘); For i:=1 To m Do For j:=1 To n Do If x=A[i,j] Then Begin Write(i,j,’ ; ‘); dem:=dem+1; End;
Writeln(‘So lan xuat hien cua x trong mang A la: ‘,dem); {Tớnh tổng cỏc phần tử lớn nhất của mỗi dũng}
S:=0;
For i:=1 To m Do {duyệt qua từng dũng} Begin
{Tỡm phần tử lớn nhất của dũng thứ i} Max:=A[i,1];
For j:=2 To n Do {duyệt từng phần tử của dũng thứ i} If max<A[i,j] Then max:=A[i,j];
{Cộng max vào biến S} S:=S+max;
End;
Writeln(‘Tong cac phan tu lon nhat cua moi dong la: ‘,S); Readln;
End.
4.CŨNG CỐ: Hĩy nờu ý nghĩa của việc dựng hai vũng for lồng nhau, Để xột
tổng hàng lớn nhất ta cần tớnh tổng từng hàng rồi sú sỏnh cỏc tổng với nhau
5. HƯỚNG DẪN DẶN Dề
Bài tập 1: Viết chương trỡnh nhập vào số tự nhiờn N (N lẻ), sau đú điền cỏc số từ 1 đến n2 vào trong một bảng vuụng sao cho tổng cỏc hàng ngang, hàng dọc và 2 đường chộo đều bằng nhau (bảng này được gọi là Ma phương).
Vớ dụ: Với N=3 và N=5 ta cú
Bắc 2 7 6 3 16 9 22 15 9 5 1 2 0 8 21 14 2 4 3 8 Tõy 7 25 13 1 19 Đụng 24 12 5 1 8 6 11 4 17 1 0 23 Nam ************************************************************** Tiết 40-41-42: THỰC HÀNH
1.Kiến thức: Học sinh vận dụng cỏc kiến thức đĩ học làm được cỏc bài toỏn về
mảng hai chiều
2.Kỹ năng: Cú kỹ năng thực hành trờn mỏy nhanh, chớnh xỏc 3.Thỏi độ: Học sinh tớch cực, tự giỏc, hứng thỳ trong thực hành B. PHƯƠNG PHÁP: Thuyết trỡnh, gợi mở, vấn đỏp
C. CHUẨN BỊ CỦA THẦY VÀ TRề
GV: Bài tập, phũng mỏy HS: Làm cỏc bài tập ở nhà
D. TIẾN TRèNH LấN LỚP1. Ổn định: Sĩ số 1. Ổn định: Sĩ số
2. Thực hành
Bài tập 1: Viết chương trỡnh nhập vào số tự nhiờn N (N lẻ), sau đú điền cỏc số từ 1 đến n2 vào trong một bảng vuụng sao cho tổng cỏc hàng ngang, hàng dọc và 2 đường chộo đều bằng nhau (bảng này được gọi là Ma phương).
Vớ dụ: Với N=3 và N=5 ta cú Bắc 2 7 6 3 16 9 22 15 9 5 1 2 0 8 21 14 2 4 3 8 Tõy 7 25 13 1 19 Đụng 24 12 5 1 8 6 11 4 17 1 0 23 Nam Phuơng phỏp:
Xuất phỏt từ ụ bờn phải của ụ nằm giữa. Đi theo hướng đụng bắc để điền cỏc số 1, 2, ...
Khi điền số, cần chỳ ý một số nguyờn tắc sau:
- Nếu vượt ra phớa ngồi bờn phải của bảng thỡ quay trở lại cột đầu tiờn. - Nếu vượt ra phớa ngồi bờn trờn của bảng thỡ quay trở lại dũng cuối cựng.
- Nếu số đĩ điền k chia hết cho N thỡ số tiếp theo sẽ được viết trờn cựng một hàng với k nhưng cỏch 1 ụ về phớa bờn phải.
Uses Crt;
Var A:Array[1..20,1..20] Of Word; n,i,j,k:Word; Begin Write('Nhap N= '); Readln(n); Clrscr; {Định vị ụ xuất phỏt} i:=n DIV 2 + 1; j:=n DIV 2 + 2; {Điền cỏc số k từ 1 đến n*n} For k:=1 To n*n Do Begin A[i,j]:=k; If k MOD n=0 Then j:=j+2 Else Begin
{Đi theo hướng đụng bắc} j:=j+1; i:=i-1;
End;
If j>n Then j:=j MOD n; If i=0 Then i:=n;
End; {In kết quả ra màn hỡnh} For i:=1 To n Do Begin For j:=1 To n Do write(a[i,j]:4); Writeln; End; Readln; End.
Bài tập 2: Cho mảng 2 chiều A cấp mxn. Viết chương trỡnh sắp xếp lại mảng A theo yờu cầu sau:
a/ Cỏc phần tử trờn mỗi dũng được sắp xếp theo thứ tự giảm dần.
b/ Cỏc dũng được sắp xếp lại theo thứ tự tăng dần của tổng cỏc phần tử trờn mỗi dũng.
Bài 3 Nhập một ma trận m hàng, n cột từ bàn phớm. Tớnh và in ra màn hỡnh tổng của mỗi cột và tổng của mỗi hàng.
Const mMax = 30, nMax = 30;
Type Mang = Array[1.. mMax, 1.. nMax] of Real; Var n, m, i, j : Integer;
sum : Real; a : Mang; Begin
Write( ‘ Ban muon nhap ma tran bao nhieu hang va cot ? ‘ ); Readln( m, n ); For i := 1 to m do For j := 1 to n do Begin Write( ' PT thu [ ' , i , ' , ‘ , j, ‘ ] = ' ); Readln( a[ i, j ] ); End; For j := 1 to n do Begin sum := 0; For i := 1 to m do Sum := sum + a[ i, j ];
Write( ‘ Tong cot ‘ , j ,’ = ‘ , sum : 0 : 5 ); End; For i := 1 to m do Begin sum := 0; For j := 1 to n do Sum := sum + a[ i, j ];
Write( ‘ Tong hang ‘ , i ,’ = ‘ , sum : 0 : 5 ); End;
Readln; End.
4. Cho 2 mảng số nguyờn: Mảng A cú m phần tử, mảng B cú n phần tử.
a/ Sắp xếp lại cỏc mảng đú theo thứ tự giảm dần.
b/ Trộn 2 mảng đú lại thành mảng C sao cho mảng C vẫn cú thứ tự giảm dần (Khụng được xếp lại mảng C).
Gợi ý:- Dựng 2 chỉ số i,j để duyệt qua cỏc phần tử của 2 mảng A, B và k là chỉ số
cho mảng C.
- Trong khi (i<=m) và (j<=n) thỡ:
{Tức là khi đồng thời cả 2 dĩy A, B đều chưa duyệt hết} + Nếu A[i]>B[j] thỡ: C[k]:=A[i]; i:=i+1;
+ Ngược lại: C[k]:=B[j]; j:=j+1;
- Nếu dĩy nào hết trước thỡ đem phần cũn lại của dĩy kia bổ sung vào cuối dĩy C.
IV . CŨNG CỐ: Nhận xột giờ thực hành V .HƯỚNG DẪN, DĂN Dề