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

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

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

> Задача на длинную арифметику. Помогите!
SSJ
сообщение 10.04.2007 8:51
Сообщение #1





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

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


Помогите пожалуйста, у меня задача: Написать программу для вычисления корня квадратного из огромного числа( количество цифр в нем n,n>40) при условий что корень извлекается т.е. он целое число. Я нашел алгоритм чисто математический, суть его разбитие на грани и.., вопщем у меня не получается написать на паскале нормально работающую прогу. Я тут смотрел вроде была тема длинная арифметика и там были разобраны некоторые задачи но моей не было. И НИГДЕ в инете кода этой задачи нет. Подмогните!

Сообщение отредактировано: SSJ - 10.04.2007 8:57
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 10.04.2007 16:15
Сообщение #2


Гость






Здесь: http://volvo71.narod.ru/progs/big_int.rar
 К началу страницы 
+ Ответить 
SSJ
сообщение 10.04.2007 20:21
Сообщение #3





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

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


Volvo, эта прога с твоего сайта странно работает она к примеру из числа 138384 не верно считает корень ды и не только для него...
Если ты можешь загляни сюда comp-science.hut.ru/dl-ar/dl-ar.html
и напиши прогу по этому мат алгоритму. Я могу выложить то что я пока сделал но не знаю поможет ли это.. Пожалуйста помоги а то у меня курсовик стоит, из 10 задач одна эта осталась.

Добавлено через 11 мин.
Цитата(SSJ @ 10.04.2007 21:21) *

Volvo, эта прога с твоего сайта странно работает она к примеру из числа 138384 не верно считает корень ды и не только для него...
Если ты можешь загляни сюда comp-science.hut.ru/dl-ar/dl-ar.html
и напиши прогу по этому мат алгоритму. Я могу выложить то что я пока сделал но не знаю поможет ли это.. Пожалуйста помоги а то у меня курсовик стоит, из 10 задач одна эта осталась.

Program KvadratniiKoren;

const
nmax=2000;

var
c,n,c2:array[1..nmax]of integer;

m,zt,c2i,a1s,cs,bbs,rezs,nj,nt,max0s,max1s:string;
mI,l,i,kolgr,j,code,max,max1,x,z,zz,ab1,am1,cc,rez,bm,bb,u:integer;
log:text;

begin

assign(log,'log.ssj_prog'); {очищаем файл}
rewrite(log);
close(log);


read(m);
l:=length(m);

for i:=1 to l do begin {заполняем массив с(числовой)из файла, по 1 символу(цифре) в ячейку массива}
val(m[i],mI,code);
c[i]:=mI; end;

if l mod 2 =0 then {если число цифр в введенном числе четное то по два числа в грани, если нечетное то первая слева грань имеет 1 цифру а все остальные по 2}

begin
writeln('кол-во цифр в числе четное ',l);
for i:=1 to l do begin
assign(log,'log.ssj_prog');
append(log);
writeln(log,m[i],m[i+1]);
i:=i+1;
close(log); end;

kolgr:=round(l/2); {определяем кол-во граней(групп по 2 цифры), ! число граней равно числу цифр исходеного числа}

writeln('В результате должно получиться число, длина которого ',kolgr,' цифр');


assign(log,'log.ssj_prog'); {заполняем массив с2(числовой)из файла, по 2 символа(цифре) в ячейку массива}
reset(log);
for j:=1 to kolgr do
readln(log,c2[j]);

close(log);
erase(log);

writeln('Вывожу введенное число с расстановленными гранями');
for j:=1 to kolgr do write(c2[j],' ');
writeln;



assign(log,'log.ssj_prog');
rewrite(log);
close(log);
nt:='';

for i:=1 to kolgr do
if i=1 then begin
for x:=1 to c2[1] do
if c2[1]>= sqr(x) then max:=x; {ищем число квадрат которого меньше или равен числу 1-ой грани}


assign(log,'log.ssj_prog');
append(log);
writeln(log,max);
close(log);

if kolgr>1 then begin

str(max,max0s);
nt:=nt+max0s;


z:=sqr(max);
zz:=c2[1]-z;
str(zz,zt);
str(c2[i+1],c2i);
a1s:=zt+c2i;
val(a1s,ab1,code);
am1:=2*max;

for x:=1 to ab1 do
if (10*am1+x)*x<=ab1 then max1:=x;

assign(log,'log.ssj_prog');
append(log);
writeln(log,max1);
close(log);

str(max1,max1s);
nt:=nt+max1s;

cc:=ab1-(10*am1+max1)*max1;


end;


for i:=3 to kolgr do begin
str(cc,cs);
str(c2[i],c2i);
bbs:=cs+c2i;
val(bbs,bb,code);


rezs:='';
for j:=1 to i do begin

rezs:=rezs+nt;

val(rezs,rez,code);

bm:=2*rez;
for x:=1 to bb do
if (10*bm+x)*x<=bb then max:=x;

cc:=bb-(10*bm+max)*max;

assign(log,'log.ssj_prog');
append(log);
writeln(log,max);
close(log);


end;
end;
end;


{результат пока выводит в файл}

end;
end.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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