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

Bài 13 - Bài tập mảng một chiều

15 1,1K 6

Đ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

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 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ẽư

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ư

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

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;

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

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

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

33 31

30 22

21

L ît thø hai: agi÷a lµ a8 = 30; 30 > 21

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, 19:01

TỪ KHÓA LIÊN QUAN

w