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.
Обучение наступательной кибербезопасности в игровой форме. Начать игру!