1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

36 22 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thực Tập Cơ Sở
Người hướng dẫn Thầy Vũ Chí Cường
Trường học Đại học Vinh
Chuyên ngành Công nghệ thông tin
Thể loại báo cáo
Định dạng
Số trang 36
Dung lượng 520,99 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

LỜI MỞ ĐẦULờ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ô trongtrường Đại học Vinh, đặc biệt là các Thầy Cô trong khoa Công nghệ thông tin – nhữngngười đã trực t

Trang 1

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ô trongtrường Đại học Vinh, đặc biệt là các Thầy Cô trong khoa Công nghệ thông tin – nhữngngườ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ànhngườ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ựctậ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ựccông nghệ thông tin, trên cơ sở những kiến thức đã được học trong những năm họcvừa qua

Để hoàn thành đợt thực tập chuyên ngành này, ngoài sự cố gắng nỗ lực của bảnthâ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 CNTTTrườ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ô trongkhoa Công nghệ thông tin, đặc biệt là thầy Vũ Chí Cường đã nhiệt tình hướng dẫn emtrong 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ữngthiế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àinày được hoàn thiện hơn

Sinh viên thực hiện

Trang 2

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ô trongtrường Đại học Vinh, đặc biệt là các Thầy Cô trong khoa Công nghệ thông tin – nhữngngườ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ànhngườ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ựctậ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ựccông nghệ thông tin, trên cơ sở những kiến thức đã được học trong những năm họcvừa qua

Để hoàn thành đợt thực tập chuyên ngành này, ngoài sự cố gắng nỗ lực của bảnthâ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 CNTTTrườ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ô trongkhoa Công nghệ thông tin, đặc biệt là thầy Vũ Chí Cường đã nhiệt tình hướng dẫn emtrong 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ữngthiế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àinày được hoàn thiện hơn

Sinh viên thực hiện

Trang 3

MỤC LỤC

LỜI MỞ ĐẦU 1

LỜI CẢM ƠN 2

NỘI DUNG 5

Bài 1: 5

1.1 Xác định bài toán 5

1.1.1 Đề bài 5

1.1.2 Xác định đầu vào, đầu ra của bài toán 5

1.2 Thuật Toán 5

1.2.1 Thuật Toán Kiểm Tra Dữ Liệu 5

1.2.1.1 Mô tả thuật toán: 5

1.2.1.2 Sơ đồ khối mô tả thuật toán 6

1.2.1.3 Đoạn chương trình 6

1.2.2 Thuật Toán Đọc Từ Tệp: 7

1.2.2.1 Mô tả thuật toán: 7

1.2.2.2.Sơ đồ khối mô tả thuật toán: 7

1.2.2.3 Đoạn chương trình 7

1.2.3 Thuật toán kiểm tra số nguyên tố 8

1.2.3.1 Mô tả thuật toán: 8

1.2.3.2 Sơ đồ khối mô tả thuật toán 9

1.2.3.3: Đoạn chương trình 9

1.2.4 Thuật toán liệt kê số nguyên tố 10

1.2.4.1 Mô tả thuật toán 10

1.2.4.2 Sơ đồ khối 11

1.2.4.3 Đoạn chương trình 11

1.2.5 Thuật toán xóa số nguyên tố trùng nhau 12

1.2.5.1 Mô tả thuật toán 12

1.2.5.2 Sơ đồ khối 13

1.2.5.3 Đoạn chương trình 13

1.2.6 Một số hàm phát triển thêm cho bài toán 14

1.2.6.1 Tạo 1 menu để tạo mới hay mở file đã có: 14

Trang 4

1.3 Toàn bộ chương trình 15

1.4 Dữ liệu test và kết quả tương ứng 22

1.4.1 Bộ Test 1 22

1.4.2 Bộ Test 2 22

1.4.3 Bộ test 3 23

1.4.4 Bộ test 4(Nhập từ bàn phím) 24

1.4.5 Một Số Lỗi 24

1.5 Kết luận: 26

1.6 Thông tin ngôn ngữ lập trình 26

Bài 2 26

2.1 Xác định bài toán 26

2.1.1 Đề bài 26

2.1.2 Phân tích bài toán 26

2.2 Thuật toán 26

2.2.1 Thuật toán lũy thừa nhanh 26

2.2.1.3 Đoạn chương trình 29

2.2.2 Thuật toán chuyển số nguyên sang xâu nhị phân 29

2.2.2.1 Đoạn chương trình 29

2.2.2.2 Thuật toán đọc tệp 30

2.3 Chương trình cài đặt 31

2.4 Test bài toán cụ thể 33

2.5 Kết luận: 34

2.6 Thông tin ngôn ngữ lập trình 34

Trang 5

- 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 haichiề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ụcchứ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 toá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

Trang 6

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 toán

1.2.1.3 Đoạn chương trình.

Trang 7

if('0'>kt||'9'<kt)return true;

}return false;

}

1.2.2 Thuật Toá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 toán:

1.2.2.3 Đoạn chương trình.

Trang 8

void docFile(int a[100][100], int &n, int &m){

FILE *f;

f= fopen("input.txt","rt");

if(!f){

printf("\a Not found File!");

_getch();

exit(1);

}while(!feof(f))

{

fscanf(f,"%d%d",&n,&m);

for(i=0;i<n;i++){

for (j=0;j<m;j++)

fscanf(f,"%d",&a[i][j]);

}

}fclose(f);//dong file

}

1.2.3 Thuật toán kiểm tra số nguyên tố.

1.2.3.1 Mô tả thuật toá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ó Ngoài ra nó khôngchia 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 toán:

Bước 1: Nhập (Lấy từ tệp) 1 số nguyên 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 sangbước 7

Trang 9

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ố nguyên tố

Bước 5: Cho i chạy từ 2 đến N-1Bước 6: + Nếu N chia hết cho i thì N không là số nguyên tố (return false) rồisang bước 7

+ Ngược lại return true, tăng i++

Trang 10

if(i>s) return true;

if(a%i == 0) return false;

return true;

}

}

1.2.4 Thuật toán liệt kê số nguyên tố.

1.2.4.1 Mô tả thuật toá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

Trang 11

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;i<n;i++)

for(j=0;j<m;j++){

Trang 12

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 toá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ảngb

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

Trang 13

1.2.5.2 Sơ đồ khối.

1.2.5.3 Đoạn chương trình

void xoa(int b[100], int &dem){

if(b[i]==b[j]) {

tg=b[j];

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:

Trang 14

int menu(){

cout<<"==============MENU=============="<<endl;cout<<"Chon chuc nang:"<<endl;

cout<<" 1 - Tao moi"<<endl;

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>

Trang 15

cout<<" 1 - Tao moi"<<endl;

doc>>kt;

if('0'>kt||'9'<kt)return true;

}return false;

Trang 16

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<n;i++){

for (j=0;j<m;j++)

fscanf_s(f,"%d",&a[i][j}

}fclose(f);//dong file

cout<<"\t"<<a[i][j];

cout<<("\n");

}

Trang 17

void Input(int a[100][100], int n, int m)

cout<<"Nhap vao phan tu ["<<i+1<<"]["<<j+1<<"]: " ;

cin>>a[i][j];

}//===============ghi dl ra file===============

fprintf(f,"%d %d\n",n,m);

for(int i=0;i<n;i++){

for(int j=0;j<m;j++)

fprintf(f,"%d\t",a[i][j]);

fprintf(f,"\n");

}fclose(f);

Trang 18

else

for( i=2;i<a;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)

if(soNT(a[i][j])) // neu ptu a[i][j] tm la soNT{

//============xoa cac SNT trung nhau ============

void xoa(int b[100], int &dem)

{

int i,j;

// int dem;

Trang 19

int tg;

for(i=0;i<dem-1;i++)

{ for(j=i+1;j<dem;j++)

if(b[i]==b[j]) {

Trang 20

xemmang(a,n,m);

break;

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

Trang 21

}getch();

Trang 22

1.4.2 Bộ Test 2

Dữ liệu test:

Kết quả test:

Trang 23

1.4.3 Bộ test 3.

Dữ liệu vào

Kết quả test

Trang 24

1.4.4 Bộ test 4(Nhập từ bàn phím).

File sau khi nhập:

Trang 26

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 Studio2010

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

Trang 27

- Kết quả a^n mod m.

2.2 Thuật toán.

2.2.1 Thuật toá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 toá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útgọ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

o Áp dụng thuật toán lũy thừa nhanh tính: a^n mod m

Ta dựa theo công thức đồng dư thức:

Trang 28

+ (a×b) mod n = ((a mod n) × (b mod n)) mod n

+ Trong giải thuật đệ quy trên đây ta xét tính chẵn lẻ của n và liên tục chia ncho 2 lấy phần nguyên cho đến khi n=0 Thực chất quá trình này chính là tìm các bítcủa n Do đó ta có thể thực hiện phép đổi ra số nhị phân trước sau đó tính lũy thừa theoquy tắc bình phương và nhân

Ta có các bước sau:

Bước 1: Khởi tạo p = 1, s[100], nhập a,n,m

Bước 2: Đổi n ra số nhị phân đưa vào mảng b[b0…bk].Bước 3: Copy xâu nhị phân từ mảng b vào mảng s[]

Bước 4: Cho i chạy từ 0 đến độ dài của s[] (strlen(s))

- Nếu phần tử trong mảng s[] = 0, thì p=(p*p) % m

- Ngược lại: p=(((p*p) % m) * a) % m

Bước 5: kết thúc

 Sơ đồ khối

Trang 29

Bắt đầu

Đổi n sang hệ nhị phân

S[i]==’0’

Nhập a,n,mKhởi tạo p=1,s[],i=0

Copy b[] sang s[]

p=(((p*p) % m) * a) % mp=(p*p) % m

Trang 30

unsigned long a,n,m,p=1;

getch();

return 0;

}

2.2.2 Thuật toán chuyển số nguyên sang xâu nhị phân.

2.2.2.1 Đoạn chương trình.

char *nhiphan(int n){

int i=0,j,k,x;

char s[33],b[3]={'0','1'},tg;

x=n;

while (x!=0){

k=x%2;

Trang 31

i++;

x=x/2;

}//Vì khi đổi sang xâu nhị phân, đưa vào mảng s[] thì xâu đó là xâu đảo của xâunhị phân cần tìm nên ta cần đảo ngược lại xâu đó

j=i;

for(i=0;i<(j/2);i++){

tg=s[i];

s[i]=s[j-i-1];

s[j-i-1]=tg;

}s[j]=NULL;

printf("\a Not found File!");

_getch();

exit(1);

}while(!feof(f))

{

Trang 33

cout<<"1 – Doc tu tep "<<endl;

cout<<"2 – Nhap tu ban phim."<<endl;

Trang 34

 Ví dụ này được tính bằng tay:

Đổi n = 27 ra số nhị phân ta được

Bảng sau đây tính toán từng bước theo giá trị của các bít của 27.Khởi tạo p = 1

-Như vậy ta có

Trang 35

 Tính bằng phần mềm lũy thừa nhanh.

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

+ Nhập sai dữ liệu

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

Trang 36

TÀI LIỆU THAM KHẢO

1 Website

- http://vi.wikipedia.org/

- http://congdongcviet.com

2 Giáo trình

Đỗ Xuân Lôi, Cấu trúc dữ liệu và giải thuật, Nhà xuất bản Đại học quốc gia Hà

Nội, năm xuất bản, 2006

Ngày đăng: 29/08/2021, 19:57

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w