LỚP 12A5 - TỨ KỲ HẢI DƯƠNG
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.
TIN TỨC CẬP NHẬT

Một hướng mở rộng phạm vi số nguyên

2 posters

Go down

Một hướng mở rộng phạm vi số nguyên Empty Một hướng mở rộng phạm vi số nguyên

Bài gửi by pkt_zz 13/6/2010, 3:46 am

Nguồn: [You must be registered and logged in to see this link.]
Ta biết rằng ở trên máy vi tính đối với một số ngôn ngữ lập trình, số nguyên dương n có giới hạn n < 32768 vì vậy, việc tính toán trên số nguyên ngoài giới hạn trên không thể thực hiện được nhờ các phép toán của máy tính. Chúng ta có thể khắc phục bằng cách biểu diễn số nguyên dưới dạng các ký tự thông qua nã ASCII của nó.

Ví dụ;

Nhập số thứ nhất: 123

Nhập số thứ hai: 123456789



Phép cộng:
Code:

123
+123456789
---------------------
=123456912


Phép trừ:
Code:

123

- 123456789
---------------------
=- 123456666


Ý tưởng:

- Nhập 2 xâu số

- Để thực hiện cộng (hoặc trừ) 2 xâu số ta lần lượt cắt từng ký tự (từ phải sang trái) của 2 xâu, sau đó cộng (hoặc trừ) theo mã của các cặp ký tự tương ứng (cần chú ý nhớ và mượn).



Chương trình:



PHP Code:
Code:

Var s1, s2, kq, gach, tg: string;

Max, i: byte;

 

Procedure Nhap;

Begin

Write(‘Nhap so thu nhat’); Readln(s1);

Write(‘Nhap so thu hai’); Readln(s2);

End;

 

Procedure Inan(Dau: char);

Begin

Writeln(S1:40);

Writeln(Dau+’’+s2:40);

Writeln(gach:40);

Writeln(‘=’+kq:40);

End;

 

Function Cong(s1,s2: string):string;

Var i, nho, nho2, k, co, hieu: integer; s:string;

Begin

If length(s1) < length(s2) then k:= length(s1)

Else begin k:=length(s2); s:=s1; s1:=s2; s2:=s; end;

Hieu:=length(s2) – length(s1);

Nho:=0; s:= ‘ ’;

For i:=k downto 1 do

Begin

Co:=ord(s1[i]+ord(s2[i+Hieu]) – 96 +nho;

S:=chr(co mod 10 + 48) + s;

Nho:=co div 10;

End;

S:=copy(s2, 1, Hieu) + s;

i:=Hieu;

If nho <> 0 then

While (i>0) and (nho <> 0) do

Begin

Nho2:=ord(s[i])+nho – 48;

S[i]:=char(nho2 mod 10 + 48;

Nho:=nho2 div 10;

Dec(i)

End;

If nho <> 0 then s:= ‘1’ + s;

Cong: = s;

End;

 

Function Tru(s1,s2: string):string;

Var i, nho,k,co,co2, Hieu: integer; s: string;

Begin

If length(s1)< length (s2) then k:=length(s1)

Else

Begin

K:=length(s2);

If (length(s1) > length(s2)) or (s1 > s2) then

Begin s:=s1; s1:=s2; s2:=s; end;

End;

Hieu:=length(s2) – length(s1);

Nho:=0; s:= ‘ ’;

For i:=k downto 1 do

Begin

Co2: = ord(s1[i]) + nho;

If co2 > ord(s2[i+Hieu]) then nho:=1 else nho:=0;

Co:=ord(s2[i+Hieu])+10*nho-co2;

S:=chr(co mod 10 + 48) + s;

End;

S: = copy(s2,1, Hieu) + s;

I:=Hieu;

If nho <>0 then

While (i> 0) and (nho <>0) do

Begin

If ord(s[i])>=49 then nho:=0 else nho:=1;

S[i]:=char(ord(s[i]) – 1);

Dec(i);

End;

While (s[i]= ‘0’) and (s <> ‘ ’) do delete(s, 1,1);

Tru:=s;

End;

 

Begin

Nhap;

Max:=length(s1);

If length(s2) > max then max:=length(s2);

Gach:=’’;

For i:=1 to max do gach:=gach+ ‘-’;

Writeln(‘Phep cong:’:35);

Kq:=cong(s1,s2);

Inan(‘+’);

Writeln;

Writeln(‘Phep tru: ’ :35);

If (s1 < s2) or (length(s1) < length(s2)) then

Begin tg:=s1; s1:=s2; s2:=tg;

Kq:= ‘-’ + tru(s1,s2); s2:=s1;s1:=tg;

End

Else kq:=tru(s1,s2);

Inan(‘-’);

Readln;

End.
School@net (Theo Minh Ngọc- THNT)
pkt_zz
pkt_zz
THƯỢNG TƯỚNG V
THƯỢNG TƯỚNG V

Tổng số bài gửi : 1029
Join date : 15/12/2009
Age : 32
Đến từ : MẠC XÁ-QUANG PHỤC

https://lop12a5thpttk-0609.forumvi.com

Về Đầu Trang Go down

Một hướng mở rộng phạm vi số nguyên Empty Re: Một hướng mở rộng phạm vi số nguyên

Bài gửi by Trang_Pham 2/10/2010, 8:48 am

Úi trời ạ
Ngô Bảo Châu
Trang_Pham
Trang_Pham
THƯỢNG TƯỚNG V
THƯỢNG TƯỚNG V

Tổng số bài gửi : 616
Join date : 18/09/2010
Age : 32
Đến từ : Vietnam

Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết