1. Trang chủ
  2. » Giáo án - Bài giảng

Bài tập (Mảng 1 chiều)

15 1,5K 18
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 15
Dung lượng 636 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

* OUTPUT : Chỉ số và giá trị của phần tử lớn nhất trong dãy... 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

Trang 1

Bµi 13

Gi¸o ¸n ®iÖn tö tin häc líp 11

Trang 2

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

a1,a2, ,an

* OUTPUT : Chỉ số và giá trị của phần tử lớn nhất trong dãy

Trang 3

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

Trang 4

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.

Trang 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 := 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.

Trang 6

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 =

Trang 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

a1,a2, ,an

* OUTPUT : D·y sè ® îc s¾p xÕp theo tr×nh tù kh«ng gi¶m

Trang 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!

Trang 9

2

9

7

6

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;

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 l ợng của bọt n ớ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.

Trang 10

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 đ ợc thể hiện bằng lệnh gì ?

1

For j := n downto 2 do

IF A[i]>A[i+1] then

Tg := A[i];

A[i] := A[i+1];

A[i+1]:=Tg;

Begin

end;

Trang 11

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¶

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;

Trang 12

Bµi 3 NhËp vµo mét d·y A t¨ng gåm N (N  250) sè nguyªn d ¬ng kh¸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 ¬ng n, d·y n sè nguyªn d ¬ng

a1,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

Trang 13

Các em hãy nêu các cách để giải bài toán

trên ?

Lần l ợt từ 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.

Từ ý t ởng trên hãy viết đoạn

ch ơng trình bằng PASCAL

để tìm số hạng của dãy có giá

trị bằng k?

For i := 1 to n do

IF A[i] = k then

Begin Tim_thay:=true;

cs:=i;

break;

end;

Tim_thay := false;

IF tim_thay then writeln(‘Chi so tim duoc: ’,i) else writeln(‘Khong tim thay’);

 Cách 1: Tìm kiếm tuần tự

Trang 14

 C¸ch 2: T×m kiÕm nhÞ ph©n

10 9

8 7

6 5

4 3

2 1

i

33 31

30 22

21 9

6 5

4 2

A

Víi k = 21 vµ d·y A gåm 10 sè h¹ng nh sau:

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;

33 31

30 22

21

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

22

21

6

21

Trang 15

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’);

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 êng hî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 a t×m thÊy hoÆc Dau <= Cuoi.

Ngày đăng: 19/07/2014, 08:00

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w