Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Длинное вычитание (Pascal)

930
09 июня 2007 года
Sash1k
115 / / 27.04.2007
Может у кого есть процедура "длинное вычитание" вида :
procedure sub(a,b:string; var c: string); ?
274
09 июня 2007 года
Lone Wolf
1.3K / / 26.11.2006
а чего она делать должна? возвращать строку, которая содержит все символы из А, что не содержатся в В ?
930
09 июня 2007 года
Sash1k
115 / / 27.04.2007
есть подобная процедура, но там переменные другие, а нужно что бы были строки - string

Код:
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;
622
09 июня 2007 года
nilbog
507 / / 19.12.2006
насколько я понял в строках десятичное представление числа?
а что за тип такой tlong в паскале
274
09 июня 2007 года
Lone Wolf
1.3K / / 26.11.2006
Наверно какой пользовательский. я так подозреваю просто масив байтов.. если да, то со строками, все так же. только изменить так. c := chr(ord(a)-ord(b)-p) и chr(inc(ord(c),osn)) вроде все.
930
09 июня 2007 года
Sash1k
115 / / 27.04.2007
nilbog, извиняюсь, тип long надо
622
09 июня 2007 года
nilbog
507 / / 19.12.2006
э вы как то поясните задачу
что требуется вообще _))) - телепатов нет
вообще не понятно при чем тут longint и ваша процедура
930
09 июня 2007 года
Sash1k
115 / / 27.04.2007
Цитата: nilbog
вообще не понятно при чем тут longint и ваша процедура



подобно этой процедуре, мне нужно сделать процедуру "длинное вычитание" вида :
procedure sub(a,b:string; var c: string);

622
09 июня 2007 года
nilbog
507 / / 19.12.2006
нда - вы объесните по человечески )) на примере скажем 2 строк
"12345"-"12344"="1"
так к примеру?
930
09 июня 2007 года
Sash1k
115 / / 27.04.2007
вычитает из числа а число б
320
09 июня 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: Sash1k
Может у кого есть процедура "длинное вычитание" вида :
procedure sub(a,b:string; var c: string); ?



Sash1k,обьясни толком,что тебе надо ? Тебя не понимают.Что такое "длинное вычитание" ? Закрою тему по причине не конструктивности твоего вопроса.

274
10 июня 2007 года
Lone Wolf
1.3K / / 26.11.2006
Насколько я понял нужно реализовать простое вычитание, a-b, но a и b числа длиной, например 40 байт. Я прав? Или иными словами Написать процедуру, которая реалитзует порарзрядное вычитания. аргументы и результат хранятся в строках.
268
10 июня 2007 года
Михаил
587 / / 25.06.2005
да длинные числа автору необходимо :) по 100-200 (ну или около того) цифр
Код:
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;

что то вроде этого
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог