Sáng kiến kinh nghiệm Ứng dụng kiểu xâu trong phép toán số nguyên lớn

doc 14 trang lethu 05/12/2025 120
Bạn đang xem tài liệu "Sáng kiến kinh nghiệm Ứng dụng kiểu xâu trong phép toán số nguyên lớn", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

Tóm tắt nội dung tài liệu: Sáng kiến kinh nghiệm Ứng dụng kiểu xâu trong phép toán số nguyên lớn

Sáng kiến kinh nghiệm Ứng dụng kiểu xâu trong phép toán số nguyên lớn
 Ứng dụng kiểu xâu trong phép toán với số nguyên lớn
 I. ĐẶT VẤN ĐỀ
 Tin học là môn học khoa học có tính thực tiễn cao, luôn đòi hỏi người học 
không chỉ có lĩnh hội những kiến thức trên lớp mà còn cần phải có những hiểu 
biết thực tế rộng gắn liền với môn Tin học thì việc học mới thực sự có hiệu quả 
và dễ nhớ kiến thức. Trong thực tế hiện nay, sự hiểu biết thực tế của các em về 
kiến thức thực tế môn Tin học lại rất hạn chế. Vì vậy khi học, các em sẽ trở nên 
bị động, không vận dụng được kiến thức đã học vào thưc tiễn. Do đó, khi ghi 
nhớ kiến thực học sinh dễ quên. Cũng vì lẽ đó, môn Tin học THPT luôn được 
học sinh xem là một môn học khó và thiếu hứng thú học tập.
 Lập trình là vấn đề tương đối mới đối với học sinh THPT. Trong quá 
trình lập trình nếu học sinh không nắm vững các kiến thức để viết chương trình 
thì thường dẫn đến các sai sót dẫn tới chương trình không đạt được kết quả như 
mong muốn.
 Khi làm việc với số nguyên lớn có thể làm cho học sinh hay mắc phải 
những nhó khăn thư thế. Chính vì vậy, tôi mạnh dạn viết sáng kiến “ỨNG 
DỤNG KIỂU XÂU TRONG PHÉP TOÁN SỐ NGUYÊN LỚN ”. Hy vọng 
rằng những kinh nghiệm này của tôi có thể góp phần giúp các em học sinh hiểu 
bài hơn và có hứng thú hơn với môn Tin học.
 1 Ứng dụng kiểu xâu trong phép toán với số nguyên lớn
 - Hiện thị kết quả dạng xâu (hoặc mảng).
 3.2 Tổ chức thực hiện: 
 Bài toán1 : “Hãy tính tổng của hai số tự nhiên lớn”. 
Bài toán này có nhiều cách giải sau đây là lời giải tự nhiên nhất nhưng cũng rất 
hiệu quả và dễ hiểu như sau:
 * Ý tưởng:
 - Hai số được lưu dưới dạng xâu. Các số có thể đọc ra từ tệp lưu vào biến 
kiểu xâu hoặc các số có thể được nhập từ màn hình lưu vào biến kiểu xâu.
 - So sánh độ dài hai xâu, tìm độ dài xâu lớn nhất.
 - Thêm kí tự '0' vào xâu có độ dài ngắn hơn để hai xâu bằng nhau.
 - Thực hiện phép cộng hai xâu có độ dài bằng nhau. Thực hiện phép cộng 
từ cuối lên đầu (tương tự như cộng ở số được thực hiện từ hàng đơn vị). Trong 
quá trình cộng có sử dụng thủ tục trung gian chuyển đổi từ xâu sang số và ngược 
lại (lưu ý phần nhớ của phép cộng).
 - Kết quả đưa trực tiếp vào xâu.
 - Hiển thị kết quả dạng xâu.
 * Các bước thực hiện:
 - Hai số được nhập từ bàn phím và lưu vào hai biến kiểu xâu st1 và st2.
 - So sánh hai xâu st1 và st2. Thêm kí tự ‘0’ vào xâu ngắn hơn để hai xâu 
có độ dài bằng nhau.
 - Thực hiện phép cộng hai xâu có có độ dài bằng nhau, cộng từ cuối lên 
đầu (tương tự như cộng ở số được thực hiện từ hàng đơn vị). Các kí tự trong xâu 
lần lượt chuyển thành số (sử dụng thủ tục chuyển đổi) rồi thực hiện phép cộng. 
Kết quả cộng các số được chuyển ngược lại thành xâu (h1).
 nho:=0; h:=''; 
 For i:=Max downto 1 do
 Begin 
 val(s1[i],a,code); 
 val(s2[i],b,code);
 3 Ứng dụng kiểu xâu trong phép toán với số nguyên lớn
h:=h1+h; End; 
if nho=1 Then h:='1'+h; 
cong:=h;
 End;
 Begin
 write('nhap so thu nhat'); readln(st1);
 write('nhap so thu hai'); readln(st2);
 writeln('ket qua la', cong(st1,st2));
 readln;
 End. 
Nhận xét:
 - Chương trình trên thực hiện việc cộng hai số được nhập từ bàn phím.
 - Trong chương trình có sử dụng chương trình con Cong(s1,s2:String): 
String để tính kết quả phép cộng hai xâu s1, s2.
 - Kết quả phép cộng được hiện lên trên màn hình.
 - Ta có thể thay đổi chương trình bằng cách sử dụng tệp để đọc dữ liệu 
vào và ghi kết quả ra.
 * Bây giờ chúng ta tìm hiểu giải thuật kinh điển cho dạng toán này như 
sau:
 - Giả sử hai số được cho bởi chuổi s1,s2
 - Thêm kí tự ‘0’ vào bên trái số có chiều dài ngắn để 2 chuổi s1,s2 có 
chiều dài bằng nhau và giả sử chiều dài lúc đó là Max.
 - Kết quả được đưa vào mảng C.
 - Tính c[i]=a[i]+b[i] với mọi i(i=1..Max)
 Ví dụ: a=986 b=927
 Thì c[1]=18; c[2]=10; c[3]=13;
 - Để C là mảng số kết quả cần biến đổi một chút nữa như sau:
 5 Ứng dụng kiểu xâu trong phép toán với số nguyên lớn
 c[i]:=c[i] Mod 10;
 End;
 For i:=0 to Max do Write(c[i]);
 End; 
BEGIN
 cong;
 readln;
END. 
Nhận xét: 
 - Chương trình trên thực hiện việc cộng hai số nguyên lớn được nhập từ 
bàn phím. Kết quả của phép cộng được hiển thị trên màn hình.
 - Ngoài ra ta có thể sử dụng tệp để đọc các số nguyên lớn vào và ghi kết 
quả ra
Bài toán 2: Chương trình trừ 2 số tự nhiên lớn
* Ý tưởng:
 - Hai số được lưu dưới dạng xâu. Các số có thể đọc ra từ tệp lưu vào biến 
kiểu xâu hoặc các số có thể được nhập từ màn hình lưu vào biến kiểu xâu.
 - So sánh độ dài hai xâu, tìm độ dài xâu lớn nhất
 - Thêm kí tự '0' vào xâu có độ dài ngắn hơn để hai xâu bằng nhau.
 - So sánh hai xâu có độ dài bằng nhau. 
 + Nếu xâu lưu số bị trừ lớn hơn xâu lưu số trừ. Thực hiện phép trừ hai 
xâu từ cuối lên đầu (tương tự như phép trừ trong toán học). Sử dụng thủ tục 
chuyển đổi xâu thành số trong quá trình tính toán.
 + Nếu xâu lưu số bị trừ bé hơn xâu lưu số trừ thực hiện đặt dấu trừ 
(-) vào phần đầu kết quả, đồng thời thực hiện hoán đổi hai xâu cho nhau và thực 
hiện phép trừ tương tự như ở trên.
* Các bước thực hiện:
 7 Ứng dụng kiểu xâu trong phép toán với số nguyên lớn
 Begin
 L1:=length(s1);
 L2:=length(s2);
if L1>L2 Then Max:=L1 Else Max:=L2;
 For i:=L2+1 to Max do s2:='0'+s2;
 For i:=L1+1 to Max do s1:='0'+s1;
dau:=' ';
IF s2>s1 Then
 Begin
 dau:='-'; s:=s2; s2:=s1; s1:=s;
 End;
 For i:=1 to 255 do C[i]:=0;
 For i:=1 to Max do
Begin
 val(s1[i],h1[i],code);
 val(s2[i],h2[i],code);
 End;
 For i:=Max downto 1 do
 IF h1[i]<h2[i] Then
 Begin
 c[i]:=h1[i]+10-h2[i];
 h2[i-1]:=h2[i-1]+1;
 End Else
 c[i]:=h1[i]-h2[i];
Write(dau);
For i:=1 to Max do Write(c[i]);
End;
 9 Ứng dụng kiểu xâu trong phép toán với số nguyên lớn
 - Ta có: L1:=length(s1); L2:=length(s2);
 For i:=1 to L1 do 
 For j:=1 to L2 do
 Begin 
 val(s1[i],A,code);
 val(s2[j],B,code);
 c[i+j]:=c[i+j]+a*b; 
 End;
 - Xử lý mảng kết quả:
 For i:=L1+L2 downto 3 do
 Begin
 c[i-1]:=c[i-1] + c[i] Div 10;
 c[i]:=c[i] Mod 10;
 End; 
 Chương trình:
 Program nhan_hai_so;
 Var s1,s2:String;
 C :Array[0..10000] of byte;
 Procedure nhan;
 Var a,b,i,j,L1,L2,code:word;
 Begin
 Write(' Nhap so thu nhat'); Readln(s1);
 Write(' Nhap so thư hai'); Readln(s2);
 L1:=length(s1); L2:=length(s2); 
 For i:=1 to l1+l2 do C[i]:=0;
 For i:=1 to L1 do For j:=1 to L2 do
 Begin 
val(s1[i],A,code);
 11 Ứng dụng kiểu xâu trong phép toán với số nguyên lớn
 III. KẾT LUẬN
 Ngôn ngữ lập trình nói chung đóng vai trò rất quan trọng trong việc xây 
dựng các chương trình ứng dụng để phục vụ cho cuộc sống. Nhờ sự phát triển 
của tin học (trong đó các nhà lập trình chuyên nghiệp đóng vai trò không nhỏ) 
mà hiện nay hầu hết các lĩnh vực trong xã hội đã ứng dụng được tin học để giải 
quyết công viêc nhanh, hiệu quả và chính xác hơn.
 Hiện nay, ngôn ngữ lập trình Pascal đã trở thành ngôn ngữ lập trình phổ 
biến nhất trên thế giới sử dụng trong lĩnh vực giảng dạy. Trong quá trình giảng 
dạy, các thầy cô có thể đưa ra các vấn đề như lập trình các game nhỏđể các 
em có thể chứng tỏ được khả năng của mình làm cho học sinh yêu thích môn 
học, ham học hỏi và sáng tạo.
 Đề tài này mang tính thực tiễn rất cao cụ thể là: Các em có thể sử dụng 
kiến thức lập trình để gải các bài toán thực tế thường gặp, các bài toán tính toán 
với số lớn. Kết quả là có rất nhiều em đã dễ dàng vận dụng được kiến thức để 
giải các bài toán lặp do giáo viên đặt ra. 
 13

File đính kèm:

  • docsang_kien_kinh_nghiem_ung_dung_kieu_xau_trong_phep_toan_so_n.doc