1. Trang chủ
  2. » Giáo án - Bài giảng

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

5 281 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Mở rộng phạm vi số nguyên
Trường học University of Technology and Education
Chuyên ngành Computer Science
Thể loại Báo cáo kỹ thuật
Thành phố Hà Nội
Định dạng
Số trang 5
Dung lượng 37,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Một hướng mở rộng pham vi gid 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ì vậy, việc tính toán trê

Trang 1

Một hướng mở rộng pham vi gid 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ì 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 cua no

Ví dụ;

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

Nhập số thứ hai: 123456789

Phép cộng:

<! [if !wml] > <! [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 sĨ, s2, kq, gach, tg: string;

Max, 1: byte;

Procedure Nhap;

Begin

Trang 2

Write( Nhap so thu nhat”); Readln(s1); Write( Nhap so thu hai”); Readln(s2); End;

Procedure Inan(Dau: char);

Begin

Writeln(S 1:40);

Writeln(Daut’’+s2:40);

Writeln(gach:40);

Writeln(‘=’+kq:40);

End;

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

Var 1, 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:=O; s:= “ ”;

For 1:=k downto 1 do

Begin

Co:=ord(s1[i]+ord(s2[1+Hieu]) — 96 +nho; S:=chr(co mod 10 + 48) +s;

Nho:=co div 10;

End;

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

Trang 3

1:=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()

End;

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

Cong: = s;

End:

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

Var 1, 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:=O; s:= “ ”;

For 1:=k downto 1 do

Trang 4

Begin

Co2: = ord(sl[1]) + nho;

If co2 > ord(s2[1+Hieu]) then nho:=1 else nho:=0; Co:=ord(s2[it+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();

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 1:=Ï to max do gach:=gach+ ‘-’;

Writeln(‘Phep cong:’:35);

Kq:=cong(s1,s2);

Trang 5

Inan(‘+’);

Writeln;

Writeln(‘Phep tru: ˆ :35);

If(s1 < s2) or (length(s1) < length(s2)) then Begin tg:=s1; sl:=s2; s2:=tg;

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

End

Else kq:=tru(s1,s2);

Inan(‘-’);

Readln;

End.

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w