BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC HOA SEN
KHOA HỌC VÀ CÔNG NGHỆ
Tên đề tài: Xây Dựng Phần Mềm Ứng Dụng Máy Tính Khoa Học
cho Điện Thoại Cầm Tay Thông Minh chạy trên hệ điều hành
Android.
Giảng viên hướng dẫn : Nguyễn Anh Tuấn
Lớp
: QL091A
Thời gian thực hiện
: Tuần 1 đến tuần 15 học kỳ
10.2A
Nhóm sinh viên thực hiện : Nguyễn Hải Triều - 093602
: Trần Thị Kim Hiền - 091544
: Dương Xuân Phúc -
1
THÁNG 07 / NĂM 2011
2
TRÍCH YẾU
Tên đề tài:
Xây Dựng Phần Mềm Ứng Dụng Máy Tính Khoa Học
(Scientific Calculator) cho Điện Thoại Cầm Tay Thông Minh
(Smart Phone) chạy trên hệ điều hành Android.
Mục tiêu chính:
Phân tích và xây dựng thành công phần mềm ứng dụng máy tính
khoa học cho điện thoại cầm tay thông minh chạy trên nền giả lập
Android SDK.
Yêu cầu sinh viên:
- Học môn lập trình hướng đối tượng, cấu trúc dữ liệu, và giải
tích.
- Chịu khó học hỏi.
- Khả năng làm việc nhóm.
Phương pháp nguyên cứu:
Nghiên cứu công việc dưới sự hướng dẫn và giám sát của giảng
viên trường đại học Hoa Sen, được phép nghiên cứu các tài liệu liên
quan trong quá trình thực hiện đồ án.
Kết quả đạt được:
1. Tập thể nhóm:
+ Phân tích rõ các module chức năng của máy tính khoa
học.
+ Xây dựng thành công phần mềm ứng dụng của máy tính
khoa học
chạy trên điện thoại cầm tay thông minh.
+ Update lên điện thoại thông minh thật có nền giả lập
Android SDK và chạy thành công.
2. Cá nhân:
+ Nâng cao khả năng viết code.
3
+ Nâng cao khả năng phân tích và giải pháp giải quyết
vấn đề.
+ Nâng cao khả năng làm việc nhóm của từng thành viên.
LỜI CẢM ƠN
Trong quá trình thực hiện đồ án giúp nhóm chúng tôi có được
những kiến thức thực tế cần thiết .
Chúng tôi xin chân thành cảm ơn các thầy cô của khoa Khoa
Học Công Nghệ đặc biệt là các thầy cô của ngành Công Nghệ Thông
Tin trường Đại Học Hoa Sen đã tạo cơ hội cho chúng tôi thực hiện đồ
án. Qua đây, chúng tôi xin cảm ơn các thầy, cô khoa Khoa Học Công
Nghệ đã tận tình giảng dạy cho tôi biết những kiến thức chủ yếu, để
chúng tôi có nền tảng tốt cho công việc sau này.
Cuối cùng, chúng tôi rất cảm ơn thầy Nguyễn Anh Tuấn trong
suốt quá trình thực hiện đồ án đã giúp đỡ và tận tình giảng dạy cho
chúng tôi những kiến thức mới.
Khi hoàn thành được bài báo cáo này đã trải qua khoảng thời
gian làm việc cùng với các thành viên trong nhóm.Thật sự, đây là một
khoảng thời gian ngắn để chúng tôi thể hiện tinh thần làm việc nhóm,
4
vận dụng những kiến thức đã học để hoàn thành công việc một cách
tốt nhất.
Xin chân thành cảm ơn
Khoa Khoa Học Công Nghệ
NHẬP ĐỀ
Sau thời gian học tập và trau dồi kiến thức thì giờ đây là giai
đoạn tốt nhất để mỗi một người trong nhóm chúng tôi có thể áp dụng
những kiến thức đã học để vận dụng vào đề tài mà trường đã giao cho
chúng tôi làm. Đây cũng là giai đoạn để thấy rõ khả năng tiếp thu,
nắm vững kiến thức của mình ở mức độ nào.
5
Mục tiêu của giảng viên đặt ra cho chúng tôi là:
Làm quen với cách thức làm việc theo nhóm.
Nắm vững và lập trình thành thạo với Java trên nền
Android.
Dùng Java trên nền Android thiết kế “Scientific
Calculator”.
Bên cạnh đó mục tiêu của nhóm chúng tôi đặt ra là:
Từ đề tài này có thể mở rộng ra và ứng dụng cho các đề tài
khác có liên quan.
6
MỤC LỤC
TRÍCH YẾU...........................................................................................1
LỜI CẢM ƠN.........................................................................................2
NHẬP ĐỀ................................................................................................3
MỤC LỤC..............................................................................................4
MÔ TẢ YÊU CẦU ĐỀ TÀI...................................................................5
YÊU CẦU ĐỒ ÁN.................................................................................6
NỘI DUNG BÁO CÁO..........................................................................8
I. THUẬT TOÁN CHUYÊN DỤNG...............................................8
1. Calculator:....................................................................................8
2. Smartphone:.................................................................................8
3. Sơ lược hệ điều hành Android:...................................................8
II. PHÂN TÍCH CHƯƠNG TRÌNH...................................................9
1. Mô tả chức năng..........................................................................9
LƯU ĐỒ KÍ PHÁP BALAN................................................................12
LƯU ĐỒ THUẬT TOÁN ĐỘ ƯU TIÊN............................................18
LƯU ĐỒ GIẢI THUẬT CỘNG, TRỪ................................................22
I. Lưu đồ giải thuật đưa các trường hợp đặc biệt của cộng trừ thành
dạng đơn giản.....................................................................................22
II. Lưu đồ giải thuật thực hiện việc cân bằng số chữ số đàng trước
vào sau dấu chấm động......................................................................23
III. Lưu đồ giải thuật phép cộng.....................................................24
IV. Lưu đồ giải thuật phép trừ.........................................................25
V. Đánh giá kết quả........................................................................46
- Hàm căn bậc hai phục vụ cho giải phương trinh bậc 2...............47
III. NHỮNG KỶ THUẬT VÀ HƯỚNG MỞ RỘNG CỦA
CHƯƠNG TRÌNH.............................................................................48
1. Những kĩ thuật và công nghệ đã áp dụng trong chương trình. 48
2. Hướng mở rộng chương trình...................................................48
KẾT LUẬN...........................................................................................49
TÀI LIÊU THAM KHẢO....................................................................50
7
MÔ TẢ YÊU CẦU ĐỀ TÀI
Gần đây điện thoại cầm tay thông minh đã trở thành một vật hầu
như “cần phải có” trong cuộc sống hằng ngày của giới làm việc “trí
thức”. Viết phần mềm tiện ích nâng cao giá trị sử dụng cho chúng
cũng trở nên một trào lưu cho các công ty phát triển phần mềm, các
giới lập trình viên chuyên nghiệp cũng như không chuyên.Đặc biệt là
những ứng dụng cho máy chạy trên hệ điều hành Android.
Điểm cần lưu ý là trong phần cứng (hardware) của đa số điện
thoại cầm tay không có bộ xử lý tính dấu phẩy động (floating-point
processor). Điều này làm việc phát triển phần mềm cho chúng trở nên
phức tạp và lý thú hơn. Cũng nên biết rằng rất nhiều ứng dụng phần
mềm đòi hỏi phép tính dấu phẩy động (bề ngoài tưởng là không cần
thiết), ví dụ như tính toán các phần cong (curves) cho các phong chữ
DGOPSWY… Để xử lý số thực SV sẽ tìm hiểu và áp dụng fixedpoint vào tất cả phép tính toán.
Phần mềm máy tính bao giờ cũng được cài đặt sẵn trong bất cứ
điện thoại cầm tay nhưng chỉ dừng lại ở mức độ cơ bản như cộng trừ
nhân chia, trong khi đó mức nhu cầu sử dụng của giới làm việc “trí
thức” cao hơn, ở mức độ của máy tính khoa học.
Đề tài “Xây Dựng Phần Mềm Ứng Dụng Máy Tính Khoa Học
cho Điện Thoại Cầm Tay Thông Minh chạy trên hệ điều hành
8
Android” nhằm nâng cao kỹ năng lập trình, cũng như phân tích, thiết
kế và xây dựng một ứng dụng thực tiển cho sinh viên từ những yêu
cầu được phân tích như trên. Xây dựng được một phần mềm ứng
dụng như một máy tính khoa học thực thụ sẽ không đơn giản. Cho
nên mức độ yêu cầu của đề tài chỉ bao gồm những phép toán và hàm
đơn giản. Đồng thời ứng dụng được giới hạn chỉ cho máy điện thoại
cầm tay thông minh do màn hình (lớn, cảm ứng, …) của chúng sẽ cho
phép thiết kế và xây dựng một giao diện phức tạp đa năng, và bộ xử lý
của chúng đủ mạnh để tính toán bài toán phức tạp (phát sinh từ việc
không có bộ xử lý tính dấu phẩy động) nhằm đáp ứng được yêu cầu
của đề tài.
YÊU CẦU ĐỒ ÁN
1. Xây dựng được giao diện (graphics interface) cho ứng dụng trên
nền tảng Android tương tự như hình sau:
9
2. Nhập và xử lý biểu thức:
a. Cho phép nhập biểu thức dùng dạng mẩu (inputting
expression using standard format) như của một máy tính
khoa học thực sự. Ví dụ có thể nhập biểu thức:
2*(3.6 + log(5 + 3÷4.1) – sin(29.7)) – e2.7
b. Nhập hàm: tự động thêm dấu ngoặc mở khi nhập hàm. Ví
sin
dụ nhấn hàm sẽ thể hiện sin( trong biểu thức
c. Cho phép bỏ dấu nhân (*) trong các trường hợp sau:
i. Trước dấu ngoặc mở ‘(‘. Ví dụ: 2*(3.6 + 5.6) →
2(3.6 + 5.6)
ii. Trước hàm có dấu ngoặc mở: 2.0*sin(30) →
2.0sin(30)
iii. Trước một biến số, hằng số: 2A, 2y, 2π, …
d. Sửa chửa biểu thức: có thể di chuyển con trỏ (cursor) để
xóa/thêm trên biểu thức
3. Các phép tính cơ bản cộng +, trừ -, nhân *, chia ÷
4. Các phép tính với các hàm: x2, x3, 1/x, n!, ln (log cơ số e), log
(log cơ số 10), 10x, ex, sin, cos, tan, Abs, xy, sinh, cosh, tanh
5. Các phép tính với các hàm: sin-1, cos-1, tan-1, sinh-1, cosh-1, tanh-1
6. Có thể dùng degree hay radians cho các hàm lượng giác
(trigonometry)
10
7. Các phép tính dựa trên nền sáu mươi (sexagesminal) của độ,
phút, giây.
8. Các phép tính cơ bản cho Base-N (hex, dec, oct, bin)
9. Giải các phương trình:
a. Ax + B = 0
b. Ax2 + Bx + C = 0
10.
Giải hệ hai phương trình với hai ẩn số
11.
Gọi và dùng lại nội dung của (ít nhất năm) biểu thức tính
toán cũ
12.
Biểu thị kết quả:
a. Dạng số thập phân (decimal number), ví dụ 100÷7 =
14.2857142857142857142. Có thể xác định số chữ số thập
phân (decimal place) của kết quả, ví dụ 100÷7 = 14.286
với 3 chữ số thập phân
b. Dạng số khoa học (scientific number) ví dụ 100÷7 =
1.42857142857142857142E+01. Đồng thời cũng có thể
xác định số chữ số có nghĩa (significant digits) của kết
quả, ví dụ 100÷7 = 1.4286E+01 với 5 số chữ số có nghĩa
13.
Hướng dẫn sử dụng
11
NỘI DUNG BÁO CÁO
I.
THUẬT TOÁN CHUYÊN DỤNG
1. Calculator:
Microsoft Calculator, hay còn gọi là Calculatortheo tiêu đề mà
chương trình hiển thị, là một ứng dụng tính toán đi kèm trong tất
cả các phiên bản của hệ điều hành Microsoft Windows. Chương
trình có thể kích hoạt bằng lệnh "calc" trên phần lớn hệ thống
Windows
2. Smartphone:
Smartphone, hay còn gọi là điện thoại thông minh, là sự kết hợp
của một chiếc điện thoại và một PDA. Smartphone ưu việt hơn
điện thoại thông thường ở chỗ nó được tích hợp thêm các tính
năng văn phòng hỗ trợ người dùng. Ngoài ra, nếu so với PDA
phone thì smartphone lại có tính ổn định về chức năng thoại và kết
nối mạng tốt hơn
12
3. Sơ lược hệ điều hành Android:
Android là hệ điều hành trên điện thoại di động (và hiện nay là cả
trên một số đầu phát HD, HD Player) phát triển bởi Google và dựa
trên nền tảng Linux. Trước đây, Android được phát triển bởi công
ty liên hợp Android ( sau đó được Google mua lại vào năm 2005).
Theo NPD, thiết bị di động sử dụng hệ điều hành android bán
được tại Mỹ trong quý II năm 2010 xếp vị trí đầu tiên với 33%,
thứ 2 là BB os với 28% và iOS ở vị trí thứ 3 với 22%. Android có
một cộng đồng những nhà phát triển rất lớn viết các ứng dụng cho
hệ điều hành của mình.Hiện tại có khoảng 70,000 ứng dụng cho
Android os và vào khoảng 100,000 ứng dụng đã được đệ trình,
điều này khiến Android trở thành hệ điều hành di động có môi
trường phát triển lớn thứ 2. Các nhà phát triển viết ứng dụng cho
Android dựa trên ngôn ngữ Java. Sự ra mắt của Android vào ngày
5 tháng 11 năm 2007 gắn với sự thành lập của liên minh thiết bị
cầm tay mã nguồn mở, bao gồm 78 công ty phần cứng, phần mềm
và viễn thông nhằm mục đính tạo nên một chuẩn mở cho điện
thoại di động trong tương lai. Google công bố hầu hết các mã
nguồn của Android theo bản cấp phép Apache. Hệ điều hành
Android bao gồm 12 triệu dòng mã; 3 triệu dòng XML, 2.8 triệu
dòng mã C, 2.1 triệu mã Java và 1.75 triệu dòng mã C++
13
II.
PHÂN TÍCH CHƯƠNG TRÌNH
1. Mô tả chức năng
a. Chức năng xử lý biểu thức:
Giới thiệu
Bình thường, để viết một biểu thức tổng 2 số, ta viết a + b. Cách viết
này gọi là trung tố (infix). Bởi vì dấu + (ta gọi là toán tử) nằm ở giữa
a, b (toán hạng). Một biểu thức phức tạp hơn có thể ở dạng (a + b) * c.
Ký pháp Nghịch đảo Ba Lan (Reversed Polish Notation - RPN) là
dạng biểu thức hậu tố (postfix), nghĩa là toán tử nằm sau toán hạng.
Theo đó, biểu thức a + b viết thành a b +; biểu thức (a + b) * c sẽ viết
thành a b + c *.
Phương pháp này giúp loại bỏ dấu ngoặc trong các biểu thức, cũng
như không phải lưu ý tới mức ưu tiên toán tử (operator precedence).
RPN là một phương tiện tốt giúp máy tính "đọc" được các biểu thức
toán học, từ đó tính ra giá trị.
Vậy, khi ta nhập một biểu thức toán vào một chương trình tính giá trị
biểu thức, nó sẽ chuyển biểu thức về dạng RPN, sau đó mới tính toán.
Toán tử nhị phân & Toán tử đơn phân:
Một toán tử gọi là nhị phân khi nó tác động lên 2 toán hạng, vậy cộng
(+), trừ (-), nhân ( *), chia (/) và lũy thừa (^) là toán tử nhị phân. Một
toán tử gọi là đơn phân khi nó chỉ tác động lên 1 toán hạng, vậy dấu
âm (-) dương (+) là toán tử đơn phân.
Trình tự chuyển đổi
Trước hết là tạo ba mảng chuỗi, đặt tên là number, queueChar và
Stack. Number chứa các toán tử,queueChar chứa các toán tử và và vị
trí các toán hạng trong và sau lúc chuyển đổi. Stack tạm thời chứa các
toán tử trong lúc chờ đưa vào queueChar.
Ta theo một vòng lặp từ đầu cho tới cuối biểu thức, như sau:
14
Nếu gặp toán hạng, push vào number và push vị trí của toán hạng đó
vào queueChar.
Nếu gặp dấu "(", push vào Stack.
Nếu gặp dấu ")", lần lượt pop các toán tử trong Stack vào queueChar
cho tới khi gặp dấu "(", bấy giờ pop dấu "(" ấy bỏ đi.
Nếu gặp toán tử, tạm gọi là opCurrent, kiểm tra xem toán tử trên cùng
của Stack có mức ưu tiên cao hơn hoặc bằng opCurrent hay không.
Nếu có thì pop nó rồi push vào queueChar, cứ vậy hoài cho tới khi
gặp một toán tử có mức ưu tiên nhỏ hơn opCurrent, hoặc khi Stack
trống rỗng, thì dừng, bấy giờ push opCurrent vào Stack. Mức ưu tiên
toán tử (thấp lên cao): dấu ngoặc < cộng, trừ < nhân chia < lũy thừa <
dấu âm/dương (cộng trừ đơn phân).
Cuối cùng, lần lượt pop các phần tử trong Stack và push vào
queueChar cho tới hết.
Ví Dụ: Biểu thức cần chuyển đổi: 3+4*2/(1-5)
Chuỗi
kí tự
3
+
4
*
2
/
Thao tác
Ghi 3 vào
number
Push + vào
Stack
Ghi 4 vào
number
Push * vào
Stack
Ghi 2 vào
number
Lấy * ra khỏi
stack, ghi
vào
queueChar,
Stack
number queueChar
Chuỗi
hậu tố
3
-0
3
+
3
-0
3
+
34
-0 -1 -2
34
34
-0 -1 -2
34
342
-0 -1 -2
342
342
-0 -1 -2 *
342*
+
*
+
*
+
/
15
(
1
5
)
push /
Push (vào
Stack
Ghi 1 vào
number
+
/(
+
/(
+
Push - vào
/(
Stack
+
Ghi 5 vào
/ (
number
Pop cho đến
khi lấy được
(, ghi các +
toán tử pop /
được ra
number
Pop tất cả
các toán tử
ra khỏi Stack
và ghi vào
queueChar
342
-0 -1 -2 *
342*
3 4 2 1 -0 -1 -2 * -3 3 4 2 * 1
3 4 2 1 -0 -1 -2 * -3 3 4 2 * 1
3 4 2 1 5-0 -1 -2 * -3 -4
342*1
5
342*1
3 4 2 1 5-0 -1 -2 * -3 -4 5-
-0 -1 -2 * -3 -4 3 4 2 * 1
34215
-/+
5-/+
Trình tự tính toán
Tạo một ngăn xếp nữa gọi là StackTinh.
Xét từng phần tử của queueChar, từ thấp lên cao (từ đầu về cuối).
Nếu gặp toán hạng thì push vào StackTinh.
Nếu gặp toán tử nhị phân, pop hai phần tử từ StackTinh, thực hiện
phép toán, push kết quả trở lại StackTinh.
Nếu gặp toán tử đơn phân, pop một phần tử từ StackTinh, thực hiện
phép toán, push kết quả trở lại StackTinh.
Kết quả cuối cùng là phần tử trên cùng của StackTinh.
16
17
LƯU ĐỒ KÍ PHÁP BALAN
18
19
20
- Xem thêm -