You are on page 1of 25

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN
--------

BÁO CÁO BÀI TẬP LỚN


Giảng viên hướng dẫn: Thầy giáo Nguyễn Việt Tùng

Hà Nội, tháng 6 năm 2018


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

STT Thành viên MSSV

1 Trương Minh Tuấn 20159665

2 Đàm Mạnh Hùng 20131849

3 Nguyễn Văn Dũng 20150692

4 Trần Nguyên Hoàng 20151568

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng 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

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 3


Trường đại học Bách Khoa Hà Nội Bài tập lớn môn học KTLT

+ 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>
#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;

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 4


Trường đại học Bách Khoa Hà Nội Bài tập lớn môn học KTLT

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";
return NULL;
}
strcpy(p->word,word);
strcpy(p->mean,mean);
p->pNext = NULL;
return p;
}

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 5


Trường đại học Bách Khoa Hà Nội Bài tập lớn môn học KTLT

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;

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 6


Trường đại học Bách Khoa Hà Nội Bài tập lớn môn học KTLT

}
else
{
new_ele->pNext = l.pHead;
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[])
{

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng 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* 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;
}

 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)
{

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 8


Trường đại học Bách Khoa Hà Nội Bài tập lớn môn học KTLT

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;
NODE *q = NULL;
while(p!=NULL)

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 9


Trường đại học Bách Khoa Hà Nội Bài tập lớn môn học KTLT

{
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;
}

2.2.2. Các thuật toán liên quan đến xuất/ nhập, in ra Menu

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 10


Trường đại học Bách Khoa Hà Nội Bài tập lớn môn học KTLT

 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;
while(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.

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 11


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


int i=hashfunc(word);
return (Search(bucket[i],word));
}

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 12


Trường đại học Bách Khoa Hà Nội Bài tập lớn môn học KTLT

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;
char 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);
}

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 13


Trường đại học Bách Khoa Hà Nội Bài tập lớn môn học KTLT

 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ừ:

void DislayDictionary()
{
for(int i=0;i<M;i++)
ProcessList(bucket[i]);
}

 Xóa 1 từ:

int RemoveWord()
{

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 14


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];
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(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)

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 15


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

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 16


Trường đại học Bách Khoa Hà Nội Bài tập lớn môn học KTLT

{
mean[j] = '\0';
if(strlen(word)!=0 || strlen(mean)!=0)
{
p = GetNode(word,mean);
Insert(p);
}
dem = 0;i = 0;j=0;
//}
}
}
}
}

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------------------------------------------------------"<<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;

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 17


Trường đại học Bách Khoa Hà Nội Bài tập lớn môn học KTLT

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

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 18


Trường đại học Bách Khoa Hà Nội Bài tập lớn môn học KTLT

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

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 19


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.

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 20


Trường đại học Bách Khoa Hà Nội Bài tập lớn môn học KTLT

- 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


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

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 21


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:

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 22


Trường đại học Bách Khoa Hà Nội Bài tập lớn môn học KTLT

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

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 23


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.

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 24


Trường đại học Bách Khoa Hà Nội Bài tập lớn môn học KTLT

 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


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,…

Nhóm 5-Tuấn-Hùng-Dũng-Hoàng Page 25

You might also like