procedure longsub(a,b:tlong; var c:tlong);
var k,i,p:longint;
begin
fillchar(c,sizeof(c),0);
if a[0]>b[0] then k := a[0] else k := b[0];
p := 0;
for i := 1 to k do
begin
c:=a-b-p;
if c<0 then
begin
p := 1;
inc(c,osn);
end
else p:=0;
end;
for i := k downto 1 do
if c<>0 then break;
c[0]:=i;
end;
Длинное вычитание (Pascal)
procedure sub(a,b:string; var c: string); ?
а чего она делать должна? возвращать строку, которая содержит все символы из А, что не содержатся в В ?
есть подобная процедура, но там переменные другие, а нужно что бы были строки - string
а что за тип такой tlong в паскале
Наверно какой пользовательский. я так подозреваю просто масив байтов.. если да, то со строками, все так же. только изменить так. c := chr(ord(a)-ord(b)-p) и chr(inc(ord(c),osn)) вроде все.
nilbog, извиняюсь, тип long надо
что требуется вообще _))) - телепатов нет
вообще не понятно при чем тут longint и ваша процедура
Цитата: nilbog
вообще не понятно при чем тут longint и ваша процедура
подобно этой процедуре, мне нужно сделать процедуру "длинное вычитание" вида :
procedure sub(a,b:string; var c: string);
"12345"-"12344"="1"
так к примеру?
вычитает из числа а число б
Цитата: Sash1k
Может у кого есть процедура "длинное вычитание" вида :
procedure sub(a,b:string; var c: string); ?
procedure sub(a,b:string; var c: string); ?
Sash1k,обьясни толком,что тебе надо ? Тебя не понимают.Что такое "длинное вычитание" ? Закрою тему по причине не конструктивности твоего вопроса.
Насколько я понял нужно реализовать простое вычитание, a-b, но a и b числа длиной, например 40 байт. Я прав? Или иными словами Написать процедуру, которая реалитзует порарзрядное вычитания. аргументы и результат хранятся в строках.
Код:
procedure sub(*);
var i:integer
z:integer;
k:boolean;
l:string;
begin
k:=false;
while (length(a)<max(length(a),length(b)))or(length(b)<max(length(a),length(b))) do if length(a)<max(length(a),length(b)) then a:='0'+a else if length(b)<max(length(a),length(b)) then b:='0'+b;
for i:=length(a) downto 1 do if ord(a)<ord(b) then break;
if i<length(a)+1 then begin l:=a;a:=b;b:=l;c[255-length(a)]:='-';end;
for i:=length(b) downto 1 do
begin
if k then
begin
dec(byte(a));if a<ord('0') then a:=ord('9') else k:=false;
end;
if ord(b)>ord(a) then
begin
k:=true;
c:=ord(a)-ord(b)+ord('9')+1;
end else c:=ord(a)-ord(b)+ord('0');
end;
end;
var i:integer
z:integer;
k:boolean;
l:string;
begin
k:=false;
while (length(a)<max(length(a),length(b)))or(length(b)<max(length(a),length(b))) do if length(a)<max(length(a),length(b)) then a:='0'+a else if length(b)<max(length(a),length(b)) then b:='0'+b;
for i:=length(a) downto 1 do if ord(a)<ord(b) then break;
if i<length(a)+1 then begin l:=a;a:=b;b:=l;c[255-length(a)]:='-';end;
for i:=length(b) downto 1 do
begin
if k then
begin
dec(byte(a));if a<ord('0') then a:=ord('9') else k:=false;
end;
if ord(b)>ord(a) then
begin
k:=true;
c:=ord(a)-ord(b)+ord('9')+1;
end else c:=ord(a)-ord(b)+ord('0');
end;
end;
что то вроде этого