• Khi a[i]>a[i+1] tøc lµ bät • Sau lượtthứ hai bäth¬n nước cã nướcbên trªn nÆng bät träng lượng lín hai nướcbên dưới =>thø bọt nước n»m s¸t trªn bät vµ nước lín trªn ch×m xuèng bät nước [r]
(1)Bµi 13 Gi¸o ¸n ®iÖn tö tin häc líp 11 Lop11.com (2) Bµi T×m phÇn tö lín nhÊt cña d·y sè nguyªn (víi n 250 vµ A[i] 500), nÕu d·y cã nhiÒu phÇn tö cïng gi¸ trÞ th× ®ara chØ sè cña phÇn tö lín nhÊt ®Çu tiªn * INPUT: Nhập số nguyên dương n định vµ d·y n sè nguyªn H·y x¸c dươnga1,a2, ,an Input, Output và nªu thuËt to¸n t×m Max? * OUTPUT: ChØ sè vµ gi¸ trÞ cña phÇn tö lín nhÊt d·y Lop11.com (3) thuËt to¸n t×m max Qu¶ nµy lín nhÊt Qu¶ nµy míi lín nhÊt MAX Lop11.com å!T×m Qu¶ra nµy qu¶lín lín nhÊt h¬n råi! (4) NhËp n vµ d·y a1, ,an; Write(‘ Nhap vao so luong phan tu:’); Readln(n); For i:=1 to n begin write(‘ Phan tu thu ’ ,i, ’ = ’); readln(a[i]) end; Max a1 ; i 1; Max:=a[1]; csmax:=1; NÕu i>N ®ara MAX vµ chØ sè i => KÕt thóc; For i :=2 to n IF a[i]>max then begin max:=a[i]; csmax:=i; end; NÕu a[i]>max th× maxa[i], i i+1 => quay lại bước3 Lop11.com (5) Program Tim_Max; Uses crt; Type dayso = Array[1 250] of integer; Var A : dayso ; i,n,max,csmax : integer; BEGIN Clrscr; write(‘ Nhap vao so phan tu cua day so : ’) ; readln(n) ; For i := to n Begin write(‘ Phan tu thu ‘,i,’ = ‘) ; readln(A[i]) ; End; Max := A[1[ ; csmax :=1 ; For i := to n If (A[i]>max) Then begin max := a[i]; csmax=i; end; Writeln(‘ Gia tri cua phan tu Max : ’,Max) ; Writeln(‘ Chi so cua phan tu Max : ’, csmax) ; Readln ; END Lop11.com (6) Chươngtrình chạy và cho kết nhưsau: Nhap vao so phan tu cua day so : Phan tu thu = Phan tu thu = Phan tu thu = 15 Phan tu thu = 25 Phan tu thu = 18 Phan tu thu = 12 Phan tu thu = 19 20 16 Gia tri cua phan tu Max : 25 Chi so cua phan tu Max : Lop11.com (7) Bµi NhËp vµo mét d·y sè nguyªn, s¾p xÕp d·y theo tr×nh tù kh«ng gi¶m * INPUT: Nhập số nguyên dươngn và dãy n số nguyên dươnga1,a2, ,an * OUTPUT: D·y sè ® îc s¾p xÕp theo tr×nh tù kh«ng gi¶m Lop11.com (8) C¸c em h·y cho biết để giải bài to¸n trªn, ë líp 10 chóng ta dïng thuËt to¸n g×? Lµ ThuËt to¸n tráo đổi kiểu næi bät tõ trªn xuèng! Lop11.com (9) Cho d·y sè sau: Gi¶ sö: Mçi phÇn tö ® ợc xem nhưmột bọt nước; Trọng lượngcủa bọt nướcthứ i là giá trị A[i] Lượt2: 1: Lop11.com • i chạy từ đầu dãy đến vị trÝ [cuèi 2] (bá qua [cuèid·y d·y 1] phÇn tö cuèi) • Khi a[i]>a[i+1] tøc lµ bät • Sau lượtthứ hai bäth¬n nước cã nướcbên trªn nÆng bät träng lượng lín hai nướcbên =>thø bọt nước n»m s¸t trªn bät vµ nước lín trªn ch×m xuèng bät nước næi lªn (tr¸o • nhÊt Qu¸bªn tr×nh duyÖt, tr¸o đổi đổi trÝ) ® îcvÞlÆp lặp lại • Sau chØ lượtcòn thø nhÊt, duyÖtbät hainước cã träng phÇn tử lượng vµ thu lín® nhÊt îc d·y sÏ ch×m xuèng kh«ng giảm.đáy (10) Số phần tử các lượtduyệt (j) giảm từ n xuống hai phần tử C¸c em h·y cho For j := n downto biÕt Pascal nhËn xÐt ® îc thÓ For i := to j-1 T¹ihiÖn mçib»ng lượtlệnh duyÖt: g× IF A[i]>A[i+1] then ? từ đến số phần tử -1, - Cho i ch¹y nÕu A[i]>A[i+1] th× tráo đổi vị trí A[i] và A[i+1] th«ng qua biÕn trung gian (Tg) Begin Tg := A[i]; A[i] := A[i+1]; A[i+1]:=Tg; end; Lop11.com (11) PROGRAM Sapxep; Uses crt; Type dayso = Array[1 250] of integer; Var i, j , n , tg : integer; A : dayso; BEGIN Clrscr; write(‘ Nhap vao so phan tu cua day so : ’); readln(n); For i := to n Begin write(‘ Phan tu thu ‘,i,’ = ‘); readln(A[i]); end; For j := n downto For i:= to j-1 If A[i]>A[i+1] Then begin Tg := A[i]; A[i]:=A[i+1]; A[i+1]:=Tg; end; Writeln(‘ Day so duoc sap xep ’); For i:=1 to n Write(A[i]:5); Readln; Lop11.com END Khai b¸o m¶ng chiÒu NhËp m¶ng chiÒu Xö lÝ m¶ng b»ng thuËt to¸n næi bät In kÕt qu¶ (12) Bài Nhập vào dãy A tăng gồm N (N 250) số nguyên dươngkhác và sè k Cho biÕt vÞ trÝ cña sè h¹ng cã gi¸ trÞ b»ng k d·y (nÕu cã) ? * INPUT: Nhập số nguyên dươngn, dãy n số nguyên dươnga1,a2, ,an và số nguyên k * OUTPUT: ChØ sè i mµ = k hoÆc th«ng b¸o “Kh«ng t×m thÊy” nÕu kh«ng cã sè h¹ng nµo cña d·y A cã gi¸ trÞ b»ng k Lop11.com (13) C¸ch 1: T×m kiÕm tuÇn tù Lần lượttừ số hạng thứ nhất, so sánh giá trị số hạng xét với k gặp đư îc sè h¹ng b»ng k, dãy đã đư îc xÐt hÕt vµ kh«ng cã sè h¹ng nµo cã gi¸ trÞ b»ng k C¸c em h·y Tim_thay := false; nªu c¸c c¸ch để giải bài Tõto¸n ý tưởngtrên Forh·y i := to n trên ?viết đoạn chương IF A[i] = k then tr×nh b»ng PASCAL để tìm số hạng Begin d·y cã gi¸ trÞ b»ng Tim_thay:=true; k? cs:=i; break; end; IF tim_thay then writeln(‘Chi so tim duoc: ’,i) else writeln(‘Khong tim thay’); Lop11.com (14) C¸ch 2: T×m kiÕm nhÞ ph©n Víi k = 21 vµ d·y A gåm 10 sè h¹ng nhsau: A 21 22 30 31 33 i 10 Lượtthứ nhất: agiữa là a5 = 9; < 21 vïng t×m kiÕm thu hÑp ph¹m vi tõ a6 a10; Lượtthứ hai: agiữa là a8 = 30; 30 > 21 vïng t×m kiÕm thu hÑp ph¹m vi tõ a6 a7; Lượtthứ ba: agiữa là a6 = 21; 21= 21 VËy chØ sè cÇn t×m lµ i = Lop11.com (15) V× d·y A lµ d·y t¨ng, ta thùc hiÖn thu hÑp nhanh ph¹m vi t×m kiÕm cách so sánh k với A[giua] và xét các trườnghợp: - A[giua]=k t×m thÊy chØ sè gi÷a vµ kÕt thóc; - A[giua]>k Thu hÑp vÒ phÝa bªn tr¸i (Cuèi = Gi÷a -1); - A[giua]<k Thu hÑp vÒ phÝa bªn ph¶i (§Çu = Gi÷a +1); Qu¸ tr×nh trªn ® îc lÆp l¹i chõng nµo cßn chat×m thÊy hoÆc Dau <= Cuoi Dau:=1; Cuoi:=n; tim_thay:=false; while ( Dau<= Cuoi) or NOT(tim_thay) Begin Giua:= (Dau+Cuoi) div 2; IF A[giua] = k then Tim_thay :=true else IF (A[Giua]>k) then Cuoi := Giua – else Dau := Giua +1; end; IF Tim_thay then Writeln(‘ Chi so tim duoc la : ’,Giua) Else Writeln(‘Khong tim thay’); Lop11.com (16)