Bản báo cáo này trìnhbày kết quả của việc lập trình các bài toán.. * Ý tưởng: - Từ tệp input.txt mỗi dòng là một xâu họ tên chứa nhiều dấu cách trống,các ký tự trong xâu họ tên chữ hoa c
Trang 1Việc nghiên cứu và lập trình ra các phần mềm, các ứng dụng mới là điềuhướng tới của các sinh viên theo học Công nghệ thông tin Bản báo cáo này trìnhbày kết quả của việc lập trình các bài toán Trong quá trình thực hiện em nhận được
sự giúp đỡ nhiệt tình từ các giảng viên trong khoa Công nghệ thông tin trường Đạihọc Vinh
Nhân dịp này em xin gửi lời cảm ơn đến các thầy cô trong khoa Công nghệthông tin – trường Đại học Vinh đã tạo cơ hội giúp em được tham gia học hỏi, rènluyện các kỹ năng cần thiết cho đợt thực tập cuối khóa
Đặc biệt em xin gửi lời cảm ơn đến ThS Nguyễn Thị Hồng Anh đã quan tâmgóp ý cho bài làm thực tập cơ sở và sẵn sàng trả lời tất cả những thắc mắc khi cầnthiết giúp em hoàn thành tốt bài làm của mình
Mặc dù đã có nhiều cố gắng nhưng do kiến thức còn hạn chế cùng với kinhnghiệm chưa có nên không tránh khỏi thiếu sót vì vậy em rất mong nhận đượcnhững ý kiến đóng góp bổ sung của thầy giáo, cô giáo và các bạn để đề tài làm thựctập cơ sở của em được hoàn thiện hơn
Em xin chân thành cảm ơn.
Sinh viên thực hiện
Trang 2LỜI CẢM ƠN
Trong thời đại công nghệ thông tin ngày nay, việc ứng dụng Công nghệThông tin vào cuộc sống cũng như các ngành khoa học ngày càng trở nên quantrọng Trước đây khi Công nghệ Thông tin chưa phát triển thì việc giải quyết các bàitoán phức tạp và kết quả đạt được với độ chính xác thấp Những bài toán này đòihỏi phải có những thuật toán hợp lý, cũng như cấu trúc lưu trữ thích hợp thì mới đạtđược kết quả tối ưu nhất Chính vì thế việc tìm hiểu nó là một phần rất quan trọngđối với một người lập trình Thêm vào đó là những kỹ thuật về việc xử lý văn bản,
xử lí tệp là một kỹ năng tối thiểu với một người làm việc với máy tính
Đợt thực tập cơ sở này chính là bước đầu tiên đi sâu vào tìm hiểu, đây là cơhội để chúng em tổng hợp lại tất cả những gì mà đã được học trong thời gian qua
Chúng em xin chân thành cảm ơn sự hướng dẫn của các thầy giáo, cô giáotrong Khoa Công Nghệ Thông Tin – Trường Đại học Vinh Chúng em đặc biệt bày
tỏ lòng biết ơn chân thành tới cô giáo NGUYỄN THỊ HỒNG ANH, cô đã tạo mọiđiều kiện và luôn giúp đỡ, hướng dẫn chúng em tận tình để chúng em hoàn thành tốt
đề tài thực tập cơ sở này
Cuối cùng, chúng em xin chân thành cảm ơn và kính chúc các thầy giáo, côgiáo sức khoẻ và hạnh phúc
Trang 3MỤC LỤC
Trang
I BÀI TOÁN 4
Họ và tên: Họ Tên .4
II THUẬT TOÁN GIẢI QUYẾT CÔNG VIỆC CHO MỖI HÀM 4
2.3 Chương trình 5
2.4 Bộ dữ liệu test và kết quả test tương ứng 10
Phần II Thuật Toán Kiểm Tra Các Tính Chất Của Quan Hệ 12
2.1 Bài toán 12
2.2.1 Dùng ma trận lô-gic để biểu diễn quan hệ hai ngôi trên một tập hợp 12
2.2.1.1 Các khái niệm 12
2.2.1.2 Cách biễu diễn 12
2.2.1.3 Các tính chất của quan hệ 12
2.2.3 Cài đặt thuật toán kiểm tra các tính chất của quan hệ (phản xạ, đối xứng, bắc cầu) 13
2.2.3.1 Thuật toán kiểm tra tính phản xạ 14
2.2.3.2 Thuật toán kiểm tra tính đối xứng 15
2.2.3.3 Thuật toán kiểm tra tính bắc cầu 16
2.2.3.4 Chương trình 17
2.2.3.5 Dữ liệu và kết quả test: 18
Trang 4PHẦN 1: BÀI TOÁN 1
I BÀI TOÁN
Cho một tệp văn bản input.txt, mỗi dòng là một xâu họ và tên Viết chươngtrình tách tên và tách họ của các xâu họ và tên đọc được từ tệp input.txt Kết quảđưa vào tệp văn bản output.txt theo dạng:
Họ và tên: Họ Tên
II THUẬT TOÁN GIẢI QUYẾT CÔNG VIỆC CHO MỖI HÀM
2.1 Thuật toán chuẩn hóa xâu.
* Ý tưởng:
- Từ tệp input.txt mỗi dòng là một xâu họ tên chứa nhiều dấu cách trống,các
ký tự trong xâu họ tên chữ hoa chữ thường không theo quy luật đó là các chữ cáiđầu của họ tên phải viết hoa và sau đó là chữ cái thường.Nên ta tiến hành chuẩn hóaxâu đó là cắt các ký tự trống liên tiếp,các chữ cái đầu của họ tên phải được viết hoa
Input: xâu họ tên listten
Nhập vào input.txt một xâu họ tên ngUYEN ThỊ HanH
Output: xâu listten đã chuẩn hóa
Ở tệp output.txt được chuẩn hóa và lưu thành Nguyễn Thị Hạnh
Các bước thực hiện:
+Bước 1: Đọc dữ liệu từ tệp input.txt vào mảng 2 chiều listTen[n][m]
+Bước 2: Xóa các ký tự trống ở cuối chuỗi
+Bước 3: Xóa các ký tự trống ở đầu chuỗi
+Bước 4: Kiểm tra xâu có chữ hoa hay không.Nếu có chuyển tất cả về chữthường
+Bước 5: Xóa 2 ký tự trống liên tiếp trong xâu
+Bước 6: Duyệt xâu kể từ phẩn tử đầu tiên khi gặp khoảng trống thì chuyểnchữ cái đầu tiên ngay sau đó thành chữ hoa
Trang 5+Bước 7: Chuyển chữ cái đầu tiên của xâu thành chữ hoa
2.2 Thuật toán tách xâu họ tên
* Ý tưởng:
- Từ xâu họ và tên đã chuẩn hóa, tiến hành duyệt xâu từ vị trí đầu tiên chogặp dấu cách trống đầu tiên Cắt xâu này thu được xâu họ Sau khi cắt được họ tiếptục duyệt xâu từ cuối xâu, gặp dấu cách trống đầu tiên, cắt xâu này ta thu được xâutên Nếu xâu trống thì xâu họ và tên là Null
Nếu listen[i][j] !=’ ‘: listHo[i][j] = listen[i][j]
Ngược lại: Dừng chương trình Xâu thu được là xâu họ
-Bước 4: a=0,k = strlen(listen[i][j]), j=k ListTen[i][j] //Duyệt kí tự cuối
cùng trong xâu
Bước 5: j
-Nếu listen[i][j]!=’ ‘: ListT[i][a] = listen[i][j] a++
strrev(listT[i]) ; //Đọc xâu theo chiều ngược lại
Ngược lại: Dừng chương trình Xâu thu được là xâu tên
Trang 7int testHo = 0, testTen = 0, j;
char listHo[255][255], listT[255][255];
for (i=0;i < l; i++)
{
chuanhoachuoi(listTen[i]);
for (j = 0; listTen[i][j] != ' '; j++){
listHo[i][j] = listTen[i][j];
}listHo[i][j] = NULL;
int k = strlen(listTen[i]);
if (listTen[i][k-1] == '\n'){
k -= 1;
listTen[i][k] = NULL;
}int a = 0;
Trang 8for (j = k-1; listTen[i][j] != ' '; j ){
listT[i][a] = listTen[i][j];
a++;
}listT[i][a] = NULL;
strrev(listT[i]) ;}
Trang 9cout<<"\n* 3.LUU TEP DA DUOC CHUAN
HOA VA TACH VAO TEP
cout << "\n\n-Ho va ten: " << listTen[i] <<
"\n\n-Ho: " << listHo[i] << "\t-Ten: " << listT[i] <<
Trang 12Phần II Thuật Toán Kiểm Tra Các Tính Chất Của Quan Hệ
2.1 Bài toán
1 Nêu cách dùng ma trận logic để biễu diễn quan hệ 2 ngôi trên một tập hợp
2 Nêu ví dụ minh họa
3 Cài đặt thuật toán kiểm tra các tính chất của quan hệ(phản xạ, đối xứng, bắc cầu)
Theo cách biểu diễn này, rõ ràng với mỗi quan hệ R trên A sẽ xác định duy nhấtmột ma trận logic , và ngược lại, khi biết ma trận logic của một quan hệ R, sẽxác định được chính xác quan hệ R
2.2.1.3 Các tính chất của quan hệ
- Một quan hệ có tính chất phản xạ khi và chỉ khi ∀a A thì aRa
- Một quan hệ có tính chất đối xứng khi và chỉ khi ∀a, b A thì aRb và bRa
- Một quan hệ có tính chất bắc cầu khi và chỉ khi ∀a,b,c A thì aRb và bRc thì aRc
* Nếu sử dụng ma trận logic để biểu diễn qua hệ 2 ngôi trên một tập hợp thì ta có các nhận xét sau đây:
- Một quan hệ có tính phản xạ khi và chỉ khi ma trận biểu diễn nó có tất cả phần tử trên đường chéo chính đều bằng 1
Trang 13- Một quan hệ có tính chất đối xứng khi và chỉ khi ma trận biểu diễn nó là một
ma trận đối xứng qua đường chéo chính
- Một quan hệ có tính chất bắc cầu khi và chỉ khi ma trận biễu diễn nó có
=1 và =1 thì =1
2.2.2 Ví dụ minh họa
Cho tập hợp A = {1, 2, 3, 4, 5}, ta định nghĩa quan hệ R trên A như sau: ∀a, b∈
A ta nói aRb khi và chỉ khi a + b là một số lẻ, khi đó quan hệ R có thể được biểudiễn bằng các phương pháp sau:
- Quan hệ R được xác định bởi tập hợp sau:
R(A) = {(1, 2), (2, 1), (1, 4), (4, 1), (2, 3), (3, 2), (3, 4), (4, 3), (2, 5), (5, 2), (4, 5), (5, 4)}
- Ma trận logic của quan hệ R được xác định như sau:
2.2.3 Cài đặt thuật toán kiểm tra các tính chất của quan hệ (phản xạ, đối xứng, bắc cầu)
Trang 142.2.3.1 Thuật toán kiểm tra tính phản xạ
- Input: Ma trận logic n x n thể hiện quan hệ R
- Output: Cho kết quả là 1 nếu quan hệ có tính phản xạ, ngược lại trả về 0
?
a[i][j]
=1
nd
j
S
S
S Đ
Đ
Đ
j
=0
kq
=1
begin
Nhập
n và mảng a
i
=0
return0
Trang 152.2.3.2 Thuật toán kiểm tra tính đối xứng
- Input: Ma trận logic n x n thể hiện quan hệ R
- Output: Cho kết quả là 1 nếu quan hệ có tính đối xứng, ngược lại trả về 0
begin
kq
=1
i
= 0
j
= 0j
<
n
?
a[i][j]
=a[j][
i++
j
++
e
Nhập
n và mảng a
return
returnkq
Trang 162.2.3.3 Thuật toán kiểm tra tính bắc cầu
- Input: Nhập vào ma trận logic n x n
- Output: Cho kết quả là 1 nếu quan hệ có tính bắc cầu, ngược lại trả về 0
S
Đ
Đ
Đ Đ Đ
begin
kq
=
1i
=0
=1
?
k
=0
=1
?
a[i][k]
=1
?
j++
i++
end
Nhập
n và mảng a
return0
returnkq
return0
Trang 17BÁO CÁO THỰC TẬP CƠ SỞ MÃ ĐỀ 033
scanf("%d",&tg);
a[i][j]=tg;
}}
void hienmang(int a[50][50], int n){
int i,j;
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("%3d",a[i][j]);
printf("\n");
}}
int phanxa(int a[50][50], int n){
int i,j,kq=1;
for(i=0;i<n;i++)
for(j=0;j<n;j++) if((i==j)&&( a[i][j]!=1))return 0;
return kq;
}int doixung(int a[50][50], int n){
int i,j,kq=1;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
i][k]
=1
?
k++
turn0
Trang 18if (a[i][j]!=a[j][i]) return 0;
return kq;
}int baccau(int a[50][50], int n){
}void main(){
if(doixung(a,n)==1) printf("\nquan he co tinh doi xung");
else printf("\nquan he khong co tinh doi xung");
if(baccau(a,n)==1) printf("\nquan he co tinh bac cau");
else printf("\nquan he khong co tinh bac cau");
getch();
}2.2.3.5 Dữ liệu và kết quả test:
Nhập các ma trận:
- Ma trận a[5][5]
Trang 19Kết quả:
- Ma trận a[4][4]
Trang 21
KẾT LUẬN
Công nghệ thông tin là công cụ đắc lực, là lĩnh vực có nhiều ứng dụng phục
vụ cho nhiều ngành khác nhau trong đời sống xã hội Qua quá trình làm đề tài em
đã có dịp củng cố, bổ sung kiến thức và thu được những kinh nghiệm quý báu, phục
vụ cho việc học tập và làm việc sau này như là các kiến thức về tìm kiếm thông tinthông dụng hiện nay, nâng cao khả năng làm việc theo nhóm, nâng cao kiến thức vềngôn ngữ lập trình C, cấu trúc dữ liệu và giải thuật và cách tổ chức giải quyết yêucầu của một bài toán cụ thể…
Tuy nhiên do hạn chế về trình độ, thời gian không nhiều nên những kết quảđạt được vẫn chưa đầy đủ và có thể có nhiều sai sót Rất mong được sự đóng góp ýkiến của các thầy cô giáo và các bạn để đề tài của em được hoàn thiện hơn
Cuối cùng chúng em xin chân thành cảm ơn ThS Nguyễn Thị Hồng Anh đãgiúp đỡ nhiệt tình cho em hoàn thiện đề tài này
Trang 22TÀI LIỆU THAM KHẢO
[1] Đỗ Đức Giáo, “Toán rời rạc” NXB Đại học quốc gia Hà Nội.[2] Gs.Phạm Văn Ất, “Kỹ Thuật Lập trình C Cơ sở và Nâng cao” NXB Thời Đại