II. XUẤT NHẬP TRấN DỮ LIỆU KIỂU MẢNG
b/ Tớnh tổng cỏc phần tử lớn nhất của mỗi dũng
***************************************************************
Tiết 43-44-45: 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 hai chiều, làm
được cỏc bài toỏn trờn mảng hai chiều
2.Kỹ năng:Cú kỹ năng phõn tớch bài toỏn, chuyển mảng hai chiều sang mảng
một chiều và ngược lại
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ũ:
1.Tỡm phần tửỷ lụựn nhaỏt, nhoỷ nhaỏt cuỷa maỷng 2 chiều :
“ 1 maỷng 2 chiều, haừy tỡm phãn tửỷ lụựn nhaỏt, nhoỷ nhaỏt”
Khõng coự gỡ cần phaỷi noựi nhiều về cõng vieọc quaự ủụn giaỷn naứy, ta cửự cho A[1,1] laứ MAX vaứ laứ MIN rồi duứng 2 voứng laởp FOR duyeọt taỏt caỷ nhửừng phần tửỷ cuỷa maỷng ủeồ tỡm phần tửỷ lụựn hụn MAX vaứ nhoỷ hụn MIN , neỏu tỡm ủửụùc thỡ gaựn lái trũ mụựi cho MAX vaứ cho MIN.
Program Tim_phan_tu_lon_nhat_nho_nhat_cua_mang_2_chie u; USES CRT; Const DIM=10; TYPE Mang2=Array[1..dim,1..dim] of Integer; VAR m,n,i,j:Integer; A:Mang2; dong,cot:Integer; {*****************************} Function Tim_Min(Var A:Mang2;m,n:Integer):Integer; VAR i,j,temp:Integer; Begin Temp:=A[1,1]; For i:=1 To M Do For j:=1 To n Do
If A[i,j]<Temp Then begin Temp:=A[i,j];
dong:=i;
cot:=j; End; Tim_Min:=Temp; End; {*****************************} Function Tim_Max(Var A:Mang2;m,n:Integer):Integer; VAR i,j,temp:Integer; Begin Temp:=A[1,1]; For i:=1 To M Do For j:=1 To n Do
If A[i,j]>Temp Then begin Temp:=A[i,j]; dong:=i; cot:=j; End; Tim_Max:=Temp; End; {*****************************} BEGIN ClrScr; Randomize;
Write('So dong: ');Readln(m); Write('So cot: ');Readln(n); For i:=1 To M Do
For j:=1 To n Do
A[i,j]:=(Random(100)- Random(100));
For i:=1 To M Do begin For j:=1 To n Do Write(A[i,j]:4); Writeln;
End; Writeln;
Writeln('PHAN TU NHO NHAT:= ',TIM_MIN(A,m,n));
Writeln('Tai vi tri Dong ',dong:2,' , cot ',cot:2);
Writeln;
Writeln('PHAN TU LON NHAT:= ',TIM_MAX(A,m,n));
Writeln('Tai vi tri Dong ',dong:2,' , cot ',cot:2);
READLN; END.
Bán haừy giaỷi lái baứi toaựn trẽn vaứ cho bieỏt vũ trớ tỡm ủửụùc cuỷa caực phần tửỷ Max vaứ Min
1. Tỡm Max, min cuỷa moĩi doứng vaứ moĩi coọt:
Cõng vieọc coự veỷ phửực táp hụn moọt chuựt, vụựi maỷng ủaừ cho :
TYPE
ARRAY2 = ARRAY[1..Dim,1..Dim] of Integer; VAR
MANG:Array2;
Tái moĩi doứng, ta phaỷi tỡm phần tửỷ lụựn nhaỏt, nhoỷ nhaỏt vaứ cuừng nhử vaọy vụựi moĩi coọt.
ẹeồ giaỷi quyeỏt vaỏn ủề, ta phaỷi khai baựo thẽm 4 maỷng 1 chiều ủeồ lửu trửừ phần tửỷ MAX[coọt i], MAX[doứng i], Min[coọt i], MIN[doứng i], nhửng vỡ cõng vieọc tỡm trẽn doứng vaứ trẽn coọt laứ ủoọc laọp nhau nẽn ta coự theồ chổ cần duứng 2 maỷng 1 chiều thõi MAX vaứ MIN chaỳng hán ủeồ tieỏt kieọm boọ nhụự, nhửng ủeồ tieỏt kieọm boọ nhụự nhaỏt, ta chổ cần 1 maỷng 1 chiều ủeồ lửu giửừ lieọu maứ thõi.
Vụựi khai baựo :
MA: Array[1..Dim*Dim] of Integer
ẹầu tiẽn ta gaựn MANG[1,i] laứ Max (sau ủoự laứ Min) rồi duyeọt taỏt caỷ nhửừng phần tửỷ cuỷa doứng i ủeồ tỡm Max (vaứ Min) cuỷa doứng aỏy, dửừ lieọu tỡm ủửụùc seừ gaựn cho trũ MA[i].
Tửụng tửù ta gaựn Max hay Min laứ trũ cuỷa MANG[1,i] rồi duyeọt taỏt caỷ nhửừng phần tửỷ cuỷa coọt [i] ủeồ tỡm.
Toaứn vaờn chửụng trỡnh nhử sau:
Program Tim_Max_va_Min_cua_dong_cot; USES Crt;
Const
DIM=10; TYPE
ARRAY2 = ARRAY[1..Dim,1..Dim] of Integer; ARRAY1 = ARRAY[1..Dim] of Integer;
VAR
MANG:Array2; MA:Array1;
i,j,m,n,t:Integer;
{---}
Procedure PHATSINH(VAR A:ARRAY2;m,n:Integer); Begin
For i:=1 To m Do Begin For j:=1 To n Do
A[i,j]:=Random(100); End;
End;
{---}
Procedure HIENTHI(VAR A:ARRAY2;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; {---} PROCEDURE Dong; Begin Writeln;
For i:=1 To m Do Begin Ma[i]:=MANG[i,1];
For j:=2 To n Do Begin
If MANG[i,j]>Ma[i] Then Ma[i]:=MANG[i,j]; End;
Writeln('Max dong ',i,' la: ',Ma[i]); End;
Writeln;
For i:=1 To m Do Begin Ma[i]:=MANG[i,1];
For j:=2 To n Do Begin
If MANG[i,j]<Ma[i] Then Ma[i]:=MANG[i,j]; End;
Writeln(' Min dong ',i,' la: ',Ma[i]); End; End; {---} PROCEDURE COT; Begin Writeln; For j:=1 To m Do Begin Ma[j]:=MANG[1,j];
For i:=2 To n Do Begin
If MANG[i,j]>Ma[j] Then Ma[j]:=MANG[i,j]; End;
Writeln('Max cot ',j,' la: ',Ma[j]); End;
Writeln;
For j:=1 To m Do Begin Ma[j]:=MANG[1,j];
For i:=2 To n Do Begin
If MANG[i,j]<Ma[j] Then Ma[j]:=MANG[i,j]; End;
Writeln(' Min cot ',j,' la: ',Ma[j]); End; End; {---} BEGIN Randomize; ClrScr;
Write('So dong, m= '); Readln(m); Write('So cot, n= '); Readln(n); PHATSINH(MANG,m,n);
Clrscr;
Writeln('Mang 2 chieu da cho:'); HIENTHI(MANG,m,n);
DONG; Readln; ClrScr;
Writeln('Mang 2 chieu da cho:'); HIENTHI(MANG,m,n);
COT; Readln; END.
IV. CŨNG CỐ: Để tỡm min, max trờn mỗi dũng mỗi cột, ta cần xõy dựng những thủ tục tỡn min, max, cần duyệt từng phần tử và so sỏnh với max, min
V. HƯỚNG DẪN, DẶN Dề
2: Viết chương trỡnh để kiểm tra một dĩy cỏc số nguyờn được nhập vào từ bàn
phớm đĩ được sắp theo thứ tự tăng dần hay chưa.
Gợi ý: - Nếu dĩy cú 1 phần tử thỡ dĩy tăng dần. - Ngược lại:
+ Nếu A[n-1]>A[n] thỡ dĩy khụng tăng dần.
+ Ngược lại: Gọi đệ qui với dĩy cú n-1 phần tử (bỏ bớt đi phần tử cuối cựng).
********************************************************
Tiết 46-47-48: 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ành1. 1.
Bieỏn maỷng 2 chiều thaứnh maỷng 1 chiều:
Ta phaỷi bieỏn maỷng 2 chiều m doứng, n coọt thaứnh 1 maỷng 1 chiều coự soỏ phần tửỷ laứ m*n baống caựch ủiền lần lửụùt caực giaự trũ cuỷa maỷng 2 chiều tửứ traựi qua phaỷi, tửứ trẽn xuoỏng dửụựi vaứo caực phần tửỷ cuỷa 1 maỷng 1 chiều.
Vaỏn ủề seừ tửụỷng chửứng khoự khaờn vỡ 1 ủaống, bieỏn t cuỷa maỷng 1 chiều phaỷi taờng liẽn túc tửứ 1 ủeỏn m*n trong khi doứng i, coọt j seừ cửự phaỷi thay ủoồi giaự trũ sau khi heỏt 1 doứng,
Thớ dú :
Maỷng 2 chiều : a b c d e f g h i j k l . . . .
Tái moĩi doứng, bieỏn ủeỏm i seừ cháy tửứ 1 ủeỏm m Trong khi ủoự ta cần bieỏn noự thaứnh maỷng 1 chiều:
a b c d e f g h i j . . .
Bieỏn ủeỏm t lái cháy tửứ 1 ủeỏn mxn Nhửng thaọt ra, khõng coự gỡ phửực táp laộm ủeồ coự theồ hieồu ủửụùc thuaọt toaựn nhử sau:
. . . .
t:=1;
For i:=1 To m Do Begin For j:=1 To n Do Begin
If t<=m*n Then B[t]:=A[i,j]; t:=t+1; End;
End;
Tỡm ủửụùc thuaọt toaựn cho cõng vieọc naứy laứ raỏt cần thieỏt cho vieọc giaỷi quyeỏt nhửừng baứi toaựn phửực táp hụn sau ủoự.
. . . .
Bán haừy coỏ gaộng laứm thửỷ, coứn neỏu coự gỡ khoự khaờn thỡ ủaứnh phaỷi nghiẽn cửựu toaứn vaờn chửụng trỡnh sau:
Program Mang_2_thanh_Mang_1; USES Crt;
Const
DIM=10; TYPE
ARRAY2 = ARRAY[1..Dim,1..Dim] of Integer; ARRAY1 = ARRAY[1..Dim*Dim] of Integer;
VAR
M1: Array1; M2:Array2;
i,j,m,n,t:Integer;
{---}
Procedure PHATSINH(VAR A:ARRAY2;m,n:Integer); Begin
For i:=1 To m Do Begin For j:=1 To n Do
M2[i,j]:=Random(100); End;
End;
{---}
Procedure HIENTHI2(VAR A:ARRAY2;m,n:Integer); Begin
For i:=1 To m Do Begin For j:=1 To n Do Write(M2[i,j]:4); Writeln; End; End; {---} Procedure BIENDOI(VAR A:ARRAY2;VAR B:ARRAY1;m,n,t:Integer);
Begin t:=1;
For i:=1 To m Do Begin For j:=1 To n Do Begin If t<=m*n Then B[t]:=A[i,j]; t:=t+1; End; End; End; {---}
Procedure HIENTHI1(VAR A:ARRAY1;t:Integer); Begin For t:=1 To m*n Do Write(A[t]:4); Writeln; End; {---} BEGIN Randomize; ClrScr;
Write('So dong, m= '); Readln(m); Write('So cot, n= '); Readln(n); PHATSINH(M2,m,n);
Writeln('Mang 2 chieu da cho:'); HIENTHI2(M2,m,n);
BIENDOI(M2,M1,m,n,t);
Writeln('Bien thanh Mang 1 chieu:'); HIENTHI1(M1,t);
Readln; END.
Bán haừy tửù nghiẽn cửựu baứi toaựn ngửụùc lái: Cho 1 maỷng 1 chiều gồm t phần tửỷ, giaỷ sửỷ ta tỡm ủửụùc 2 soỏ m,n sao cho t=m*n, haừy bieỏn maỷng ủaừ cho thaứnh maỷng 2 chiều coự m doứng vaứ n coọt hoaởc n doứng, m coọt theo ủuựng thửự tửù tửứ traựi qua phaỷi vaứ tửứ trẽn xuoỏng dửụựi.
. . .
1.Vieỏt chửụng trỡnh saộp xeỏp caực phần tửỷ cuỷa ma traọn vuõng A[n,n] (vụựi n=2k+1) sao cho toồng caực doứng, caực coọt vaứ caực ủửụứng cheựo ủều baống nhau (Baứi toaựn ma phửụng).
IV. CŨNG CỐ: Nhận xột giờ thực hành V. HƯỚNG DẪN, DẶN Dề
1. Vieỏt chửụng trỡnh saộp xeỏp caực phần tửỷ cuỷa ma traọn vuõng A[n,n] sao cho caực phần tửỷ cuỷa noự taờng dần khi ủi theo dửụứng zigzag nhử hỡnh veừ:
************************************************
Tiết 49-50-51: MỘT SỐ THUẬT TỐN MẢNG HAI CHIỀU
1.Kiến thức: Học sinh nắm đựoc một số thuật toỏn trờn mảng hai chiều
2.Kỹ năng:Cú kỹ năng phõn tớch bài toỏn, giải đuwocj cỏc dạng toỏn trờn mảng
hai chiều
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ố
4. Baứi toaựn “bung” maỷng 2 chiều: Vaỏn ủề cuỷa baứi toaựn naứy laứ :
“Cho 1 maỷng 2 chiều m*n phần tửỷ, haừy “bung” maỷng naứy ra 4 phớa ủeồ táo thaứnh 1 maỷng 2 chiều mụựi coự m+2*n+2 phần tửỷ”
Trửụực khi bung: A B C D D E F G H I J K L MN O 52
Sau khi bung : * * * * * * * A B C D * * D E F G * * H I J K * * L MN O * * * * * * *
Cửự cho raống ta coự quyền ủiền soỏ baỏt kyứ naứo vaứo caực phần tửỷ ủửụùc “bung”, coứn neỏu ủaừ giaỷi ủửụùc thỡ roừ raứng ta coự theồ diều caực phần tửỷ ủửụùc “bung” aỏy vụựi caực soỏ thoỷa maừn ủiều kieọn naứo ủoự.
Trửụực heỏt neỏu maỷng ủaừ cho coự m doứng (tửứ doứng 1 ủeỏn doứng m) thỡ maỷng mụựi seừ coự m+2 doứng (tửứ doứng 0 ủeỏn doứng m+1) , tửụng tửù vụựi n coọt cuỷa maỷng ủaừ cho (tửứ coọt 1 ủeỏn coọt n) thỡ maỷng mụựi cuừng phaỷi coự n+2 coọt tửứ coọt 0 ủeỏn coọt n+1.
Thuaọt toaựn “bung ra” ủửụùc dieĩn taỷ nhử sau:
For i:=0 To n+1 Do Begin
A[0,i] := Random(100); A[m+1,i] := Random(100); End;
For i:=1 To m Do Begin
A[i,0] := Random(100); A[i,n+1] := Random(100); End;
Vụựi thuaọt toaựn trẽn, ta coự chửụng trỡnh nhử sau:
Program Mo_rong_mang_2_chieu; 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; {*****************************}
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] := Random(100); A[m+1,i] := Random(100); End;
For i:=1 To m Do Begin
A[i,0] := Random(100); A[i,n+1] := Random(100); End;
Writeln;
For i:=0 To M+1 Do begin For j:=0 To n+1 Do Write(A[i,j]:6); Writeln; End; READLN; END.
Caực bán haừy tửù vieỏt 1 chửụng trỡnh “bung” ma traọn nhử trẽn vaứ ủiền vaứo caực vũ trớ mụựi caực phần tửỷ theo thửự tửù tửứ traựi sang phaỷi, tửứ trẽn xuoỏng dửụựi laứ 1,2,3 . . . . .