Tải bản đầy đủ (.doc) (22 trang)

Thuật toán đọc từ tệp mã đề 008

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 (250.94 KB, 22 trang )

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
SV thực hiện: Nguyễn Mạnh Hùng
Lớp: 53K2 – CNTT
MSSV: 1251072594

Nghệ An, 9/2014


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 đến TS.PHAN ANH
PHONG cùng các thầy cô trong bộ môn phương pháp giảng dạy đã giúp đỡ em
trong quá trình thực hiện đề tài này. Em xin cảm ơn ban chủ nhiệm khoa cùng
các thầy cô trong khoa đã tạo cho em một môi trường thực tập tốt nhất, với
những trang thiết bị hiện đại. Đợt thực tập cơ sở lần này giúp chúng em tổng hợp
lại những kiến thức đã học trong những năm qua.
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
Nguyễn Mạnh Hùng

NGUYỄN MẠNH HÙNG


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

Page 2


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:............................................................................................................................. 4
1.1. Xác định bài toán................................................................................................4
1.2. Thuật Toán..........................................................................................................4
1.2.1. Thuật Toán Đọc Từ Tệp:..............................................................................4
1.2.3. Thuật toán xử lý xâu....................................................................................6
1.3. Chương trình:......................................................................................................7
1.4. Dữ liệu test và kết quả tương ứng.......................................................................8
1.4.1 Bộ Test 1.......................................................................................................8
1.4.2 Bộ Test 2.......................................................................................................9
1.4.3Bộ Test 3......................................................................................................10
1.4.4 Một Số Lỗi..................................................................................................10
Bài 2:...........................................................................................................................12
2.1. Xác định bài toán..............................................................................................12
2.2. Thuật Toán........................................................................................................12
2.2.1. Thuật toán kiểm tra hoán vị........................................................................12
2.2.2. Thuật toán chia dãy....................................................................................15
2.3. Chương trình:....................................................................................................17
2.4. Dữ liệu test và kết quả tương ứng.....................................................................19
2.4.1 Bộ Test 1.....................................................................................................19
1.4.2 Bộ Test 2.....................................................................................................20
1.4.3Bộ Test 3......................................................................................................20

2.4.4 Một Số Lỗi..................................................................................................21
-Chương trình được lập trình bằng ngơn ngữ Java, với phần mềm Eclipse.................21

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 3


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ã đề 008
Tạo một tệp văn bản mỗi dòng là một xâu họ và tên. Viết chương trình tách tên và
tách họ của các xâu họ và tên đọc được từ tệp trên. Kết quả đưa vào tệp văn bản
khác theo dạng:
Họ và tên

Họ

Tên

1.2. Thuật Toán
1.2.1. Thuật Toán Đọc Từ Tệp:
1.2.1.1. Mơ tả thuật tốn:
Bước 1: Kiêm tra tệp có tồn tại khơng?
Nếu có chuyển sang bước 2
Ngược lại thì đưa ra thơng báo và kết thúc
Bước 2: Đọc 1 dịng trong tệp

Bước 3: Kiểm tra đọc được khơng?
Nếu có chuyển sang bước 4
Ngược lại chuyển sang bước 5
Bước 4: Xử lý xâu vừa đọc được, Quay lại bước 2
Bước 5: Kết thúc
1.2.1.2.Sơ đồ khối mơ tả thuật tốn:

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 4


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007

Bắt đầu

khơng

Tệp có tồn tại
khơng?


Đọc 1 dịng từ tệp

Đọc được
khơng?

khơng



Xử lý xâu

Kết thúc

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 5


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007

1.2.3. Thuật tốn xử lý xâu.
1.2.3.1. Mơ tả thuật toán:
- Thuật toán xử lý xâu
Bước 1: Tách xâu họ và tên vừa nhận được vào mảng xâu ký tự s[]
(sử dụng hàm split trong java)
Bước 2:
Từ nằm ở đầu mảng s[] là họ, từ cuối mảng s[] là tên
Bước 3: Ghi xâu gốc và họ, tên vào tệp
Bước 4: Kết thúc

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 6


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007

1.2.3.2. Sơ đồ khối mơ tả thuật tốn
Sơ đồ khối xử lý xâu

Bắt đầu
Đọc xâu từ tệp

Tách xâu
Ghi xâu vào tệp

Kết thúc

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 7


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007

1.3. Chương trình:
Tạo một tệp văn bản mỗi dịng là một xâu họ và tên. Viết chương trình tách tên và
tách họ của các xâu họ và tên đọc được từ tệp trên. Kết quả đưa vào tệp văn bản
khác theo dạng:
Họ và tên

Họ

Tên

import java.io.*;

import java.util.*;
public class MainApp {
Vector<String> s;
public MainApp(){
this.s=new Vector<String>();
}
public MainApp(Vector<String> s0){
this.s=s0;
}
public void readFile(String fname) throws IOException{
File f=new File(fname);
if(!f.exists()){
System.out.println("khong tong tai file '"+fname+"'");
return;
}
FileReader fr=new FileReader(f);
BufferedReader br=new BufferedReader(fr);
String line;
while((line=br.readLine())!=null){
String st[]=line.split("[ ]+");
for(int i=0;iif(!st[i].equals("")){
line="";
for(int j=i;jline+=st[j]+" ";
}
line+=st[st.length-1];
String ss=line+"\t\t"+ st[i]+"\t\t"+st[st.length-1];
s.addElement(ss);
System.out.println(ss);

break;
NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 8


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
}
}
}
br.close();
fr.close();
}
public void writeFile(String fname) throws IOException{
File f=new File(fname);
if(!f.exists()){
f.createNewFile();
}
PrintWriter pw=new PrintWriter(f) ;
for(int i=0;ipw.println(s.get(i));
}
pw.close(); }
public static void main(String args[]) throws IOException{
MainApp m=new MainApp();
m.readFile("input.txt");
m.writeFile("output.txt");
}
}

1.4. Dữ liệu test và kết quả tương ứng
1.4.1 Bộ Test 1
Dữ liệu test:

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 9


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007

Kết quả test:

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

Kết quả test:

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 10


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007

1.4.3Bộ Test 3
Dữ liệu test:


Kết quả test:

1.4.4 Một Số Lỗi
Ví dụ :

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CƠNG NGHỆ THÔNG TIN

Page 11


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007

Kết quả:

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:
+ Tên File đầu vào không đúng hoặc khơng tồn tại
+ File đầu vào khơng có dữ liệu hoặc chỉ có dấu cách trống
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ữ Java, với phần mềm Eclipse.

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 12


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ã đề 008
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 hốn vị
2.2.1.1. Mơ tả thuật tốn:
- Thuật tốn kiểm tra tính hốn vị
Đầu vào: a[],n,i
Bước 1: Sắp xếp mảng đã cho a[] theo thứ tự tăng dần,
Bước 2: i=0
Bước 3: Nếu iNgược lại nhảy sang bước 6
Bước 4: Nếu a[i] =i+1 thì nhảy sang bước 5
Ngược lại nhảy sang bước 6
Bước 5: i=i+1, quay lại bước 3
Bước 6: Nếu i=n đưa ra kết luận là hoán vị của (1,2,..n) rồi kết thúc
Ngược lại đưa ra kết luận khơng là hốn vị của (1,2,..n) rồi kết thúc


NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 13


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

A[],N,i

Sắp xếp a[] theo thứ
tự tăng dần

i=0

i
Sai

là hốn vị của
(1,2,..n)

Kết thúc

Đúng

A[i]=i+
1

Đúng

Sai
Khơng là hoán
vị của (1,2,..n)

Kết thúc

i=i+1

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 14


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
- Đoạn chương trình
public void ktHoanVi(){
int b[],tg,i;
b=new int[n];
//b=a;
for( i=0;ib[i]=a[i];
}
for( i=0;ifor(int j=i+1;jif(b[i]>b[j]){
tg=b[i];
b[i]=b[j];

b[j]=tg;
}
}
}
for( i=0;iif(b[i]!=i+1){
break;
}
}
if(i==n){
System.out.println("day nhan duoc la hoan vi cua (1,2,..,n)");
}
else{
System.out.println("day nhan duoc khong phai la hoan vi cua
(1,2,..,n)");
}
}

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 15


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007

2.2.2. Thuật tốn chia dãy
2.2.2.1. Mơ tả thuật tốn:
Thuật tốn chia dãy.
Đầu vào: a[],n,i=0,j,Dau=0

Bước 1: Nếu iNgược lại sang bước 5
Bước 2: Nếu a[i]>=a[i+1] thì nhảy sang bước 3
Ngược lại nhảy sang bước 4
Bước 3: Cuoi=i;
In dãy số từ chỉ số Dau đến chỉ số Cuoi của mảng a[] ra màn hình, sang bước 4
Bước 4: i=i+1
Bước 5: kết thúc
2.2.2.2. Sơ đồ khối mô tả thuật tốn:

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CƠNG NGHỆ THÔNG TIN

Page 16


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007

Bắt đầu

A[],n,i=0,j,D=0

i
Sai
Kết thúc

Đúng
a[i]>=a[i+1]
Sai


Đúng
C=i;
In dãy từ chỉ số Dau
đến chỉ số Cuoi của
mảng a[] ra màn hình

i=i+1

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 17


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007

- Đoạn chương trình
public void tach(){
int k=0;
System.out.print("cac day con tang dan co do dai cuc dai: ");
for(int i=0;iif(a[i]>=a[i+1]){
System.out.print("{");
for(int j=k;jSystem.out.print(a[k]+" ");
k++;
}
System.out.print("}; ");
}

}
}

2.3. Chương trình:
Câu 2:
import java.io.*;
public class MainA {
int n;
int a[];
public MainA(){
n=0;
a=new int[100];
}
public MainA(int n){
this.n=n;
a=new int [100];
}
public void init()throws IOException{
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(in);
while(true){
System.out.println("nhap n: ");
try {
this.n=Integer.parseInt(br.readLine());
break;
NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 18



BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
} catch (NumberFormatException | IOException e) {
System.out.println("yeu cau nhap so: ");
}
}
for(int i=0;iwhile(true){
System.out.println("nhap a["+(i+1)+"]: ");
try {
a[i]=Integer.parseInt(br.readLine());
break;
} catch (NumberFormatException | IOException e) {
// TODO Auto-generated catch block
System.out.println("nhap sai");
}
}
}
}
public void ktHoanVi(){
int b[],tg,i;
b=new int[n];
//b=a;
for( i=0;ib[i]=a[i];
}
for( i=0;ifor(int j=i+1;jif(b[i]>b[j]){
tg=b[i];

b[i]=b[j];
b[j]=tg;
}
}
}
for( i=0;iif(b[i]!=i+1){
break;
}
}
if(i==n){
System.out.println("day nhan duoc la hoan vi cua (1,2,..,n)");
}
else{
System.out.println("day nhan duoc khong phai la hoan vi cua
(1,2,..,n)");
NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 19


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007
}
}
public void tach(){
int k=0;
System.out.print("cac day con tang dan co do dai cuc dai: ");
for(int i=0;iif(a[i]>=a[i+1]){

System.out.print("{");
for(int j=k;jSystem.out.print(a[k]+" ");
k++;
}
System.out.print("}; ");
}
}
}
public static void main(String args[]) throws IOException{
MainA m=new MainA(5);
m.init();
m.ktHoanVi();
m.tach();
}
}
2.4. Dữ liệu test và kết quả tương ứng
2.4.1 Bộ Test 1
Kết quả

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 20


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007

1.4.2 Bộ Test 2
Kết quả test:


1.4.3Bộ Test 3
Kết quả test:

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 21


BÁO CÁO ĐỀ TÀI THỰC TẬP CƠ SỞ - MÃ ĐỀ 007

2.4.4 Một Số Lỗi
Ví dụ :

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:
+ Có chứa kí hiệu đặc biệt, chữ cái.
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ữ Java, với phần mềm Eclipse.

NGUYỄN MẠNH HÙNG
LỚP 53K2 – KỸ SƯ CÔNG NGHỆ THÔNG TIN

Page 22




×