Upload
vo-tam-long
View
82
Download
0
Embed Size (px)
Citation preview
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ê
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.
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.
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);