Đề tài báo cáo Niên luận tìm hiểu về XMLRPC triển khai trên ngôn ngữ lập trình Python. Tìm hiểu khái niệm về RPC, XMLRPC, kiến trúc và cách hoạt động của XMLRPC củng như kỹ thuật và một số vấn đề khi triển khai XMLRPC trên ngôn ngữ lập trình Python. Phần cuối sẽ là phần chương trình demo tính số pi đơn giản và dùng XMLRPC trên Python để thực thi chương trình.
TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG NIÊN LUẬN CƠ SỞ NGÀNH MẠNG MÁY TÍNH VÀ TRUYỀN THƠNG -oOo - ĐỀ TÀI LẬP TRÌNH ỨNG DỤNG PHÂN TÁN VỚI XML-RPC PYTHON Cán hướng dẫn: Thầy Đỗ Thanh Nghị Sinh viên thực hiện: Trần Phước Bình B1509620 2018 MỤC LỤC GIỚI THIỆU .1 Chương 1: TÌM HIỂU VỀ NGƠN NGỮ LẬP TRÌNH PYTHON 1.1 Lịch sử đời python………………………………………… 1.2 Chu trình python………………………………… phát triển 1.3 Môi python……………………………………………… trường 1.4 Các dạng chương trình ứng dụng python………………………… 1.5 Các phân tử python…………………………………… sở cua 1.5.1 Các từ khóa …… ………………………………… 1.5.2 Tên tên………………………………… cách 1.5.3 thích…………………………………………… 1.6 Các kiểu thủy…………………………………… đặt Chú liệu nguyên 1.7 Khai báo biến………………………………………………… Chương 2: CƠ TÍNH…………………………………….6 SỞ MẠNG MÁY 2.1: Định nghĩa tính……………………………………… mạng máy 2.2 Phân loại tính………………………………………….6 mạng máy 2.3 Một số kiến trúc mạng thường dùng……………………………… 2.4 Giao mạng………………………………………………… thức 2.4.1 Giao TCP/IP…………………………………….8 thức Giao thức IP………………………………………8 Giao thức TCP……………………………………8 2.4.2 Giao UDP……………………………………….8 thức 2.5 Các mơ hình hoạt động mạng máy tính……………………… Chương 3: LẬP TRÌNH ỨNG DỤNG PHÂN TÁN VỚI XMLRPC…… 3.1 Tổng quan RPC………………………………………… … 3.2 XML-RPC gì……………………………………………… 3.3 Tại sử dung XML-RPC…………………………………….9 3.4 XML-RPC hoạt động nào………………………………9 3.5 Kiến trúc ứng dụng XML-RPC…………………………… 10 3.6 Cơ chế thực thi XML_RPC………………………… …….10 3.7 Một số đối tượng, hàm sử dụng XML-RPC……… 11 Chương 4: CHƯƠNG TRÌNH DEMO TÍNH SỚ PI ĐƠN GIẢN BẰNG XML-RPC ………………… 14 TRÊN NGÔN NGỮ PYTHON Số Pi cách tính……………………………………………….14 1.1 Số Pi………………… ………………………………14 1.2 Cách tính số Pi……………………….………… .14 Xây dựng chương trình tính số Pi…………………………………… 15 2.1 Bên máy Server……………………… ……… …………….15 2.2 Bên máy khách (Client)…………………………… …………16 Chương 5: KÊT LUẬN …………………………………………………17 TÀI LIỆU THAM KHẢO……………………………………………….17 GIỚI THIỆU Ngày nay, với phát triển vũ bão hệ thống mạng, điển hình mạng Internet khiến cho máy tính ngày trở nên gần gủi phục vụ đắc lực lĩnh vực sống người Tuy nhiên, bên cạnh có thách thức lớn đặt cho nhà phát triển ứng dụng lập trình mạng ngày trở nên phức tạp Và nay, mơ hình lập trình đơn lẽ truyền thống bị thay đổi nhiều, khơng đơn ngồi viết ứng dụng để chạy máy Chương trình ứng dụng đòi hỏi tương tác từ nhiều phía người dùng, chia tài nguyên, triệu gọi từ xa, liên kết giao tác, phân tán liệu,…Với u cầu mơ hình Client/Server đời tồn lâu ngày Theo mơ hình Client/Server tất xử lý phức tạp chuyển giao cho máy chủ (server) xử lý, máy khách (client) đóng vai trò gửi yêu cầu đến máy chủ để máy chủ xử lý hiển thị kết nhận lên hình Hãy hình dung quản lý phân phối ứng ựng lên hàng nghìn máy khách nhiều quốc gia khác gây trở ngại mặt địa lý Chúng ta cài đặt trình điều khiển kết nối sở liệu lên máy, sau thời gian sử dụng, muốn chuyển đổi hệ quản trị sở liệu sang quản trị sỡ liệu khác có nhiều khó khăn phiền toái xãy Chúng ta phải yêu cầu hàng nghìn máy khách cập nhật lại trình điều khiển hệ quản trị sở liệu, chưa kể việc cấu hình kết nối với sỡ liệu chưa đơn giản với người dùng Hoặc muốn đổi mã nguồn máy khách, bao gồm nhiều MB chí lên đến Gb phải cập nhật lại lượng liệu cho tất máy khách, thật điều thời gian khó khăn Từ bất cập làm phát sinh mơ hình phát triển ứng dụng đa tầng (multi-tier) Các chương trình xử lý khơng phải đặt máy khách mà cài đặt server khác, làm cho máy khách trở nên gọn nhẹ, dê dàng việc cấu hình củng thay đổi phía bên máy chủ Nếu muốn thay đổi hay cập nhật mã nguồn cần thay đổi phía bên server, máy khách kết nối vào server phục vụ phiên Trong phạm vi niên luận này, tìm hiểu sơ lược trình hình thành phát triển ngơn ngữ lập trình Python, kiến thức sở mạng máy tính đối tượng dùng để lập trình phân tán XML-RPC Tìm hiểu khái niệm RPC, XML-RPC, kiến trúc cách hoạt động XML-RPC củng kỹ thuật số vấn đề triển khai XML-RPC ngơn ngữ lập trình Python Phần cuối phần chương trình demo tính số pi đơn giản dùng XML-RPC Python để thực thi chương trình Chương 1: TÌM HIỂU VỀ NGƠN NGỮ LẬP TRÌNH PYTHON 1.1 Lịch sử đời python Python ngôn ngữ lập trìnhbậc cao cho mục đích lập trình đa năng, Guido van Rossum tạo lần đầu mắt vào năm 1991 Python thiết kế với ưu điểm mạnh dê đọc, dê học dê nhớ Python ngơn ngữ có hình thức sáng sủa, cấu trúc rõ ràng, thuận tiện cho người học lập trình Cấu trúc Python cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu Vào tháng năm 2018, Van Rossum từ chức Leader cộng đồng ngôn ngữ Python sau 30 năm lãnh đạo Python hoàn toàn tạo kiểu động dùng chế cấp phát nhớ tự động; tương tự Perl, Ruby, Scheme, Smalltalk, Tcl Python phát triển dự án mã mở, tổ chức phi lợi nhuận Python Software Foundation quản lý Ban đầu, Python phát triển để chạy Unix Nhưng theo thời gian, "bành trướng" sang hệ điều hành từ MS-DOS đến Mac OS, OS/2, Windows, Linux hệ điều hành khác thuộc họ Unix Mặc dù phát triển Python có đóng góp nhiều cá nhân, Guido van Rossum tác giả chủ yếu Python Ông giữ vai trò chủ chốt việc định hướng phát triển Python 1.2 Chu trình phát triển python Sự phát triển Python đến chia làm giai đoạn: Python 1: bao gồm phát hành 1.x Giai đoạn này, kéo dài từ đầu đến cuối thập niên 1990 Từ năm 1990 đến 1995, Guido làm việc CWI (Centrum voor Wiskunde en Informatica - Trung tâm Tốn-Tin học Amsterdam, Hà Lan) Vì vậy, phiên Python CWI phát hành Python 2.0 phát hành vào ngày 16 tháng 10 năm 2000 có nhiều tính mới, bao gồm thu gom rác theo chu kỳ (cycle-detecting garbage) hỗ trợ Unicode Với việc phát hành trình phát triển thay đổi trở nên minh bạch cộng đồng hậu thuẫn Python 3.0 phát hành năm 2008, sau thời gian dài thử nghiệm Cho tới nay, Python có phiên 3.7 1.3 Đặc điểm Tính đa cho phép sử dụng nhiều phương pháp lập trình Ngơn ngữ lập trình đơn giản, dê học: Python có cú pháp đơn giản, rõ ràng Nó dê đọc viết nhiều so sánh với ngơn ngữ lập trình khác C++, Java, C# Miên phí, mã nguồn mở: Chúng ta tự sử dụng phân phối Python, chí dùng cho mục đích thương mại Khả di chuyển: Các chương trình Python di chuyển từ tảng sang tảng khác chạy mà khơng có thay đổi Nó chạy liền mạch hầu hết tất tảng Windows, macOS, Linux Khả mở rộng nhúng Ngơn ngữ thơng dịch cấp cao Thư viện tiêu chuẩn lớn để giải tác vụ phổ biến Hướng đối tượng Ngơn ngữ tốt để dạy lập trình 1.4 Các dạng chương trình ứng dụng python Lập trình ứng dụng web Khoa học tính tốn Tạo nguyên mẫu phần mềm 1.5 Các phần tử sở python 1.5.1 Các từ khóa Từ khóa keyword từ dùng riêng ngôn ngữ, dùng cho mục đích định khơng thể định nghĩa lại nhằm mục đích khác Python có từ khóa, có tất 33 từ khóa, từ khóa tiếng Anh viết dạng chữ thường Tùy vào phiên Python bạn sử dụng mà số lượng từ khóa khác Để lấy danh sách từ khóa phiên dùng, bạn sử dụng thư viện keyword lệnh print (keyword.kwlist) 1.5.2 Tên và cách đặt tên Một chương trình sử dụng nhiều tên hay gọi định danh để làm tên chương trình, tên hàm, tên biến, tên số… Tên Python có độ dài tuỳ ý Chúng gồm chữ in hoa in thường, chữ số dấu gạch dưới, bắt buộc phải bắt đầu chữ dấu gạch Một số quy ước bắt buộc đặt tên Python: Ký tự bắt đầu tên phải dấu gạch “_” chữ (có thể chữ hoa chữ thường) Tiếp theo bỏ trống, nhiều ký tự, nhiều số Trong tên khơng có dấu cách trắng ký tự đặc biệt như: @,$.%^!=+–*/%&~`\ Tên không trùng với từ khóa Python 1.5.3 Chú thích Khi viết chương trình, đơi cần ghi điểm quan trọng, để người khác sau này, đọc lại hiểu mã nguồn cách tốt Lúc ghi trực tiếp vào mã nguồn, ghi gọi thíchcomment, chương trình mà khơng làm ảnh hưởng tới chương trình, chương trình dịch bỏ qua thích Một dòng thích Python bắt đầu với kí tự # Nếu thích nhiều dòng đặt chúng vào cặp ngoặc “” 1.6 Các kiểu liệu nguyên thủy Mỗi ngơn ngữ lập trình định nghĩa sẵn số kiểu liệu gọi kiểu nguyên thủy Các kiểu liệu python bao gồm: Kiểu số Kiểu chuổi (String) Kiểu (tuple) Kiểu danh sách (List) Kiểu từ điển (dictionary) 1.7 Khai báo biến Biến vị trí nhớ sử dụng để lưu trữ liệu (giá trị) Biến đặt tên để phân biệt vị trí nhớ khác Các quy tắc để viết tên biến giống quy tắc viết định danh python Trong Python, bạn không cần khai báo biến trước sử dụng, cần gán cho biến giá trị tồn Cũng không cần phải khai báo kiểu biến, kiểu biến nhận tự động dựa vào giá trị mà bạn gán cho biến Python có số kiểu liệu thông dụng sau: int , long : số nguyên (trong phiên 3.x long nhập vào kiểu int) Độ dài kiểu số nguyên tùy ý, bị giới hạn nhớ máy tính float : số thực complex : số phức, chẳng hạn 5+4j list : dãy phần tử thay đổi, chẳng hạn [8, 2, 'b', -1.5] Kiểu dãy khác với kiểu mảng (array) thường gặp ngơn ngữ lập trình chỗ phần tử dãy khơng thiết có kiểu giống Ngồi phần tử dãy dãy khác tuple : dãy phần tử khơng thể thay đổi str : chuỗi ký tự Từng ký tự chuỗi thay đổi Chuỗi ký tự đặt dấu nháy đơn, nháy kép dict : từ điển, gọi "hashtable": cặp liệu gắn theo kiểu {từ khóa: giá trị}, từ khóa từ điển thiết phải khác Chẳng hạn : {1: "Python", 2: "Pascal"} set : tập không xếp theo thứ tự, đó, phần tử xuất lần Chương 2: CƠ SỞ VỀ MẠNG MÁY TÍNH 2.1: Định nghĩa mạng máy tính Mạng máy tính hay hệ thống mạng kết hợp máy tính lại với thông qua thiết bị nối kết mạng phương tiện truyền thông (giao thức mạng, môi trường truyền dẫn) theo cấu trúc máy tính trao đổi thơng tin qua lại với Hình 2.1 Mô hình liên kết các máy tính mạng 2.2 Phân loại mạng máy tính Dựa theo phân bố mạng nên chia thành loại mạng sau: + GAN (Golba Area Network) : GAN mạng kết nối máy tính từ châu lục khác Thông thường kết nối thực thông qua mạng viên thông vệ tinh + WAN (Wide Area Network): WAN gọi "mạng diện rộng", dùng vùng địa lý lớn thường cho quốc gia hay lục địa, phạm vi vài trăm vài ngàn km Chúng bao gồm tập hợp máy nhằm chạy chương trình cho người dùng Các máy thường gọi máy lưu trữ(host) hay có tên máy chủ, máy đầ cuối (end system) + MAN (Metropolitan Area Network): MAN hay gọi "mạng thị", mạng có cỡ lớn LAN, phạm vi vài km Nó bao gồm nhóm văn phòng gần thành phố, công cộng hay tư nhân + LAN (Local Area Network): LAN hay gọi "mạng cục bộ", mạng tư nhân nhà, khu vực (trường học hay quan chẳng hạn) có cỡ chừng vài km 2.3 Một số kiến truc mạng thường dùng + Ring Topology Hình 2.2 Ring Topology + Bus Topology Hình 2.3 Bus Topology + Start topology Hình 2.4 Start Topology 2.4 Giao thức mạng Giao thức mạng (Protocol) tập hợp quy tắc quy ước điều khiển việc trao đổi thông tin (truyền thông) hệ thống máy tính thiết bị máy tính với gọi giao thức, máy tính muốn giao tiếp với phải có chung giao thức Có nhiều loại giao thức sử dung mạng máy tính như NetBEUI, DLC,…nhưng giao thức dduojc sử dung phổ biến hiên TCP/IP 2.4.1 Giao thức TCP/IP Giao thức IP IP (Internet Protocol) giao thức hướng liệu sử dụng máy chủ nguồn đích để truyền liệu liên mạng chuyển mạch gói Nhiệm vụ cung cấp khả kết nối mạng liên kết mạng để truyền liệu Giao thức TCP TCP giao thức hướng kết nối, tạo đường truyền tin cậy thiết bị, thể việc liệu gửi luôn đích theo thứ tụ gọi 2.4.2 Giao thức UDP UDP (User Datagram Protocol) giao thức theo hướng không liên kết, không cần thiết lập kết nối trước, sử dụng thay cho TCP, không đảm bảo độ tin cậy truyền tin, thường dụng ứng dụng truyền trực tiếp 2.5 Các mơ hình hoạt động mạng máy tính Mơ hình hoạt động máy tính chia thành loại: + Mô hinh hoạt động ngang hàng (Peer to Peer) + Mơ hình máy chủ/máy khách (Clienr/Server) Chương 3: LẬP TRÌNH ỨNG DỤNG PHÂN TÁN VỚI XML-RPC TRÊN PYTHON 3.1 Tổng quan RPC RPC (Remote Procedure Call) kỹ thuật để xây dựng ứng dụng phân tán theo mơ hình Client/Server Là lời gọi thủ tục từ xa, mở rộng lời gọi thủ tục cục thông thường, chế cho phép chương trình gọi thực thi thủ tục (hay hàm) máy tính khác (server) Sử dụng RPC giúp người lập trình tránh bước tiết lập trình mạng 3.2 XML-RPC là ? XML-RPC cài đặt RPC giao thức HTTP, sử dụng ngôn ngữ XML để mã hố trao đổi liệu Với nó, khách hàng gọi phương thức với tham số máy chủ từ xa lấy lại liệu có cấu trúc XML-RPC thiết kế đơn giản có thể, đồng thời cho phép cấu trúc liệu phức tạp truyền, xử lý trả 3.3 Tại sử dụng XML-RPC ? XML-RPC cài đặt RPC, dĩ nhiên RPC có cài đặt khác, ví dụ như: + CORBA: giao thức sử dụng phổ biến để phát triển ứng dụng phân tán (distributed) hướng đối tượng (object-oriented) CORBA thường gặp chương trình đa tầng với qui mơ “xí nghiệp” (multi-tier enterprise application) + SOAP: SOAP cài đặt RPC giao thức HTTP gần giống XML-RPC Vậy tại lại sử dụng XML-RPC ? XML-RPC đơn giản so với CORBA SOAP Và thế, XML-RPC hoạt động tốt cài đặt tương đối đơn giản với ngôn ngữ lập trình web phổ biến PHP, Perl, Python Với lý đó, XML-RPC lựa chọn lý tưởng để phát triển ứng dụng web qui mô nhỏ Và dĩ nhiên, XML-RPC cài đặt với ngơn ngữ lập trình desktop C/C++, Java, chí với Microsoft NET 3.4 XML-RPC hoạt động nào Các chương trình viết máy chủ (server), máy khách (client) dùng cú pháp khác tùy vào ngơn ngữ lập trình (c,c++, java, python,…) để gọi chương trình, yêu cầu thực thi mã hóa thành ngơn ngữ XML gửi đến máy chủ thông qua giao thức HTTP, máy chủ giải mã, thực thi yêu cầu trả kết cho client theo cách tương tự Hình 3.1 Cách hoạt động của XML-RPC 3.5 Kiến trúc XML-RPC Server gồm có thành phần: Main Thread Server XML-RPC Một nhiều RPC handle 10 Hình 3.2 Kiến trúc server của XML-RPC Server xử lý yêu cầu client gửi đến thông qua RPC handle tương ứng 3.6 Xây dựng ứng dụng phân tán XML-RPC python Máy khách (client): Tạo đối tượng để biểu diên máy chủ Ví dụ: Proxy = xmlrpc.client.ServerProxy("http://localhost:8000/") Gọi máy chủ nhận kết trả Ví dụ: print(server.examples.getStateName(41)) Máy chủ (server) Khai báo máy server, mô-đun SimpleXMLRPCServer chứa lớp để tạo tảng cho biết nơi lắng nghe yêu cầu gửi đến server=SimpleXMLRPCServer(('localhost',9000),logRequests=True ) Sau đó, định nghĩa hàm phần dịch vụ đăng ký hàm để máy chủ biết cách gọi Đưa máy chủ vào vòng lặp vơ hạn nhận trả lời yêu cầu 3.7 Các đối tượng, hàm sử dụng XML-RPC Python Máy khách (Client) Đối tượng ServerProxy Một ServerProxycá thể có phương thức tương ứng với gọi thủ tục từ xa chấp nhận máy chủ XML-RPC Việc gọi phương thức thực RPC, gửi tên ký hiệu đối số (ví dụ tên phương thức tương tự bị tải với nhiều chữ ký đối số) RPC kết thúc cách trả lại giá trị, hai trở lại liệu loại tuân thủ QTI Faulthoặc ProtocolError đối tượng cho thấy có lỗi 11 + ServerProxy.system.listMethods( ): Phương thức trả danh sách chuỗi + ServerProxy.system.methodSignature( tên ) : Phương thức trả mảng chữ ký cho phương thức + ServerProxy.system.methodHelp( tên ): Phương thức trả chuỗi tài liệu mơ tả việc sử dụng phương thức Đối tượng DataTime xmlrpc.client.DateTime: Lớp khởi tạo giây kể từ thời đại, thời gian, chuỗi thời gian / ngày ISO 8601 datetime.datetime cá thể + decode( chuỗi ): Chấp nhận chuỗi làm giá trị thời gian cá thể + encode( ): Viết mã hóa XML-RPC DateTime mục vào đối tượng luồng Đối tượng nhị phân xmlrpc.client.Binary: Lớp khởi tạo từ liệu byte (có thể bao gồm NUL) Quyền truy cập vào nội dung Binary đối tượng cung cấp thuộc tính: + data: Dữ liệu nhị phân gói gọn Binarycá thể Dữ liệu cung cấp dạng bytes đối tượng + decode( byte ): Chấp nhận bytes đối tượng base64 giải mã làm liệu cá thể + encode( ): Viết mã hóa 64 sở XML-RPC mục nhị phân vào đối tượng luồng Đối tượng lỗi xmlrpc.client.Fault: Một Fault đối tượng bao bọc nội dung thẻ lỗi XML-RPC Các đối tượng lỗi có thuộc tính sau: + faultCode: Một chuỗi loại lỗi + faultString: Chuỗi chứa thơng báo chẩn đốn liên quan đến lỗi Các đối tượng ProtocolError xmlrpc.client.ProtocolError: Một ProtocolErrorđối tượng mô tả lỗi giao thức tầng truyền tải (chẳng hạn lỗi 404 'khơng tìm thấy' máy chủ đặt tên URI không tồn tại) Nó có thuộc tính sau: + URL: URI URL kích hoạt lỗi + errcode: Mã lỗi + errmsg: Thơng báo lỗi chuỗi chẩn đốn + headers: Một dict chứa tiêu đề yêu cầu HTTP / HTTPS kích hoạt lỗi 12 Đối tượng MultiCall Đối MultiCalltượng cung cấp cách để gói gọn nhiều gọi đến máy chủ từ xa thành yêu cầu xmlrpc.client.MultiCall( máy chủ ): Tạo đối tượng sử dụng để gọi phương thức boxcar máy chủ mục tiêu cuối gọi Convenience Functions + xmlrpc.client.dumps( params , methodname = None , methodresponse = None , encoding = None , allow_none = False ): Chuyển đổi params thành yêu cầu XML-RPC + xmlrpc.client.loads( liệu , use_datetime = False , use_builtin_types = False ): Chuyển đổi yêu cầu phản hồi XML-RPC thành đối tượng Python Máy chủ (Server) Các đối tượng SimpleXMLRPCServer Các SimpleXMLRPCServerlớp học dựa socketserver.TCPServervà cung cấp phương tiện việc tạo đơn giản, đứng máy chủ XML-RPC + SimpleXMLRPCServer.register_function( function = None , name = None ): Đăng ký hàm đáp ứng yêu cầu XML-RPC + SimpleXMLRPCServer.register_instance(): Đăng ký đối tượng sử dụng để trưng tên phương thức mà chưa đăng ký sử dụng register_function() + SimpleXMLRPCServer.register_introspection_functions( ): Đăng ký chức nội suy XMLRPC system.listMethods, system.methodHelpvà system.methodSignatur e + SimpleXMLRPCServer.register_multicall_functions( ) : Đăng ký hệ thống chức multicall XML-RPC.multicall + SimpleXMLRPCRequestHandler.rpc_paths: Giá trị thuộc tính phải danh sách phần đường dẫn hợp lệ URL để nhận yêu cầu XML-RPC Các đối tượng DocXMLRPCServer + DocXMLRPCServer.set_server_title( server_title ): Đặt tiêu đề sử dụng tài liệu HTML tạo + DocXMLRPCServer.set_server_name( server_name ): Đặt tên sử dụng tài liệu HTML tạo + DocXMLRPCServer.set_server_documentation( server_documentatio n ): Đặt mô tả sử dụng tài liệu HTML tạo 13 Chương 4: CHƯƠNG TRÌNH DEMO TÍNH SỚ PI ĐƠN GIẢN BẰNG XML-RPC TRÊN NGƠN NGỮ PYTHON Số Pi và cách tính 1.1 Số Pi Số Pi ( ký hiệu là π ) số tốn học có giá trị tỷ số chu vi đường tròn với đường kính đường tròn Hằng số có giá trị xấp xỉ 3,1415926535897 Số π số vơ tỉ, nghĩa khơng thể biểu diên xác dạng tỉ số hai số nguyên Nói cách khác, số thập phân vơ hạn khơng tuần hồn 1.2 Cách tính số Pi Thoạt nhìn số Pi tính từ đường tròn, ta tưởng giống số bình thường khác khảo sát sâu vào số thập phân số kỳ bí Ngày người ta biết số Pi số vô tỷ số siêu việt khơng nghiệm phương trình tốn học đại số khơng thể lấy từ phân số số nguyên hay tự nhiên tác tạo thành Những số thập phân Pi tính xác tới hàng tỷ số Nhưng điều kỳ diệu phân bố số thập phân khơng theo dạng chuỗi hay dãy số đặc biệt biết toán học, ngày người ta chưa thấy có khoảng chuỗi số lặp lại số thập phân hàng tỷ số tính Từ sau kỉ XVII, với phát triển hồn thiện phép tính vi phân, tích phân, cách tính số π có thay đổi chất Có nhiều nhà khoa học đưa cách tính số Pi khác nhau, Ví dụ như: 14 Vì số Pi dãy số thập phân vơ hạn khơng tuần hòa nên cơng thức nhiều người sử dụng phổ biến phương pháp tính tốn dựa vào khai triển theo cấp số hàm lượng giác ngược Ví dụ: Hàm arctan (|x| ≤ 1) Và arctan = π/4 Trong công thức x = ta thu công thức : (công thức Leibniz) Suy số Pi có cơng thức là: π = * (1- +…+ + …) Xây dựng chương trình tính số Pi Do số Pi là số thập phân vô hạn theo công thức: π = * (1- +…+ + …) cụm ngày nhỏ dần nên cho sống nguyên dương c > để làm độ xác số Pi (ví dụ c=0.00001) Tổng tính đến số n đủ lớn cho bất đẳng thức thỏa mãn