TRƯỜNG ĐẠI HỌC VINH
KHOA CÔNG NGHỆ THÔNG TIN
--------------------------
BÁO CÁO
ĐỀ TÀI THỰC TẬP CƠ SỞ
Giáo viên HD: TS. Phan Anh Phong
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
LỜI MỞ ĐẦU
Lời đầu tiên, em xin được gửi lời cảm ơn chân thành tới các Thầy, các Cô trong
trường Đại học Vinh, đặc biệt là các Thầy Cô trong khoa Công nghệ thông tin – những
người đã trực tiếp giảng dạy, giúp đỡ em trong suốt những năm tháng học tập ở
trường, cảm ơn nhà trường và khoa CNTT đã tạo điều kiện cho em thực tập cơ sở để
chuẩn bị tốt cho công việc học tập và rèn luyện các kỹ năng cần thiết khi trở thành
người kỹ sư CNTT thực sự.
Sinh viên CNTT ngày nay phải không ngừng học hỏi, cập nhật những cái mới
và biết ứng dụng những kiến thức đã được học vào thực tiễn của cuộc sống. Đợt thực
tập cơ sở này chính là những bước đầu tiên để em đi sâu vào tìm hiểu trong lĩnh vực
cơng nghệ thơng tin, trên cơ sở những kiến thức đã được học trong những năm học
vừa qua.
Để hoàn thành đợt thực tập chuyên ngành này, ngồi sự cố gắng nỗ lực của bản
thân cịn có sự tận tình giúp đỡ và giảng dạy của các thầy, cô giáo trong khoa CNTT
Trường Đại học Vinh. Em xin được gửi lời cảm ơn chân thành đến các thầy cô trong
khoa Công nghệ thông tin, đặc biệt là thầy Phan Anh Phong đã nhiệt tình hướng dẫn
em trong quá trình thực hiện đề tài này.
Vì thời gian và trình độ cịn hạn chế nên chắc chắn em khơng tránh khỏi những
thiếu sót. Em rất mong nhận được những góp ý của các thầy cơ và các bạn để để tài
này được hoàn thiện hơn.
Sinh viên thực hiện
Page 2
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
MỤC LỤC
LỜI MỞ ĐẦU...............................................................................................................2
Bài 1:............................................................................................................................. 5
1.1. Xác định bài tốn................................................................................................5
1.2. Thuật Tốn..........................................................................................................5
1.2.1. Thuật Tốn Kiểm Tra Dữ Liệu.....................................................................5
1.2.1.1. Mơ tả thuật tốn:.......................................................................................5
1.2.1.2. Sơ đồ khối mơ tả thuật tốn......................................................................5
1.2.2. Thuật Tốn Đọc Từ Tệp:..............................................................................7
1.2.2.1. Mơ tả thuật tốn:.......................................................................................7
1.2.2.2.Sơ đồ khối mơ tả thuật tốn:......................................................................7
1.2.3. Thuật tốn chuyển đổi..................................................................................8
1.2.3.1. Mơ tả thuật tốn:.......................................................................................8
1.2.3.2. Sơ đồ khối mơ tả thuật tốn......................................................................9
1.3. Chương trình:....................................................................................................11
1.4. Dữ liệu test và kết quả tương ứng.....................................................................13
1.4.1 Bộ Test 1.....................................................................................................13
1.4.2 Bộ Test 2.....................................................................................................13
1.4.3Bộ Test 3......................................................................................................14
1.4.4 Một Số Lỗi..................................................................................................14
Bài 2:...........................................................................................................................16
2.1. Xác định bài toán..............................................................................................16
2.2. Thuật Toán........................................................................................................16
2.2.1. Thuật Toán Kiểm Tra Dữ Liệu...................................................................16
2.2.1.1. Mơ tả thuật tốn:.....................................................................................16
2.2.1.2. Sơ đồ khối mơ tả thuật tốn.....................................................................17
2.2.2. Thuật Tốn Đọc Từ Tệp:............................................................................18
2.2.2.1. Mơ tả thuật tốn:.....................................................................................18
2.2.2.2.Sơ đồ khối mơ tả thuật tốn:....................................................................18
2.2.3. Thuật toán kiểm tra hoán vị và chia dãy.....................................................19
Page 3
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
2.2.3.1. Mơ tả thuật tốn:.....................................................................................19
2.2.3.2. Sơ đồ khối mơ tả thuật tốn.....................................................................21
2.3. Chương trình:....................................................................................................22
2.4. Dữ liệu test và kết quả tương ứng.....................................................................22
2.4.1 Bộ Test 1.....................................................................................................23
1.4.2 Bộ Test 2.....................................................................................................23
1.4.3Bộ Test 3......................................................................................................24
2.4.4 Một Số Lỗi..................................................................................................24
Tài Liệu Tham Khảo....................................................................................................26
Page 4
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
NỘI DUNG
Bài 1:
1.1. Xác định bài toán
Đề bài: Mã đề 007
Cho tệp văn bản input.txt gồm các số nguyên cách nhau ít nhất một dấu cách
trống hoặc ít nhất một dấu xuống dòng.
- Viết hàm chuyển số nguyên thành xâu nhị phân.
- Viết hàm chuyển số nguyên thành xâu hexa.
- Viết hàm main sử dụng các hàm trên chuyển các số nguyên từ tệp input.txt
sang xâu nhị phân và hexa tương ứng. Kết quả ghi vào tệp output.txt theo dạng:
n
xâu nhị phân
xâu hexa
1.2. Thuật Toán
1.2.1. Thuật Toán Kiểm Tra Dữ Liệu
1.2.1.1. Mơ tả thuật tốn:
Bước 1: Đọc dữ liệu từ tệp input.txt để kiểm tra.
Trong khi chưa kết thúc tệp: đưa dữ liệu vào biến, chuyển sang bước 2.
Ngược lại, chuyển sang bước 3
Bước 2: Kiểm tra dữ liệu:
Nếu dữ liệu dữ liệu đọc vào đúng là số nguyên.Quay lại bước 1.
Nếu sai trả về true. Chuyển sang bước 4.
Bước 3: Trả về false, chuyển sang bước 4
Bước 4: Kết thúc.
1.2.1.2. Sơ đồ khối mơ tả thuật tốn
Page 5
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
Bắt đầu
Đọc dữ liệu từ tệp
File
!=
eof(
)
Sai
Đúng
Đúng
Return true
Dữ liệu là số nguyên
Sai
Return false
Kết thúc
Page 6
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
1.2.2. Thuật Tốn Đọc Từ Tệp:
1.2.2.1. Mơ tả thuật toán:
Bước 1: Đọc cácdữ liệutừ tệp input.txt
Bước 2: Kiểm tra dữ liệu:
Nếu đọc dữ liệu thành công chuyển sang bước 3
Ngược lại chuyển sang bước 4
Bước 3: Đưa dữ liệu ra Quay lại bước 1
Bước 4: Kết thúc.
1.2.2.2.Sơ đồ khối mơ tả thuật tốn:
Bắt đầu
i=0
Sai
Tệp != eof
Đúng
Đưa dữ liệu ra để tính tốn
Kết thúc
Page 7
LỚP 53K2 – KỸ SƯ CƠNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
1.2.3. Thuật tốn chuyển đổi.
1.2.3.1. Mơ tả thuật tốn:
a. Thuật toán chuyển số nguyên qua xâu nhị phân.
Bước 1: Khởi tạo 1 mảng s
Bước 2: Trong khi n<>0
- Lấy phần dư của n/2
- Lấy phần nguyên của n/2
- Đưa phân dư vào mảng s
Bước 3: In ngược mảng s
- Đoạn chương trình:
char *bin(int n)
{
char *s=new char[100];
int i=0;
if(n == 0) return "0";
while(n>0)
{
s[i++] = (n%2)+48;
n /= 2;
}
s[i]=NULL;
return strrev(s);
}
b. Thuật toán chuyển số nguyên qua xâu hexa.
Bước 1: Đọc các phần tử tệp ( n phần tử)
Bước 2:
Page 8
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
- Lấy phần dư của phép chia n%16
Nếu n<10 gán s[i]=a+48//Chuyển các kí tụ sang mã ASCII, mã 48 tương ứng
với kí tự 0
Nếu n>10 gán s[i]=a+65-10// 65 tương ứng với kí tự ‘A’, trừ 10 vì lớn hơn 10
- Lặp cho tới khi n=0, rồi chuyển qua bước 3
Lặp lại bước 2 cho đến khi duyệt hết tất cả các phần tử tệp
Bước 3: Ghi số vừa chuyển vào tệp output.txt
Bước 4: Kết thúc.
1.2.3.2. Sơ đồ khối mô tả thuật toán
a. Sơ đồ khối chuyển số nguyên qua xâu nhị phân
Bắt đầu
s[100],i=0,n
n>0
Đúng
s[i++]=n%2,n/2
Sai
s=0
i++
Kết thúc
Page 9
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
b. Sơ đồ khối chuyển số nguyên qua xâu hexa.
Page 10
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
Page 11
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
1.3. Chương trình:
Câu 1:
Viết chương trình đổi các số nguyên đọc ra từ một tệp văn bản thành xâu nhị
phân và xâu hexa tương ứng. Kết quả đưa vào tệp văn bản khác theo dạng:
n----> xâu nhị phân -----> xâu hexa
#include <stdio.h>
#include <conio.h>
#include <cstdlib>
#include <string.h>
void read(int *a, int &n)
{
FILE *f;
f = fopen("input.txt","rt");
if(!f)
{
printf("Tep khong ton tai!");
getch();
exit(0);
}
n = 0;
while(!feof(f))
fscanf(f,"%d", &a[n++]);
fclose(f);
}
char *bin(int n)
{
char *s=new char[100];
int i=0;
if(n == 0) return "0";
while(n>0)
Page 12
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
{
s[i++] = (n%2)+48;
n /= 2;
}
s[i]=NULL;
return strrev(s);
}
char *hex(int n)
{
char *s=new char[100];
int a, i=0;
if(n == 0) return "0";
while(n>0)
{
a = n%16;
if(a<10)
s[i++] = a+48;
else
s[i++] = a+65-10;
n /= 16;
}
s[i]=NULL;
return strrev(s);
}
void write(int *a, int n)
{
FILE *f;
f = fopen("output.txt","wt");
for(int i=0; i
fprintf(f,"\n%5d\t%15s\t%15s",a[i], bin(a[i]), hex(a[i]));
fclose(f);
Page 13
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
}
int main()
{
int a[100], n;
read(a,n);
write(a,n);
return 0;
}
1.4. Dữ liệu test và kết quả tương ứng
1.4.1 Bộ Test 1
Dữ liệu test:
Kết quả test:
1.4.2 Bộ Test 2
Dữ liệu test:
Page 14
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
Kết quả test:
1.4.3Bộ Test 3
Dữ liệu test:
Kết quả test:
1.4.4 Một Số Lỗi
Ví dụ :
Page 15
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
1.5Kết luận:
- Chương trình chạy nhanh, kết quả đúng yêu cầu.
- Chương trình báo lỗi trong trường hợp dữ liệu vào:
+ Sử dụng dấu cách trống hoặc dấu xuống dịng nhưng khơng nhập số
+ Có chứa kí hiệu đặc biệt, chữ cái.
+ File đầu vào không tồn tại.
1.6.Thông tin ngơn ngữ lập trình
-Chương trình được lập trình bằng ngơn ngữ C, với phần mềm Tubor C.
Page 16
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
Bài 2:
2.1. Xác định bài toán
Đề bài: Mã đề 007
Cho dãy số {a1, a2,…an} với n ≤ 100. Viết chương trình thực hiện các cơng
việc sau:
a. Đọc các giá trị {a1, a2,…an} vào từ bàn phím và xác định xem dãy nhận
được có phải là hốn vị của {1, 2,…n} không?
b. Phân chia {a1, a2,…an} thành các dãy con tăng dần có độ dài cực đại.
Chẳng hạn: Với dãy {8, 1, 6, 3, 4, 5, 9} ta chia được thành các dãy con tăng dần
có độ dài cực đại như sau:
{8}; {1, 6}; {3, 4, 5, 9}
2.2. Thuật Toán
2.2.1. Thuật Tốn Kiểm Tra Dữ Liệu
2.2.1.1. Mơ tả thuật tốn:
Bước 1: Đọc dữ liệu từ tệp input.txt để kiểm tra.
Trong khi chưa kết thúc tệp: đưa dữ liệu vào biến, chuyển sang bước 2.
Ngược lại, chuyển sang bước 3
Bước 2: Kiểm tra dữ liệu:
Nếu dữ liệu dữ liệu đọc vào đúng là số nguyên.Quay lại bước 1.
Nếu sai trả về true. Chuyển sang bước 4.
Bước 3: Trả về false, chuyển sang bước 4
Bước 4: Kết thúc.
Page 17
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
2.2.1.2. Sơ đồ khối mơ tả thuật tốn
Bắt đầu
Đọc dữ liệu từ tệp
File != eof()
Sai
Đúng
Đúng
Return true
Dữ liệu là số nguyên
Sai
Return false
Kết thúc
Page 18
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
2.2.2. Thuật Tốn Đọc Từ Tệp:
2.2.2.1. Mơ tả thuật toán:
Bước 1: Đọc cácdữ liệutừ tệp input.txt
Bước 2: Kiểm tra dữ liệu:
Nếu đọc dữ liệu thành công chuyển sang bước 3
Ngược lại chuyển sang bước 4
Bước 3: Đưa dữ liệu ra Quay lại bước 1
Bước 4: Kết thúc.
2.2.2.2.Sơ đồ khối mơ tả thuật tốn:
Bắt đầu
i=0
Sai
Tệp != eof
Đúng
Đưa dữ liệu ra để tính tốn
Kết thúc
Page 19
LỚP 53K2 – KỸ SƯ CƠNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
2.2.3. Thuật toán kiểm tra hoán vị và chia dãy.
2.2.3.1. Mơ tả thuật tốn:
Thuật tốn kiểm tra hốn vị:
Bước 1: Khởi tạo mảng H gồm n+1 phần tử //do C tính từ T[0]
Bước 2: Gán cho tất cả các phần tử H[i]=0, i=1 đến i<=n; //bắt đầu duyệt dãy a
Bước 3: gán j=0;
Bước 4: kiểm tra j
Bước 5: nếu a[j] <1 hoặc a[j]>n hoặc H[a[j]]==1 thì break vịng lặp, thơng báo
khơng phải hốn vị (H[a[j]]==1 có ghĩa là số a[j] đã xuất hiện trước đó). Sai thì
sang bước 6
Bước 6: H[a[j]]++, quay về bước 4
Đoạn chương trình:
int hoanvi(int *a, int n)
{
int *count = new int[n+1], i;
for(i=1; i<=n; i++)
count[i]=0;
for(i =0; i
{
if(a[i]<1 || a[i]>n || count[a[i]]==1)
return 0;
count[a[i]]++;
}
return 1;
}
Thuật toán chia dãy.
Bước 1: Khởi tạo 1 mảng a,i=0
Bước 2:
- Dau=i
- Nếu a[i]<=a[i+1]và i
Page 20
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
- Ngược lại gán cuối=i và tăng i
- Xuất dãy bắt đầu từ chỉ số đầu và kết thúc có chỉ số Cuối
Lặp lại bước 2 cho đến khi n=0, rồi chuyển qua bước 3
Bước 3: Kết thúc
- Đoạn chương trình:
void tachdaytang(int *a, int n){
int i=0, m=1;
while(i
printf("\nDay %d:",m);
while(a[i]<=a[i+1] && i
printf("%5d,",a[i]);
i++;
}
printf("%5d", a[i++]);
m++;
}
}
Page 21
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
2.2.3.2. Sơ đồ khối mơ tả thuật tốn
Sơ đồ khối chia dãy con:
Bắt đầu
a[],i=0,n,i=0
dau, cuoi
Sai
i
Đúng
Đầu=i
a[i]
Đúng
cuoi=i
i++
Kết thúc
Page 22
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
2.3. Chương trình:
Câu 2:
#include <stdio.h>
#include <conio.h>
#include <cstdlib>
void read( int *a, int &n)
{
FILE *f;
f = fopen("dayso.txt","rt");
if(!f){
printf("Tep khong ton tai");
getch();
exit(1);
}
n=0;
while(!feof(f))
fscanf(f,"%d", &a[n++]);
fclose(f);
}
int hoanvi(int *a,int n){
int *h=new int[n+1], i;
for(i=1;i<=n;i++)
h[i]=0;
for(i=0;i
{
if (a[i]<1 || a[i]>n || h[a[i]]==1) /* h[a[i]]==1 có nghĩa là giá trị
a[i] đã có trước đó */
return 0;
h[a[i]]++;
}
return 1;
}
void tachdaytang(int *a, int n){
int i=0, m=1;
while(i
printf("\nDay %d:",m);
while(a[i]<=a[i+1] && i
printf("%5d,",a[i]);
i++;
}
printf("%5d", a[i++]);
m++;
}
}
Page 23
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
int main()
{
int a[100], n;
read(a,n);
if(hoanvi(a,n))
printf("Co");
else
printf("Khong");
tachdaytang(a,n);
getch();
return 0;
}
2.4. Dữ liệu test và kết quả tương ứng
2.4.1 Bộ Test 1
Dữ liệu test:
Kết quả test:
1.4.2 Bộ Test 2
Dữ liệu test:
Page 24
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
Kết quả test:
1.4.3Bộ Test 3
Dữ liệu test:
Kết quả test:
2.4.4 Một Số Lỗi
Ví dụ :
Page 25
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN