Niên luận Xây dựng cấu trúc dữ liệu số nguyên lớn, niên luận công nghệ thông tin, niên luận cntt, Xây dựng cấu trúc dữ liệu số nguyên lớn, Cấu trúc dữ liệu số, Niên luận Xây dựng cấu trúc dữ liệu số nguyên lớn, niên luận công nghệ thông tin, niên luận cntt, Xây dựng cấu trúc dữ liệu số nguyên lớn, Cấu trúc dữ liệu số
TRƯỜNG ĐẠI HỌC TÂY ĐÔ KHOA KỸ THUẬT CÔNG NGHỆ NIÊN LUẬN XÂY DỰNG CẤU TRÚC DỮ LIỆU SỐ NGUYÊN LỚN (BIGINTEGER) GIẢNG VIÊN HƯỚNG DẪN: VƯƠNG HUỲNH LONG SINH VIÊN THỰC HIỆN: Trần Gia Bảo MSSV: 13D480201019 LỚP: ĐẠI HỌC TIN HỌC Cần CầnThơ, Thơ,7/7/2015 2015 Đà Nẵng: 12/2007 Nhận xét giảng viên hướng dẫn . . . . . . . . . . . . . . . . . . . Cần Thơ, ngày tháng Giảng viên chấm năm ĐỀ TÀI: Xây dựng cấu trúc liệu số nguyên lớn (Big-integer) GIẢNG VIÊN HƯỚNG DẪN: GV. VƯƠNG HUỲNH LONG SINH VIÊN THỰC HIỆN: LÂM THÀNH ĐẠT STT HỌ VÀ TÊN MSSV THƯỞNG Trần Gia Bảo 13D480201019 I.HÌNH THỨC (Tối đa 1.0 điểm) Bìa (0.5 điểm) • • ĐIỂM Nhận Xét Tiêu đề: Trường ĐHTĐ, Khoa KTCN, Logo, Loại đồ án Tên đề tài, GVHD, SVTH, Nơi năm thực Font chữ chính, Size chính, Khoảng cách dòng Bố cục (0.5 điểm) • Trang bìa phụ, Trang nhận xét giáo viên, Bảng đánh giá điểm, Mục lục cấp, Tài liệu tham khảo II. NỘI DUNG (Tối đa 4.5 điểm) • • • Giới thiệu (0.5 điểm) Đặt vấn đề Mục tiêu cần đạt Phương pháp thực Lý thuyết (1 điểm) • • Giới thiệu: môi trường lập trình, ngôn ngữ lập trình, … Giới thiệu cú pháp lệnh tiêu biểu. Ứng dụng (2.5 điểm) • • Các giải thuật lưu đồ (Tối đa 1.0 điểm) Giới thiệu chương trình (Tối đa 1.5 điểm) Môi trường lập trình Môi trường cài đặt Các tính Kết luận (0.5 điểm) • • • Kết đạt Hạn chế Hướng phát triển III. DEMO (Tối đa 3.5 điểm) Giao diện (1 điểm) • • Có hệ thống lựa chọn Cách trình bày kết Thao tác (2.5 điểm) • • • Có kiểm tra tính hợp lệ liệu đầu vào Kết hợp với liệu đầu vào Có báo lỗi số trường hợp IV. THƯỞNG (Tối đa 1.0 điểm) Cần thơ, ngày tháng năm 2015 GIẢNG VIÊN CHẤM VƯƠNG HUỲNH LONG Điểm LỜI CẢM ƠN Đầu tiên xin gửi lời cám ơn chân thành đến Thầy Vương Huỳnh Long người trực tiếp hướng dẫn, tận tình giải đáp thắc mắc, giúp đỡ việc hình thành, phát triển hoàn thành niên luận này. Tôi xin chân thành cảm ơn quý Thầy, Cô trường Đại học Tây Đô, người người trực tiếp giảng dạy, truyền đạt kiến thức bổ ích cho tôi, tảng hành trang kiến thức vô cúng quý giá. Nhờ đó, hoàn thành tốt niên luận này. Trong trình làm niên luận không tránh khỏi sai sót. Kính mong nhận góp ý nhận xét từ quý Thầy, Cô bạn để kiến thức ngày hoàn thiện hơn. Xin chân thành cảm ơn! Sinh viên thực Trần Gia Bảo MỤC LỤC CHƯƠNG I : GIỚI THIỆU 1. Sơ lược ngôn ngữ C# BIG-INTEGER .5 1. 1. Ngôn Ngữ C# CHƯƠNG II : ỨNG DỤNG 2. Ứng dụng chương trình .7 2.1. Ý tưởng .7 2.2. Một số cú pháp chương trình, chương trình 2.3. Chương trình tính toán số nguyên cực lớn (BIG-INTEGER) .19 CHƯƠNG III : KẾT LUẬN 27 3. Kết luận 27 3.1. Kết đạt .27 3.2. Hạn chế 27 3.3. Hướng phát triển 27 TÀI LIỆU THAM KHẢO 28 CHƯƠNG I : GIỚI THIỆU 1. Sơ lược ngôn ngữ C# BIG-INTEGER 1. 1. Ngôn Ngữ C# C# ngôn ngữ đơn giản, với khoảng 80 từ khoá, mười kiểu liệu dựng sẵn, C# có tính diễn đạt cao. C# hỗ trợ lập trình có cấu trúc, hướng đối tượng, hướng thành phần. Trọng tâm ngôn ngữ hướng đối tượng lớp. Lớp định nghĩa kiểu liệu mới, cho phép mở rộng ngôn ngữ theo hướng cần giải quyết. C# có từ khoá dành việc khai báo lớp, phương thức, thuộc tính mới. C# hỗ trợ đầy đủ khái niệm trụ cột lập trình hướng đối tượng: đóng gói, thừa kế, đa hình. Định nghĩa lớp C# không đòi hỏi tách rời tập tin tiêu đề với tập tin cài đặt C++. Hơn thế, C# hỗ trợ kiểu sưu liệu mới, cho phép sưu liệu trực tiếp tập tin mã nguồn. Đến biên dịch tạo tập tin sưu liệu theo định dạng XML. C# hỗ trợ khái niệm giao diện, interfaces. Một lớp kế thừa lớp cha cài đặt nhiều giao diện. C# có kiểu cấu trúc, struct không giống C++. Cấu trúc kiểu hạng nhẹ bị giới hạn. Cấu trúc thừa kế lớp hay kế thừa có thê cài đặt giao diện. C# cung cấp đặc trưng lập trình hướng thành phần property, kiện dẫn hướng khai báo. Lập trình hướng component hỗ trợ CLR thông qua siêu liệu metadata. Siêu liệu mô tả lớp bao gồm phương thức thuộc tính, thông tin bảo mật… Assembly tập hợp tập tin mà theo cách nhìn lập trình viên thư viện liên kết động DLL hay tập tin EXE. Trong .NET assembly đơn vị việc tái sử dụng, xác định phiên bản, bảo mật phân phối. CLR cung cấp số lớp để thao tác với assembly. C# cho truy cập trực tiếp dùng trỏ kiểu C++, vùng mã xem không an toàn. CLR không thực thi việc thu dọn rác tự động đối tượng tham chiếu trỏ lập trình viên tự giải phóng. 1.2. Môi trường lập trình Microsoft Visual Studio: Microsoft Visual Studio môi trường phát triển tích hợp (IDE) từ Microsoft. Nó sử dụng để phát triển chương trình máy tính cho Microsoft Windows, trang web, ứng dụng web dịch vụ web. Visual Studio sử dụng tảng phát triển phần mềm Microsoft Windows API, Windows Forms, Windows Presentation Foundation, Windows Store Microsoft Silverlight. Nó sản xuất hai ngôn ngữ máy mã số quản lý. Visual Studio bao gồm trình soạn thảo mã hỗ trợ IntelliSense cải tiến mã nguồn. Trình gỡ lỗi tích hợp hoạt động trình gỡ lỗi mức độ mã nguồn gỡ lỗi mức độ máy. Công cụ tích hợp khác bao gồm mẫu thiết kế hình thức xây dựng giao diện ứng dụng, thiết kế web, thiết kế lớp thiết kế giản đồ sở liệu. Nó chấp nhận plug-in nâng cao chức hầu hết cấp bao gồm thêm hỗ trợ cho hệ thống quản lý phiên (như Subversion) bổ sung thêm công cụ biên tập thiết kế trực quan cho miền ngôn ngữ cụ thể công cụ dành cho khía cạnh khác quy trình phát triển phần mềm. Visual Studio hỗ trợ nhiều ngôn ngữ lập trình khác cho phép trình biên tập mã gỡ lỗi để hỗ trợ (mức độ khác nhau) ngôn ngữ lập trình. Các ngôn ngữ tích hợp gồm có C,[1] C++ C++/CLI (thông qua Visual C++), VB.NET (thông qua Visual Basic.NET), C thăng (thông qua Visual C#) F thăng (như Visual Studio 2010). Hỗ trợ cho ngôn ngữ khác J++/J thăng, Python Ruby thông qua dịch vụ cài đặt riêng rẽ. Nó hỗ trợ XML/XSLT, HTML/XHTML, JavaScript CSS. Microsoft cung cấp phiên "Express" phiên miễn phí Visual Studio. 1.3. Khái niệm số nguyên lớn Big-Integer Big-Integer cấu trúc cho số nguyên cực lớn, thường thấy ngôn ngữ lập trình nay. Chúng ta sử dụng muốn đại diện cho số nguyên lớn giới hạn cho phép có. Một ví dụ đại diện cho số nguyên lớn để làm việc với mục đích mã hóa. Trong thuật toán mật mã thực sử dụng đặc biệt hiệu hơn, sử dụng BigInteger để nhân số nguyên lớn với cách tốt để hiển thị xảy cách logic mã mật. CHƯƠNG II : ỨNG DỤNG 2. Ứng dụng chương trình 2.1. Ý tưởng Trong ngôn ngữ lập trình, kiểu số thường bị giới hạn mức đó. Ví dụ kiểu liệu int ngôn ngữ C++ thường giới hạn mức–2,147,483,648 đến 2,147,483,647. Tuy nhiên có lúc ta cần phải thao tác với số vượt giới hạn này. Do ta cần phải có phương pháp khác để giải vấn đề này. Trước tiên biến dãi số thành dạng chuỗi (String) sau thực tính toán biến đổi số cho kết nhất. 2.2. a) Các hàm : Một số cú pháp chương trình, chương trình b) Phép cộng : Cộng: aaaaaaaaaaaaaaaaaaaa bbb Bước 1: thêm vào bên trái cho dài aaaaaaaaaaaaaaaaaaaa 000000000000000bbb Bước 2: Khởi tạo biến nhớ n = 0, xâu r rỗng. Cộng từ phải qua trái, cặp chữ số với thêm biến nhớ n. Nếu tổng c (a+b+n) lớn lấy trừ 10 thu c gán lại biến nhớ n = (không nhớ lên tận + + 19). Nếu tổng c nhỏ 10 thu c gán biến nhớ n = 0. Lưu giá trị c, nhét vào sau r. Sau cộng đến cặp chữ số bên trái nhất, nhớ thêm vào sau r. Bước 3: Đảo ngược chuỗi r, ta có tổng. // Phép cộng public string add(string strNum1, string strNum2) { // Phần xử lý số thập phân--------// số nguyên thêm .0 if (strNum1.IndexOf('.') < 0) strNum1 = strNum1 + ".0"; if (strNum2.IndexOf('.') < 0) strNum2 = strNum2 + ".0"; //tách số thành hai phần nguyên thập phân string strnum1_p1 = strNum1.Substring(0, strNum1.IndexOf('.')); string strnum1_p2 = strNum1.Substring(strNum1.IndexOf('.') + 1); string strnum2_p1 = strNum2.Substring(0, strNum2.IndexOf('.')); string strnum2_p2 = strNum2.Substring(strNum2.IndexOf('.') + 1); bool flag = false; string strNumBigger = ""; if (strNum1.Length >= strNum2.Length) strNumBigger = strNum1; else strNumBigger = strNum2; if (strnum1_p1.Length == strnum2_p1.Length) flag = true; //thêm số vào trước sau dấu chấm cho if (strnum1_p1.Length > strnum2_p1.Length) strnum2_p1 = strnum2_p1.PadLeft(strnum1_p1.Length, '0'); else if (strnum1_p1.Length < strnum2_p1.Length) strnum1_p1 = strnum1_p1.PadLeft(strnum2_p1.Length, '0'); if (strnum1_p2.Length > strnum2_p2.Length) strnum2_p2 = strnum2_p2.PadRight(strnum1_p2.Length, '0'); else if (strnum1_p2.Length < strnum2_p2.Length) strnum1_p2 = strnum1_p2.PadRight(strnum2_p2.Length, '0'); // lấy vị trí dấu chấm int x = strnum1_p1.Length; //Ghép hai thành phân thành chuỗi (bỏ dấu chấm) đưa vào mảng int[] strNum1 = strnum1_p1 + strnum1_p2; strNum2 = strnum2_p1 + strnum2_p2; int[] arrNum1 = new int[strNum1.Length]; int[] arrNum2 = new int[strNum2.Length]; for (int i = 0; i < strNum1.Length; i++) { arrNum1[i] = Convert.ToInt32(strNum1.Substring(i, 1)); } for (int i = 0; i < strNum2.Length; i++) { arrNum2[i] = Convert.ToInt32(strNum2.Substring(i, 1)); } //-----------------------------//Đảo ngược chuỗi Array.Reverse(arrNum1); Array.Reverse(arrNum2); //số mũ 10 số phần tử mảng int[] int[] arrResult = new int[strNum1.Length + 1]; int phanbu = 0; for (int i = 0; i < strNum1.Length; i++) { arrResult[i] = arrNum1[i] + arrNum2[i] + phanbu; if (arrResult[i] >= 10) { arrNumBig[i] = Convert.ToInt32(strNumBig.Substring(i, 1)); } for (int i = 0; i < strNumSmall.Length; i++) { arrNumSmall[i] = Convert.ToInt32(strNumSmall.Substring(i, 1)); } //--------------------//Đảo ngược chuỗi Array.Reverse(arrNumBig); Array.Reverse(arrNumSmall); //số mũ 10 số phần tử mảng int[] int[] arrResult = new int[strNumBig.Length]; int phanbu = 0; for (int i = 0; i < strNumBig.Length; i++) { arrNumSmall[i] = arrNumSmall[i] + phanbu; if (arrNumBig[i] >= arrNumSmall[i]) { arrResult[i] = arrNumBig[i] - arrNumSmall[i]; phanbu = 0; } else { arrResult[i] = arrNumBig[i] + 10 - arrNumSmall[i]; phanbu = 1; } } //Đảo ngược chuỗi Result Array.Reverse(arrResult); StringBuilder strbd = new StringBuilder(arrResult.Length); foreach (int i in arrResult) strbd.Append(i); //đưa dấu chấm vào Insert() strbd.Insert(x, "."); string strResult = strbd.ToString(); //nếu trước dấu chấm có > số để lại số string str1 = strResult.Substring(0, strResult.IndexOf('.')); string str2 = strResult.Substring(strResult.IndexOf('.') + 1); Regex regex = new Regex(@"^0+$"); Match m = regex.Match(str1); if (m.Success) strResult = "0." + str2; else strResult = str1 + "." + str2; if (strNumBig == strNum1) strResult = strResult; else if (strNumBig == strNum2) strResult = "-" + strResult; //----txtResult.Text = strResult; } } } //Hàm trừ hai số nguyên (số_1 >= số_2) public string SubInt(string strNumBig, string strNumSmall) { string strResult = ""; //thêm số vào đầu chuổi số nhỏ cho đủ strNumSmall = strNumSmall.PadLeft(strNumBig.Length, '0'); //Đưa vào mảng int[] int[] arrNumBig = new int[strNumBig.Length]; int[] arrNumSmall = new int[strNumSmall.Length]; for (int i = 0; i < strNumBig.Length; i++) { arrNumBig[i] = Convert.ToInt32(strNumBig.Substring(i, 1)); } for (int i = 0; i < strNumSmall.Length; i++) { arrNumSmall[i] = Convert.ToInt32(strNumSmall.Substring(i, 1)); } d) Phép nhân private void btnMul_Click(object sender, System.EventArgs e) { if (!checkInput()) { MessageBox.Show("Input Number is not valid"); txtNumber1.Focus(); } else { //chuyển số thập phần thành số nguyên lấy vị trí dấu chấm từ phải sang string[] strTempN1 = myConvert(txtNumber1.Text).Split(new char[] { '~' }); string[] strTempN2 = myConvert(txtNumber2.Text).Split(new char[] { '~' }); int pos = Convert.ToInt32(strTempN1[1]) + Convert.ToInt32(strTempN2[1]); //Phép nhân hai số nguyên string strNum1 = strTempN1[0]; string strNum2 = strTempN2[0]; //Đưa vào mảng int[] int[] arrNum2 = new int[strNum2.Length]; for (int i = 0; i < strNum2.Length; i++) { arrNum2[i] = Convert.ToInt32(strNum2.Substring(i, 1)); } //Mãng String lưu trữ số hạng string[] arrstr = new string[strNum2.Length]; int x = 0; for (int i = strNum2.Length - 1; i >= 0; i--) { arrstr[x] = Mul(strNum1, arrNum2[i]); //thêm số cuối chuỗi arrstr[x] = arrstr[x].PadRight(arrstr[x].Length + x, '0'); x++; } //cộng số hạng nguyên hàm addInt() với string strResult = ""; for (int i = 0; i < arrstr.Length; i++) { strResult = addInt(strResult, arrstr[i]); } //nếu pos > strResult.Length (vd: 0.34/0.03) thêm trước strResult = strResult.PadLeft(pos + 1, '0'); //đưa dấu chấm vào strResult = strResult.Insert(strResult.Length - pos, "."); if (strResult.IndexOf('.') == strResult.Length - 1) strResult = strResult.Substring(0, strResult.Length - 1); txtResult.Text = strResult; } } e) Phép chia Chia 12415 cho 23 chia 23 có chữ số. Lấy 12 chia cho 23, 0, dư 12. Hạ xuống chia Tiếp tục tính 124 chia cho 23 tìm thương phần dư Bước 1. Gán thương t=0; a=124; b=023 Bước 2. Nếu a nhỏ b thương t dư a Bước 3. Gán a=a-b tăng t lên Quay lại bước 2. chia Làm tương tự không chữ số để hạ xuống thương dãy số bên trái (cắt bỏ bên trái), số dư dãy số bên phải. chia //Phép chia ------------- btnDiv_Click private void btnDiv_Click(object sender, System.EventArgs e) { if (!checkInput()) { MessageBox.Show("Input Number is not valid"); txtNumber1.Focus(); } else { string strNum1 = txtNumber1.Text; string strNum2 = txtNumber2.Text; // Phần xử lí số thập phần ---------------// số nguyên thêm .0 if (strNum1.IndexOf('.') < 0) strNum1 = strNum1 + ".0"; if (strNum2.IndexOf('.') < 0) strNum2 = strNum2 + ".0"; // tách số thành hai phần nguyên phần thập phân string strnum1_p1 = strNum1.Substring(0, strNum1.IndexOf('.')); string strnum1_p2 = strNum1.Substring(strNum1.IndexOf('.') + 1); string strnum2_p1 = strNum2.Substring(0, strNum2.IndexOf('.')); string strnum2_p2 = strNum2.Substring(strNum2.IndexOf('.') + 1); // thêm số vào sau dấu . cho đủ if (strnum1_p2.Length > strnum2_p2.Length) strnum2_p2 = strnum2_p2.PadRight(strnum1_p2.Length, '0'); else if (strnum1_p2.Length < strnum2_p2.Length) strnum1_p2 = strnum1_p2.PadRight(strnum2_p2.Length, '0'); // Ghép thành phần thành chuổi (bỏ dấu chấm) strNum1 = strnum1_p1 + strnum1_p2; strNum2 = strnum2_p1 + strnum2_p2; // Bỏ số có strNum1 = MyRemove(strNum1); strNum2 = MyRemove(strNum2); // MessageBox.Show(strNum1 +"~"+ strNum2); // Thực phép chia số nguyên ------------------if (strNum1 == strNum2) { txtResult.Text = "1"; } else //Khi số không { string strResult = ""; //Nếu số bị chia (strNum1) lớn if (NumBigger(strNum1, strNum2) == strNum1) { string strtemp = strNum1.Substring(0, strNum2.Length); string strBookmark = strtemp; string phandu = ""; bool flag = true; while (phandu != "0" || strtemp != "00") { //kết cố tối đa 80 chữ số (tính dấu chấm) if (strResult.Length == 80) break; string[] arrKetqua = DivInt(strtemp, strNum2).Split( new char[] { '~' }); strResult += arrKetqua[0]; phandu = arrKetqua[1]; // MessageBox.Show("~"+arrKetqua[0]+"~"+arrKetqua[1]+"~"); if (strBookmark.Length < strNum1.Length) //vẫn số để hạ { strBookmark = strNum1.Substring(0, strBookmark.Length + 1); //hạ số xuống để tiếp tục chia strtemp = phandu + strNum1.Substring(strBookmark.Length - 1, 1); if (strtemp.IndexOf('0') == 0) //Ex: 0.34/0.03 strtemp = strtemp.Substring(1); } else if (strBookmark.Length == strNum1.Length) //hết số để hạ { if (flag == true) { strResult += "."; flag = false; } //thêm vào phần dư để tiếp tục chia strtemp = phandu + "0"; //nếu thêm mà strtemp nhỏ số bị chia if (NumBigger(strtemp, strNum2) == strNum2) { // strResult += "0"; strtemp = phandu + "0"; } } } } //nếu số chia lớn else if (NumBigger(strNum1, strNum2) == strNum2) { strResult = "0.0"; while (NumBigger(strNum1, strNum2) == strNum2) { strNum1 += "0"; strResult += "0"; } bool flag = true; if (strNum1.Length > strNum2.Length) { flag = false; } strResult = strResult.Substring(0, strResult.Length - 2); // thực tương tự phần =============== string strtemp = strNum1.Substring(0, strNum2.Length); string strBookmark = strtemp; string phandu = ""; while (phandu != "0") { // kết có tối đa 40 chữ số (tính dấu chấm) if (strResult.Length == 40) break; string[] arrKetqua = DivInt(strtemp, strNum2).Split( new char[] { '~' }); strResult += arrKetqua[0]; phandu = arrKetqua[1]; if (strBookmark.Length < strNum1.Length) //vẫn số để hạ { strBookmark = strNum1.Substring(0, strBookmark.Length + 1); //hạ số xuống để tiếp tục chia strtemp = phandu + strNum1.Substring(strBookmark.Length - 1, 1); } else if (strBookmark.Length == strNum1.Length) //hết số để hạ { //thêm vào phần dư để tiếp tục chia strtemp = phandu + "0"; //nếu thêm mà strtemp nhỏ số bị chia if (NumBigger(strtemp, strNum2) == strNum2) { // strResult += "0"; strtemp = phandu + "0"; } } } if (flag == false) { strResult = "0." + strResult.Substring(3); } } //nếu có dấu chấm cuối bỏ if (strResult.IndexOf('.') == strResult.Length - 1) strResult = strResult.Substring(0, strResult.Length - 1); txtResult.Text = strResult; // txtResult.Text = "~"+strNum1 +"~"+ strNum2 +"~" + strResult; } } } 2.3. Chương trình tính toán số nguyên cực lớn (BIG-INTEGER) Đây chương trình mô máy tính để tính toán số nguyên cực lớn. Chương trình có chức tính toán cộng, trừ, nhân, chia, lấy lũy thừa, chia lấy dư. 2.2. Sử dụng chương trình Nhập vào số bất kì, chọn phép tính phím lệnh. Kết trả ô kết phía dưới. 2.2. Hình ảnh demo a) Phép cộng b) Phép trừ c) Phép nhân d) Phép chia CHƯƠNG III : KẾT LUẬN 3. Kết luận 3.1. Kết đạt Sau làm xong niên luận có thêm nhiều kinh nghiệm kiến thức phục vụ việc học tập tôi, không qua lý thuyết mà biết nhiều thực hành ứng dụng ngôn ngữ lập trình C#. Nhờ biết giải thuật máy tính, nâng cao khả lập trình thân. 3.2. Hạn chế - Cách sử dụng ngôn ngữ lập trình kém. - Các cú pháp dài dòng, thô sơ. - Chương trình Demo nhiều lỗi. 3.3. Hướng phát triển Từ kinh nghiệm rút sau làm xong niên luận thu từ chương trình nhỏ bổ trợ cho kiến thực học tập làm việc để tương lai viết phần mềm hoàn chỉnh hơn, có ích hơn. TÀI LIỆU THAM KHẢO [1]. Vương Huỳnh Long – “Phân tích thiết kế thuật toán” - Khoa Kỹ thuật Công nghệ, Trường Đại học Tây Đô. [2]. Lê Minh Hoàng – “Giải thuật & lập trình” – Đại học sư phạm Hà Nội, 19992002 [3]. An Văn Minh, Trần Hùng Cường – “Cấu trúc liệu giải thuật” – Nxb Thông tin Truyền thông. [4]. Nguyễn Ngọc Bình Phương, Thái Thanh Phong – “Các giải pháp lập trình C#" – Nxb Giao thông vận tải. [5]. Kim Se Hoon – “Tìm hiểu thuật toán tính toán BigNumber - hiểu biết cấu trúc cấu trúc liệu” – Hanbit eBook, Nxb Realtime26, 21/5/2013. [6]. Michael McMillan – “Data Structure and Algorithms Using C#”– Đại học Cambridge, 2008. [7]. Andrew Moore – “Data Visual Studio All-in-One For Dummies”– Nxb Dummies, Make Everything Easier!, 2010 [8]. Địa tài liệu Visual C#: http://msdn.microsoft.com/en-us/library/vstudio/kx37x362(v=vs.110).aspx [...]... Đại học sư phạm Hà Nội, 19992002 [3] An Văn Minh, Trần Hùng Cường – Cấu trúc dữ liệu và giải thuật” – Nxb Thông tin và Truyền thông [4] Nguyễn Ngọc Bình Phương, Thái Thanh Phong – “Các giải pháp lập trình C#" – Nxb Giao thông vận tải [5] Kim Se Hoon – “Tìm hiểu các thuật toán tính toán BigNumber - hiểu biết về cấu trúc và cấu trúc dữ liệu – Hanbit eBook, Nxb Realtime26, 21/5/2013 [6] Michael McMillan... "~"+strNum1 +"~"+ strNum2 +"~" + strResult; } } } 2.3 Chương trình tính toán số nguyên cực lớn (BIG-INTEGER) Đây là chương trình mô phỏng máy tính để tính toán các số nguyên cực lớn Chương trình có các chức năng cơ bản trong tính toán như cộng, trừ, nhân, chia, lấy lũy thừa, chia lấy dư 2.2 Sử dụng chương trình Nhập vào lần lượt 2 con số bất kì, chọn 1 phép tính trên các phím lệnh Kết quả sẽ được trả về ô... strnum1_p2; strNum2 = strnum2_p1 + strnum2_p2; // Bỏ các số 0 nếu có strNum1 = MyRemove(strNum1); strNum2 = MyRemove(strNum2); 3 9 // MessageBox.Show(strNum1 +"~"+ strNum2); // Thực hiện phép chia 2 số nguyên if (strNum1 == strNum2) { txtResult.Text = "1"; } else //Khi 2 số không bằng nhau { string strResult = ""; //Nếu số bị chia (strNum1) lớn hơn if (NumBigger(strNum1, strNum2) == strNum1) {... hơn Trong hàm trừ, để đơn giản ta chỉ xét trường hợp số lớn trừ số nhỏ hơn private void btnSub_Click(object sender, System.EventArgs e) { if (!checkInput()) { MessageBox.Show("Input Number is not valid"); txtNumber1.Focus(); } else { string strNum1 = txtNumber1.Text; string strNum2 = txtNumber2.Text; // phần xử lý số thập phân -//nếu là số nguyên thì thêm 0 if (strNum1.IndexOf('.') < 0) strNum1... strResult = strResult; else if (strNumBig == strNum2) strResult = "-" + strResult; // txtResult.Text = strResult; } } } //Hàm trừ hai số nguyên (số_ 1 >= số_ 2) public string SubInt(string strNumBig, string strNumSmall) { string strResult = ""; //thêm số 0 vào đầu chuổi số nhỏ hơn cho đủ strNumSmall = strNumSmall.PadLeft(strNumBig.Length, '0'); //Đưa vào mảng int[] int[] arrNumBig = new int[strNumBig.Length];... ở bên trái), số dư là dãy số bên phải 1 2 4 1 5 chia 2 3 0 1 2 5 4 9 1 2 2 5 1 8 //Phép chia - btnDiv_Click private void btnDiv_Click(object sender, System.EventArgs e) { if (!checkInput()) { MessageBox.Show("Input Number is not valid"); txtNumber1.Focus(); } else { string strNum1 = txtNumber1.Text; string strNum2 = txtNumber2.Text; // Phần xử lí số thập phần -// nếu là số nguyên thì thêm... valid"); txtNumber1.Focus(); } else { //chuyển số thập phần thành số nguyên và lấy về vị trí dấu chấm từ phải sang string[] strTempN1 = myConvert(txtNumber1.Text).Split(new char[] { '~' }); string[] strTempN2 = myConvert(txtNumber2.Text).Split(new char[] { '~' }); int pos = Convert.ToInt32(strTempN1[1]) + Convert.ToInt32(strTempN2[1]); //Phép nhân hai số nguyên string strNum1 = strTempN1[0]; string strNum2... } else if (strBookmark.Length == strNum1.Length) //hết số để hạ { if (flag == true) { strResult += "."; flag = false; } //thêm 0 vào phần dư để tiếp tục chia strtemp = phandu + "0"; //nếu đã thêm 0 mà strtemp vẫn nhỏ hơn số bị chia if (NumBigger(strtemp, strNum2) == strNum2) { // strResult += "0"; strtemp = phandu + "0"; } } } } //nếu số chia lớn hơn else if (NumBigger(strNum1, strNum2) == strNum2)... string strNumBig = ""; string strNumSmall = ""; // Tìm số lớn hơn for (int i = 0; i < strNum1.Length; i++) { if (arrNum1[i] > arrNum2[i]) { strNumBig = strNum1; break; } else if (arrNum1[i] < arrNum2[i]) { strNumBig = strNum2; break; } } if (strNumBig == "") { txtResult.Text = "0"; // MessageBox.Show("2 số bằng nhau"); } else //nếu 2 số không bằng nhau { if (strNumBig == strNum1) strNumSmall =... bất kì, chọn 1 phép tính trên các phím lệnh Kết quả sẽ được trả về ô kết quả phía dưới 2.2 Hình ảnh demo a) Phép cộng b) Phép trừ c) Phép nhân d) Phép chia CHƯƠNG III : KẾT LUẬN 3 Kết luận 3.1 Kết quả đạt được Sau khi làm xong niên luận tôi đã có thêm nhiều kinh nghiệm và kiến thức phục vụ việc học tập của tôi, không chỉ qua lý thuyết mà còn biết nhiều hơn về thực hành và các ứng dụng cơ bản của ngôn