Помощь - Поиск - Пользователи - Календарь
Полная версия: Операции с длинными числами
Форум «Всё о Паскале» > 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©;
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®
End.


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

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

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