1 / 18

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

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 .

jabir
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CHỨC NĂNG CỘNG,TRỪ NHÓM 07 Nguyễn Minh Đặng NguyễnVănHảiĐăng NguyễnNgọcTuyết Trinh TrầnHoàngGiang

  2. MÔ TẢ CHỨC NĂNG • Cho 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.

  3. Ví dụ: Ta có thể tính được các phép tính sau: • 123245323465776544+3445365676723 • 32432424232/1232 • 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().

  4. MÔ 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ử.

  5. Cộng (a+b) • 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ả

  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ớ = 0 • Kế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ớ = 1 • Tiế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ớ.

  7. 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’]

  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)

  9. Sauđóthựchiệnphépcânbằnghaimảngavàbvớihàmchar *check_balance(char x[],char y[]);nhằmcânbằnghaimảng • 03.45 • + 65.20 • Sauđólầnlượtcộng hay trừtừngphầntửtùythuộcvàotrườnghợptừ 2 mảngvàomảngkq[]bằnghàmchar *cong(char x[],char y[])hoặcchar *tru(char x[],char y[])trongtrườnghợpnàydùngchar *cong(char x[],char y[]) ta đượckếtquả: 68.65 • Nếutrườnghợpkhôngcầnthêmdấutrừthìbỏ qua giaiđoạnthêmdấutrừsauđóhàmtrảvềchuỗikq

  10. Trừ (a-b) • Trướckhithựchiệnphéptrừ, 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

  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ả.

  12. Chuỗi a >= chuỗi b: • Thựchiệntheođúngtừngcột • Cho biếnichạyngượctừcuốichuỗitrởvềđầuchuỗi • Thựchiệnphéptrừcho 2 phầntửcủa 2 chuỗivàtrừthêmbiếnnhớ. • Sốbịtrừlớnhơnthìthựchiệnphéptrừvàlưubiếnnhớ= 0 • Ngượclạithìlấysốbịtrừcộngthêmcho10rồithựchiệnphéptrừvàlưubiếnnhớ= 1. • Tiếptụcthựchiệnphéptrừlàmchođếnkhiđếnđầuchuỗi. • Ở phầntửđầuchuỗithìghikếtquảvàochuỗikếtquảkhôngcầnlưubiếnnhớnữa. • Chuỗi b > chuỗi a: • Lấychuỗibtrừchuỗia • Thựchiệncácbướctươngtựnhưtrên. • Trướckhireturnchuỗikếtquảthìthêmdấu – vàotrướcchuỗikếtquả.

  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’]

  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)

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

  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

  17. Ví dụ: 0.000 - 4.123  kq= -4.123 4.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

  18. THANK YOU

More Related