Sáng kiến kinh nghiệm Ứng dụng kiểu xâu trong phép toán số nguyên lớn
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
Ứ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.
13File đính kèm:
sang_kien_kinh_nghiem_ung_dung_kieu_xau_trong_phep_toan_so_n.doc

