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

BÁO cáo đề tài THỰC tập cơ sở mã đề 082

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 (559.09 KB, 36 trang )

BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 082
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 Vũ Chí Cường đã 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

1
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 082
LỜI CẢM ƠN
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 Vũ Chí Cường đã 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

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Ã ĐỀ 082

MỤC LỤC

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Ã ĐỀ 082
NỘI DUNG
Mã đề 082
Bài 1:
1.1. Xác định bài toán
1.1.1. Đề bài
Tạo một tệp văn bản dòng đầu chứa 2 số nguyên n và m, tiếp theo là một ma
trận các số thực n x m. Viết chương trình đọc các phần tử của tệp trên vào một mảng
hai chiều anxm. Xây dựng mảng một chiều b gồm các số nguyên tố có mặt trong mảng
hai chiều a.
1.1.2. Xác định đầu vào, đầu ra của bài toán
+ INPUT :
- Cho một tệp văn bản dòng đầu chứa 2 số nguyên n và m, tiếp theo là một ma
trận các số nguyên n x m.
+ OUTPUT:
- Viết chương trình đọc các phần tử của tệp trên vào một mảng hai chiều a nxm.
- Xây dựng mảng một chiều b gồm các số nguyên tố có mặt trong mảng hai
chiều a.
+ Từ yêu cầu bài toán, em đã phát triển bài toán thêm, có thêm nhập dữ liệu từ
bàn phím để khi muốn sửa file gốc thì có thể sửa trực tiếp mà không phải vào thư mục
chứa file input.txt.
+ Thêm vào 1 số hàm tạo menu…
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.
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Ã ĐỀ 082
Bước 3: Trả về false, chuyển sang bước 4
Đúngg

Bước 4: Kết thúc.
Sai
1.2.1.2. Sơ đồ khối mơ tả thuật tốn

1.2.1.3. Đoạn chương trình.
bool checkFile()
{
char kt;
ifstream doc ("input.txt");
while(!doc.eof())
{
doc>>kt;
if('0'>kt||'9'return true;
}
5
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN


Đúng

BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 082
return false;
}
1.2.2. Thuật Tốn Đọc Từ Tệp:
1.2.2.1. Mơ tả thuật toán:
Sai
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:

1.2.2.3. Đoạn chương trình.
void docFile(int a[100][100], int &n, int &m)
{
FILE *f;
f= fopen("input.txt","rt");
if(!f)
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Ã ĐỀ 082
{
printf("\a Not found File!");
_getch();
exit(1);
}

while(!feof(f))
{
fscanf(f,"%d%d",&n,&m);
for(i=0;i{
for (j=0;jfscanf(f,"%d",&a[i][j]);
}
}
fclose(f);//dong file
}
1.2.3. Thuật toán kiểm tra số ngun tố.
1.2.3.1. Mơ tả thuật tốn:
a. Định nghĩa số nguyên tố:
Số nguyên tố là số tự nhiên chỉ chia hết cho 1 và chính nó. Ngồi ra nó không
chia hết cho bất cứ số nào khác. Số 0 và 1 không được coi là số nguyên tố.
b. Thuật tốn:
Bước 1: Nhập (Lấy từ tệp) 1 số ngun khơng âm N.
Bước 2: Nếu N = 0 hoặc N=1 thì N không là số nguyên tố (return false) rồi sang
bước 7.
Bước 3: Gán i = 2.
Bước 4: Nếu i>căn bậc 2 của N thì thơng báo N là số ngun tố
Bước 5: Cho i chạy từ 2 đến N-1
Bước 6: + Nếu N chia hết cho i thì N khơng là số nguyên tố (return false) rồi
sang bước 7.
+ Ngược lại return true, tăng i++.
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Ã ĐỀ 082
Bước 7: Kết thúc.
1.2.3.2. Sơ đồ khối mô tả thuật toán

1.2.3.3: Đoạn chương trình.
bool soNT(int a)
{
double s = sqrt(double(a));
if((a == 0)||(a == 1)) return false;
else
for( i=2;i{
if(i>s) return true;
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Ã ĐỀ 082
if(a%i == 0) return false;
return true;
}
}
1.2.4. Thuật toán liệt kê số ngun tố.
1.2.4.1. Mơ tả thuật tốn.
Bước 1: khai báo k,i,j, gán k =0.
Bước 2: Cho i chạy đến vị trí cuối của hàng.
-

Nếu i= số hàng -1 thì sang bước 6.
Bước 3: Cho j chạy đến vị trí cuối của cột.


-

Nếu j = số cột -1 thì tăng j, sang bước 2.
Bước 4: Nếu phần tủ a[i][j] của mảng a là số ngTố thì:

-

Gán phần tử thứ k của mảng b cho a[i][j].
Tăng k .
Tăng biến đếm(dùng để đếm xem có bao nhiêu phần tử của mảng b).
Bước 5: Nếu phần tử a[i][j] chưa là số nguyên tố thì tăng i, quay lại bước 3.
Bước 6: Kết thúc.

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Ã ĐỀ 082

1.2.4.2. Sơ đồ khối.

1.2.4.3. Đoạn chương trình.
void lietkesoNT(int a[100][100],int b[100], int &k)
{
k=0;
for(i=0;ifor(j=0;j{
if(soNT(a[i][j]))

{
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Ã ĐỀ 082
b[k]=a[i][j];
k++;
dem++;
}
}
}
1.2.5. Thuật toán xóa số nguyên tố trùng nhau.
1.2.5.1. Mơ tả thuật tốn.
Bước 1: Đọc các phần tửtừ tệp đưa vào mảng a
Khởi tạo mảng b có số phần tử là dem.
Ban đầu dem=0
Bước 2:So sánh lần lượt từng phần tử có trong mảng a với tất cả các phần tử có
trong mảng b:
Nếu phần tử trong mảng a chưa có trong mảng b thì thêm phần tử đó vào mảng
b.
Nếu phần tử trong mảng a đã có trong mảng b thì khơng thêm vào mảng b nữa.
Lặp lại bước 2 cho đến khi duyệt hết tất cả các phần tử trong mảng a.
Bước 3: Hiện thị mảng, xem mảng b
Bước 4: kết thúc

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Ã ĐỀ 082
1.2.5.2. Sơ đồ khối.

1.2.5.3. Đoạn chương trình
void xoa(int b[100], int &dem)
{
int i,j;
//

int dem;
int tg;
for(i=0;i{
for(j=i+1;jif(b[i]==b[j])
{
tg=b[j];
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Ã ĐỀ 082
b[j]=b[dem-1];
b[dem-1]=tg;
dem--;
j--;
}
}
}
1.2.6. Một số hàm phát triển thêm cho bài toán.

1.2.6.1. Tạo 1 menu để tạo mới hay mở file đã có:
a. Đoạn chương trình:
int menu()
{
cout<<"==============MENU=============="<cout<<"Chon chuc nang:"<cout<<"

1 - Tao moi"<
cout<<"

2 - Mo File"<
cout<<"

3 - Exit"<
cout<<"Moi ban chon: \n";
int cn;
cin>>cn;
return cn;
}

b. Hình minh họa.

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Ã ĐỀ 082

Hình 1.2.5.1: Menu chọn tạo/mở file.
1.3. Toàn bợ chương trình.
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <stdlib.h>
#include <Windows.h>
#include <math.h>
#include <fstream>
using namespace std;
int m,n,i,j,k,dem =0;
int a[100][100], b[100];
int menu()
{
cout<<"=============MENU============="<cout<<"Chon chuc nang:"<cout<<"

1 - Tao moi"<
cout<<"

2 - Mo File"<
cout<<"

3 - Exit"<

cout<<"Moi ban chon: \n";
cout<"\n \n";
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Ã ĐỀ 082
int cn;
cin>>cn;
return cn;
}
bool checkFile()
{
char kt;
ifstream doc ("input.txt");
while(!doc.eof())
{
doc>>kt;
if('0'>kt||'9'return true;
}
return false;
}
void docFile(int a[100][100], int &n, int &m)
{
FILE *f;// khai bao bien con tro File f;
f= fopen("input.txt","rt"); //mo tep;
if(!f)
{
printf("\a Not found File!");

_getch();
exit(1);
}
{
fscanf_s(f,"%d%d",&n,&m
for(i=0;i{
for (j=0;j15
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 082
fscanf_s(f,"%d",&a[i][j
}
}
fclose(f);//dong file
}
void xemmang(int a[100][100], int n, int m)
{
cout<<"Mang 2 chieu "<for(i=0;i{
{
for (j=0;jcout<<"\t"<cout<<("\n");
}
}
}

void Input(int a[100][100], int n, int m)
{
//===============Mo file de ghi===============
FILE *f;
f = fopen("input.txt","wt"); //wt = write +text
//==================Nhap du lieu=================
cout<<("Nhap n: "); cin>>n;
cout<<("Nhap n: "); cin>>m;
for(i=0;ifor(j=0;j{
cout<<"Nhap vao phan tu ["<cin>>a[i][j];
}
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Ã ĐỀ 082
//===============ghi dl ra file===============
fprintf(f,"%d %d\n",n,m);
for(int i=0;i{
for(int j=0;jfprintf(f,"%d\t",a[i][j]);
fprintf(f,"\n");
}
fclose(f);
}
//=============Kiem tra so nguyen to=================

bool soNT(int a)
{
double s = sqrt(double(a));
if((a == 0)||(a == 1)) return false; //0 va 1 k phai la SNT
else
for( i=2;i{
if(i>s) return true;
if(a%i == 0) return false;
}
return true; // nguoc lai la snt
}
//Liet ke cac so nt roi dua vao mag b[]
void lietkesoNT(int a[100][100],int b[100], int &k)
{
int i=0,j=0;
k=0;
for(i=0;ifor(j=0;j17
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 082
{
if(soNT(a[i][j])) // neu ptu a[i][j] tm la soNT
{
b[k]=a[i][j];
k++;
dem++;

}
}
}
//============xoa cac SNT trung nhau ============
void xoa(int b[100], int &dem)
{
int i,j;
//

int dem;
int tg;
for(i=0;i{
for(j=i+1;jif(b[i]==b[j])
{
tg=b[j];
b[j]=b[dem-1];
b[dem-1]=tg;
dem--;
j--;
}
}

}
//==========Xem mang b==================
void xem(int b[100],int &dem)
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Ã ĐỀ 082
{
cout<<("\n");
//cout<<"Mang b la: \n";
for(int i = 0; icout<<"\t"<}
//================Ham chinh====================
void main()
{
system ("color 0e");
int a[100][100], b[100];
int k;
lap: int cn = menu();
if(cn!=1 && cn!=2)
{
system("cls");
cout<<"Lua chon khong dung! Moi ban kiem tra lai \n \n";
goto lap;
}
else
{
switch(cn)
{
case 1:
{
Input(a,n,m);
if(!checkFile())
{

docFile(a,n,m);
xemmang(a,n,m);
break;
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Ã ĐỀ 082
}
else
printf("Du lieu khong dung! \n");
}
case 2:
{
if(!checkFile())
{
docFile(a,n,m);
xemmang(a,n,m);
break;
}
else
printf("Du lieu khong dung! \n");
}
}
lietkesoNT(a,b,k);
if(k==0)
cout<<("\n\a Mang khong co so nguyen to nao! \n ");
else
{
cout<<"Mang b la: \n";

{
xoa(b,dem);
xem(b,dem);
}
cout<<("\n");
}
getch();
}
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Ã ĐỀ 082
1.4. Dữ liệu test và kết quả tương ứng
1.4.1 Bộ Test 1
Dữ liệu test: (input.txt)

Kết quả test:

1.4.2 Bộ Test 2
Dữ liệu test:

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Ã ĐỀ 082

Kết quả test:


1.4.3. Bộ test 3.
Dữ liệu vào.

Kết quả test.

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Ã ĐỀ 082
1.4.4. Bộ test 4(Nhập từ bàn phím).

File sau khi nhập:

1.4.5 Mợt Số Lỗi

Lỗi 1.
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Ã ĐỀ 082

Lỗi 2.

Lỗi 3.
Kết quả:

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Ã ĐỀ 082
1.5. Kế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:
+ Có chứa kí hiệu đặc biệt, chữ cái, chứa dấu âm, file trốn.
+ 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 Visual Studio
2010.
Bài 2.
2.1. Xác định bài tốn
2.1.1. Đề bài
Viết chương trình cài đặt thuật toán lũy thừa nhanh.
- Input: a, m, n.
- Output: là kết quả của a ^ n mod m
2.1.2. Phân tích bài toán.
+ INPUT :
- a,m,n.
+ OUTPUT:
- Kết quả a^n mod m.
2.2. Thuật tốn.
2.2.1. Thuật tốn lũy thừa nhanh.

o Mơ tả thuật toán.
Thuật toán bình phương và nhân là thuật tốn tính nhanh lũy thừa tự nhiên
của một số (thực hoặc nguyên), trong trường hợp cơ số là số nguyên có thể được rút

gọn theo mộtmơđun nào đó.
Phép nâng lên lũy thừa tự nhiên bậc n của số x (x được gọi là cơ số) được định
nghĩa từ hệ thức

Với n lớn số phép nhân là rất lớn.
25
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN


×