K
Khloe
Помогите мне пожалуйста!!! Конечно не безвозмезно. Мне нужен исходный код программы калькулятор на Делфи 40 разрядов, чтобы он считал плюс минус умножить и разделить. НУ умоляю вас!!!! ПОМОГИТЕ!!!!
Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
Для: Khloe
А чем не устраивает тот что root вам нашел? нормальный такой калькулятор ...
Ссылка скрыта от гостей
Выложил на мировой ресурсмне бы он понравился, если я на него хотя бы посотреть могла. у меня страница просто не отражаетсявсё у меня не так последнее время!
![]()
![]()
др Калькулятор. только borderIcons свойство формы поднастройтеПодскажите ещё пожалуйста, как сделать так чтобы он считал не только целые числа??? ПОЖАЛУЙСТА, ОТКЛИКНЕТЕСЬ КТО ЗНАЕТ!!!!!!
да, если не тяжело - выложи, пожалуйста буду очень благодарны!!!!Там используется для вычислений тип double - и его точности на 40 знаков точно не хватит. Чтобы достичь нужной тебе точности нужно использовать либо какие дополнительные модули(классы) либо алгоритм длинной арифметики, слелдеут отметить что для +,-,* - сложность таких алгоритмов средняя, но для деления - высокая сложность(строк 200 кода). Если надо могу выложить код этих процедур.
Const
MAX_LENGTH = 200;
Type
BigNumber=Array[0..MAX_LENGTH] of integer;
Var
t1,t2:longint;
lk,g,h,n,o,p,z,c,a,b:BigNumber;
str: String;
code, i:integer;
ch :char;
Function getLength(number : BigNumber) : integer;
Begin
getLength := number[0];
End;
Procedure setLength(len : integer; var number : BigNumber);
Begin
number[0] := len;
End;
Procedure writeoln(s:BigNumber);
Var
i:longint;
Begin
For i:=getLength(s) downto 1 do
write(s[i]);
End;
Function neravno(s,d:BigNumber):boolean;
Var
i:longint;
Begin
If getLength(s)<>getLength(d) then
neravno:=true
Else
Begin
For i:=1 to getLength(s) do
If s[i]<>d[i] then
Begin
neravno:=true;
exit;
End;
neravno:=false;
End;
End;
Procedure plus(s,d:BigNumber;var pl:BigNumber);
Var
i,k:longint;
Begin
Fillchar(pl,sizeof(pl),0);
If getLength(s) > getLength(d) then
k:=getLength(s) + 1
Else
k:=getLength(d) + 1;
For i:=1 to k do
Begin
pl[i]:=s[i] + d[i] + pl[i];
If pl[i] > 9 then
Begin
pl[i+1]:=1;
pl[i]:=pl[i] mod 10;
End;
End;
If pl[k]=0 then
dec(k);
setLength(k,pl);
End;
Procedure ymn(s,d:BigNumber;var ym:BigNumber);
Var
i,j,k:longint;
Begin
Fillchar(ym,sizeof(ym),0);
k:=getLength(s) + getLength(d);
For i:=1 to getLength(s) do
For j:=1 to getLength(d) do
ym[i+j-1]:=s[i]*d[j]+ym[i+j-1];
For i:=1 to k-1 do
Begin
ym[i+1]:=ym[i+1] + ym[i] div 10;
ym[i]:=ym[i] mod 10;
End;
While ym[k]=0 do
dec(k);
setLength(k,ym);
End;
Function bolshe(s,d:BigNumber):boolean;
Var
i:longint;
Begin
If getLength(s) > getLength(d) then
bolshe:=true;
If getLength(s) < getLength(d) then
bolshe:=false;
If getLength(s) = getLength(d) then
Begin
i:=getLength(s);
If s[i] > d[i] then
Begin
bolshe:=true;
exit;
End;
If s[i]<d[i] then
Begin
bolshe:=false;
exit;
End;
While (s[i]=d[i])and(i>0) do
Begin
If s[i]>d[i] then
Begin
bolshe:=true;
exit;
End;
If s[i]<d[i] then
Begin
bolshe:=false;
exit;
End;
dec(i);
End;
If i<>0 then
If s[i]>d[i] then
Begin
bolshe:=true;
exit;
End
Else
bolshe:=false;{Если >=то надо писать true}
bolshe:=false;{Если >=то надо писать true}
End;
End;
Function bolsher(s,d:BigNumber):boolean;
Var
i:longint;
Begin
If getLength(s) > getLength(d) then
bolsher:=true;
If getLength(s) < getLength(d) then
bolsher:=false;
If getLength(s) = getLength(d) then
Begin
i:=getLength(s);
If s[i] > d[i] then
Begin
bolsher:=true;
exit;
End;
If s[i]<d[i] then
Begin
bolsher:=false;
exit;
End;
While (s[i] = d[i]) and (i > 0) do
Begin
If s[i] > d[i] then
Begin
bolsher:=true;
exit;
End;
If s[i]<d[i] then
Begin
bolsher:=false;
exit;
End;
dec(i);
End;
If s[i]>d[i] then
Begin
bolsher:=true;
exit;
End
Else
bolsher:=false;
End;
End;
procedure minus(s,d:BigNumber;var min:BigNumber);
var K,i:longint;
begin
fillchar(min,sizeof(min),0);
if getLength(s) > getLength(d) then
k:=getLength(s)
else
k:=getLength(d);
for i:=1 to k do
begin
min[i]:=s[i] - d[i] + min[i];
if min[i] < 0 then
begin
min[i+1]:=min[i+1] - 1;
min[i]:=min[i] + 10;
end;
end;
while (min[k] = 0) and (k > 0) do
dec(k);
setLength(k,min);
end;
Procedure diving(s,d:BigNumber;var dl:BigNumber);
label 1,2,3;
var
q,e,t,r,t1:BigNumber;
k,u,j,min,max:longint;
begin
fillchar(q,sizeof(q),0);
fillchar(e,sizeof(e),0);
if bolsher(s,d) then
begin
for j:=1 to getLength(d) do
e[getLength(d) - j + 1]:=s[getLength(s) - j + 1];
setLength(getLength(d),e);
u:=getLength(d);
if bolshe(d,e) then
begin
for j:=getLength(e) downto 1 do
e[j+1]:=e[j];
setLength(getLength(e) + 1, e);
e[1]:=s[getLength(s) - u];
inc(u);
end;
while u<=getLength(s) do
begin
min:=1;
max:=9;
1:{}if k=(min+max+1) div 2 then
begin
k:=(min+max) div 2;
goto 3;
end;{}k:=(min+max+1) div 2;
if (min=1)and(max=2) then k:=1;
3:setLength(1, t);
t[1]:=k;
ymn(t,d,t1);
if bolshe(t1,e) then
begin
max:=k;
goto 1;
end
else
begin
minus(e,t1,r);
if bolsher(r,d) then
begin
min:=k;
goto 1;
end;
end;
setLength(getLength(q) + 1, q);
q[getLength(q)]:=t[1];
ymn(d,t,r);
minus(e,r,e);
2:if (u<getLength(s)) then
begin
if (s[getLength(s) - u]<>0) or (getLength(e) <> 0) then
begin
for j:=getLength(e) downto 1 do
e[j+1]:=e[j];
setLength(getLength(e) + 1, e);
e[1]:=s[getLength(s) - u];
end;
inc(u);
if (bolshe(d,e)) then
begin
k:=10;
setLength(getLength(q) + 1, q);
q[getLength(q)]:=0;
goto 2;
end;
end
else
if k=10 then
break
else
inc(u);
end;
end{конец цикла}
else
setLength(0, dl);
for j:=1 to getLength(q) do
dl[j]:=q[getLength(q) - j + 1];
setLength(getLength(q), dl);
end;
Begin {main}
Readln(str);
setLength(length(str), b);
For i:=getLength(b) downto 1 do
Begin
ch:=str[i];
val(ch,b[getLength(b)-i+1],code);
End;
Readln(str);
setLength(length(str), a);
For i:=getLength(a) downto 1 do
Begin
ch:=str[i];
val(ch,a[getLength(a) - i + 1],code);
End;
fillchar(o,sizeof(o),0);
diving(b,a,o);
writeoln(o);
End.
Обучение наступательной кибербезопасности в игровой форме. Начать игру!