



Preview text:
Họ và tên: Lê Nguyên Minh MSSV: 22718571 Lớp: DHDTMT18CTT Bài tập về nhà:
Hãy viết lại hàm BinarySearch không dùng đệ quy
int BinarySearch(int a[], int left, int right, int x) { while (left <= right) {
int mid = left + (right - left) / 2; if (x == a[mid]) { return mid; } else if (x < a[mid]) { right = mid - 1; } else { left = mid + 1; } } return -1; } Bài tập làm thêm:
Áp dụng các thuật toán tìm kiếm để xây dựng chương trình tra từ điển AnhViệt.
Ghi chú: Định nghĩa cấu trúc WORD trong từ điển bao gồm từ gốc tiếng Anh và
nghĩa của từ (tiếng Việt không dấu). #include #include typedef struct { char Name[256]; char Meaning[512]; } WORD;
void ReadData(WORD W[100], char fname[]) { FILE *f = fopen(fname, "r"); if (f == NULL) {
printf("Cannot open file %s\n", fname); return; } char line[1024]; int i = 0;
while (fgets(line, sizeof(line), f) != NULL && i < 100) {
line[strcspn(line, "\n")] = '\0';
char *comma = strchr(line, ','); if (comma != NULL) { *comma = '\0'; strcpy(W[i].Name, line);
strcpy(W[i].Meaning, comma + 1); i++; } } fclose(f); }
int BinarySearch(WORD W[], int left, int right, const char name[]) { if (left > right) return -1; int mid = (left + right) / 2;
int cmp = strcmp(W[mid].Name, name); if (cmp == 0) return mid; else if (cmp < 0)
return BinarySearch(W, mid + 1, right, name); else
return BinarySearch(W, left, mid - 1, name); } int main() { WORD word[100]; int n = 100;
ReadData(word, "EngViet2.txt");
BinarySearchNoRecursion(word, n, "aircraft"); return 0; }