XỬ LÝ DỮ LIỆU LỚN TRONG LẬP TRÌNH

29 4.4K 30
XỬ LÝ DỮ LIỆU LỚN TRONG LẬP TRÌNH

Đ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

Đề tài nghiên cứu Kỹ thuật xử lý, tính toán với dữ liệu lớn trong lập trình, áp dụng vào lập trình giải các bài toán với mức độ dữ liệu rất lớn, thường thấy trong các kì thi chọn học sinh giỏi môn Tin học các cấp...

Xử lý dữ liệu lớn trong một số bài toán tin MỤC LỤC Tên đề mục Trang Phần I: Phần mở đầu 1 Danh mục viết tắt 2 1. Lí do chọn đề tài 3 2. Mục đích của đề tài 4 3. Nhiệm vụ nghiên cứu 4 4. Đối tượng nghiên cứu 4 5. Phương pháp nghiên cứu 4 6. Không gian của đối tượng nghiên cứu 4 7. Phạm vi và kế hoạch nghiên cứu 4 Phần II: Nội dung 5 1. Cơ sở lí luận của đề tài 5 2. Cơ sở thực tiễn 8 3. Giải pháp mới, sáng tạo 8 4. Kết quả nghiên cứu 23 5. Ứng dụng vào thực tiễn công tác giảng dạy 23 5.1. Quá trình áp dụng của bản thân 23 5.2. Bài học kinh nghiệm 23 Phần III: Kết luận và kiến nghị 24 1. Kết luận 24 2. Kiến nghị 24 Người thực hiện: Nguyễn Khải Hoàn 1 Xử lý dữ liệu lớn trong một số bài toán tin DANH MỤC CÁC TỪ VIẾT TẮT Stt Tên diễn giải Viết tắt 1 Trường THCS THCS 2 Trường THPT THPT 3 Turbo Pascal TP 4 Free Pascal FC Người thực hiện: Nguyễn Khải Hoàn 2 Xử lý dữ liệu lớn trong một số bài toán tin Phần I: ĐẶT VẤN ĐỀ 1. Lý do chọn đề tài Trong những năm gần đây ngành giáo dục và đào tạo là tiêu điểm của sự quan tâm, chú ý của xã hội. Việc nâng cao chất lượng giáo dục là vấn đề không chỉ của ngành giáo dục mà còn được toàn xã hội quan tâm đặc biệt qua các kỳ đại hội Đảng, các kì họp Quốc hội. " Đổi mới căn bản và toàn diện ngành giáo dục" là vấn đề cấp thiết của ngành giáo dục để từng bước nâng cao chất lượng giáo dục. Chính vì lẽ đó mà nó là một phần quan trọng trong chủ đề của nhiều năm học. Để nâng cao chất lượng giáo dục cần đầu tư nâng cao chất lượng đại trà bằng nhiều phương pháp, song đầu tư cho chất lượng mũi nhọn để phát hiện, chọn lựa và bồi dưỡng học sinh giỏi cũng là một vấn đề hết sức quan trọng. Bồi dưỡng học sinh giỏi là nhiệm vụ khó không chỉ từ việc lựa chọn học sinh, lựa chọn phương pháp mà vì nó đòi hỏi nhiều kiến thức, kĩ năng vận dụng cao, đề thi tập trung khai thác sâu kiến thức không chỉ ở cấp học THCS mà còn cả ở cấp THPT, thậm chí cả đề thi Đại học, đề thi học sinh giỏi cấp THPT, cấp Quốc gia. Riêng môn tin học là một bộ môn rất mới được đưa vào trường THCS và đa số trang thiết bị tin học tại các nhà trường còn hạn chế cho nên việc tiếp cận, giảng dạy, học tập bộ môn này của giáo viên và học sinh còn rất nhiều khó khăn. Với việc giáo dục đại trà bộ môn Tin học còn vất vả và khó khăn thì công tác phát hiện, bồi dưỡng đối tượng học sinh giỏi ở bộ môn này còn gặp nhiều khó khăn hơn nữa. Trên tài nguyên mạng hay tài liệu đã có nhiều phương pháp sử lý, giải bài toán tin được giáo viên và học sinh sử dụng khi bồi dưỡng học sinh giỏi như: Các phương pháp giải bài toán tin, các phương pháp sử lý dữ liệu kiểu số, kiểu xâu; Các chuyên đề duyệt, sử lý thuật toán… Qua việc tham khảo những đề thi học sinh giỏi gần đây đặc biệt là các cuộc thi học sinh giỏi lớp 9 cấp tỉnh thì xu hướng sử dụng các đề thi sử lý, tính toán với dữ liệu lớn vượt qua giới hạn các kiểu số Real, Longint của Pascal hay Int32, Int64 của Free Pascal với các số có hàng chục, hàng trăm con số ngày càng áp dụng rộng rãi. Với ưu điểm dùng được cho các bài toán phức tạp xảy ra qua nhiều quá trình tính toán, phát huy tối đa khả năng tư duy, vận dụng kiến thức toán học phải tốt mới có thể sử lý quét hết các trường hợp của bài toán. Điều đặc biệt lý thú của những dạng bài toán này là có những bài toán không cần phải có cấu trúc lập trình phức tạp, hay ghe ghớm gì lắm, code của chương trình ngắn thậm chí chỉ cần vài dòng code là có thể sử lý bài toán một cách hiệu quả… nên được đưa vào trong nhiều đề thi chọn học sinh giỏi các cấp, các khối học không chỉ đối với học sinh giỏi Tin học lớp 9. Chính vì vậy tôi mạnh dạn nghiên cứu và đưa vào chương trình bồi dưỡng học sinh giỏi bộ môn Tin học cấp THCS chuyên đề: “Xử lý dữ liệu lớn trong một số bài toán tin” Người thực hiện: Nguyễn Khải Hoàn 3 Xử lý dữ liệu lớn trong một số bài toán tin 2. Mục đích của đề tài Phân dạng các bài toán tin học có liên quan đến việc sử lý dữ liệu lớn, rất lớn nhằm nâng cao chất lượng học sinh giỏi 3. Nhiệm vụ nghiên cứu. - Nêu lên được cơ sở lý luận của chuyên đề. - Tiến hành điều tra tình hình nắm vững kiến thức cơ bản của học sinh giỏi. - Hệ thống bài toán Tin học theo từng dạng. - Qua bài tập giúp các em tích cực, chủ động chiếm lĩnh tri thức rèn luyện kĩ năng. 4. Đối tượng nghiên cứu: Học sinh giỏi lớp 9 5. Phương pháp nghiên cứu. Trong đề tài này tôi đã vận dụng các phương pháp nghiên cứu khoa học như: Phân tích lý thuyết, tổng kết kinh nghiệm sư phạm. Tham khảo các tài liệu lấy từ nhiều nguồn nhất là các học liệu mở trên mạng thông tin Internet và phân tích một cách có hệ thống các dạng bài toán theo nội dung đã đề ra. Trên cơ sở đó tôi đã trình bày các dạng bài toán tin học đã sưu tầm và nghiên cứu để nâng cao khả năng, trí tuệ của học sinh. 6. Giới hạn về không gian của đối tượng: Trường THCS Thái Hòa 7. Phạm vi và kế hoạch nghiên cứu - Đối tượng: học sinh lớp 9 - Dự kiến số tiết bồi dưỡng: 9 tiết Người thực hiện: Nguyễn Khải Hoàn 4 Xử lý dữ liệu lớn trong một số bài toán tin Phần II: NỘI DUNG 1. Cơ sở lý luận của đề tài: 1.1. Dữ liệu kiểu số và độ lớn của dữ liệu kiểu số: - Dữ liệu kiểu số là một dạng dữ liệu sử dụng để tính toán trong lập trình đối với mỗi ngôn ngữ lập trình thì kiểu số được định nghĩa, giới hạn của nó có sự khác nhau. Trong phạm vi chuyên đề này tôi xin đưa ra dữ liệu kiểu số của ngôn ngữ lập trình Pascal và Free Pascal, đối với Free Pascal thì độ lớn dữ liệu kiểu số lớn hơn Pascal có thể đảm bảo yêu cầu của một số bài toán. - Với Pascal ta có 2 kiểu số là số thực và số nguyên thường được sử dụng như bảng sau: Stt Tên Loại giá trị Phạm vi Độ lớn Byte 1 Real Số thực 2,9.10 -39 1,7.10 38 6 2 Single Số thực 1,5.10 -45 3,4.10 38 4 3 Double Số thực 5,0.10 -324 1,7.10 308 8 4 Extended Số thực 3,4.10 -4932 1,1.10 4932 10 5 Comp Số thực 9,2.10 -18 9,2.10 18 8 6 Currency Số thực -2.10 64+1 2.10 63-1 8 7 Shortint Nguyên -128 127 1 8 Integer Nguyên -32768 32767 2 9 Longint Nguyên -2147483648 2147483647 4 10 Byte Nguyên 0 255 1 11 Word Nguyên 0 65535 2 - Với Free Pascal ngoài kiểu dữ liệu có độ lớn như bảng trên ta còn có thêm hai kiểu dữ liệu như sau: Stt Tên Loại giá trị Phạm vi Độ lớn Byte 1 Int64 Nguyên -2.10 63 2.10 63-1 6 2 Qword Nguyên 0 2.10 64-1 6 1.2. Các phép toán với kiểu dữ liệu này Sử dụng các phép toán số học thuần thúy: Stt Tên phép toán Ký hiệu 1 Cộng + 2 Trừ - Người thực hiện: Nguyễn Khải Hoàn 5 Xử lý dữ liệu lớn trong một số bài toán tin 3 Nhân * 4 Chia / 5 Chia lấy nguyên Div 6 Chia lấy dư Mod Với dữ liệu không lớn thì sử lý bình thường là có thể vét hết các Test của bài toán, nhưng khi dữ liệu lớn thì kết quả của các phép tình trên sẽ cho ra một số liệu tương đối lớn đa số vượt quá giới hạn cho phép của ngôn ngữ lập trình ở đây tôi nói đến Free Pascal là độ lớn dữ liệu là lớn nhất. Vấn đề đặt ra ở đây là làm thế nào để sử lý những bài toán đó, ta có thể sử dụng một trong các phương pháp sau: * Tối ưu quá trình tính toán: Áp dụng kiến thức toán học thông thường để giải quyết bài toán * Sử dụng dữ liệu kiểu xâu: Để biểu diễn số và lưu kết quả tính toán, trong Free Pascal thì dữ liệu kiểu xâu ký tự không hạn chế độ dài nên ta có thể sử lý những con số rất lớn đến hàng trăm, hàng nghìn chữ số. 1.3.Áp dụng các phương pháp này: 1.3.1: Tối ưu hóa quá trình tính toán. - Phương pháp này ta vận dụng hết khả năng toán học vào để từ bài toán sử lý số rất lớn sang sử lý nhiều bài toán có độ lớn dữ liệu nhỏ hơn, đảm bảo không bị tràn dữ liệu, vét hết các khả năng của bài toán. - Ví dụ: Đề thi HSG Tin học lớp 9 năm học 2013-2014 của tỉnh Vĩnh Phúc bài số 2 đếm số hình vuông Ở bài này sau khi phân tích ta rút ra được công thức tổng quát để tính số hình vuông là: ( 1)(2 1) 6 n n n S + + = sau đó lấy tổng này chia cho 2013 để lấy số dư. Nếu thuần thúy thì cứ công thức ta thực hiện được phép toán, nhưng vấn đề ở đây là 18 10n ≤ cho nên tích trên đã vượt khỏi độ lớn dữ liệu và bị tràn bộ nhớ. Với toán học ta sử lý tích trên rất đơn giản theo hai vấn đề sau: - Vấn đề 1: Sử lý nội hàm tích S=n(n+1)(2n+1), tích này luôn luôn chia hết cho 6 bằng cách ta xét tính chia hết của từng phần tử trong tích cho 2 và 3, nếu một phần tử nào chia hết cho 2 hoặc 3 thì một trong các phần tử còn lại sẽ chia hết cho 3 hoặc 2. - Vấn đề 2: Thực hiện phép chia lấy dư với 2013, áp dụng lý thuyết đồng dư ta lấy tổng dư của từng phần tử của S cho 2013 chia cho 2013 lấy dư ta sẽ thu được kết quả mà dữ liệu không bị tràn. ) ( mod 2013 ( 1)mod 2013 (2 1)mod 2013 mod 2013SoHV n n n= + + + + 1.3.2: Sử dụng dữ liệu kiểu xâu để biểu diễn và tính toán. Người thực hiện: Nguyễn Khải Hoàn 6 Xử lý dữ liệu lớn trong một số bài toán tin - Với khả năng không hạn chế độ dài xâu ký tự trong Free Pascal thì mọi số ta có thể biểu diễn được dưới dạng xâu và sử lý nó với các phép toán số học. Ví dụ: Ta có hai số A(a 1 a 2 a 3 a n ) và số B(b 1 b 2 b 3 b n ) mỗi số lần lượt có độ dài là N và M, giả sử (N>M) Ý tưởng: Ta cần có ba xâu A,B,S để biểu diễn cho các số A,B và kết quả của các phép tính. * Đối với phép tính cộng: - Để sử lý vấn đề này ta tiến hành theo hai bước: + Bước 1: Điền đầy |N-M| giá trị 0 vào trước số có độ dài nhỏ hơn để được hai số có độ dài bằng nhau bằng N + Bước 2: Thực hiện duyệt ngược 2 xâu đó mỗi bước duyệt lấy ở mỗi xâu một ký tự để thực hiện tính cộng và lưu ý sử dụng biến nhớ để công thêm vào kết quả cho những giá trị lớn hơn 10 có nhớ và phép cộng trở nên rất đơn giản với các số trong phạm vi 10. * Đối với phép tính trừ: Với phép trừ ta luôn luôn lấy số có độ dài lớn hơn trừ đi số có độ dài nhỏ hơn để phép trừ trở nên đơn giản, ta thực hiện duyệt ngược hai xâu sau đó thực hiện phép trừ: S i =a i +Cso-b i -du - Trong đó: - a i ,b i là chữ số thứ i - du: Là số dư của phép trừ trước a i-1 -b i-1 - Cso=10 để a i -b i >0 * Đối với phép tính nhân: - Nếu ta thực hiện nhân hai xâu với nhau thì độ phức tạp thuật toán rất lớn và thời gian chạy sẽ rất lâu nếu các số đem nhân là tương đối lớn. Ý tưởng thuật toán: - Cắt B thành M số - Tiến hành nhân từng số cắt được của B với xâu A. - Tiến hành cộng các xâu lại sau khi nhân ta thu được kết quả của phép nhân. * Đối với phép tính chia: - Trong các phép toán thì phép chia phức tạp và khó cài đặt mã nguồn hơn, nhưng thực chất vẫn là áp dụng phép trừ để tính toán. - Ý tưởng cắt lần lượt từng "đoạn" của số bị chia tính từ bên trái (có cộng thêm phần dư của các bước trung gian). - Đem chia các đoạn đó cho số chia bằng phép toán trừ. - Thương tìm được chính là dãy các số là kết quả của phép chia các "đoạn" cho số chia (được phát triển dần về phía bên phải). Người thực hiện: Nguyễn Khải Hoàn 7 Xử lý dữ liệu lớn trong một số bài toán tin - Phần dư của phép chia chính là "đoạn" còn lại không thể chia được nữa Người thực hiện: Nguyễn Khải Hoàn 8 Xử lý dữ liệu lớn trong một số bài toán tin 1.4. Chú ý - Chủ yếu áp dụng cho các bài toán cần phải sử lý dữ liệu lớn. - Cần xác định rõ giới hạn dữ liệu của từng bài toán để lựa chọn phương pháp phù hợp tránh tình trạng lãng phí bộ nhớ trong tính toán dẫn đến vi phạm thời gian chạy test. - Với ngôn ngữ lập trình Pascal thì số lớn nhất có thể biểu diễn ở dạng String có độ dài 255 ký tự cho nên số lớn nhất trong tính toán nhỏ hơn 255 chữ số. - Còn đối với Free Pascal thì số chữ số của một số là không có giới hạn với kiểu Ansistring ; - Cho nên tùy từng bài toán ta có thể lựa chọn Pascal hay Free Pascal. 2. Cơ sở thực tiễn: Qua nhiều năm giảng dạy, gắn với công tác phát hiện và bồi dưỡng HSG tôi nhận thấy các em học sinh giỏi rất lúng túng khi va phải những bài toán với sự giới hạn dữ liệu như vậy và đa số các em không chú ý, xử lý tốt được yêu cầu của bài toán dẫn tới mất khoảng 2/3 số test lớn. Hơn nữa với việc kết hợp nhuần nhuyễn giữa các kiểu dữ liệu làm học sinh rất sợ cảm thấy khó. Đa số những năm gần đây mục tiêu của các bài toán hầu hết yêu cầu học sinh phải sử lý tốt được dữ liệu lớn, bằng cách nào, bằng phương pháp nào để đạt được mục đích, đây chính là cơ sở cho việc tổ chức dữ liệu mà sau này các em sẽ gặp nhiều trong các bài toán tin hay trong lập trình phần mềm ứng dụng. 3. Giải pháp mới sáng tạo: Việc chọn lọc và phân loại một số các bài tập theo các dạng cơ bản áp dụng các thủ thuật xử lý dữ liệu lớn, tìm cách giải cho từng dạng này góp phần nâng cao hứng thú của các em đối với môn học. Với việc phân tích bài toán theo chiều toán học thuần thúy giúp các em tư duy toán học tốt, đôi khi có những bài toán tưởng chừng như phức tạp nhưng với tư duy toán học tốt thì việc giải quyết bài toán lại càng chở nên đơn giản. 3.1. Các dạng bài tập thường gặp: * Tất cả các bài toán tìm số * Một số bài toán tối ưu * Một số bài toán chia để trị Nói chung bất kỳ bài toán nào liên quan tới quá trình tính toán thì đều áp dụng phương pháp này để cho lời giải tốt nhất. 3.2. Các ví dụ minh hoạ : Ví dụ 1: Đề thi HSG Tin học lớp 9 năm 2013-2014 SGD Vĩnh Phúc. Cho một bảng hình vuông kích thước NxN (N< 10 18 ) được chia lưới vuông đơn vị, các vị trí đỉnh của các hình vuông đơn vị được coi là các mắt lưới. Người ta muốn đếm số hình vuông thỏa mãn hai điều kiện sau: Người thực hiện: Nguyễn Khải Hoàn 9 Xử lý dữ liệu lớn trong một số bài toán tin + Mỗi cạnh của hình vuông phải song song với một trong hai cạnh bảng + Tất cả 4 đỉnh của hình vuông phải nằm tại vị trí của các mắt lưới. Vì số lượng hình vuông là rất lớn cho nên ta chỉ phải ghi kết quả là số dư của phép chia số lượng hình vuông đếm được cho 2013. GIẢI - Phân tích bài toán ta rút ra: Với hình vuông n*n sẽ có các loại ô vuông có đơn vị từ 1 đến n và: - Hình vuông 1 đơn vị có: n 2 - Hình vuông 2 đơn vị có: (n-1) 2 - Hình vuông 3 đơn vị có: (n-2) 2 …………………. - Hình vuông n đơn vị có: (n-(n-1)) 2 = 1. Vậy số ô vuông của hình vuông n*n là: ( 1)(2 1) 6 n n n S + + = Và kết quả yêu cầu của bài toán là: ( 1)(2 1) 6 n n n S + + = Mod 2013. Nếu thuần thúy thì cứ công thức ta thực hiện được phép toán, nhưng vấn đề ở đây là 18 10n ≤ cho nên tích trên đã vượt khỏi độ lớn dữ liệu và bị tràn bộ nhớ. Với toán học ta sử lý tích trên rất đơn giản theo hai vấn đề sau: - Vấn đề 1: Sử lý nội hàm tích S=n(n+1)(2n+1), tích này luôn luôn chia hết cho 6 bằng cách ta xét tính chia hết của từng phần tử trong tích cho 2 và 3, nếu một phần tử nào chia hết cho 2 hoặc 3 thì một trong các phần tử còn lại sẽ chia hết cho 3 hoặc 2. - Vấn đề 2: Thực hiện phép chia lấy dư với 2013, áp dụng lý thuyết đồng dư ta lấy tổng dư của từng phần tử của S cho 2013 chia cho 2013 lấy dư ta sẽ thu được kết quả mà dữ liệu không bị tràn. ) ( mod 2013 ( 1)mod 2013 (2 1)mod 2013 mod 2013SoHV n n n= + + + + - Mã nguồn của chương trình trên Free Pascal như sau : Program DemHV; const InputFile = 'Count.INP'; OutputFile = 'Count.OUT'; M = 2013; Var fi, fo: Text; n: Int64; x: array[1 3] of Int64; i: Integer; Kq: Int64; Begin Người thực hiện: Nguyễn Khải Hoàn 10 [...]... Nguyễn Khải Hoàn 25 Xử lý dữ liệu lớn trong một số bài toán tin ĐÁNH GIÁ CỦA HỘI ĐỒNG KHOA HỌC ĐÁNH GIÁ CỦA TỔ CHUYÊN MÔN TRƯỜNG THCS THÁI HÒA TỔ TRƯỞNG Nguyễn Quốc Hùng ĐÁNH GIÁ CỦA HĐKT TRƯỜNG THCS THÁI HÒA CHỦ TỊCH HĐKT-HIỆU TRƯỞNG Người thực hiện: Nguyễn Khải Hoàn 26 Xử lý dữ liệu lớn trong một số bài toán tin Lê Huy Minh Người thực hiện: Nguyễn Khải Hoàn 27 Xử lý dữ liệu lớn trong một số bài toán... nhà trường, khu vực và trong huyện Người thực hiện: Nguyễn Khải Hoàn 24 Xử lý dữ liệu lớn trong một số bài toán tin Phần III: KẾT LUẬN VÀ KIẾN NGHỊ Xử lý dữ liệu lớn nói riêng, áp dụng chúng vào giải các bài tập tin học nói chung đóng vai trò hết sức quan trọng trong việc lập trình giải các bài toán tin, nó giúp học sinh phát triển tư duy sáng tạo, đồng thời nó góp phần quan trọng trong việc ôn luyện... tính toán ta cũng không thể sử dụng các kiểu dữ liệu số trong TP hay FC để làm được, cho nên xử dụng xâu để biểu diễn tính toán số là hợp lý nhất, với việc sử Người thực hiện: Nguyễn Khải Hoàn 13 Xử lý dữ liệu lớn trong một số bài toán tin dụng xâu thì ta đã đưa bài toán tính số vô cùng lớn thực chất về bài toán trừ hai số trong phạm vi 10 * Ý tưởng: Xử lý theo các bước sau: - Bước 1: Lấp đầy các ký... giới hạn như bài toán này thì việc tính toán ta cũng không thể sử dụng các kiểu dữ liệu số trong TP hay FC để Người thực hiện: Nguyễn Khải Hoàn 15 Xử lý dữ liệu lớn trong một số bài toán tin làm được, cho nên lựa chọn sử dụng xâu để xử lý bài toán để đưa phép nhân số lớn thành nhân các số trong phạm vi 10; * Ý tưởng: Xử lý theo các bước sau: - Bước 1: Xây dựng hàm nhân 1 số với 1 xâu - Bước 2: Xây dựng... thực hiện: Nguyễn Khải Hoàn 11 Xử lý dữ liệu lớn trong một số bài toán tin Kết quả được xuất trong File Cong.Out gồm 1 dòng là kết quả của phép cộng Cong.out 6565472922264759709333130473563586647480594274568 GIẢI - Ta tiến hành phân tích bài toán: Với dữ liệu mẫu như trong file Cong.inp ta nhận thấy N,M không có giới hạn tức độ lớn dữ liệu vượt qua giới hạn của các kiểu số trong Pascal và Free Pascal... phương thứ N với NM) Lập trình tính thương hai số đã cho, dữ liệu được... sẽ không phải sử lý số lớn trên xâu nên bài toán trở nên đơn giản hơn nhiều Từ thuật toán tối ưu thay vì thực hiện phép chia một số lớn ta thực hiện chia trên nhiều số nhỏ hơn đảm bảo không bị tràn dữ liệu và thời gian chạy test Ví dụ 2: Cho hai số nguyên có dạng A(a1a2a3 an) và số B(b1b2b3 bn) mỗi số lần lượt có độ dài là N và M, giả sử (N>M) Lập trình tính tổng hai số đã cho, dữ liệu được cho từ... Hoàn 14 Xử lý dữ liệu lớn trong một số bài toán tin t:=x+Cso-y-nho; z:=t mod 10; If t>10 then nho:=0 Else nho:=1; c:=Char(z+48)+c; End; Hieu:=c; End; Procedure Suly; Begin Write(G,Hieu(x,y)); End; BEGIN Input; Suly; Close(G); END * Nhận xét: Với bài tính hiệu hai số lớn như thế này thuật toán tựa như cộng hai số lớn nhưng ta khéo léo đưa thêm Const CSO=10 vào để luôn đảm bảo a[i]-b[i] luôn lớn hơn . kiểu số của ngôn ngữ lập trình Pascal và Free Pascal, đối với Free Pascal thì độ lớn dữ liệu kiểu số lớn hơn Pascal có thể đảm bảo yêu cầu của một số bài toán. - Với Pascal ta có 2 kiểu số là số. toán tin t:=x+Cso-y-nho; z:=t mod 10; If t>10 then nho:=0 Else nho:=1; c:=Char(z+48)+c; End; Hieu:=c; End; Procedure Suly; Begin Write(G,Hieu(x,y)); End; BEGIN Input; Suly; Close(G); END. *. tin * Mã nguồn trên Free Pascal Program Phep_Chia_Hai _So_ Lon; Var a,b,c:array[0 25000] of shortint; l,la,lb,lc:integer; Function ss(d,k:integer):boolean; {so sanh hai day so: a[d] a[k]va b[1] b[lb]} Var

Ngày đăng: 14/10/2014, 00:51

Tài liệu cùng người dùng

Tài liệu liên quan