Tìm kiếm trong Pascal 2020-08-05T20:36:36+07:002020-08-05T20:36:36+07:00https://sachgiai.com/Tin-hoc/tim-kiem-trong-pascal-13456.htmlhttps://sachgiai.com/uploads/news/2020_07/lap-trinh-pascal.jpgSách Giảihttps://sachgiai.com/uploads/sach-giai-com-logo.pngThứ 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 PascalFunction 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 PascalFunction 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 CANHa) 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 + 1UNTILA[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 PascalA[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ẮPa) 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 PascalFunction Tim (x: integer; A: Array[1..n] of integer): word;VarLow, High, Mid: integer;Begin Low:= 1; High:= n; While High >= Low doBegin 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
Sắp xếp trong Pascal
Sắp xếp trong Pascal (tiếp theo)
Những tin cũ hơn
Giới thiệu phần mềm Turbo Pascal
Vẽ hình trong Pascal
Lớp 1
Kết nối tri thức
Tiếng Việt 1
Toán 1
Giáo dục thể chất 1
Mỹ thuật 1
Chân trời sáng tạo
Tiếng Việt 1
Toán 1
Cánh diều
Âm nhạc 1
Giáo dục thể chất 1
Hoạt động trải nghiệm 1
Toán 1
Tự nhiên và xã hội 1
Lớp 2
Kết nối tri thức
Toán 2
Tiếng Việt 2
Chân trời sáng tạo
Tiếng Việt 2
Toán 2
Cánh diều
Toán 2
Tiếng Việt 2
Lớp 3
Kết nối tri thức
Tiếng Việt 3
Toán 3
Cánh diều
Tiếng Việt 3
Toán 3
Chân trời sáng tạo
Tiếng Việt 3
Toán 3
Lớp 4
Kết nối tri thức
Tiếng Việt 4
Toán 4
Chân trời sáng tạo
Tiếng Việt 4
Toán 4
Cánh diều
Tiếng Việt 4
Toán 4
Lớp 5
Kết nối tri thức
Tiếng Việt 5
Toán 5
Cánh diều
Tiếng Việt 5
Toán 5
Chân trời sáng tạo
Tiếng Việt 5
Toán 5
Lớp 6
Kết nối tri thức
Ngữ Văn 6
Toán 6
Tiếng Anh 6 Global Success
Lịch sử và Địa lí 6
Giáo dục công dân 6
Tin học 6
Cánh diều
Giáo dục công dân 6
Ngữ Văn 6
Toán 6
Chân trời sáng tạo
Ngữ Văn 6
Toán 6
Giáo dục công dân 6
Lớp 7
Kết nối tri thức
Ngữ Văn 7
Toán 7
Tiếng Anh 7 Global Success
Giáo dục công dân 7
Lịch sử và Địa lí 7
Khoa học tự nhiên 7
Tin học 7
Công nghệ 7
Cánh Diều
Ngữ Văn 7
Toán 7
Khoa học tự nhiên 7
Chân trời sáng tạo
Ngữ Văn 7
Toán 7
Mĩ thuật 7
Âm nhạc 7
Lớp 8
Kết nối tri thức
Ngữ Văn 8
Toán 8
Khoa học tự nhiên 8
Giáo dục công dân 8
Tin học 8
Lịch sử và Địa lí 8
Công nghệ 8
Tiếng Anh 8 Global Success
Cánh Diều
Ngữ Văn 8
Toán 8
Công Dân 8
Chân trời sáng tạo
Ngữ Văn 8
Toán 8
Lớp 9
Kết nối tri thức
Ngữ Văn 9
Toán 9
Khoa học tự nhiên 9
Giáo dục công dân 9
Tin học 9
Lịch sử và Địa lí 9
Tiếng Anh 9 Global Success
Công nghệ 9
Cánh Diều
Ngữ Văn 9
Toán 9
Chân trời sáng tạo
Ngữ Văn 9
Toán 9
Lớp 10
Kết nối tri thức
Ngữ Văn 10
Toán 10
Kinh tế và Pháp luật 10
Tiếng Anh 10 Global Success
Lịch Sử 10
Địa Lí 10
Vật Lí 10
Hoá học 10
Sinh học 10
Công nghệ trồng trọt 10
Công nghệ thiết kế 10
Quốc Phòng và An Ninh 10
Tin học 10
Cánh Diều
Ngữ Văn 10
Toán 10
Kinh tế và Pháp luật 10
Tin học 10
Hoá học 10
Lịch sử 10
Địa Lí 10
Sinh học 10
Vật lí 10
Tiếng Anh 10 Explore New Worlds
Công nghệ trồng trọt 10
Công nghệ thiết kế 10
Chân trời sáng tạo
Ngữ Văn 10
Toán 10
Lịch Sử 10
Địa Lí 10
Sinh học 10
Vật Lí 10
Hoá học 10
Quốc Phòng và An Ninh 10
Kinh tế và Pháp luật 10
Tiếng Anh 10 Friends plus
Lớp 11
Kết nối tri thức
Ngữ Văn 11
Toán 11
Hoá học 11
Sinh học 11
Địa Lí 11
Lịch Sử 11
Vật Lí 11
Kinh tế và Pháp luật 11
Công nghệ 11 Chăn nuôi
Công nghệ 11 Cơ khí
Tin học 11 Ứng dụng
Tin học 11 Khoa học máy tính
Tiếng Anh 11 Global Success
Cánh Diều
Ngữ Văn 11
Toán 11
Hoá học 11
Lịch Sử 11
Địa Lí 11
Sinh học 11
Vật Lí 11
Tin học 11 Ứng dụng
Tin học 11 Khoa học máy tính
Tiếng Anh 11 Explore New Worlds
Quốc phòng và An ninh 11
Kinh tế và Pháp luật 11
Công nghệ 11 Chăn nuôi
Công nghệ 11 Cơ khí
Chân trời sáng tạo
Ngữ Văn 11
Toán 11
Địa Lí 11
Hoá học 11
Sinh học 11
Lịch Sử 11
Kinh tế và Pháp luật 11
Tiếng Anh 11 Friends plus
Vật Lí 11
Lớp 12
Kết nối tri thức
Ngữ Văn 12
Toán 12
Địa Lí 12
Hoá học 12
Lịch Sử 12
Sinh học 12
Vật Lí 12
Tiếng Anh 12 Global Success
Tin học 12 Ứng dụng
Tin học 12 Khoa học máy tính
Kinh tế và Pháp luật 12
Công nghệ 12 Chăn nuôi
Công nghệ 12 Cơ khí
Cánh Diều
Ngữ Văn 12
Toán 12
Chân trời sáng tạo
Ngữ Văn 12
Toán 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ý