27
KIỂU MẢNG (TT) EMAIL:[email protected] BÀI 11

Kiểu mảng(tt)_Võ Tâm Long_Copyright 2015

Embed Size (px)

Citation preview

KIỂU MẢNG (TT)

EMAIL:[email protected]

BÀI 11

2

Bài 1: Viết CT tạo mảng A gồm N (N250) số nguyên. Sắp xếp lại mảng A này bằng đã học ở lớp 10/Bài 4 toán và thuật toán,trang 38-39-40. thuật toán tráo đổi (Exchange Sort)

-Số nguyên dương (N<=250) -Dãy A gồm N số nguyên dương A

1, A2,..,AN, mỗi số không vượt quá 500.

INPUT OUTPUT

-Dãy số A được sắp xếp không giảm (Tăng dần).

Input: A = {2,3,5,2,9,1,0},N=6Output: 0 1 2 3 5 9

3

THUẬT TOÁN TRÁO ĐỔI (EXCHANGE SORT)

Bước 1: Nhập N,các số hạng A 1, A2,..,AN

Bước 2: j N;Bước 3: Nếu j < 2 thì đưa ra dãy A đã

được sắp xếp rồi kết thúc.Bước 4: j j -1 ,i 0;

Bước 5: i i+1;Bước 6: Nếu i > j thì quay lại B3;

Bước 7: Nếu Ai > Ai+1 thì tráo đổi

Ai , Ai+1 cho nhau;

Bước 8: Quay lại B5;

Liệt kê

4

GIẢI THÍCH THUẬT TOÁN

1 2 3 4

ji

N=4

5

J=4

i=1

2 3 4

ji

6

J=4

1 i=2 3 4

ji

7

J=4

1 2 i=3 4

ji

8

J=3

i=1

2 3 4

ji

9

J=3

1i=2

3 4

ji

10

J=2

i=1 2 3 4

ji

11

J=1

i=1 2 3 4

ji

STOP

12

KẾT QUẢ

1 2 3 4

4 20 50 150

13

CÁC VIỆC CHÍNH CẦN THỰC HIỆN TRONG CT NÀY LÀ GÌ?+ Cho biết số ptử của mảng A.

+ Nhập giá trị cho các ptử của mảng A

+ Sắp xếp các phần tử của mảng A.Hoán đổi vị trí của phần tử phía trước và phía sau nếu như p/tử phía trước lớn hơn p/tử phía sau.

14

CÁC BIẾN CHÍNH CẦN SỬ DỤNG LÀ GÌ?

Mảng ABiến đơn: N, i,j,t

15

PHẦN KHAI BÁOvar a:array [1..100] of integer; f,g : text; i,j,t,n:integer;

Trong đó:i: dùng để lặp từ 1 đến N-1J:dùng để lặp từ N về 2,…t : Dùng để lưu biến tạm của A[i],khi hoán đổi vị trí với A[i+1]

16

VIẾT PHẦN CHTRÌNH TẠO GIÁ TRỊ CHO CÁC PTỬ CỦA MẢNG A.

(*doc file*) assign(f,'sx.inp'); reset(f); read(f,n); for i:= 1 to n do read(f,a[i]); close(f);

17

Để viết tiếp đoạn chtrình còn lại (sắp xếp mảng A) theo thuật toán ta phải kiểm tra so sánh Ai > Ai+1 hay không?

Sau đó ta mới hoán đổi vị trí của Ai ,Ai+1 .

Vậy ta sử dụng câu lệnh gì ở đây?(*Xu ly*)if( a[i] >a[i+1]) then begin (*Hoán đổi a[i] và a[i+1]*) end;

18

Trong phần sắp xếp này chúng ta sử dụng mấy vòng lặp?

Vòng lặp đó dùng làm gì?

Lặp từ vị trí nào tới vị trí nào ?

-2 vòng lặp.-Vòng lặp đầu tiên dùng để duyệt từ p/tử vị trí cuối cùng đến p/tử ở vị trí thứ 2(lặp đến N-1 lần,mục đích để loại bỏ N-1 lần các phần tử lớn nhất sau mỗi lần sắp xếp)-Vòng lặp thứ 2,lặp từ p/tử ở vị trí đầu tiên đến p/tử ở vị trí thứ N-1,dùng để so sánh từng đôi một kề nhau từ vị trí 1 N-1

19

(*Xu ly*) for j:= n downto 2 do for i:=1 to j-1 do begin if( a[i] >a[i+1]) then begin (*Hoán đổi a[i] và a[i+1]*) end; end;

20

Trong 2 vòng lặp thì khi điều kiện if a[i] > a[i+1] nếu đúng sẽ làm gì tiếp theo?

Hoán đổi vị trí A[i] và A[i+1]: t := a[i] a[i] := a[i+1] ; a[i+1] := t;

21

CT HOÀN CHỈNH

program sx;var a:array [1..100] of integer; f,g : text; i,j,t,n:integer;begin(*doc file*) assign(f,'sx.inp'); reset(f); read(f,n); for i:= 1 to n do read(f,a[i]); close(f);

(*Xu ly*) for j:= n downto 2 do for i:=1 to j-1 do begin if( a[i] >a[i+1]) then begin t:=a[i]; a[i]:=a[i+1]; a[i+1] := t; end; end;

(*Xuat file*) assign(g,'sx.out'); rewrite(g); for i:= 1 to n do write(g,' ',a[i]) ; close(g);

end.

22

CHẠY THỬ CHTRÌNH

sx.inp

sx.out

23

BÀI TOÁN 2:EM HÃY ĐẾM SỐ PHẦN TỬ ÂM VÀ

DƯƠNG CỦA MẢNG A (BÀI 1)VD: Input:A= {3 5 9 -2 -5},N=5 Output : am =2,duong = 3

Phân tích:

am=0,duong=0

+i=1: 3>0,am=0,duong=1

+i=2: 5>0,am=0,duong= 2

+i=3: 9 >0,am =0,duong =3

+i=4: -2 <0 ,am =1,duong = 3

+i=5: -5<0,am= 2,duong =3

24

am := 0; duong := 0;{dem}for i:=1 to n do if a[i] >0 then duong := duong + 1 else if a[i]<0 then

am := am + 1;

25

GHI SỐ LƯỢNG P/TỬ ÂM/DƯƠNG VÀO FILE SX.OUT

(*Xuat file*) assign(g,'sx.out'); rewrite(g); for i:= 1 to n do write(g,' ',a[i]) ; writeln(g); writeln(g,'so luong phan tu am = ',am); writeln(g,'so luong phan tu duong =',duong); close(g);

26

CHẠY CHƯƠNG TRÌNH

sx.inp sx.out

27

- Cho 2 mảng A, B gồm n (n<=250) số nguyên. Hãy viết chương trình xây dựng mảng C[1..n], trong đó C[i] là tổng của 2 phần tử thứ i thuộc mảng A và mảng B. (tức là: C[i] = A[i] + B[i]).