Tìm Kiếm Trong Pascal - Sách Giải

sach-giai-logo
  • Môn học
    • Toán học
    • Văn học
    • Vật lý
    • Hoá học
    • Lịch sử
    • Địa lý
    • Anh văn
    • Công nghệ
    • Sinh học
    • Tin học
    • Âm nhạc
    • Mĩ thuật
    • Thể dục
    • Công dân
    • Khoa học
    • Y khoa
    • Ngoại khoá
    • Gương sáng
    • Đề thi, đáp án
    • Thơ văn
    • Đề tài
    • Dạy và học
  • Sách
  • Hỏi đáp
  • Văn bản
  • Tìm kiếm
  • vnedu tra cứu điểm
  • Trang nhất
  • Tin học
Tìm kiếm trong Pascal 2020-08-05T20:36:36+07:00 https://sachgiai.com/Tin-hoc/tim-kiem-trong-pascal-13456.html https://sachgiai.com/uploads/news/2020_07/lap-trinh-pascal.jpg Sách Giải Thứ tư - 05/08/2020 20:34 1. TỐNG QUÁTMột trong các nhiệm vụ cơ bản của máy tính là tìm kiếm. Từ một cơ sở dữ liệu cho trước và một đối tượng cho trước ta phải trả lời hai câu hỏi:- Đối tượng có mặt trong cơ sở dữ liệu đó hay không ?- Nếu có thì cho biết vị trí của nó. Để đơn giản hóa vấn đề ở đây chúng ta chỉ giới hạn vấn đề trong việc tìm một giá trị X (nguyên) xem có nằm trong một dãy các số nguyên hay không ? Phương pháp tổng quát là đi so sánh X với các phần tử của dãy, nếu việc so sánh cho kết quả TRUE thì việc tìm kiếm thành công. Có nhiều thuật toán để tìm kiếm, ỏ đây chúng ta chỉ xét 2 thuật toán cơ bản đó là: - Tìm tuần tự (Sequential Search). - Tìm nhị phân (Binary Search). 2. TÌM KIẾM TUẦN TỰ TRÊN MỘT DÃY CHƯA CÓ THỨ TỰ a) Thuật toán - So sánh từng phần tử của dãy A[1..n] với giá trị x. - Trong khi đi từ phần tử đầu đến phần tử cuối của dãy: + Nếu tìm thấy giá trị x thì thoát ra và thông báo thứ tự của thành phần thứ i thỏa A[i] = x. + Nếu sau khi đi hết mà không tìm thấy thì việc tìm kiếm xem như kết thúc với kết quả là 0. b) Lập trình Pascal Function Tim (x: integer; A: Array[1..n] of integer);Word; Var i : word; Begin i:= 1; While (i <= n) and not (x = A[i]) do inc (i); If i > n then Tim := 0 Else Tim:= i; End. 3. TÌM KIÊM TUẦN TỰ TRÊN MỘT DÃY ĐÃ CÓ THỨ TỰ a) Thuật toán - Thuật toán tìm tuần tự trong trường hợp xấu nhất là tìm không thấy do đó sẽ thực hiện n lần so sánh. - Giả sử dãy A đã được sắp thứ tự tăng dần ta có thể cải tiến lại thuật toán trên để chạy nhanh hơn như sau: + Bắt đầu từ i = 1. + Trong khi (i <= n) và (A[i] < x) tăng i. + Nếu (i < n và A[i] > x) hay (i > n) thì: • Không tìm thấy. Ngược lại thì: • Giá trị cần tìm ở thành phần thứ i. b) Lập trình Pascal Function Tim (x: integer; A: Array[1..n] of Integer): word; Var i: word; Begin i:= 1; While (i <= n) and (x > A[iJ) do Inc (i); If ((i <= n) and (A[i] > x)) or (i > n) then Tim:= 0 Else Tim:= i; End; • Chú ý: Nếu dãy được sắp xếp theo thứ tự giảm dần thì ta phải đảo điều kiện trong các biểu thức điều kiện như sau: While (i <= n) and. (x < A[i]) If ((i <= n) and (A[i] < x)) or (i > n). 4. TÌM KIẾM TUẦN TỰ VỚI LÍNH CANH a) Thuật toán - Dùng một lính canh cụ thể là phần tử A[n + 1] có thể đơn giản hóa quá trình tự kiếm tuần tự. - Trước khi tìm kiếm phần tử có giá trị bằng X trong đoạn dãy A[1..n] ta đặt giá trị đó tại trạm canh bằng lệnh gán: a[n + 1]:= X; - Nhờ có lính canh nên câu lệnh lặp: REPEAT i:= i + 1 UNTIL A[i] := x; luôn luôn được kết thúc một cách tự nhiên, bởi vì trong trường hợp tìm được ta sẽ có A[i] = x với (1 < i < n), còn trong trường hợp giá trị x không có mặt trong mảng A[1..n] thì ta vẫn có: A[i] := x với i = t + 1 - Việc dùng lính canh đòi hỏi mảng a phải chứa ít ra là n + 1 phần tử. b) Lập trình Pascal A[n + 1]:= x; {Đặt lính canh} I := 0; Repeat I := i + 1; Until A[i]:= x; If i <= n then writeln(i) else Writein ('không tìm được'); 5. TÌM KIẾM NHỊ PHÂN TRÊN MỘT MẢNG ĐƯỢC SẮP a) Thuật toán - Giả sử mảng A[1..n] đã được sắp thứ tự tăng dần. - Ta chia đôi mảng A xem thành phần ở giữa có giá trị lớn hơn hay nhỏ hơn giá trị x để từ đó xác định nên tiếp tục tìm kiếm trên dãy trên hay dãy dưới. Giả sử chọn được dãy trên, tiếp tục chia đôi dãy trên để tìm kiếm cho đến khi gặp hoặc không thể chia đôi được nữa (nghĩa là không tìm thấy). Ta dùng 3 biến Low, High, Mid để lưu giữ chỉ số của đầu, cuối, giữa của dãy đang tìm kiếm. - Ban đầu cho Low:= 1; High:= n. - Chừng nào High > Low thì thực hiện: • Mid + (Low + Ligh) Div 2 • Nếu x > A[Mid] thì Low:= Mid + 1 Ngược lại (x <= A[Mid] • Nếu x < A[Mid] thì High:= Mid - 1 Ngược lại (a = A[Mid]) High:= -1 • Nếu High = -1 thì đã tìm thấy x tại thành phần thứ Mid. Ngược lại không tìm thấy. b) Lập trình Pascal Function Tim (x: integer; A: Array[1..n] of integer): word; Var Low, High, Mid: integer; Begin Low:= 1; High:= n; While High >= Low do Begin Mid:= (High + Low) div 2; If (A[Mid] < x) then Low := Mid + 1 else If (x < x[Mid] then High := Mid - 1 Else High:= -1 end; If high = -1 then Tim:= Mid; else Tim:= 0 Bản quyền bài viết thuộc về Sachgiai.com. Ghi nguồn Sách giải.com khi đăng lại bài viết này.

Ý kiến bạn đọc

Sắp xếp theo bình luận mới Sắp xếp theo bình luận cũ Sắp xếp theo số lượt thích

Những tin mới hơn

    /assets/news/2020_07/lap-trinh-pascal.jpg Sắp xếp trong Pascal

    /assets/news/2020_07/lap-trinh-pascal.jpg Sắp xếp trong Pascal (tiếp theo)

Những tin cũ hơn

    /assets/news/2020_07/lap-trinh-pascal.jpg Giới thiệu phần mềm Turbo Pascal

    /assets/news/2020_07/lap-trinh-pascal.jpg Vẽ hình trong Pascal

Lớp 1

Lớp 2

Lớp 3

Lớp 4

Lớp 5

Lớp 6

Lớp 7

Lớp 8

Lớp 9

Lớp 10

Lớp 11

Lớp 12

THÀNH VIÊN

Hãy đăng nhập thành viên để trải nghiệm đầy đủ các tiện ích trên site Nhập mã do ứng dụng xác thực cung cấp Thử cách khác Nhập một trong các mã dự phòng bạn đã nhận được. Thử cách khác Đăng nhập Đăng ký

MÔN HỌC

Lớp 1 Lớp 2 Lớp 3 Lớp 4 Lớp 5
Lớp 6 Lớp 7 Lớp 8 Lớp 9
Lớp 10 Lớp 11 Lớp 12
Trung cấp Cao đẳng Đại học

SÁCH HỌC

Lớp 1 Lớp 2 Lớp 3 Lớp 4 Lớp 5
Lớp 6 Lớp 7 Lớp 8 Lớp 9
Lớp 10 Lớp 11 Lớp 12
Tuyển sinh Thơ Truyện Tử vi
Kênh Bóng đá trực tiếp hôm nay miễn phí ⇔ j888Kênh 90Phut TV full HD ⇔ Gemwiniwinhttps://789bet.kitchen/go 88truc tiep bong da xoilac tv mien philink trực tiếp bóng đá xôi lạc tv hôm nay ⇔ link xem truc tiep bong da xoilac tv ⇔ https://104.248.99.177/link trực tiếp bóng đá xoilactv tốc độ cao ⇔ xem bóng đá cà khịa tv trực tuyến hôm nayhitclubhttps://nhatvip.rocksABC8https://ww88.supply/W88sin88.runTDTC789BETBJ8833win789clubBJ88789winhttps://789betcom0.com/https://hi88.baby/https://j88cem.com/https://iwin20.com/iwinclubiwin ⇔ ⇔ iwinko66bet88https://iwin89.com/23winFB88Hb88BJ88Fun222789Bet789Bet33WINqh88 ⇔ ⇔ kuwinVIPwinGo8823win789club69VNBJ88Kuwinhi88789BET77win tosafehttps://okvipno1.com/8K BETGo88789club69vnhi88j8899OKjun888 เครดิตฟรBet88https://789bethv.com/https://88clb.promo/https://meijia789.com/BK833WINhttps://f8bet0.tv/https://choangclub.barhttps://vinbet.funhttps://uk88.rocksHay88https://33win.boutique/789clubBJ88ABC8iwinsunwinsunwinhi88hi88go 88go88go88sun winsun winsunwinsunwiniwinclubiwin clubiwiniwinclubiwin clubiwinhitclubhitclubv9betv9betv9 betv9betv9 betv9 betrikviphitclubhitclubGo88Go88SunwinSunwiniwiniwinrikviprikvip v9betv9betiWin23WINhttps://j88.so/https://projectelpis.org/https://33win103.com/SV66888B188BETJ88https://ww88vs.com/789BEThttps://188bethnv.com/https://win79og.com/CakhiatvCakhiaTVCakhia TVhttps://timnhaonline.net/https://vididong.com/https://obrigadoportugal.org/https://69vncom.pro/https://thoibaoso.net/https://hi88.report/https://margaretjeanlangstaff.com/https://sunwin214.com/789winmb.black789winhttps://iwin886.com/https://88clb.lawyer/https://olicn.com/https://iwin.locker/https://gettysburgghostgals.com/https://iwinvn.cc/https://iwinvn.app/https://iwinvn.live/https://iwinvn.shop/https://iwinvn.store/https://iwinvn.online/ © 2023 Sách Giải. All Right Reserved. Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây cron

Giới thiệu bài viết cho bạn bè

Từ khóa » Các Thuật Toán Cơ Bản Trong Pascal