II. XUẤT NHẬP TRấN DỮ LIỆU KIỂU MẢNG
5. Tỡm “ẹieồm cửùc tieồu” cuỷa maỷn g2 chiề u:
Moọt phần tửỷ ủửụùc gói laứ ủieồm cửùc tieồu cuỷa maỷng 2 chiều A[m,n] neỏu noự khõng lụựn hụn caực phần tửỷ kề noự.
Nhaọn xeựt :
• Trửụực heỏt, phần tửỷ ủửụùc gói laứ kề 1 phần tửỷ neỏu chuựng ụỷ cánh nhau trong maỷng (trẽn, dửụựi, traựi, phaỷi, trẽn traựi, trẽn phaỷi, dửụựi traựi, dửụựi phaỷi).
• Soỏ phần tửỷ kề vụựi 1 phần tửỷ baỏt kyứ cuỷa maỷng 2 chiều phú thuoọc vaứo vũ trớ cuỷa noự trong maỷng
+ Moĩi phần tửỷ khõng naốm trẽn caực cánh maỷng 2 chiều coự 8 phãn tửỷ kề (F,G,J,K).
+ Phần tửỷ naốm tái 4 goực (A,D,M,Q) thỡ chổ coự 3 phần tửỷ kề. + Phần tửỷ naốm trẽn biẽn maứ khõng tái goực (B,C,E,I,H,L,O,P thỡ coự 5 phần tửỷ kề. A B C D E F G H I J K L MN O P Q R S T • Ý tửụỷng 1:
Ta qui baứi toaựn về tỡm phần tửỷ nhoỷ nhaỏt trong caực ma traọn 3x3 táo bụựi A[i,j] vaứ caực phần tửỷ kề cuỷa noự (baứi toaựn 1), rồi so saựnh noự vụựi A[i,j]. Phửụng phaựp naứy ủụn giaỷn nhaỏt nhửng thụứi gian thửùc hieọn seừ raỏt lãu.
• Ý tửụỷng 2 :
Vụựi moĩi phần tửỷ A[i,j], ta xeựt caực phần tửỷ kề cuỷa noự, neỏu coự 1 phần tửỷ naứo kề cuỷa A[i,j] maứ nhoỷ hụn A[i,j] thỡ A[i,j] khõng phaỷi laứ ủieồm cửùc tieồu, khi tieỏn haứnh baống phửụng phaựp naứy, ta phaỷi lửu yự xeựt A[i,j] trong 3 trửụứng hụùp (tái goực, tái biẽn vaứ khõng naốm trẽn caực cánh), chớnh vieọc phaỷi phãn ra nhiều trửụứng hụùp nhử vaọy seừ laứm cho baứi toaựn trụỷ nẽn daứi doứng, phửực táp.
• Ý tửụỷng 3:
Áp dúng thuaọt toaựn cuỷa yự tửụỷng 2, nhửng keứm theo 1 thuaọt toaựn nhoỷ laứ “bung” ma traọn về 4 phớa (baứi toaựn 4) vaứ gaựn giaự trũ cho caực phần tửỷ dửụùc “bung” laứ giaự trũ lụựn nhaỏt trong miền giaự trũ coự theồ coự cuỷa caực phần tửỷ trong maỷng (Do khai baựo Array of Integer nẽn ta cho chuựng laứ MaxInt) ủeồ ủửụùc maỷng sau:
* * * * * * * * A B C D E * * F G H I J * * K L MN O * * P Q R S T * * * * * * * *
(Giaự trũ cuỷa caực phần tửỷ * laứ MaxInt)
Cuoỏi cuứng laứ aựp dúng thuaọt toaựn cuỷa yự tửụỷng 2 cho maỷng mụựi naứy maứ khõng cần phãn bieọt caực trửụứng hụùp. Caực bán haừy theo doừi kyừ Function Tim_cuc_tieu trong chửụng trỡnh ủề nghũ nhử sau:
{*****************************}
IV.CŨNG CỐ: Hĩy nờu nội dung thuật toỏn bung mảng hai chiều, từ bài toỏn bung mảng hai chiều ta cú thể thực hiện làm bài toỏn nào?
V. HƯỚNG DẪN, DẶN Dề
1.Moọt phần tửỷ ủửụùc gói laứ ủieồm cửùc tieồu cuỷa maỷng 2 chiều A[m,n] neỏu noự khõng lụựn hụn caực phần tửỷ kề noự. Viết chương trỡnh tỡm điểm cực tiểu mảng hai chiều
******************************************************
Tiết 52-53-54: 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, phõn tớch được
cỏc dạng toỏn trờn mảng hai chiều để tớnh toỏn
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
1.Moọt phần tửỷ ủửụùc gói laứ ủieồm cửùc tieồu cuỷa maỷng 2 chiều A[m,n] neỏu noự khõng lụựn hụn caực phần tửỷ kề noự. Viết chương trỡnh tỡm điểm cực tiểu mảng hai chiều Program Tim_Cac_diem_cuc_tieu; USES CRT; Const DIM=10; TYPE Mang2=Array[0..DIM+1,0..DIM+1] of Integer; VAR m,n,i,j,Res:Integer; A:Mang2; {*****************************} Function Tim_cuc_tieu(i,j:Integer):Boolean; VAR K,L:Integer; B:Boolean; Begin B:=TRUE; K:=i-1;
WHILE B And (K<=i+1) Do Begin
L:=j-1;
WHILE B And (L<=j+1) Do Begin If A[K,L]<A[i,j] Then B:=FALSE; Inc(L); End; Inc(K); End; Tim_cuc_tieu:=B; End; {*****************************}
PROCEDURE PHATSINH(var A:Mang2;m,n:Integer); Begin For i:=1 To M Do For j:=1 To n Do A[i,j]:=(Random(100)- Random(100)); End; {*****************************}
PROCEDURE HIENTHI(var A:Mang2;m,n:Integer); Begin
For i:=1 To M Do begin For j:=1 To n Do Write(A[i,j]:4); Writeln; End; End; {*****************************} BEGIN ClrScr; Randomize;
Write('So dong: ');Readln(m); Write('So cot: ');Readln(n); PHATSINH(A,m,n);
HIENTHI(A,m,n); {Mo rong ma tran}
For i:=0 To n+1 Do Begin A[0,i] := MaxInt; A[m+1,i] := MaxInt; End;
For i:=1 To m Do Begin A[i,0] := MaxInt; A[i,n+1] := MaxInt; End;
For i:=0 To M+1 Do begin For j:=0 To n+1 Do Write(A[i,j]:6); Writeln;
End; For i:=1 To m Do For j:=1 To n Do If Tim_cuc_tieu(i,j) Then Writeln('A[',i,',',j,'] la cuc tieu'); READLN; END.