Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 15 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
15
Dung lượng
636 KB
Nội dung
Bµi 13 Gi¸o ¸n ®iÖn tö tin häc líp 11 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ì đ'a ra chỉ số của phần tử lớn nhất đầu tiên. Hãy xác định Input, Output và nêu thuật toán tìm Max? * INPUT: Nhập số nguyên dơng n và dãy n số nguyên dơng a 1 ,a 2 , ,a n . * OUTPUT: Chỉ số và giá trị của phần tử lớn nhất trong dãy. 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! thuËt to¸n t×m max MAX 1. NhËp n vµ d·y a 1 , ,a n ; 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; For i :=2 to n do IF a[i]>max then begin max:=a[i]; csmax:=i; end; 3. NÕu i>N ®a ra MAX vµ chØ sè i => KÕt thóc; 4. NÕu a[i]>max th× max←a[i], i ← i+1 => quay l¹i bíc 3. 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. Nhap vao so phan tu cua day so : 7 Phan tu thu 1 = 15 20 16 25 18 12 19 Gia tri cua phan tu Max : 25 Chi so cua phan tu Max : 4 Ch'¬ng tr×nh ch¹y vµ cho kÕt qu¶ nh' sau: Phan tu thu 2 = Phan tu thu 3 = Phan tu thu 4 = Phan tu thu 5 = Phan tu thu 6 = Phan tu thu 7 = 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ơng n và dãy n số nguyên dơng a 1 ,a 2 , ,a n . * OUTPUT: Dãy số đợc sắp xếp theo trình tự không giảm. 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! 3 2 9 7 6 Cho dãy số sau: 3 2 9 7 6 Giả sử: Mỗi phần tử đBợc xem nhB một bọt nBớc; Lợt 1: i chạy từ đầu dãy đến vị trí [cuối dãy -1] Khi a[i]>a[i+1] tức là bọt nớc bên trên nặng hơn bọt nớc bên dới => bọt nớc trên chìm xuống và bọt nớc bên dới nổi lên (tráo đổi vị trí). Sau lợt thứ nhất, bọt n ớc có trọng lợng lớn nhất sẽ chìm xuống đáy. Trọng lBợng của bọt nBớc thứ i là giá trị của A[i]. Lợt 2: i chạy từ đầu dãy đến vị trí [cuối dãy - 2] (bỏ qua phần tử cuối). Sau lợt thứ hai bọt nớc có trọng lợng lớn thứ hai nằm sát trên bọt nớc lớn nhất. Quá trình duyệt, tráo đổi đợc lặp đi lặp lại cho đến khi chỉ còn duyệt hai phần tử và thu đợc dãy không giảm. Số phần tử ở các lợt duyệt (j) sẽ giảm từ n xuống hai phần tử. Tại mỗi lợt duyệt: - Cho i chạy từ 1 đến số phần tử -1, 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). Các em hãy cho biết trong Pascal nhận xét 1 đBợc thể hiện bằng lệnh gì ? 1 For j := n downto 2 do 2 For i := 1 to j-1 do IF A[i]>A[i+1] then Tg := A[i]; A[i] := A[i+1]; A[i+1]:=Tg; Begin end; [...]... writeln(Khong tim thay); 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ượt thứ 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ượt thứ 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ượt thứ ba: agiữa là a6 = 21; 21= 21 Vậy chỉ số cần tìm là i = 6 Vì dãy A là dãy tăng,... 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;... hẹp về phía bên trái (Cuối = Giữa -1) ; - A[giua] . phân 10 987654321i 33 313 022 21 9 6542A Với k = 21 và dãy A gồm 10 số hạng nh sau: Lợt thứ nhất: a giữa là a 5 = 9; 9 < 21 vùng tìm kiếm thu hẹp trong phạm vi từ a 6 a 10 ; 33 313 022 21 Lợt. 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; END. Bài 3. Nhập. 1 For j := n downto 2 do 2 For i := 1 to j -1 do IF A[i]>A[i +1] then Tg := A[i]; A[i] := A[i +1] ; A[i +1] :=Tg; Begin 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