CHƯƠNG 1: MỞ ĐẦU1.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ệ
Trang 1Trườ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
Hà Nội, 11/2015
Trang 2Lờ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
1
Trang 3MỤ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
Trang 4CHƯƠ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
3
Trang 5CHƯƠNG 2: GIỚI THIỆU VỀ CÔNG NGHỆ
2.1 Ngôn ngữ lập trình
a Ngôn ngữ JAVA
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
Trang 6Edition”, 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
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
5
Trang 7CHƯƠ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
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= "http://schemas.android.com/apk/res/android" xmlns:tools= "http://schemas.android.com/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">
<TableLayout
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:id= "@+id/tableLayout1"
android:background= "#ffff88">
<TableRow
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:background= "#4b4fff"
android:id= "@+id/tableRow">
<TextView
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:textAppearance= "?android:attr/textAppearanceLarge"
Trang 8android:text= "SỐ GIẢ NGẪU NHIÊN"
android:id= "@+id/textViewSGNN"
android:layout_marginLeft= "30dp" />
</TableRow>
<TableRow
android:layout_width= "30dp"
android:layout_height= "30dp"
android:layout_marginTop= "110dp"
android:id= "@+id/tableRow1">
<Button
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:text= "BẮT ĐẦU"
android:id= "@+id/buttonBatDau"
android:layout_marginLeft= "70dp" />
</TableRow>
<TableRow
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:layout_marginTop= "50dp"
android:id= "@+id/tableRow2">
<Button
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= "http://schemas.android.com/apk/res/android" xmlns:tools= "http://schemas.android.com/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">
<TableLayout
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:id= "@+id/tableLayout2"
android:background= "#fffe82">
<TableRow
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:background= "#7860ff"
android:id= "@+id/tableRow21">
<TextView
7
Trang 9android: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>
<TableRow
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:layout_marginTop= "30dp"
android:id= "@+id/tableRow22">
<TextView
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>
<TableRow
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:id= "@+id/tableRow23"
android:layout_marginTop= "30dp">
<EditText
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>
<TableRow
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:id= "@+id/tableRow24">
<Button
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:text= "OK"
android:id= "@+id/buttonOk"
android:layout_marginRight= "200dp" />
</TableRow>
<TextView
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"
Trang 10android:layout_marginRight= "70dp"
android:layout_marginTop= "30dp"
android:textSize= "15dp" />
<Button
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:
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) {
9
Trang 11Intent 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:
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();