IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Операции с длинными числами
сообщение
Сообщение #1


snoWolf
**

Группа: Пользователи
Сообщений: 80
Пол: Мужской
Реальное имя: Артем

Репутация: -  0  +


Приветствую всех.
Я только начал знакомиться с "длинной математикой", по поиску нашел много тем, в которых всех посылают сюда
Я пытался там что-то понять, но безуспешно. Наверное нужно быть матерым програмистом чтобы разобраться.
Потом я где-то в сети нашел тоже самое, только оформлено куда проще для восприятия, вот например:
умножение:

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 -


--------------------
Нас десять братьев на тропе, идем мы быстро, на легке ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Art87, все? Или у тебя еще что-то есть?

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

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

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.04.2025 15:44
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name