[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: turbo pascal
Dain Ironfoot
Может у кого есть процедура "длинное вычитание" вида :
procedure sub(a,b:string; var c: string); ?
anDRum
ну а самому написать не вариант, не? там просто всё. накрайняк окулова почитай.
KostyaN
могу на С скинуть в виде классов
подойдет?
NEFFboy
а чего она делать должна? возвращать строку, которая содержит все символы из А, что не содержатся в В ?
Dain Ironfoot
anDRum
советчег...
KostyaN
не нужен код на паскале
NEFFboy
вычитает из числа а число б
whisk
Dain Ironfoot
лабораторные и контрольные выдаются для самостоятельной работы wink.gif
за это время можно было уже и литературу найти, и написать
Dain Ironfoot
whisk
а не подскажите откуда такие смышленные ,а главное догадливые берутся ?
whisk
Dain Ironfoot
ты еще долго здесь бездельничать будешь, вместо того, чтобы задание делать?
Dain Ironfoot
whisk
вся ночь впереди я не тороплюсь...
Pomawka
а ты на кого учишься? правильно сказал anDRum это не сложно.
NEFFboy
вот:
Код

procedure sub(a,b:longint; var c:longint);
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[i]:=a[i]-b[i]-p;
     if c[i]<0 then
       begin
         p := 1;
         inc(c[i],osn);
       end
     else p:=0;
   end;
 for i := k downto 1 do
   if c[i]<>0 then break;
 c[0]:=i;
end;
Dain Ironfoot
NEFFboy
спс за помощь но это не то..надо именно стринги вычитать
NEFFboy
Dain Ironfoot, со строками, все так же. только изменить так. c[i] := chr(ord(a[i])-ord(b[i])-p) и chr(inc(ord(c[i]),osn)) вроде все.

P.S. спасибо репутацию не повышает =)
Scraber
NEFFboy, 255 разрядные числа пади не посчитает!!! И a, b, c полюбому string должны быть!!! Учитель наверное проверять будет!!

Код

procedure sub(a, b : string; var c : string);
var
  r1, r2, r3, osh, j, k, l, f : integer;
  p : string[1]; t : char;
  temp : string;
begin
    k := 0;
    if length(a) >= length(b) then
    begin
       for j := length(a) downto 2 do
       begin
           val(a[j], r1, osh);
           val(b[length(b)-k], r2, osh);
           inc(k);
           if r1 < r2 then
           begin
                inc(r1,10);
                str(r1-r2, p);
                c := c + p;
                val(a[j-1], r3, osh);
                if r3 <> 0 then
                begin
                     str(r3-1, p);
                     insert(p, a, j-1); delete(a, j, 1);
                end
                else
                begin
                     l := j-1;
                     while a[l] = '0' do
                           dec(l);
                     val(a[l], r3, osh);
                     str(r3-1, p);
                     insert(p, a, l); delete(a, l+1, 1);
                     for f := l+1 to j-1 do
                         a[f] := '9';
                end;
           end
           else
           begin
                str(r1-r2,p);
                c := c + p;
           end;
       end;
       c := c + a[1];
    end
    else
    begin
       temp := a; a := b; b := temp;
       for j := length(a) downto 2 do
       begin
           val(a[j], r1, osh);
           val(b[length(b)-k], r2, osh);
           inc(k);
           if r1 < r2 then
           begin
                inc(r1,10);
                str(r1-r2, p);
                c := c + p;
                val(a[j-1], r3, osh);
                if r3 <> 0 then
                begin
                     str(r3-1, p);
                     insert(p, a, j-1); delete(a, j, 1);
                end
                else
                begin
                     l := j-1;
                     while a[l] = '0' do
                           dec(l);
                     val(a[l], r3, osh);
                     str(r3-1, p);
                     insert(p, a, l); delete(a, l+1, 1);
                     for f := l+1 to j-1 do
                         a[f] := '9';
                end;
           end
           else
           begin
                str(r1-r2,p);
                c := c + p;
           end;
       end;
       c := c + a[1];
    end;
end;



с, потом в обратном порядке вывадить надо!!!

Не критиковать starac.gif сделано на скорую руку лишь бы считала biggrin.gif , по элсу идет копи пастом biggrin.gif
Scraber
ЗЫ: простое вычитание столбиком biggrin.gif
???
Scraber
ты монстер ohmy.gif
NEFFboy
Цитата (Scraber)
NEFFboy, 255 разрядные числа пади не посчитает!!! И a, b, c полюбому string должны быть!!! Учитель наверное проверять будет!!

посчитает по 100-200 (ну или около того) цифр =)
Код

procedure sub(a,b:string; var c: string);
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[i])<ord(b[i]) 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[i]));if a[i]<ord('0') then a[i]:=ord('9') else k:=false;
 end;
if ord(b[i])>ord(a[i]) then
 begin
  k:=true;
  c[i]:=ord(a[i])-ord(b[i])+ord('9')+1;
 end else c[i]:=ord(a[i])-ord(b[i])+ord('0');
end;
end;

Dain Ironfoot
а что такое max ?
Dain Ironfoot
выбирает наибольшее из двух ?но такой функции нету..
Dain Ironfoot
еще запинается на этой строке :if a[i]<ord('0') then a[i]:=ord('9')
эрор № 26
NEFFboy
Dain Ironfoot, ты сформулируй задачу хорошо, а тыкай пальцем в небо. или ты сам не знаешь, что тебе нужно? =)
Dain Ironfoot
я знаю что мне надо...и уже получил starac.gif кому интересно вот :
Код

код удален..дабы не было повадно всяким дедам_пердунам его критиковать...
NEFFboy
Цитата (Dain Ironfoot)
кому интересно вот

кому тут нужен твой исходник =))
anDRum
Dain Ironfoot
да я советчик, и что? по крайней мере такую фигню написать смогу без посторонней помощи.
тебе whisk всё правильно говорит, а ты как от мухи отмахиваешься. хрен ты так чему научишься, если каждый раз будешь чужие коды юзать.
эххх, понаберут по объявлению...
NEFFboy
Цитата (anDRum)
по крайней мере такую фигню написать смогу без посторонней помощи.


когда напишешь, тогда и говори, теоретик блин =)
anDRum
NEFFboy
писал, и не раз, иначе бы не говорил, что могу написать. в отличие от некоторых (не принимайте на свой счёт) не имею привычки говорить о том, о чём понятия не имею. и в данном случае воспринимаю ваше "теоретик" как оскорбление, причём ничем не обоснованное.
Dain Ironfoot
anDRum
послан...
anDRum
Dain Ironfoot
шёл бы ты... длинную арифметику учиться писать
RoDen
NEFFboy
Цитата
ты сформулируй задачу хорошо, а тыкай пальцем в небо. или ты сам не знаешь, что тебе нужно? =)

тема была сформулирована товарищем довольно понятно - длинная арифметика это раздел информатики, один из начальных.
Цитата
кому тут нужен твой исходник =))

судя по представленному вами варианту решения задачи - исходник нужен вам, почитать, познакомиться, как на самом деле осуществляются операции с числами сколь угодно большой длинны rolleyes.gif
сорри, не сдержался...
Dain Ironfoot
Товарищи не ссорьтесь !Курсовая защищена на "5" ,собственно топик можно закрывать...
KostyaN
Dain Ironfoot
собственно, цикл лучше будет смотреться так
Код

for i := length(a) downto 1 do begin
   j := ord(a[i]) - ord(b[i]) - k;
   if (j<0) then begin
      inc(j, 10);
      k:=1;
   end else k:=0;
   c := chr( j + ord('0')) + c;
 end;


все остальное довольно грамотно
дед_мажор
Цитата
все остальное довольно грамотно


только недалеким людям свойственно рассуждать о грамотности, не имея о ней никакого представления.
RoDen
дед_мажор
дед, ну ты че-то вообще...
наезжаешь как-то совсем неаргументированно! мы конечно понимаем, что ты - Величайший программит из программистов, но снизойди уж, аргументируй строчкой кода...
дед_мажор
RoDen
отсутствие coding style, а именно: наикривейшие identations, отсутствие пустых строк и пробелов в выражениях (вперемежку с наличием таковых -- человек совсем не понимает где они нужны, а где нет), нарушения naming conventions (загадочные имена переменных a, b, c, k -- абсолютная безграмотность), и т. п.

кроме того, код абсолютно нереюзабелен, присутствуют беспомощные комментарии вместо говорящего кода, магические обскурные вещи вроде chr(ord()) - попахивают тухлецой, а отсутствие тесткейсов не позволяет убедиться в работоспособности алгоритма, равно как и вносить в него свои изменения.

продолжать или уже достаточно? =) может ты тоже хочешь выглядеть неграмотным? ) а это всего десяток строк кода.
KostyaN
дед_мажор
ты еще тут поучи давай

это все-таки десять строк кода, реализующих банальную операцию вычитания столбиком
так что если ты с первого раза не въехал, для чего что нужно, и сломал глаза об этот код из-за его нечитабельности, то тебе самый раз в первый класс
дед_мажор
Цитата
ты еще тут поучи давай

ты еще тут поостри давай.

Цитата
если ты с первого раза не въехал

да это ты не въехал в то, что я написал. сначала сходи узнай, что это всё означает. тоже мне грамотей нашелся =)
KostyaN
Цитата (дед_мажор)
да это ты не въехал в то, что я написал. сначала сходи узнай, что это всё означает. тоже мне грамотей нашелся =)


я-то въехал
только ты мне можешь объяснить, зачем все это в 10 строках кода?
это же даже на ооп и тем более не разработка глобального продукта группой разработчиков...
дед_мажор
Цитата
только ты мне можешь объяснить, зачем все это в 10 строках кода?

могу. с этого и надо было начинать.

если ты уже в 10 строках допускаешь грубейшие ошибки, то любое количество кода, тем более ооп, тем более в группе, тем более "глобального" продукта -- грамотно не напишешь никогда. а если при этом еще не отличать понятия "рабочий код" и "грамотный код" -- то это вообще клиника, и до разработки таких людей допускать ни в коем случае нельзя.
whisk
про стандарты кодирования -- хорошо конечно, но зачем же числа в строках как чары хранить?
дед_мажор
Цитата
зачем же числа в строках как чары хранить

правильно, их нужно в объекте инкапсулировать, абстрагируясь от множества целых чисел и системы счисления! =)
whisk
... и перегрузить афиметические операторы. всё )
дед_мажор
whisk
ты сейчас столько слов умных сказал, что это даже не на курсовую -- на кандидатскую тянет! =)
KostyaN
Цитата (whisk)
... и перегрузить афиметические операторы. всё )

я это автору темы в самом начале и предлагал, вот только на с
а он не захотел smile.gif
дед_мажор
Цитата
предлагал, вот только на с

в C нет перегрузки операторов. учи матчасть.
KostyaN
ты уже достал придираться к словам
да, в с нет, зато есть в с++
дед_мажор
Цитата
ты уже достал придираться к словам

а ты уже достал писать всякую х#рню, иди учи матчасть. даже один язык от другого отличить не можешь. а еще спорит со мной.

лол.
KostyaN
дед_мажор
приятного общения самим с собой, мне уже надоело тебе что-либо доказывать.
не хочешь понимать- твое право.
хочешь стебаться, что ж, тоже самое.

смотри только, чтобы тебе потом не пришлось только над самим собой стебаться...
дед_мажор
Цитата
уже надоело тебе что-либо доказывать

тебе надо не мне что-либо доказывать, а за учебники садиться!

Цитата
я писал что написано грамотно, имея в виду, что довольно оптимизированно


что там оптимизировать в линейном алгоритме? профайлинг показал узкие места?

иди кнута читай! "преждевременная оптимизация -- корень зла". это у него так написано, да.
а единственную книжку, которую ты прочитал -- "турбопаскаль для чайников" -- советую выбросить в помойку и забыть, что там было написано.

на этом публичная порка закончена. всем спасибо. вы продемонстрировали великолепное незнание элементарных вещей! )
Dain Ironfoot
whisk
а числа хранить как чары надо по условию задачи...
Fast Reply:

 Enable Smilies |  Enable Signature
Здесь расположена полная версия этой страницы.
Студенческий клуб ostudent.ru и его создатели не несут ответственности за достоверность самостоятельно размещаемой посетителями сайта информации и не могут подтвердить или опровергнуть её.
Рейтинг@Mail.ru
Invision Power Board © 2001-2025 Invision Power Services, Inc.