Tải bản đầy đủ (.docx) (20 trang)

Xây dựng từ điển anh việt và ngược lại

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.04 MB, 20 trang )


Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

LỜ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

Page 2


Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

I.
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
II.
CÁC BƯỚC THỰC HIỆN
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>
Page 3



Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

#include<string.h>
#include<ctype.h>
#include<fstream>
using namespace std;
#define M 26
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:
typedef struct tagnode
{
char word[20];
char mean[100];
struct tagnode*pNext;
}NODE;
typedef struct tagList
{
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(char word[],char mean[])

{
NODE *p;
p = new NODE;
if(p==NULL)
{
cout<<"Khong du bo nho";
Page 4


Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

return 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;
Page 5


Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

l.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;

Page 6


Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

}
• Chèn vào sau một phần tử nào đó trong danh sách:
NODE* InsertAfter(LIST &l,NODE *q,char word[],char mean[])
{
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,char word[])
{
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;
Page 7


Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

NODE *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(LIST l)
{
ofstream fg;
fg.open("output.txt",ios::app);
NODE *p;
int i = -1;
p = l.pHead;
Page 8


Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

while(p!= NULL)
{
cout <<"\""<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.

Page 9


Trường đại học Bách Khoa Hà Nội



Bài tập lớn môn học KTLT

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;iinitList(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(char word[]){
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;
Page 10



Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

char word[20];
char mean[100];
char c;
do
{
fflush(stdin);
cout << "Nhap tu can tao:";gets(word);cout<if(strcmp(word,"")==0)
break;
fflush(stdin);
cout << "Nhap cac nghia cua tu:";gets(mean);cout <p = GetNode(word,mean);
Insert(p);
fflush(stdin);
cout <<"Tiep tuc chu (y/..):";c=getche();cout<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"<else
cout <<"Nghia cua tu :"<mean<return;
}


Duyệt toàn bộ từ:
Page 11


Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

void DislayDictionary()
{
for(int i=0;iProcessList(bucket[i]);
}


Xóa 1 từ:


int RemoveWord()
{
char word[20];
fflush(stdin);
cout <<"Nhap tu can huy: ";gets(word);fflush(stdin);cout <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(char kitu)//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)
Page 12



Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

{
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;
//}
}
}
}
}
Page 13


Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

3. 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------------------------------------------------------"<

cout<<"\t\t- CHUONG TRINH TU DIEN DON GIAN -"<cout<<"\t\t- Cac chuc nang:
-"<cout<<"\t\t- 1:Xay dung tu dien
-"<cout<<"\t\t- 2:Tra tu
-"<cout<<"\t\t- 3:Xem toan bo tu dien
-"<cout<<"\t\t- 4:Huy mot tu khoi tu dien
-"<cout<<"\t\t- 0:Quit
-"<cout<<"\t\t------------------------------------------------------"<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
Page 14



Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

Hiệ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.
Page 15


Trường đại học Bách Khoa Hà Nội

-

Bài tập lớn môn học KTLT

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

Page 16


Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

Khi 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ỳ :

Page 17


Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

5.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.

Page 18


Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT


5.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
Page 19


Trường đại học Bách Khoa Hà Nội

Bài tập lớn môn học KTLT

1. Kết luận
Sau một thời gian nỗ lực nhóm 5 đã hoàn thành đề tài “Ứng dụng của

ngôn ngữ lập trình C/C++ Từ điển Anh-Việt đơn giản”. Tuy chưa thật
hoàn chỉnh nhưng đề tài đã đáp ứng được đa số những mục tiêu đặt ra.
Trong tương lai chúng em sẽ phát triển đề tài hoàn chỉnh hơn, đáp ứng
được nhiều nhu cầu của xã hội.
Với những nỗ lực của nhóm 5, chúng em hy vong thầy giáo và các
bạn sẽ đón nhận đề tài này và đóng góp ý kiến để đề tài được hoàn chỉnh
hơn.
2. Ý nghĩa thực tiễn của đề tài
Với đề tài chúng em chỉ mong giúp được tất cả mọi người một phần
nhỏ về việc học ngoại ngữ. Đặc biệt là tất cả các bạn học sinh, sinh viên
học tiếng Anh. Đề tài này cung cấp cho các bạn một chương trình từ điển,
giúp cho tất cả các bạn có một tài liệu học tập thật tốt. Qua đề tài này
chúng em muốn tất cả mọi người đều biết đến một phương tiện học tâp
thật tốt khi học tiếng Anh-Việt
Các đoạn Code ngôn ngữ C đã giúp hoàn thiện chương trình và hỗ trợ
cho mỗi người học được tiếng Anh tốt hơn. Ngoài ra, nó còn là cơ sở để
tạo ra các hệ thống từ điển khác: tiếng Trung, tiếng Anh chuyên ngành,…

Page 20



×