Tải bản đầy đủ (.pdf) (15 trang)

Bài giảng Tin học 11 - Bài 13: Bài tập mảng một chiều

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 (536.93 KB, 15 trang )

<span class='text_page_counter'>(1)</span>Bµi 13. Gi¸o ¸n ®iÖn tö tin häc líp 11 Lop11.com.

<span class='text_page_counter'>(2)</span> Bµi 1. 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 trong d·y.. Lop11.com.

<span class='text_page_counter'>(3)</span> 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!.

<span class='text_page_counter'>(4)</span> 1. NhËp n vµ d·y a1,...,an;. Write(‘ Nhap vao so luong phan tu:’); Readln(n); For i:=1 to n do begin write(‘ Phan tu thu ’ ,i, ’ = ’); readln(a[i]) end;. 2. Max  a1 ; i  1;. Max:=a[1]; csmax:=1;. 3. NÕu i>N ®­ara MAX vµ chØ sè i => KÕt thóc;. For i :=2 to n do IF a[i]>max then begin max:=a[i]; csmax:=i; end;. 4. NÕu a[i]>max th× maxa[i], i  i+1 => quay lại bước3. Lop11.com.

<span class='text_page_counter'>(5)</span> 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 := 1 to n do Begin write(‘ Phan tu thu ‘,i,’ = ‘) ; readln(A[i]) ; End; Max := A[1[ ; csmax :=1 ; For i := 1 to n do 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.

<span class='text_page_counter'>(6)</span> Chươngtrình chạy và cho kết quả nhưsau: Nhap vao so phan tu cua day so : Phan tu thu 1 = Phan tu thu 2 = Phan tu thu 3 =. 15. Phan tu thu 4 =. 25. Phan tu thu 5 =. 18. Phan tu thu 6 =. 12. Phan tu thu 7 =. 19. 20 16. Gia tri cua phan tu Max : 25 Chi so cua phan tu Max : 4 Lop11.com. 7.

<span class='text_page_counter'>(7)</span> Bµi 2. 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.

<span class='text_page_counter'>(8)</span> 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.

<span class='text_page_counter'>(9)</span> Cho d·y sè sau: 3 2 9 7 6. 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ị của A[i]. Lượt2: 1:. 3 2 9 7 6 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 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 dưới næi lªn (tr¸o • nhÊt. Qu¸bªn tr×nh duyÖt, tr¸o đổi đổi trÝ). ®­ îcvÞlÆp đi lặp lại cho đến • khi 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..

<span class='text_page_counter'>(10)</span> 1. Số phần tử ở các lượtduyệt (j) sẽ giảm từ n xuống hai phần tử.. C¸c em h·y cho For j := n downto 2 do biÕt trong Pascal nhËn xÐt 1 ®­ îc thÓ For i := 1 to j-1 do 2 T¹ihiÖn mçib»ng lượtlệnh duyÖt: g× IF A[i]>A[i+1] then ? từ 1 đế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.

<span class='text_page_counter'>(11)</span> 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 := 1 to n do Begin write(‘ Phan tu thu ‘,i,’ = ‘); readln(A[i]); end; For j := n downto 2 do For i:= 1 to j-1 do 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 do Write(A[i]:5); Readln; Lop11.com END.. Khai b¸o m¶ng 1 chiÒu. NhËp m¶ng 1 chiÒu. Xö lÝ m¶ng b»ng thuËt to¸n næi bät. In kÕt qu¶.

<span class='text_page_counter'>(12)</span> Bài 3. Nhập vào một dãy A tăng gồm N (N  250) số nguyên dươngkhác nhau và 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ã) ?. * 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µ ai = 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.

<span class='text_page_counter'>(13)</span>  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 đang xét với k cho đến khi gặp đư îc sè h¹ng b»ng k, hoặc 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 := 1 to n do trên ?viết đoạn chương IF A[i] = k then tr×nh b»ng PASCAL để tìm số hạng của 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.

<span class='text_page_counter'>(14)</span>  C¸ch 2: T×m kiÕm nhÞ ph©n Víi k = 21 vµ d·y A gåm 10 sè h¹ng nh­sau:. A. 2. 4. 5. 6. 9 21 22 30 31 33. i. 1. 2. 3. 4. 5. 6. 7. 8. 9 10. Lượtthứ nhất: agiữa là a5 = 9; 9 < 21  vïng t×m kiÕm thu hÑp trong 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 trong 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 = 6. Lop11.com.

<span class='text_page_counter'>(15)</span> 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 bằng 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 ch­at×m thÊy hoÆc Dau <= Cuoi. Dau:=1; Cuoi:=n; tim_thay:=false; while ( Dau<= Cuoi) or NOT(tim_thay) do Begin Giua:= (Dau+Cuoi) div 2; IF A[giua] = k then Tim_thay :=true else IF (A[Giua]>k) then Cuoi := Giua – 1 else Dau := Giua +1; end; IF Tim_thay then Writeln(‘ Chi so tim duoc la : ’,Giua) Else Writeln(‘Khong tim thay’); Lop11.com.

<span class='text_page_counter'>(16)</span>

×