chỨc nĂng cỘng,trỪ

18
CHỨC NĂNG CỘNG,TRỪ CHỨC NĂNG CỘNG,TRỪ NHÓM 07 1.Nguyễn Minh Đặng 2.Nguyễn Văn Hải Đăng 3.Nguyễn Ngọc Tuyết Trinh 4.Trần Hoàng Giang 1

Upload: jabir

Post on 13-Jan-2016

82 views

Category:

Documents


2 download

DESCRIPTION

CHỨC NĂNG CỘNG,TRỪ. NHÓM 07 Nguyễn Minh Đặng Nguyễn Văn Hải Đăng Nguyễn Ngọc Tuyết Trinh Trần Hoàng Giang. MÔ TẢ CHỨC NĂNG. Cho phép thực hiện chức năng cộng , trừ , nhân , chia . - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: CHỨC NĂNG CỘNG,TRỪ

CHỨC NĂNG CỘNG,TRỪCHỨC NĂNG CỘNG,TRỪ

NHÓM 07

1.Nguyễn Minh Đặng

2.Nguyễn Văn Hải Đăng

3.Nguyễn Ngọc Tuyết Trinh

4.Trần Hoàng Giang

1

Page 2: CHỨC NĂNG CỘNG,TRỪ

MÔ TẢ CHỨC NĂNGMÔ TẢ CHỨC NĂNGCho phép thực hiện chức năng cộng, trừ, nhân,

chia.Cộng, trừ, nhân, chia phải được thực hiện trên

mọi con số. Từ số nhỏ đến số lớn (số có nhiều chữ số). Để tính toán được trên số lớn thì phải xét đầu vào là một chuỗi và kết quả trả về cũng là một chuỗi các chữ số.

Thực hiện được các phép toán cộng, trừ, nhân, chia cơ bản là điều tất yếu của một máy tính khoa học thực. 2

Page 3: CHỨC NĂNG CỘNG,TRỪ

Ví dụ: Ta có thể tính được các phép tính sau:

a) 123245323465776544+3445365676723

b) 32432424232/1232

c) 65645656767575*85739892892922Để 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(). 3

Page 4: CHỨC NĂNG CỘNG,TRỪ

MÔ TẢ CHỨC NĂNGMÔ TẢ CHỨC NĂNG 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ử.

4

Page 5: CHỨC NĂNG CỘNG,TRỪ

Ta sẽ thêm kí tự ‘0’ vào đầu hai chuỗi số thực nếu phần nguyên của hai chuỗi số thực không bằng nhau.

Thêm kí tự ‘0’ vào cuối hai chuỗi số thực nếu phần thập phân của hai chuỗi số thực không bằng nhau.

Ví dụ: 656.7 656.700

+ 5.124 + 005.124 Thực hiện cộng giá trị của từng phần tử ở hai chuỗi số thực

lại với nhau, bắt đầu từ phần tử nằm ở vị trí cuối cùng của hai chuỗi số thực, lần lượt cộng đồng thời gán giá trị nhớ vào một biến nhớ như phép cộng tay và lưu giá trị tính được vào kết quả, nếu gặp dấu “.” thì thêm dấu “.” vào kết quả

Cộng (a+b)Cộng (a+b)

5

Page 6: CHỨC NĂNG CỘNG,TRỪ

6

• Theo phép cộng, phải thực hiện cộng từ hàng đơn vị trở về trước do đó cho 1 biến i chạy ngược từ cuối chuỗi về đầu chuỗi.

• Thực hiện phép cộng bình thường cho 2 phần tử của 2 chuỗi nếu:Kết quả cộng 2 phần tử <10, ghi vào kết quả và lưu biến nhớ = 0Kết quả cộng 2 phần tử >10, ghi số ở hàng đơn vị vào kết quả và lưu biến nhớ = 1Tiếp tục thực hiện phép cộng và cộng thêm biến nhớ, làm cho đến khi đến đầu chuỗi.Ở đầu chuỗi thì kết quả ra bao nhiêu thì ghi vào kết quả không cần nhớ.

Page 7: CHỨC NĂNG CỘNG,TRỪ

Khi gặp phép “+” 2 toán hạng sẽ được chuyển vào 2 chuỗi bằng hàm pushStackTinh(char x[]);  Vd:

3.45 + 65.2

Number [n][] = [‘3’,’.’,’4’,’5’]và

Number[n+1][]= [‘6’,’5’,’.’,’2’]

7

Page 8: CHỨC NĂNG CỘNG,TRỪ

8

Với phép cộng ta có 4 trường hợp, cần phải đưa về dạng đơn giản nhất đó là a+b hoặc a-b

a + b a + b-a + b b - a a + -b a - b-a + -b a + b (dấu trừ thêm vào

kết quả sau)

Page 9: CHỨC NĂNG CỘNG,TRỪ

9

• 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 dùng char *cong(char x[],char y[]) ta được kết quả: 68.65

•  Nếu trường hợp không cần thêm dấu trừ thì bỏ qua giai đoạn thêm dấu trừ sau đó hàm trả về chuỗi kq

Page 10: CHỨC NĂNG CỘNG,TRỪ

10

Trừ (a-b)Trừ (a-b)• Trước khi thực hiện phép trừ, thực hiện cân bằng

chiều dài của hai chuỗi số thực bằng cách thêm kí tự ‘0’ vào đầu (hoặc cuối) hai chuỗi kí tự số thực trong hai trường hợp sau: Ta sẽ thêm kí tự ‘0’ vào đầu hai chuỗi số thực

nếu phần nguyên của hai chuỗi số thực không bằng nhau.

Thêm kí tự ‘0’ vào cuối hai chuỗi số thực nếu phần thập phân của hai chuỗi số thực không bằng nhau.

Ví dụ : 656.7 656.700 - 5.124 - 005.124

Page 11: CHỨC NĂNG CỘNG,TRỪ

11

• Thực hiện so sánh hai chuỗi số thực, nếu số nào lớn hơn thì lấy số đó trừ số nhỏ hơn và đồng thời xét dấu của kết quả là âm.

• Thực hiện trừ từng phần tử giữa số trừ và số bị trừ, bắt đầu từ phần tử ở vị trí cuối cùng của hai chuỗi.

• Thực hiện trừ cho đến hết phần tử ở vị trí đầu tiên như phép trừ tay, đồng thời gán giá trị nhớ vào một biến nhớ và lưu giá trị thu được vào kết quả, sau đó sửa lại kết quả nếu dư 0 ở đầu và cuối của chuỗi kết quả, xét vị trí dấu chấm thập phân và lưu dấu chấm vào kết quả.

Page 12: CHỨC NĂNG CỘNG,TRỪ

12

Chuỗi a >= chuỗi b:•Thực hiện theo đúng từng cột•Cho biến i chạy ngược từ cuối chuỗi trở về đầu chuỗi•Thực hiện phép trừ cho 2 phần tử của 2 chuỗi và trừ thêm biến nhớ.•Số bị trừ lớn hơn thì thực hiện phép trừ và lưu biến nhớ = 0•Ngược lại thì lấy số bị trừ cộng thêm cho 10 rồi thực hiện phép trừ và lưu biến nhớ = 1.•Tiếp tục thực hiện phép trừ làm cho đến khi đến đầu chuỗi.•Ở phần tử đầu chuỗi thì ghi kết quả vào chuỗi kết quả không cần lưu biến nhớ nữa.Chuỗi b > chuỗi a: •Lấy chuỗi b trừ chuỗi a•Thực hiện các bước tương tự như trên. •Trước khi return chuỗi kết quả thì thêm dấu – vào trước chuỗi kết quả.

Page 13: CHỨC NĂNG CỘNG,TRỪ

13

Với phép toán trừ khi gặp phép “-” 2 toán hạng sẽ được chuyển vào 2 chuỗi bằng hàm pushStackTinh(char x[]);  Vd:

3.45 - 65.2

 Number [n][] = [‘3’,’.’,’4’,’5’]

vàNumber[n+1][]= [‘6’,’5’,’.’,’2’]

Page 14: CHỨC NĂNG CỘNG,TRỪ

14

Với phép trừ ta có 4 trường hợp, cần phải đưa về dạng đơn giản nhất đó là a+b hoặc a-b:

a - b a - b-a - b a + b (dấu trừ

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

thêm vào kết quả sau)

Page 15: CHỨC NĂNG CỘNG,TRỪ

15

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

 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[])

Page 16: CHỨC NĂNG CỘNG,TRỪ

16

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

Page 17: CHỨC NĂNG CỘNG,TRỪ

17

Ví dụ: 0.000 - 4.123 kq= -4.1234.123 - 0.000 kq= 4.123 Thực hiện trừ lần lược từng phần tử từ hai chuỗi ta được kết quả:

 61.75

Page 18: CHỨC NĂNG CỘNG,TRỪ

THANK YOU