1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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.

52 407 1

Đ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

Định dạng
Số trang 52
Dung lượng 1,02 MB

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

Nội dung

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 Andr

Trang 1

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

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 -

THÁNG 07 / NĂM 2011

1

Trang 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ọcchạ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

+ 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

2

Trang 3

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, 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 ơnKhoa Khoa Học Công Nghệ

3

Trang 4

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

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

4

Trang 5

MỤC LỤC

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC HOA SEN 1

LỜI CẢM ƠN 3

NHẬP ĐỀ 4

MỤC LỤC 5

MÔ TẢ YÊU CẦU ĐỀ TÀI 5

YÊU CẦU ĐỒ ÁN 6

NỘI DUNG BÁO CÁO 9

THUẬT TOÁN CHUYÊN DỤNG 9

Calculator: 9

Smartphone: 9

Sơ lược hệ điều hành Android: 9

PHÂN TÍCH CHƯƠNG TRÌNH 10

Mô tả chức năng 10

LƯU ĐỒ KÍ PHÁP BALAN 13

LƯU ĐỒ THUẬT TOÁN ĐỘ ƯU TIÊN 19

LƯU ĐỒ GIẢI THUẬT CỘNG, TRỪ 24

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 24

Lưu đồ giải thuật phép cộng 26

Đánh giá kết quả 48

NHỮNG KỶ THUẬT VÀ HƯỚNG MỞ RỘNG CỦA CHƯƠNG TRÌNH 50

Những kĩ thuật và công nghệ đã áp dụng trong chương trình 50

Hướng mở rộng chương trình 50

KẾT LUẬN 51

TÀI LIÊU THAM KHẢO

52

MÔ TẢ YÊU CẦU ĐỀ TÀI

5

Trang 6

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 fixed-point 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 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

6

Trang 7

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:

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í 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)

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)

Trang 8

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

8

Trang 9

NỘI DUNG BÁO CÁO

THUẬT TOÁN CHUYÊN DỤNG

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

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

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

9

Trang 10

PHÂN TÍCH CHƯƠNG TRÌNH

Mô tả chức năng

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:

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

10

Trang 11

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)

Pop cho đến khi

lấy được (, ghi

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)

11

Trang 12

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

12

Trang 13

LƯU ĐỒ KÍ PHÁP BALAN

void Convert() START

Trang 14

2 3 1

case 2 phep toan 2 hang tu +,- Co muc uu tien thap

nhu sin, cos, tan, cac hang so

break;

Yes

Yes Yes

Trang 16

9 10 11 12 13 8

Trang 17

15 16 17 14

mk_s(x1,'C');

pushStack(x1);

i+=3;

baoloi("Syntax error : ham khong duoc khai bao !") break;

Trang 18

Chức năng cộng, trừ , nhân, chia:

Để cộng trừ nhân chia ta dùng hàm Priority(char x) với giá trị return=0 để kiểm tra toán hạng, Priority (char x) với giá trị return =2 cho toán tử ‘+’ và ‘-‘ giá trị return = 1 cho toán tử ‘*’ và ‘/’ để so sánh độ ưu tiên toán tử cuối cùng chuyển sang dạng hậu tố bằng hàm Convert () và tính kết quả bằng hàm tinhtoan()

18

Trang 19

LƯU ĐỒ THUẬT TOÁN ĐỘ ƯU TIÊN

Trang 20

Cộng, trừ:

Cho biểu thức: 2 – (3.1 + 2) Sau khi chuyển sang hậu tố bằng hàm Convert(); sẽ có dạng:

2 3.1 2+- Dùng hàm Pushstacktinh() để chuyển các toán hạng và các toán tử vào 2 mảng

number[] và queueChar[] và ta sẽ được như sau:

number[]={2,31,2}

queueChar[]={-0,-,-1,+,-2}

Mảng number[] chứa các toán hạng

Mảng queueChar[] chứa các toán tử

a + -b  a - b-a + -b  a +b (dấu trừ thêm vào kết quả sau)

Sau đó thực hiện phép cân bằng hai mảng a và b với hàm char *check_balance(char x[],char y[]); nhằm cân bằng hai mảng

03.45+ 65.20

Sau đó lần lượt cộng hay trừ từng phần tử tùy thuộc vào trường hợp từ 2 mảng vào mảng kq[] bằng hàm char *cong(char x[],char y[]) hoặc char *tru(char x[],char y[]) trong trường hợp này dung char *cong(char x[],char y[]) ta được kết quả:

68.65Nếu trường hợp không cần thêm dấu trừ thì bỏ qua giao đoạn thêm dấu trừ sau đó

20

Trang 21

double so1, so2, kq;

sl = ss(st1, st2); // so sanh vi tri cua dau cham dong

a - -b a + b-a - -b b - a (dấu trừ thêm vào kết quả sau)

Sau đó thực hiện phép cân bằng hai mảng a và b với hàm check_balance(); nhàm cân bằng hai mảng

03.45

- 65.20

21

Trang 22

Sau đó lần lượt cộng hay trừ từng phần tử tùy thuộc vào trường hợp từ 2 mảng vào mảng kq[] bằng hàm char *cong(char x[],char y[]) hoặc char *tru(char x[],char y[]) trong trường hợp này dùng char *tru(char x[],char y[])

Tại Hàm Char * tru, so Sánh từng phần tử [i] ở 2 mảng a và b nếu a[i]<b[i] thì sẽ hoán đổi vị trí và kết thúc quá trình trừ 2 mảng kết quả sẽ được thêm dấu ‘-‘ :

65.20

- 03.45

Kiểm Tra 2 chuỗi có phải số 0.0 hay không nếu một trong hai số là số 0.0 thì kết quả

sẽ trả về giá trị còn lại mà không cần qua bước tính toán :

double so1, so2, kq;

sl = ss(st1, st2); // so sanh vi tri cua dau cham dong

Trang 24

LƯU ĐỒ GIẢI THUẬT CỘNG, TRỪ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

Trang 25

I 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

Yes

Yes

Yes Yes

Trang 26

Lưu đồ giải thuật phép cộng

Trang 27

II Lưu đồ giải thuật phép trừ

atoi(c1)>atoi(c2) break;

Yes Yes

Yes Yes

Yes

dem=0;

s1[t]=='0' thieu+=1

Ngày đăng: 11/04/2016, 12:02

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w