Mở rộng phạm vi số nguyên

5 281 0
Mở rộng phạm vi số nguyên

Đang tải... (xem toàn văn)

Thông tin tài liệu

Một hướng mở rộng phạm vi giá trị số nguyên INTEGER 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ậ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ó. dụ; Nhập số thứ nhất: 123 Nhập số thứ hai: 123456789 Phép cộng: <!--[if !vml]--> <!--[endif]-->123 +123456789 =123456912 Phép trừ: 123 <!--[if !vml]--> <!--[endif]-->- 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: 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. . Một hướng mở rộng phạm vi giá trị số nguyên INTEGER 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. 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:

Ngày đăng: 13/09/2013, 21:10

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan