Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2011, 00:43   #1
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
По умолчанию Созданием мега калкулятора

Никто не задумывался над созданием мега калкулятора, который мог бы считать оч большие числа? Я вот задумался... написал минут за 15 прогу для нахождения факториала, для возведения в степень... но вот для перемножиывания больших чисел сил не хватает исправлять ошибки...
Все эти 3 прожки аналогично работают (должны работать). Может кто-нибуть подскажет как сделать перемноживатель больших чисел?

Ниже приведены текущие программные коды:

Код:
program Factorial0;
{$apptype console}
uses
	SysUtils;
var
	a: string;
	b: cardinal;
	i: byte;
  f: text;
	prom: cardinal;
	p: byte;
	res: string;
  num: cardinal;
  n: byte;
  ZeroEnded: boolean;
begin
write('x!; x='); readln(b);
a:='1';
num:=b;
for i:=2 to 254 do
	a:=a+'0';
while b>=1 do
	begin
	prom:=0;
	i:=1;
	while (i<Length(a))or(prom<>0) do
		begin
    n:=StrToInt(a[i]);
		prom:=prom+n*b;
		p:=prom mod 10;
    a[i]:=IntToStr(p)[1];
		prom:=prom div 10;
		i:=i+1;
		end;
	b:=b-1;
	end;
ZeroEnded:=False;
for i:=254 downto 1 do
  begin
  if ZeroEnded=True then
    res:=res+a[i]
  else
    if a[i]<>'0' then
      begin
      res:=res+a[i];
      ZeroEnded:=True;
      end
    else
      ZeroEnded:=False;
  end;
if ZeroEnded=False then
  res:='0';
writeln(num,'!=',res);
assignfile(f,'factorial.txt');
rewrite(f);
writeln(f, res);
closefile(f);
readln;
end.
Код:
program Stepen;
{$apptype console}
uses
	SysUtils;
var
	a: string;
	b: cardinal;
	i: byte;
	x: longint;
	f: text;
	prom: cardinal;
	p: byte;
	res: string;
	num: cardinal;
	n: byte;
	ZeroEnded: boolean;
begin
write('x^b; x,b='); readln(x,b);
a:='1';
num:=b;
for i:=2 to 254 do
	a:=a+'0';
while b>=1 do
	begin
	prom:=0;
	i:=1;
	while (i<Length(a))or(prom<>0) do
		begin
		n:=StrToInt(a[i]);
		prom:=prom+n*x;
		p:=prom mod 10;
		a[i]:=IntToStr(p)[1];
		prom:=prom div 10;
		i:=i+1;
		end;
	b:=b-1;
	end;
ZeroEnded:=False;
for i:=254 downto 1 do
  begin
  if ZeroEnded=True then
    res:=res+a[i]
  else
    if a[i]<>'0' then
      begin
      res:=res+a[i];
      ZeroEnded:=True;
      end
    else
      ZeroEnded:=False;
  end;
if ZeroEnded=False then
  res:='0';
writeln(num,'!=',res);
assignfile(f,'factorial.txt');
rewrite(f);
writeln(f, res);
closefile(f);
readln;
end.
Код:
program PereMnozh;
{$apptype console}
uses
	SysUtils;
var
	a,b: string;
	c: longint;
	i,j,d,g: byte;
	x: longint;
	f: text;
	prom: cardinal;
	p: byte;
	res, rea: string;
	resend: string;
	num: cardinal;
	n: byte;
	ZeroEnded: boolean;
begin
writeln('a*b');
write('a=');
readln(a);
write('b=');
readln(b);
c:=length(a);
for i:=c to 254 do
	a:=a+'0';
c:=length(b);
for i:=c to 254 do
	b:=b+'0';
num:=c;
for i:=1 to 254 do
	resend:=resend+'0';
while c>=0 do
	begin
	prom:=0;
	i:=1;
	j:=1;
	while (i<Length(b))or(prom<>0) do
		begin
		n:=StrToInt(b[i]);
		while (j<Length(a))or(prom<>0) do
			begin
			x:=StrToInt(a[j]);
			prom:=prom+n*x;
			p:=prom mod 10;
			res[j]:=IntToStr(p)[j];
			prom:=prom div 10;
			j:=j+1;
			end;
		g:=0;
    d:=1;
		while (d<=Length(resend))or(g<>0) do
			begin
			g:=g+StrToInt(resend[d])+StrToInt(res[d]);
			resend[d]:=IntToStr(g mod 10)[1];
			g:=g div 10;
      d:=d+1;
			end;
		i:=i+1;
		end;
	c:=c-1;
	end;
ZeroEnded:=False;
for i:=254 downto 1 do
  begin
  if ZeroEnded=True then
    rea:=rea+resend[i]
  else
    if a[i]<>'0' then
      begin
      rea:=rea+resend[i];
      ZeroEnded:=True;
      end
    else
      ZeroEnded:=False;
  end;
if ZeroEnded=False then
  rea:='0';
writeln(num,'!=',rea);
assignfile(f,'factorial.txt');
rewrite(f);
writeln(f, rea);
closefile(f);
readln;
end.
Повторяю: первые 2 программы работают, третья не работает
Если лень что-то делать, заставь это делать машину ... =,

Последний раз редактировалось Katus; 15.12.2011 в 00:45. Причина: Недописал фразу обращения внимания на определенные программы
Katus вне форума Ответить с цитированием
Старый 15.12.2011, 02:33   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Никто не задумывался над созданием мега калкулятора, который мог бы считать оч большие числа?
А зачем считать очень большие числа на ПК? Ищешь интересную задачу?
Напиши программу вычисляющую пределы по введённому уравнению.
Lim(x>0)=x^2-3x-2/x^2-4= - x стремится к очень маленькому числу(Но оно всё же не 0-ль).
Человек_Борща вне форума Ответить с цитированием
Старый 15.12.2011, 06:45   #3
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
По умолчанию

хм... пожно попробывать... но хотесь сначала разобраться с перемножением чисел...
Если лень что-то делать, заставь это делать машину ... =,
Katus вне форума Ответить с цитированием
Старый 15.12.2011, 11:42   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

умножение для процессора сложная штука.
У него станало сложение и вычитание а потом только умножение и деленение.
Человек_Борща вне форума Ответить с цитированием
Старый 15.12.2011, 12:07   #5
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

FGInt - длинная математика
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен мега-программист Anna_HR Общие вопросы C/C++ 11 27.10.2011 18:33
Мега батл ПРОграммистов Levsha100 Свободное общение 128 04.01.2010 21:33
мега формула Exo Microsoft Office Excel 4 27.02.2009 00:41