Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (312.59 KB, 16 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1></div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>
Quả này
lớn nhất
Quả này
mới lớn
nhất
ồ! Quả này
lớn hơn
Tìm ra quả
lín nhÊt råi!
<b>1. Nhập n và d y a</b>· <b><sub>1</sub>,...,a<sub>n</sub>;</b>
<b>2. Max a1 ; i 1; </b>
<i><b>3. NÕu i>N ® a ra MAX vµ </b></i>
<b>chØ sè i => KÕt thóc;</b>
<b>1. NhËp n vµ d y a</b>· <b><sub>1</sub>,...,a<sub>n</sub>;</b> <b>Write(‘ Nhap vao so luong phan tu:’);</b>
<b>Readln(n);</b>
<b>For i:=1 to n do </b>
<b> begin</b>
<b> write(‘ Phan tu thu ’ ,i, ’ = ’);</b>
<b> readln(a[i])</b>
<b> end;</b>
<b>2. Max a1 ; i 1; </b> <b><sub> </sub><sub>Max:=a[1]</sub><sub>; csmax:=1; </sub></b>
<b> For i :=2 to n do </b>
<b>IF a[i]>max then </b>
<b>begin</b>
<b> max:=a[i];</b>
<b> csmax:=i;</b>
<b>end;</b>
<i><b>3. NÕu i>N ® a ra MAX vµ </b></i>
<b>chØ sè i => KÕt thóc;</b>
<b>Program Tim_Max;</b>
<b>Uses crt;</b>
<b>Type dayso = Array[1..250] of integer;</b>
<b>Var</b>
<b> A : dayso ;</b>
<b> i,n,max,csmax : integer;</b>
<b>BEGIN</b>
<b> Clrscr;</b>
<b> write(‘ Nhap vao so phan tu cua day so : ’) ;</b>
<b> readln(n) ;</b>
<b> For i := 1 to n do </b>
<b>Begin</b>
<b> write(‘ Phan tu thu ‘,i,’ = ‘) ;</b>
<b> readln(A[i]) ;</b>
<b>End;</b>
<b> Max := A[1[ ; csmax :=1 ;</b>
<b> For i := 1 to n do </b>
<b>If (A[i]>max) Then</b>
<b> begin</b>
<b> max := a[i];</b>
<b> csmax=i;</b>
<b> Writeln(‘ Gia tri cua phan tu Max : ’,Max) ;</b>
<b> Writeln(‘ Chi so cua phan tu Max : ’, csmax) ;</b>
<b> Readln ;</b>
<b>Nhap vao so phan tu cua day so :</b> <b>7</b>
<b>Phan tu thu 1 = </b> <b>15</b>
<b>20</b>
<b>16</b>
<b>25</b>
<b>18</b>
<b>12</b>
<b>19</b>
<b>Gia tri cua phan tu Max : 25</b>
<b>Chi so cua phan tu Max : 4 </b>
<b>ãi chy từ đầu d y đến vị trí </b>ã
<b>[cuèi</b> <b>d y -1]</b>Ã
<b>ãKhi a[i]>a[i+1] tức là phần tử </b>
<b>bên trên nặng hơn phần tử </b>
<b>bên d ới => phần tử trên chìm </b>
<b>xuống và phàn tử bên d ới nổi </b>
<i><b>lờn (</b><b>trỏo i v trớ).</b></i>
<b>ãSau l ỵt thø nhÊt, PhÇn tư cã </b>
<b>träng l ỵng lín nhất sẽ ở vị trí </b>
<b>cuối cùng.</b>
<b>ãi chạy từ đầu d y đến vị trí </b>ã
<b>[cuèi d y - 2]</b>· <i><b> (bá qua phÇn </b></i>
<i><b>tư cuối).</b></i>
<b>ãSau l ợt thứ hai phần tư cã </b>
<b>träng l ỵng lín thø hai nằm </b>
<b>sát trên phần tử lớn nhất. </b>
<b> </b>
<b> Sè phần tử ở các l ợt duyệt (j) sẽ giảm từ n xuống hai phần tử.</b>
<b> nÕu A[i]>A[i+1] th×</b>
<b>tráo đổi vị trí A[i] và A[i+1]</b>
<b>th«ng qua biÕn trung gian (Tg).</b>
<b>Tg := A[i];</b>
<b>A[i] := A[i+1];</b>
<b>A[i+1]:=Tg;</b>
<b>Begin</b>
<i><b>Khai báo mảng 1 </b></i>
<i><b>chiều</b></i>
<i><b>Nhập m¶ng 1 chiỊu</b></i>
<i><b>Xử lí mảng bằng </b></i>
<i><b>thuật tốn Tráo đổi</b></i>
<i><b>In kÕt qu¶</b></i>
<b>PROGRAM Sapxep;</b>
<b>Uses crt;</b>
<b>Type dayso = Array[1..250] of integer;</b>
<b>Var</b>
<b> i, j , n , tg : integer;</b>
<b> A : dayso;</b>
<b>BEGIN</b>
<b> Clrscr;</b>
<b> write(‘ Nhap vao so phan tu cua day so : ’);</b>
<b> readln(n);</b>
<b> For i := 1 to n do </b>
<b>Begin</b>
<b> write(‘ Phan tu thu ‘,i,’ = ‘);</b>
<b> readln(A[i]);</b>
<b>end; </b>
<b> For j := n downto 2 do</b>
<b> For i:= 1 to j-1 do</b>
<b> If A[i]>A[i+1] Then </b>
<b> begin</b>
<b>Tg := A[i];</b>
<b>A[i]:=A[i+1];</b>
<b>A[i+1]:=Tg;</b>
<b> end;</b>
<b> Writeln(‘ Day so duoc sap xep ’);</b>
<b> For i:=1 to n do Write(A[i]:5);</b>
<b> Readln;</b>
Bµi 3. NhËp vµo mét d·y A gåm N (N 250) sè nguyªn d ơng khác nhau và
<i>một số k. Cho biÕt vÞ trÝ cđa số hạng có giá trị b»ng k trong d·y (nÕu có) ? </i>
Thông báo kết quả ra màn hình
<b>For i := 1 to n do</b>
<b>IF A[i] = k then</b>
<b>Begin</b>
<b> Tim_thay:=true;</b>
<b> cs:=i;</b>
<b> break;</b>
<b>end;</b>
<b>Tim_thay := false;</b>
<b>IF tim_thay then writeln(‘Chi so tim duoc: ’,i)</b>
<b> else writeln(‘Khong tim thay’);</b>
<b> Víi k = 21 vµ d y A gåm 10 số hạng nh sau: </b>Ã
<b>L ợt thứ nhất: a<sub>giữa</sub> là a<sub>5</sub> = 9; 9 < 21 </b>
<b> vùng tìm kiếm thu hẹp trong phạm vi từ a<sub>6</sub></b><b> a<sub>10</sub>;</b>
<b>L ợt thứ hai: a<sub>giữa</sub> là a<sub>8</sub> = 30; 30 > 21</b>
<b> vùng tìm kiếm thu hẹp trong phạm vi từ a<sub>6</sub></b><b> a<sub>7</sub>;</b>
<b>L ợt thứ ba: a<sub>giữa</sub> là a<sub>6</sub> = 21; 21= 21 </b>
<b>Dau:=1; Cuoi:=n; tim_thay:=false;</b>
<b>while ( Dau<= Cuoi) or NOT(tim_thay) do</b>
<b>Begin </b>
<b> Giua:= (Dau+Cuoi) div 2;</b>
<b> IF A[giua] = k then Tim_thay :=true</b>
<b> else </b>
<b> </b> <b>IF (A[Giua]>k) then Cuoi := Giua 1</b><i><b>–</b></i>
<b> else Dau := Giua +1;</b>
<b>end;</b>
<b>IF Tim_thay then Writeln(‘ Chi so tim duoc la : ’,Giua) </b>
<b> Else Writeln(‘Khong tim thay’);</b>
<b>V× d y A là d y tăng</b>Ã · <b>, ta thùc hiÖn thu hẹp nhanh phạm vi tìm kiếm </b>
<b>bằng cách so sánh k với A[giua] và xét các tr ờng hợp: </b>
<b>- A[giua]=k tìm thấy chỉ số giữa và kết thúc;</b>
<b>- A[giua]>k Thu hẹp về phía bên trái (Cuối = Giữa -1);</b>
<b>- A[giua]<k Thu hẹp về phía bên phải (Đầu = Giữa +1);</b>