Ngày nay, các sản phẩm phần mềm ra đời nhằm cung cấp các chương trình ứng dụng thực hiện trên các thiết bị điện tử như máy tính, các bộ điều khiển,… Điều này thực hiện được để đơn giản h
Trang 2LỜI MỞ ĐẦU
Tin học là một ngành khoa học mũi nhọn phát triển hết sức nhanh chóng trong vài chục năm trở lại đây và ngày càng mở rộng lĩnh vực nghiên cứu, ứng dụng trong mọi mặt của đời sống xã hội Mà hơn tất cả đó là các phần mềm hữu dụng phục vụ các công việc thường ngày của con người Ngày nay, các sản phẩm phần mềm ra đời nhằm cung cấp các chương trình ứng dụng thực hiện trên các thiết bị điện tử như máy tính, các bộ điều khiển,… Điều này thực hiện được để đơn giản hoá các công đoạn trong hệ thống công việc
Do đó bọn em đã chọn đề tài:” Xây dựng từ điển Anh-Việt và ngược lại “ vì đó
là một đề tài thiết thực trong công việc học tập, giúp e có thể tự mình tạo ra một từ điển nhỏ phục vụ cho việc học tập
Nhóm 5
Trang 3I HƯỚNG LÀM BÀI TẬP
1 Ý tưởng:
- Do đề bài yêu cầu 1 bộ từ điển có từ, nghĩa của từ, câu mẫu nên Chúng ta
sẽ xây dựng 1 cơ sở dữ liệu, trong đó sử dụng danh sách liên kết, mỗi 1 node sẽ bao gồm từ và nghĩa của từ
- Đồng thời, do chúng ta cần lưu lại sử dụng lại cơ sở dữ liệu nên ta cần phải lưu các từ ra 1 file txt để sử dụng
- Do từ điển cần phải thêm- update các từ, cũng như có thể có nhu cầu xóa, nên ta sẽ xây dựng 1 menu gồm:
+ Thêm từ
+ Tra từ
+ Xóa từ
+ Xem cà danh sách
2 Các thuật toán cần phải tìm hiểu
Để thực hiện các ý tưởng đặt ra, chúng ta cần phải tìm hiểu về các thuật toán sau:
+ Các thuật toán liên quan đến danh sách liên kết:
+ Các thuật toán liên quan đến xuất/nhập, in MENU ra màn hình chính + Các thuật toán liên quan đến xử lý file
1 Cấu trúc chương trình:
Chương trình bao gồm 1 file Header và 1 file cpp để thực hiện,
• File header sẽ bao gồm:
+ Các thuật toán liên quan đến danh sách liên kết
+ Các thuật toán liên quan đến xuất/ nhập, in ra Menu
+ Các thuật toán liên quan đến xử lý tệp
• File cpp sẽ bao gồm các hàm thực hiện
2 File header Hash_table.h
• Khai báo các thư viện cần dùng
#include<iostream>
#include<stdio.h>
#include<conio.h>
Trang 4#include<ctype.h>
#include<fstream>
usingnamespace std;
2.1.1 Các thuật toán liên quan đến danh sách liên kết
• Lập danh sách liên kết:
typedefstructtagnode
{
char word[20];
char mean[100];
structtagnode*pNext;
}NODE;
typedefstructtagList
{
NODE* pHead;
NODE* pTail;
}LIST;
• Khởi tạo với danh sách rỗng:
void initList(LIST &l)
{
l.pHead= l.pTail = NULL;
}
• Tạo ra một phần tử chứa thông tin dữ liệu
NODE* GetNode(charword[],charmean[])
{
NODE *p;
p = newNODE;
if(p==NULL)
{
cout<<"Khong du bo nho";
Trang 5return NULL;
}
strcpy(p->word,word);
strcpy(p->mean,mean);
p->pNext = NULL;
return p;
}
2.1.2 Các thuật toán chèn phần tử, thêm bớt phần tử, dùng để khai thác cơ sở
dữ liệu của mình:
• Chèn vào đầu:
void AddFirst(LIST &l,NODE* new_ele)
{
if(l.pHead==NULL)
{
l.pHead = new_ele;
l.pTail = l.pHead;
}
else
{
new_ele->pNext = l.pHead;
l.pHead = new_ele;
}
}
NODE* InsertHead(LIST &l,char word[],char mean[])
{
NODE* new_ele = GetNode(word,mean);
if(new_ele == NULL)
return NULL;
if(l.pHead == NULL)
{
l.pHead = new_ele;
l.pTail = l.pHead;
}
else
{
new_ele->pNext = l.pHead;
Trang 6l.pHead = new_ele;
}
return new_ele;
}
• Chèn vào cuối:
void AddTail(LIST &l,NODE *new_ele)
{
if(l.pHead == NULL)
{
l.pHead = new_ele;
l.pTail = l.pHead;
}
else
{
l.pTail->pNext = new_ele;
l.pTail = new_ele;
}
}
NODE* InsertTail(LIST &l,char word[],char mean[])
{
NODE* new_ele = GetNode(word,mean);
if(new_ele == NULL)
return NULL;
if(l.pHead == NULL)
{
l.pHead = new_ele;
l.pTail = l.pHead;
}
else
{
l.pTail->pNext = new_ele;
l.pTail = new_ele;
}
return new_ele;
Trang 7• Chèn vào sau một phần tử nào đó trong danh sách:
NODE* InsertAfter(LIST &l,NODE *q,char word[],charmean[])
{
NODE* new_ele = GetNode(word,mean);
if(new_ele ==NULL)
return NULL;
if(q!=NULL)
{
new_ele->pNext = q->pNext;
q->pNext = new_ele;
if(q==l.pTail)
l.pTail = new_ele;
}
else
AddFirst(l,new_ele);
}
• Tìm kiếm một phần tử trong danh sách :
NODE *Search(LIST l,charword[])
{
NODE *p;
p = l.pHead;
while((p!=NULL) && (strcmp(p->word,word)!=0))
p =p->pNext;
return p;
}
• Xóa phân tử:
int RemoveNode(LIST &l,char word[])
{
NODE *p = l.pHead;
Trang 8NODE *q = NULL;
while(p!=NULL)
{
if(strcmp(p->word,word)==0)
break;
q = p;
p = p->pNext;
}
if(p==NULL)
return 0;
if(q!=NULL)
{
if(p == l.pTail)
l.pTail = q;
q->pNext = p->pNext;
delete p;
}
else
{
l.pHead = p->pNext;
if(l.pTail==NULL)
l.pTail = NULL;
}
return 1;
}
II.2.2 Các thuật toán liên quan đến xuất/ nhập, in ra Menu
• Duyệt danh sách:
void ProcessList(LISTl)
{
ofstream fg;
fg.open("output.txt",ios::app);
NODE *p;
int i = -1;
p = l.pHead;
Trang 9while(p!= NULL)
{
cout <<"\""<<p->word<<"\"";fg <<"\""<< p->word <<"\"";
cout <<" nghia cua tu : ";fg <<" nghia cua tu :";
cout << p->mean;fg << p->mean;
cout << endl;fg << endl;
p = p->pNext;
}
fg.close();
}
Như vậy, ta đã xây dựng danh sách liên kết chính của mình , với các cú pháp thêm, chèn dữ liệu, và cả duyệt danh sách Sau khi đã xây dựng xong, ta phải tiến hành khai thác danh sách liên kết để thực hiện chương trình
Trang 10• Hàm băm:
int hashfunc(char word[])
{
char ch = toupper(word[0]);
return ((ch - 65)%M);
}
• Khởi tạo
void initbucket()
{
for(int i=0;i<M;i++)
initList(bucket[i]);
}
• Thêm 1 phần tử vào :
void Insert(NODE *p)
{
int i = hashfunc(p->word);
AddTail(bucket[i],p);
}
• Tìm kiếm 1 phần tử và trả về địa chỉ của nó :
NODE* Find(charword[]){
int i=hashfunc(word);
return (Search(bucket[i],word));
}
Bây giờ, ta sẽ bắt đầu xây dựng các hàm menu thực hiện
• Hàm thêm từ:
void MakeDictionary()
{
NODE*p;
Trang 11char word[20];
char mean[100];
char c;
do
{
fflush(stdin);
cout <<"Nhap tu can tao:";gets(word);cout<<endl;
if(strcmp(word,"")==0)
break;
fflush(stdin);
cout <<"Nhap cac nghia cua tu:";gets(mean);cout <<endl;
p = GetNode(word,mean);
Insert(p);
fflush(stdin);
cout <<"Tiep tuc chu (y/ ):";c=getche();cout<<endl;
if(c!='y' && c!='Y')
break;
}while(true);
}
• Tra từ:
void FindWord()
{
NODE* p;
char word[20];
fflush(stdin);
cout <<"Nhap tu can tim :";gets(word);
p = Find(word);
if(p == NULL)
cout <<"Khong co tu nay trong tu dien"<<endl;
else
cout <<"Nghia cua tu :"<<p->mean<<endl;
return;
}
• Duyệt toàn bộ từ:
Trang 12void DislayDictionary()
{
for(int i=0;i<M;i++)
ProcessList(bucket[i]);
}
• Xóa 1 từ:
int RemoveWord()
{
char word[20];
fflush(stdin);
cout <<"Nhap tu can huy: ";gets(word);fflush(stdin);cout <<endl;
int i = hashfunc(word);
return RemoveNode(bucket[i],word);
}
2.3.3 Các thuật toán liên quan đến xử lý tệp
bool ischar(charkitu)//kiem tra la chu cai
{
int temp;
temp = int(kitu);
if((temp>=65 && temp<=90)||(temp >=97 && temp<=122))
return true;
return false;
}
void MakeFromFile()
{
NODE*p;
char c;
int dem =0;
int i=0;int j=0;
char word[20];
char mean[100];
FILE*f;
f = fopen("data.txt","rt");
if(f==NULL)
Trang 13
printf("Khong mo duoc file");
exit(0);
}
while(!(feof(f)))
{
c = getc(f);
if(dem == 0)
{
if(!(ischar(c)) && c!='\n')
{
word[i]='\0';
dem=1;
}
else
word[i++] = c;
}
else
{
if(c!='\n')
{
mean[j++]=c;
}
else
{
mean[j] = '\0';
if(strlen(word)!=0 || strlen(mean)!=0)
{
p = GetNode(word,mean);
Insert(p);
}
dem = 0;i = 0;j=0;
//}
}
}
}
}
Trang 143 Chương trình chính gồm:
//Chuong trinh tu dien don gian theo phuong phap ket noi truc tiep
#include"Hash_table.h"
void main()
{
MakeFromFile();
char chon;
do
{
cout<<"\t\t -"<<endl; cout<<"\t\t- CHUONG TRINH TU DIEN DON GIAN -"<<endl; cout<<"\t\t- Cac chuc nang: -"<<endl; cout<<"\t\t- 1:Xay dung tu dien -"<<endl; cout<<"\t\t- 2:Tra tu -"<<endl; cout<<"\t\t- 3:Xem toan bo tu dien -"<<endl;
cout<<"\t\t- 4:Huy mot tu khoi tu dien -"<<endl; cout<<"\t\t- 0:Quit -"<<endl; cout<<"\t\t -"<<endl; chon = getche();
cout << endl;
switch(chon)
{
case '1':MakeDictionary();break;
case '2':FindWord();break;
case '3':DislayDictionary();break;
case '4':RemoveWord();break;
}
}while(chon!='0');
}
Như vậy ta đã xây dựng xong bài code từ điển
4 Dữ liệu của Từ điển
Trang 15Hiện tại, chúng em chỉ mới xây dựng hệ thống dữ liệu của từ điển mới được
60 từ gồm cả tiếng Anh lẫn tiếng việt Sau đây là danh sách những từ mà chúng em đã thêm vào :
- dog (N) Con cho Ex: I took the dog for a walk
- cat (N) Con meo Ex: My sister let the cat out of the bag
- spider (N) Con nhen Ex: Spider man is my favourite character
- snake (N) Con ran Ex: A snake coiled up in the grass
- sheep (N) Con cuu Ex: Sheep were grazing in the fields
- duck (N) Con vit Ex: Ducks were quacking noisily on the lake
- mosquito (N) Con muoi Ex:mosquitoes are dangerous insects
- pig (N) Con lon Ex:Pigs were grunting and squealing in the yard
- fish (N) Con ca Ex: The chef's fish dishes are his speciality
- go (V) di Ex: I go to school
- sit (V) ngoi Ex: She was sitting at her desk
- fly (V) bay Ex: the bird is flying in the sky
- listen (V) nghe Ex: I like to listen to music in the morning
- talk (V) noi chuyen Ex: Why won you talk to me ?
- study (V) hoc Ex: I study at HUST
- run (V) chay Ex: He runs very slowly
- kill (V) giet Ex: He killed his neighbor last night
- write (V) viet Ex: The teacher wrote the answers on the board
- cook (V) nau an Ex: He cooked lunch for me
- drive (V) lai xe Ex : Don't drive so fast !
- red (Adj) mau do Ex: My house is painted red
- yellow (Adj) mau vang Ex: Her has a yellow dress very beautiful
- blue (Adj) mau xanh Ex :Blue birds in the most prominent group
- black (Adj) mau den Ex: The future looks pretty black
- white (Adj) mau trang Ex: Her hair was as white as snow
- hour (Adv) gio Ex: The interview lasted half an hour
- minute (Adv) phut Ex: I enjoyed every minute of the party
- day (Adv) ngay Ex:I saw T three days ago
- week (Adv) tuan Ex: It rained all week
- month (Adv) thang Ex: We're moving house next month
- concho (N) dog Ex: Toi dat con cho di dao
- conmeo (N) cat Ex: chi toi nhac con meo ra khoi tui
- connhen (N) spider Ex: nguoi Nhen la nhan vat yeu thich cua toi
Trang 16- conran (N) snake Ex: Mot con ran cuon tren bai co
- concuu (N) sheep Ex: Con cuu dang chan tha trong canh dong
- convit (N) duck Ex: Dam vit dang qua on ao tren ho
- conmuoi (N) mosquito Ex: Muoi la loai con trung nguy hiem
- conlon (N) pig Ex: Con lon dang ren ri va la het trong san
- conca (N) fish Ex: Nhung mon an ve ca là so truong cua anh ay
- di (V) go Ex: toi di den truong
- ngoi (V) sit Ex: Co dang ngoi o ban lam viec
- bay (V) fly Ex: Con chim bay tren bau troi
- nghe (V) listen Ex: toi thich nghe nhac vao buoi sang
- noichuyen (V) talk Ex: tai sao khong noi chuyen voi toi ?
- hoc (V) study Ex: Toi hoc tai HUST
- chay (V) run Ex: Anh ta chay rat cham
- giet (V) kill Ex: Anh ta giet nguoi hang xom cua minh vao toi qua
- viet (V) write Ex: Co giao viet cau tra loi len tren bang
- nauan (V) cook Ex: Anh ta da nau bua trua cho toi
- laixe (V) drived Ex: Dung lai xe qua nhanh!
- maudo (Adi) red Ex: Nha toi duoc son mau do
- mauvang (Adj) yellow Ex: Chiec vay mau vang cua co ay that dep
- mauxanh (Adj) blue Ex: Con chim xanh noi bat nhat trong nhom
- mauden (Adj) black Ex: Tuong lai kha den toi
- mautrang (Adj) mautrang Ex: Toc co ay trang nhu tuyet
- gio (Adv) hour Ex:Cuoc phong van ket thuc nua gio nua
- phut (Adv) minute Ex:Toi thich tung phut cua bua tiec
- ngay (Adv) day Ex: Toi da nhin thay T ba ngay truoc
- thang (Adv) month Ex: Chung toi se chuyen nha vao thang toi
- tuan (Adv) week Ex: Mua ca tuan
5 Chạy chương trình
Trang 17Khi chạy Debug ta sẽ được chế độ làm việc của chương trình như sau:
5.1.1 Xây dựng từ điển
Để thêm từ và xây dựng hệ thống từ điển ta nhấn phím 1 , lúc đó bảng thêm từ sẽ hiện lên, chúng ta chỉ việc nhập từ cần thêm và nghĩa của nó vào , cuối dòng sẽ thông báo bạn có muốn tiếp tục việc thêm dữ liệu không, nếu có chúng ta ấn phím “y” nếu muốn thoát chúng ta ấn phím bất
kỳ :
Trang 185.1.2 Tra từ
- Ta nhấn phím 2 để vào cửa sổ tra từ (bao gồm cả tiếng anh lẫn tiếng việt), một cửa sổ sẽ xuất hiện:
− Chúng ta chỉ việc nhập từ cần tìm và nghĩa và câu mẫu của từ sẽ hiển thị ở phía dưới
5.1.3 Xem toàn bộ từ điển
Ta nhấn phím 3 để có thể xem được toàn bộ từ trong từ điển
Trang 195.1.4 Hủy một khối trong từ điển
Khi chúng ta nhập sai hoặc muốn xóa 1 từ trong từ điển thì chúng ta có thể nhấn phím 4 để vào mục xóa
III CÁC HẠN CHẾ, KHÓ KHĂN TRONG QUÁ TRÌNH LÀM BÀI.
• Trong bài làm của bọn em, có 1 số hạn chế như:
− Em đã nghĩ tới lập trình hướng đối tượng, tuy nhiên trong quá trình tìm hiểu, chúng ta vẫn phải sử dụng với danh sách liên kết mà làm phức tạp hơn khá nhiều Do trình độ code còn hạn chế nên e chưa code được theo lập trình hướng đối tượng, tuy nhiên chỉ sử dụng danh sach liên kết cũng đã có thể lập trình được bài này
− Không thể đưa câu mẫu xuống dòng được E đã thử thêm 1 char ex[100] ở Node dữ liệu, khi debug visual C báo break
− Khi nhập và tra từ điển Việt- Anh: nếu ký tự cần tìm có dấu cách thì sẽ không tìm được
• Theo em, hai lỗi trên là do xử lý file của bọn e chưa hoàn chỉnh, tuy nhiên bọn e chưa tìm được cách khắc phục tối ưu
IV KẾT LUẬN