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

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

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

 
 Ответить  Открыть новую тему 
> Длинная арифметика
Reflex
сообщение 10.10.2006 20:56
Сообщение #1


Гость






Не могли бы ли вы мне помочь (факю читал не то что нужно). Мне нужно : реализация длинной арифметики на массиве цифр этого числа, нужно превеод интеджера в длинную арифметику, остаток от деления и вывод этого числа.
например Inttolong(a:integer):integer;
modlong(num1,num2:long):long;
write(long);
Спасибо большое, если поможите.

P.S. Пишу не своего компьютера
 К началу страницы 
+ Ответить 
volvo
сообщение 10.10.2006 21:05
Сообщение #2


Гость






Ну, раз то, что ты читал - не то, что нужно, то Google - твой помощник... Ищи...
 К началу страницы 
+ Ответить 
Гость
сообщение 10.10.2006 21:09
Сообщение #3


Гость






искал...
но не нашел, а реализовать не получается
 К началу страницы 
+ Ответить 
Гость
сообщение 10.10.2006 21:15
Сообщение #4


Гость






помогите, в четверг сдавать sad.gif
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 10.10.2006 21:43
Сообщение #5


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

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


Вот, пока не перешел на с++, пользовал такую свою заготовку для олимпиад.
На изящность, а тем более, на оптимальность код не претендует.

Тут есть InToTNum, +, -, *, /, PrintLong

Остаток от деления вырази как a-(a div b)*b

Код (Показать/Скрыть)


Пример использования:

Program Long;
Uses LongMath;
Var A,B,C :TNum;
Begin
InputLong(A);
InputLong(B);
Dvd(A,B,C);
Writeln('A:',Len(A));
Writeln('B:',Len(B));
PrintLong( C );
Readln;
End.


P.S. На алголисте есть, но на сях.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 10.10.2006 21:48
Сообщение #6


Гость






Спасибо smile.gif помогли
 К началу страницы 
+ Ответить 
Гость
сообщение 11.10.2006 18:00
Сообщение #7


Гость






я понимаю, что выгляжу полным нубом, но подскажите как мне найти НОК (наименьшее общее кратное) двух длинных чисел.
 К началу страницы 
+ Ответить 
volvo
сообщение 11.10.2006 18:02
Сообщение #8


Гость






Точно так же, как и для обычных (по той же формуле, только используя процедуры/функции для работы с длинными числами)...

Как для обычных чисел это делается, знаешь?
 К началу страницы 
+ Ответить 
Гость
сообщение 11.10.2006 18:52
Сообщение #9


Гость






Цитата
Как для обычных чисел это делается, знаешь?

нет sad.gif
 К началу страницы 
+ Ответить 
Гость
сообщение 11.10.2006 19:01
Сообщение #10


Гость






а почему поиск на НОК не сработал?
 К началу страницы 
+ Ответить 
Reflex
сообщение 11.10.2006 19:17
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

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


Я зарегестрировалась (извините за флуд)
Надеюсь, что вы не среагруете на мой пол так же, как и на некоторх других форумах sad.gif


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Reflex
сообщение 11.10.2006 19:30
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

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


Volvo...
А Вы не могли бы мне подсказать как находить НОК для обычных чисел?


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 11.10.2006 20:02
Сообщение #13


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

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


НОК(a, b) = a*b/НОД(a, b)

НОД ищите алгоритмом эвклида
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Reflex
сообщение 11.10.2006 20:25
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

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


извините, но я изучаю паскаль всего месяц и никак не могу понять как мне это сделать ( а завтра будет плохо если не принесу) вот то что дал Michael_Rybak мне подходит, я там все знаю, а вот в факю там много что непонятно sad.gif и реализовать нахождение НОКа не получается sad.gif
Помогите умоляю.


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Reflex
сообщение 11.10.2006 21:13
Сообщение #15


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

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


:'( Неужели Volvo узнав что я девушка, передумал мне помочь :'( Почему люди на большинстве форумов отказываються помогать девушкам :'(


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.10.2006 21:28
Сообщение #16


Гость






Reflex, я еще не успел просто smile.gif

Смотри... Вот так вычисляется НОК (по-английски LCM: Least Common Multiplier) для обычных чисел типа Integer (для проверки - запусти эту программу и посмотри, что она выдает):

{ GCD - это Greatest Common Divider = НОД }
function GCD (A: integer; B: integer): integer;
begin
while (a <> 0) and (b <> 0) do
if a >= b then
a := a mod b
else
b := b mod a;
GCD := a + b;
end;

function LCM (A: integer; B: integer): integer;
begin
LCM := a * b div GCD (a, b)
end;

begin
A := 12;
B := 23;
R := LCM(A, B);
writeln('НОК = ', R);
end.


Совершенно аналогично вычислим его для длинных чисел, заменив все операции на процедуры:

uses longmath;

procedure GCD (A: TNum; B: TNum; var res: TNum);
var
Zero, DRes, MRes, T: TNum;
begin
InToTNum(0, Zero);
while (Cmp(a, Zero) = '>') and (Cmp(b, Zero) = '>') do
if Cmp(a, b) in ['>', '='] then begin

Dvd(a, b, DRes);
Mul(DRes, b, MRes);
Sub(A, MRes, T);
A := T;

end
else begin

Dvd(b, a, DRes);
Mul(DRes, a, MRes);
Sub(b, MRes, T);
B := T;

end;

Add(a, b, res);
end;

function LCM (A: TNum; B: TNum; var res: TNum);
var T, MRes: TNum;
begin
Mul(a, b, MRes);
GCD(a, b, T);
Dvd(MRes, T, res);
end;

var
A, B, R: TNum;
begin
InputLong(A); { для проверки введи 12}
InputLong(B); { здесь - для проверки - 23 }
LCM(A, B, R);
Write('NOD = ');
PrintLong( r ); { ... и сравни результат... }
end.


Цитата
Неужели Volvo узнав что я девушка, передумал мне помочь
С чего ты взяла? blink.gif Не было этого никогда, чтоб я из-за пола человека отказывался ему помогать...
 К началу страницы 
+ Ответить 
Reflex
сообщение 11.10.2006 21:42
Сообщение #17


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

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


Спасибо, сейчас попробую
Просто когда я изучала HTML на одном форуме один парень объяснял, помогал мне, а потом я написала глагол в прошедшем времени(случайно так получилось что до этого были безродные ) он спросил: "Так ты девушка?" ну я скрывать и не собиралась , я ему честно ответила, а он меня тогда послал sad.gif


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Reflex
сообщение 13.10.2006 18:17
Сообщение #18


Пионер
**

Группа: Пользователи
Сообщений: 118
Пол: Женский

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


сдала, но преподаватель сказал юниты - хорошо, но лучше все засунуть в один файл как это сделать вроде удталяю превую часть оне начинает ругаться


--------------------
Нам не дано предугадать как наше слово отзовется...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 13.10.2006 23:17
Сообщение #19


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

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


Возьми модуль, удали в нем строки "Unit LongMath;", "Interface" и "Implementation", а после каждого объявления процедуры/функции, находившегося *до* слова Implementation, допиши после точки с запятой: "forward;". Например:

Procedure Add(A,B:TNum;Var C:TNum); {Сложение} forward;
Procedure Sub(A,B:TNum;Var C:TNum); forward;
...


Это называется "предварительное объявление", т.е. ты говоришь компилятору, что такая функция с такими параметрами есть, а как она работает - будет сказано ниже. Таким приемом можно реализовать, например, вложенную рекурсию - когда А вызывает В, а В вызывает А.

А код программы вставь непосредственно перед "end.":

...
Procedure Dvd;
...
begin
...
End;
{здесь вставь объявление своих переменных}
Begin
For iii:=0 To 100 Do Begin
mt[iii]:=iii Mod 10;
dt[iii]:=iii Div 10;
End;
{здесь вставь свой код}
End.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 19.06.2025 0:44
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"