Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

337 views

Published on

Khi sao chép cần ghi nguồn
Cảm ơn!

Published in: Education
  • Be the first to comment

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

  1. 1. KIỂU MẢNG (TT) EMAIL:VOTAMLONG@GMAIL.COM BÀI 11
  2. 2. Bài 1: Viết CT tạo mảng A gồm N (N250) 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 A1,A2,..,AN, mỗi số không vượt quá 500. INPUT OUTPU T -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=6 Output: 0 1 2 3 5 9 2
  3. 3. THUẬT TOÁN TRÁO ĐỔI (EXCHANGE SORT) Bước 1: Nhập N,các số hạng A1,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ê 3
  4. 4. GIẢI THÍCH THUẬT TOÁN 1 2 3 4 j i N=4 4
  5. 5. J=4 i=1 2 3 4 j i 5
  6. 6. J=4 1 i=2 3 4 j i 6
  7. 7. J=4 1 2 i=3 4 j i 7
  8. 8. J=3 i=1 2 3 4 j i 8
  9. 9. J=3 1 i=2 3 4 j i 9
  10. 10. J=2 i=1 2 3 4 j i 10
  11. 11. J=1 i=1 2 3 4 j i 11 STOP
  12. 12. KẾT QUẢ 1 2 3 4 4 20 50 150 12
  13. 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. 13
  14. 14. CÁC BIẾN CHÍNH CẦN SỬ DỤNG LÀ GÌ? Mảng A Biến đơn: N, i,j,t 14
  15. 15. PHẦN KHAI BÁO var a:array [1..100] of integer; f,g : text; i,j,t,n:integer; Trong đó: i: dùng để lặp từ 1 đến N-1 J: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] 15
  16. 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); 16
  17. 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; 17
  18. 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 18
  19. 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; 19
  20. 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; 20
  21. 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. 21
  22. 22. CHẠY THỬ CHTRÌNH sx.inp sx.out 22
  23. 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 23
  24. 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; 24
  25. 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); 25
  26. 26. CHẠY CHƯƠNG TRÌNH sx.inp sx.out 26
  27. 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]). 27

×