Yêu cầu của thao tác tìm kiếm trên mảng: Cho một mảng dữ liệu và một dữ liệu bên ngoài mảng. Hãy tìm (các) phần tử của mảng có giá trị bằng giá trị của dữ liệu bên ngoài trên. Nếu có (các) phần tử như vậy thì hãy chỉ ra vị trí của chúng trong mảng. Nếu không tồn tại (các) phần tử như vậy thì đưa ra thông báo không tìm thấy.
Cách làm là lần lượt duyệt qua từng phần tử của mảng, so sánh giá trị của phần tử đang được duyệt với giá trị của dữ liệu bên ngoài. Nếu phần tử đang xét bằng dữ liệu bên ngoài thì ta ghi nhận vị trí của phần tử đó. Sau đó chuyển qua duyệt phần tử kế tiếp trong mảng. Quá trình được lặp đi lặp lại cho đến khi duyệt xong phần tử cuối
cùng của mảng. Để có thể trả lời cho cả tình huống không tồn tại phần tử như vậy trong mảng ta nên sử dụng một biến kiểm tra và khi gặp phần tử bằng giá trị dữ liệu bên ngoài thì ta bật biến đó lên, nếu biến đó không được bật lần nào thì ta trả lời là
Trang 75
không có phần tử như vậy trong mảng. Phương pháp trên được gọi là phương pháp tìm kiếm tuần tự (sequential search).
Dưới đây là cài đặt của thuật toán tìm kiếm tuần tự cho trường hợp mảng dữ liệu là mảng các số nguyên kiểu int.
#include <stdio.h> #include <conio.h> void main() { int m[100], chi_so[100]; int n; // n la số phần tử trong mảng int i, k, kiem_tra;
clrscr(); // xóa màn hình để tiện theo dõi // Nhập giá trị dữ liệu cho mảng m
// Trước tiên phải biết số phần tử của mảng printf(“ Cho biet so phan tu co trong mang: “); scanf(“%d”,&n);
// Rồi lần lượt nhập giá trị cho các phần tử trong mảng
for(i = 0;i<n;i++) {
int temp;
printf(“\n Cho biet gia tri cua m[%d] = “,i);
scanf(“%d”,&temp);
m[i] = temp;
}
// Yêu cầu người sử dụng nhập vào giá trịcho dữ liệu k printf(“\n Cho biết giá trị của dữ liêu k: “);
scanf(“%d”,&k);
// Bắt đầu quá trình tìm kiếm
kiem_tra = 0;
// Duyệt qua tất cả các phần tử
for(i = 0;i<n;i++)
if(m[i] = = k)//So sánh phần tử đang xét với dữ liệu k
{
// Ghi nhận chỉ số của phần tử đang xét
chi_so[kiem_tra] = i;
kiem_tra ++; //Tăng biến kiem_tra thêm 1 đơn vị
}
// Kết luận
if(kiem_tra > 0) {
printf(“\n Trong mang co %d phan tu co gia tri bang %d”,kiem_tra,k);
Trang 76
for(i = 0;i < kiem_tra;i++) printf(“%3d”,chi_so[i]);
} else
printf(“\n Trong mang khong co phan tu nao co gia tri bang %d”,k);
getch(); // Chờ người sử dụng ấn phím bất kì để kết thúc.
}
5.3. Một số bài toán với mảng 2 chiều 5.3.1. Nhập dữ liệu cho mảng 2 chiều