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

báo cáo đồ án đề tài số GIẢ NGẤU NHIÊN

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 (354.46 KB, 16 trang )

j

Trường Đại Học Bách Khoa Hà Nội
Khoa Điện Tử Viễn Thông
====o0o====

BÁO CÁO
ĐỒ ÁN 1
Đề tài:

SỐ GIẢ NGẤU NHIÊN

Giảng viên hướng dẫn : Phạm Việt Thành
Sinh viên thực hiện

:
Nguyễn Mạnh Sinh

MSSV: 20136310

Đặng Ngọc Sơn

MSSV: 20125752

Hà Nội, 11/2015


ĐỒ ÁN I-SỐ GIẢ NGẪU NHIÊN

Lời cảm ơn
Trong suốt quá trình thực hiện đồ án 1 nhóm chúng em đã nhận được rất


nhiều sự giúp đỡ của thầy cô,bạn bè.Em xin gửi lời cảm ơn sâu sắc đến thầy Phạm
Việt Thành,thầy đã trực tiếp hướng dẫn,giúp đỡ chúng em trong suốt quá trình thực
hiện đề tài.Do thời gian có hạn nên đề tài còn nhiều thiếu sót chưa áp dụng nhiều
vào thực tế,rất mong nhận được thêm nhiều sự góp ý của thầy.
Sau cùng,em xin kính chúc thầy dồi dào sức khỏe,niềm tin để thực hiện sứ
mệnh cao đẹp của mình là truyền đạt kiến thức cho thế hệ mai sau.
Trân trọng.

2


ĐỒ ÁN I-SỐ GIẢ NGẪU NHIÊN

MỤC LỤC
Chương 1: Mở đầu
1.1. Giới thiệu số giả ngẫu nhiên
1.2. Ứng dụng của số giả ngẫu nhiên
1.3. Kết luận sau quá trình nghiên cứu sơ bộ

Chương 2: Giới thiệu công nghệ
2.1. Ngôn ngữ lập trình
2.2. Môi trường lập trình

Chương 3: Thiết kế hệ thống
3.1. Yêu cầu đề bài
3.2 . Thuật toán tạo số giả ngẫu nhiên
3.3. Giao diện phần mềm

Chương 4: Triển khai
4.1. Phân công công việc

4.2. Dowload và cài đặt các phần mềm cần sử dụng
4.3. Tạo giao diện phần mềm
4.4. Lập Trình

Chương 5: Thử nghiệm
5.1. Kiểm tra sự chính xác của thuật toán
5.2. Kiểm tra phần mềm

KẾT LUẬN

3


ĐỒ ÁN I-SỐ GIẢ NGẪU NHIÊN

CHƯƠNG 1: MỞ ĐẦU
1.1 Giới thiệu về số giả ngẫu nhiên
Số giả ngẫu nhiên hiểu theo nghĩa thông thường là một số bất kì nào
đó.Nhưng trong toán học,số ngẫu nhiên là: “số có khả năng xuất hiện tương
đương nhau”.Tuy nhiên,trong từng phạm vi sử dụng nhất định mà giới hạn các
số ngẫu nhiên được dùng.Chẳng hạn,không thể có một số nguyên ngẫu nhiên
mà chỉ có một số nguyên ngẫu nhiên trong một miền nào đó.Ngoài ra,trong
nhiều trường hợp không chỉ cần một số ngẫu nhiên mà còn cần đến một hoặc
nhiều dãy số ngẫu nhiên.
1.2 Ứng dụng của số giả ngẫu nhiên
Các số ngẫu nhiên rất hữu ích trong nhiều ứng dụng khác nhau.Trong
thuật toán mật mã,thuật toán sử dụng các số ngẫu nhiên để mã hóa và giải mã
thông tin,ví dụ thuật toán mã hóa khóa như RSA,DES,3DES,AES…Bên cạnh
đó,các số ngẫu nhiên đóng vai trò quan trọng trong việc mô phỏng.Ngay cả khi
không cấc các số ngẫu nhiên,việc mô phỏng vẫn cần các số tùy ý dùng làm dữ

liệu nhập,và điều này được cung cấp rất thuận lợi bởi các công cụ tạo số ngẫu
nhiên.Việc tạo ra các số giả ngẫu nhiên có thể được coi là một mẫu mô phỏng
của một phân khối cho trước.Kỹ thuật mẫu mô phỏng này được coi như là kỹ
thuật Monte Carlo được sử dụng để giải quyết các bài toán lý thuyết xếp
hàng,các bài toán cung ứng vật tư và các vẫn đề liên quan đến xấp xỉ nghiệm
phương trình vi phân,tích phân.
1.3 Kết luận sau quá trình nghiên cứu sơ bộ
Sau quá trình nghiên cứu sơ bộ đề tài chúng em thấy số giả ngẫu nhiên
là một đề tài hay,có nhiều ứng dụng thiết thực trong thực tế.Chúng em quyết
định lựa chon đề tài tạo số giả ngẫu nhiên để thực hiện trong đồ án 1.

CHƯƠNG 2: GIỚI THIỆU VỀ CÔNG NGHỆ
2.1 Ngôn ngữ lập trình
a. Ngôn ngữ JAVA
4


ĐỒ ÁN I-SỐ GIẢ NGẪU NHIÊN

Ngôn ngữ hoàn toàn hướng đối tượng.
Ngôn ngữ đa nền cho phép một chương trình có thể thực thi trên các
hệ điều hành khác nhau (MS Windows, UNIX, Linux) mà không phải biên
dịch lại chương trình. Phương châm của java là "Viết một lần , Chạy trên
nhiều nền" (Write Once, Run Anywhere).
Ngôn ngữ đa luồng, cho phép trong một chương trình có thể có nhiều
luồng điều khiển được thực thi song song nhau, rất hữu ích cho các xử lý song
song.
Ngôn ngữ phân tán, cho phép các đối tượng của một ứng dụng được
phân bố và thực thi trên các máy tính khác nhau.
Ngôn ngữ động, cho phép mã lệnh của một chương trình được tải từ

một máy tính về máy của người yêu cầu thực thi chương trình.
Ngôn ngữ an toàn, tất cả các thao tác truy xuất vào các thiết bị vào ra
đều thực hiện trên máy ảo nhờ đó hạn chế các thao tác nguy hiểm cho máy tính
thật.
Ngôn ngữ đơn giản, dễ học, kiến trúc chương trình đơn giản, trong
sáng.
b. Khả năng của ngôn ngữ JAVA
Là một ngôn ngữ bậc cao như C, C++, Perl, SmallTalk,.. cho nên có
thể được dùng để tạo ra các ứng dụng để giải quyết các vấn đề về số, xử lý văn
bản, tạo ra trò chơi, và nhiều thứ khác.
Có các môi trường lập trình đồ họa như Visual Java, Symantec Cafe,
Jbuilder, Jcreator, ...
Có khả năng truy cập dữ liệu từ xa thông qua cầu nối JDBC (Java
DataBase Connectivity)
Hỗ trợ các lớp hữu ích, tiện lợi trong lập trình các ứng dụng mạng
(Socket) cũng như truy xuất Web.
Hỗ trợ lập trình phân tán (Remote Method Invocation ) cho phép một
ứng dụng có thể được xử lý phân tán trên các máy tính khác nhau.
Và luôn được bổ sung các tính năng cao cấp khác trong các phiên bản
sau.
2.2 Môi trường lập trình
Android Studio, môi trường lập trình phát triển ứng dụng mới vừa
được giới thiệu tại Google I/O 2013. Dựa trên “IntelliJ IDEA Community
Edition”, công cụ này cho phép tạo ứng dụng, dễ dàng thực hiện các thay đổi
và xem trước trong thời gian thực, đồng thời cũng có khả năng tăng tốc sản
phẩm, thiết kế giao diện đẹp hơn trước. Đặc biệt là tiếng Việt cũng được hỗ trợ
trong Android Studio.

5



ĐỒ ÁN I-SỐ GIẢ NGẪU NHIÊN

CHƯƠNG 3: THIẾT KẾ HỆ THỐNG
3.1 Yêu cầu đề tài
Viết phần mềm tạo một số giả ngẫu nhiên hiện ra màn hình.
3.2 Thuật toán tạo số giả ngẫu nhiên
Có rất nhiều phương pháp tạo số giả ngẫu nhiên khác nhau như đồng
dư tuyến tính,nửa bình phương,đồng dư cộng…hoặc ta có thể trực tiếp sử dụng các
hàm của lớp Random được cung cấp có sẵn trong Java.Tuy nhiên do đề tài không
yêu cầu hệ thống quá phức tạp và số chữ số trong số giả ngẫu nhiên không cần quá
lớn nên nhóm đề xuất sử dụng phương pháp đo số nano giây chạy trong một đoạn
chương trình của hệ thong.Do nhiều yếu tố tác động nên mỗi lần chạy phần mềm
sẽ tốn một khoảng thời gian khác nhau suy ra thời gian chạy một đoạn chương
trình cũng thay đổi sau mỗi lần chương trình chạy.Từ khoảng thời gian vừa đo
được ta nhân với một số bất kì (do người lập trình ) để kết quả lớn hơn.Để tạo số
ngẫu nhiên với N chữ số,ta có thể cắt dãy số trên lấy N chữ số..
3.3 Giao diện phần mềm
Phần mềm sẽ gồm 2 màn hình:
-Màn hình 1 bật khi khởi động phần mềm sẽ có 2 button,button “Bắt
đầu” để chuyển đến màn hình 2,nếu không muốn tiếp tục nhấn button “Exit”.
-Màn hình 2 sẽ gồm một edittext để nhập số chữ số muốn hiển thị trong
số giả ngẫu nhiên,một dòng hiển thị số giả ngẫu nhiên,một button ”Back” để quay
lại màn hình 1.

CHƯƠNG 4: TRIỂN KHAI
4.1 Phân công công việc
CÔNG VIỆC

NGƯỜI THỰC HIỆN


Tìm hiểu thuật toán,viết slide

Đặng Ngọc Sơn

Tìm hiểu phần mềm viết code

Nguyễn Mạnh Sinh

Viết Báo cáo

Cả nhóm
6


ĐỒ ÁN I-SỐ GIẢ NGẪU NHIÊN

Trình bày slide và báo cáo

Cả nhóm

4.2 Dowload và cài đặt các phần mềm cần sử dụng
4.3 Tạo giao diện phần mềm
-Code màn hình 1:
<RelativeLayout xmlns:android=" />xmlns:tools=" />android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"

tools:context=".MainActivity">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tableLayout1"
android:background="#ffff88">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#4b4fff"
android:id="@+id/tableRow">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="SỐ GIẢ NGẪU NHIÊN"
android:id="@+id/textViewSGNN"
android:layout_marginLeft="30dp" />
</TableRow>
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="110dp"
android:id="@+id/tableRow1">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BẮT ĐẦU"
android:id="@+id/buttonBatDau"
android:layout_marginLeft="70dp" />

</TableRow>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="50dp"
android:id="@+id/tableRow2">

7


ĐỒ ÁN I-SỐ GIẢ NGẪU NHIÊN
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="EXIT"
android:id="@+id/buttonExit"
android:layout_marginLeft="70dp" />
</TableRow>
</TableLayout>
</RelativeLayout>

Hình ảnh minh họa:
-Code màn hình 2:
<RelativeLayout xmlns:android=" />xmlns:tools=" />android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.sinh.do_an_1.Man_Hinh_Chinh">

android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tableLayout2"
android:background="#fffe82">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#7860ff"
android:id="@+id/tableRow21">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="SỐ GIẢ NGẪU NHIÊN"
android:id="@+id/textViewSGNN2"
android:layout_marginLeft="30dp" />
</TableRow>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="30dp"
android:id="@+id/tableRow22">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Bạn muốn số giả ngẫu nhiên có mấy chữ số:"
android:id="@+id/textViewCauHoi"
android:textSize="15dp"

android:background="#2115ff" />
</TableRow>

8


ĐỒ ÁN I-SỐ GIẢ NGẪU NHIÊN
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tableRow23"
android:layout_marginTop="30dp">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/editTextChuSo"
android:layout_marginRight="50dp"
android:background="#fafeff" />
</TableRow>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tableRow24">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK"
android:id="@+id/buttonOk"

android:layout_marginRight="200dp" />
</TableRow>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="SỐ GIẢ NGẪU NHIÊN"
android:id="@+id/textViewKetQua"
android:background="#0b0cff"
android:layout_marginLeft="70dp"
android:layout_marginRight="70dp"
android:layout_marginTop="30dp"
android:textSize="15dp" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BACK"
android:id="@+id/buttonBack"
android:layout_marginTop="30dp"
android:layout_marginLeft="70dp"
android:layout_marginRight="70dp" />
</TableLayout>
</RelativeLayout>

-Hình ảnh minh họa:
4.4 Lập trình
Code chính của chương trình:
Màn hình 1:

9



ĐỒ ÁN I-SỐ GIẢ NGẪU NHIÊN
public class MainActivity extends AppCompatActivity {
TableLayout t1;
TableRow tr1,tr2,tr3;
Button b1,b2;
TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
t1=(TableLayout) findViewById(R.id.tableLayout1);
tr1=(TableRow) findViewById(R.id.tableRow);
tr2=(TableRow) findViewById(R.id.tableRow1);
tr3=(TableRow) findViewById(R.id.tableRow2);
tv1=(TextView) findViewById(R.id.textViewSGNN);
b1=(Button) findViewById(R.id.buttonBatDau);
b2=(Button) findViewById(R.id.buttonExit);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent tx1=new Intent(MainActivity.this,
com.example.sinh.do_an_i.Man_Hinh_Chinh.class);
startActivity(tx1);
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

AlertDialog.Builder b=new
AlertDialog.Builder(MainActivity.this);
b.setTitle("QUESTION");
b.setMessage("Bạn có muốn đóng ứng dụng");
b.setNegativeButton("YES", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(getApplicationContext(),
MainActivity.class);
startActivity(intent);
// Tao su kien ket thuc ung dung
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startActivity(startMain);
finish();
}
});
b.setPositiveButton("NO", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
b.create().show();
}
});
}


Màn hình 2:
10


ĐỒ ÁN I-SỐ GIẢ NGẪU NHIÊN
public class Man_Hinh_Chinh extends AppCompatActivity {
TableLayout t2;
TableRow tr21,tr22,tr23,tr24,tr25;
TextView tv21,tv22,tv23;
EditText et21;
Button bt21,bt22;
int x,y,b;
long i,j,k;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_man__hinh__chinh);
t2 = (TableLayout) findViewById(R.id.tableLayout2);
tr21 = (TableRow) findViewById(R.id.tableRow21);
tr22 = (TableRow) findViewById(R.id.tableRow22);
tr23 = (TableRow) findViewById(R.id.tableRow23);
tr24 = (TableRow) findViewById(R.id.tableRow24);
tv21 = (TextView) findViewById(R.id.textViewSGNN2);
tv22 = (TextView) findViewById(R.id.textViewCauHoi);
tv23 = (TextView) findViewById(R.id.textViewKetQua);
et21 = (EditText) findViewById(R.id.editTextChuSo);
bt21 = (Button) findViewById(R.id.buttonOk);
bt22 = (Button) findViewById(R.id.buttonBack);
bt22.setOnClickListener(new View.OnClickListener() {
@Override

public void onClick(View v) {
Intent t2 = new Intent(Man_Hinh_Chinh.this,
MainActivity.class);
startActivity(t2);
}
});
j=System.nanoTime();
bt21.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SoChuSo();
ngaunhien();
String u=String.valueOf(k);
if(x>0&&y>0) {
String a = u.substring(x, y);
tv23.setText(a);
}
else tv23.setText("Nhập số từ 1 đến 9.Xin nhập lại!");
}
});
}
public void SoChuSo()
{
b=Integer.parseInt(et21.getText().toString());
switch (b) {
case 1:
x=8;
y=9;
break;
case 2:

x = 5;
y = 7;
break;

11


ĐỒ ÁN I-SỐ GIẢ NGẪU NHIÊN
case 3:
x = 5;
y = 8;
break;
case 4:
x = 5;
y = 9;
break;
case 5:
x = 6;
y = 11;
break;
case 6:
x = 5;
y = 11;
break;
case 7:
x = 4;
y = 11;
break;
case 8:
x = 3;

y = 11;
break;
case 9:
x = 3;
y = 12;
break;
default:
x=0;
y=0;
break;
}
}
public long ngaunhien()
{
i=System.nanoTime();
k=220895*(i-j);
return k;
}

CHƯƠNG 5: THỬ NGHIỆM
5.1 Kiểm tra sự chính xác của thuật toán thuật toán
-Thuật toán kiểm tra
+Giả sử cần tạo số giả ngẫu nhiên có 2 chữ số.
+Thực hiện thuật toán 100000 lần.
+Đếm số lần xuất hiện của các số từ 0->99.
+Số lần xuất hiện của các số trên là như nhau
thuật toán đúng.
+Ngược lại thuật toán sai.
-Kết quả kiểm tra thuật toán
+Số lần xuất hiện của các số giao động trong khoảng

12


ĐỒ ÁN I-SỐ GIẢ NGẪU NHIÊN

950 đến 1050.
-Kết luận:Thuật toán đúng.
-Đồ thị minh họa:

Trong đó:
+Trục hoành là các số từ 1->99.
+Trục tung là số lần xuất hiện của các số tương
ứng.
5.2 Kiểm tra phần mềm
-Hình ảnh phần mềm:

13


ĐỒ ÁN I-SỐ GIẢ NGẪU NHIÊN

KẾT LUẬN:
-Qua quá trình thực hiện chúng em đã hiểu rõ hơn về phương thức tạo số
giả ngẫu nhiên,biết cách sử dụng các phần mềm Android Studio và ngôn ngữ lập
trình Java trong android,do thời gian có hạn nên phần mềm của chúng em vẫn còn
nhiều thiếu sót và chưa có nhiều ứng dụng,rất mong nhận được sự giúp góp ý của
thầy cô để chúng em tiếp tục phát triển những ứng dụng của phần mềm
Em xin chân thành cảm ơn!

PHỤ LỤC

TÀI LIỆU THAM KHẢO
1. />%E1%BA%ABn_th%E1%BB%B1c_h%C3%A0nh_Android
14


ĐỒ ÁN I-SỐ GIẢ NGẪU NHIÊN

2. />
15



×