Помощь - Поиск - Пользователи - Календарь
Полная версия: Операции с длинными числами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Art87
Приветствую всех.
Я только начал знакомиться с "длинной математикой", по поиску нашел много тем, в которых всех посылают сюда
Я пытался там что-то понять, но безуспешно. Наверное нужно быть матерым програмистом чтобы разобраться.
Потом я где-то в сети нашел тоже самое, только оформлено куда проще для восприятия, вот например:
умножение:

Program DlUmn;
Const NMax = 2000;
Type Digit = 0..9; DlChislo = Array[1..Nmax] Of Digit;
Var S : String;
    M, N, R, F : DlChislo;
    I, MaxF : Word;
    Logic : Boolean;
Procedure Zero(Var A : DlChislo);
Var I : Integer;
  Begin
    For I := 1 To NMax Do A[I] := 0;
  End;
Function Dlina(C : DlChislo) : Integer;
Var I : Integer;
 Begin
   I := NMax;
   While (I > 1) And (C[I] = 0) Do I := I - 1;
   Dlina := I
 End;

Procedure Print(A : DlChislo);
Var I : Integer;
 Begin
    For I := Dlina(A) DownTo 1 Do Write(A[I] : 1);
    WriteLn
 End;

Procedure Translate(S : String; Var A : DlChislo;
                    Var OK : Boolean);
Var I : Word;
 Begin
   Zero(A); I := Length(S); OK := True;
   While (I >= 1) And OK Do
   Begin
      If S[I] In ['0'..'9']
      Then A[Length(S) - I+ 1] := Ord(S[I]) - 48
      Else OK := False;
      I := I - 1
   End
 End;
Procedure Multiplication(A, B : DlChislo; Var C : DlChislo);
Var I, J : Integer; P : Digit; VspRez : 0..99;
 Begin
  Zero(c);
  For I := 1 To Dlina(A) Do
  Begin P := 0;
        For J := 1 To Dlina(B) Do
        Begin
          VspRez := A[I] * B[J] + P + C[I + J - 1];
	    C[I + J - 1] := VspRez Mod 10;
	    P := VspRez Div 10
	  End;
        C[I + J] := P
   End
 End;
Begin
   Repeat 
     Write('Введите первый множитель: ');
     ReadLn(S); Translate(S, M, Logic)
   Until Logic;
   Repeat
     Write('Введите первый множитель: ');
     ReadLn(S); Translate(S, N, Logic)
   Until Logic;
   Multiplication(M, N, R); Print(r)
End.


Не лучше ли объяснять проще, учитывая что сюда приходят не только программеры с многолетним стажем?
volvo
Art87, все? Или у тебя еще что-то есть?

Нету? Тогда давай сравним функциональность твоей программы (которую даже программой назвать трудно) и того, что есть в FAQ-е. Что ты можешь сделать, используя тот кусок кода, который ты привел? Умножить 2 длинных числа? МОЛОДЕЦ!!! А в FAQ-е тебе дают программу, производящую ВСЕ действия над длинными числами (причем как длинное/длинное, так и длинное/короткое), чтение/запись с консоли/файла... Если ты попробуешь сделать такой же функционал у приведенной тобой схемы, я уверен, что сравнение будет далеко не в твою пользу... Кроме того... 90% программ, которые ты находишь в Интернете отличаются тем, что они либо СОВСЕМ не работают, либо работают НЕ СОВСЕМ правильно, либо - СОВСЕМ неправильно... У нас в FAQ-е программа, которую я лично гонял 3 недели на примерно 200 тестах, и ни на одном не было ошибок.

Ты свою программу проверял? Сколько тестов сделал? 1? 2? А на десятом будет сбой, и что? Вся разница - в том, что мы выкладываем программы для того, чтобы их можно было ИСПОЛЬЗОВАТЬ, а тебе нужна программа, которую можно попроще сдать (чтобы не особо напрягаться), и забыть... Так что позволь уж нам самим решать, что стОит выкладывать в FAQ, а что - нет... Не нравится - не бери, иди и изобретай велосипед заново, вместо того, чтобы как все нормальные люди сесть в автомобиль и поехать...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.