1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Калькулятор на делфи

Тема в разделе "Delphi - программирование", создана пользователем Khloe, 12 янв 2008.

  1. Khloe

    Khloe Гость

    Репутация:
    0
    Помогите мне пожалуйста!!! Конечно не безвозмезно. Мне нужен исходный код программы калькулятор на Делфи 40 разрядов, чтобы он считал плюс минус умножить и разделить. НУ умоляю вас!!!! ПОМОГИТЕ!!!!
     
  2. Khloe

    Khloe Гость

    Репутация:
    0
    Ну неужели на этом огромном форуме никто никогда не делал калькулятор??? Сбросте мне код, прошу вас!!! :) :( :(
     
  3. root

    root Гость

    Репутация:
    0
    Для: Khloe
    не надо в каждом разделе тему создавать, все кто хочет помочь просматривают всесь форум.
     
  4. Khloe

    Khloe Гость

    Репутация:
    0
    мне бы он понравился, если я на него хотя бы посотреть могла. у меня страница просто не отражается :) всё у меня не так последнее время! :( :(
     
  5. root

    root Гость

    Репутация:
    0
    Выложил на мировой ресурс :)
     

    Вложения:

  6. Khloe

    Khloe Гость

    Репутация:
    0
    ой спасибо огромное!!!
     
  7. root

    root Гость

    Репутация:
    0
    Для: Khloe
    Всегда пожалуйста :)
     
  8. Khloe

    Khloe Гость

    Репутация:
    0
    Подскажите ещё пожалуйста, как сделать так чтобы он считал не только целые числа??? ПОЖАЛУЙСТА, ОТКЛИКНЕТЕСЬ КТО ЗНАЕТ!!!!!!
     
  9. root

    root Гость

    Репутация:
    0
    др Калькулятор. только borderIcons свойство формы поднастройте
     

    Вложения:

    • mincalc.rar
      Размер файла:
      178,2 КБ
      Просмотров:
      92
  10. Khloe

    Khloe Гость

    Репутация:
    0
    Да, и ещё вопрос, возможно ли переделать из 16 разрядного калькулятов в 40 рязрядный?? Или прийдётся всё заново??? :)
     
  11. Black horse

    Black horse Гость

    Репутация:
    0
    <!--QuoteBegin-Khloe+18:01:2008, 16:41 -->
    <span class="vbquote">(Khloe @ 18:01:2008, 16:41 )</span><!--QuoteEBegin-->Да, и ещё вопрос, возможно ли переделать из 16 разрядного калькулятов в 40 рязрядный?? Или прийдётся всё заново???
    [snapback]94144" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Там используется для вычислений тип double - и его точности на 40 знаков точно не хватит. Чтобы достичь нужной тебе точности нужно использовать либо какие дополнительные модули(классы) либо алгоритм длинной арифметики, слелдеут отметить что для +,-,* - сложность таких алгоритмов средняя, но для деления - высокая сложность(строк 200 кода). Если надо могу выложить код этих процедур.
     
  12. Khloe

    Khloe Гость

    Репутация:
    0
    да, если не тяжело - выложи, пожалуйста буду очень благодарны!!!!
     
  13. Black horse

    Black horse Гость

    Репутация:
    0
    <!--QuoteBegin-Khloe+21:01:2008, 17:48 -->
    <span class="vbquote">(Khloe @ 21:01:2008, 17:48 )</span><!--QuoteEBegin-->да, если не тяжело - выложи, пожалуйста буду очень благодарны!!!!
    [snapback]94411" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    OK
    вот функции и процедуры
    Код:
    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;
    вот main
    Код:
    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.
    если тебе нужен калькультор с дробной частью то надо немного подмодифицировать. Например дорисовывать лишние нули.

    Функцию diving - писал ещё когда в школе учился, поэтому там есть метки.
     
  14. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    2
    Для: Black horse
    Такой длинный код лучше выкладывай прикрепленными файлами! Кстати, по-моему я тебе это уже говорил...
     
  15. Black horse

    Black horse Гость

    Репутация:
    0
    <!--QuoteBegin-European+22:01:2008, 11:58 -->
    <span class="vbquote">(European @ 22:01:2008, 11:58 )</span><!--QuoteEBegin-->Такой длинный код лучше выкладывай прикрепленными файлами! Кстати, по-моему я тебе это уже говорил...
    [snapback]94491" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    во-первых не говорил, во-вторых он не такой уж и длинный.
     
  16. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    2
    <!--QuoteBegin-Black horse+22:01:2008, 14:52 -->
    <span class="vbquote">(Black horse @ 22:01:2008, 14:52 )</span><!--QuoteEBegin-->во-первых не говорил,
    [snapback]94529" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Ну тогда говорю :)
    <!--QuoteBegin-Black horse+22:01:2008, 14:52 -->
    <span class="vbquote">(Black horse @ 22:01:2008, 14:52 )</span><!--QuoteEBegin-->во-вторых он не такой уж и длинный.
    [snapback]94529" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Для ветки форума - длинный
     
  17. Khloe

    Khloe Гость

    Репутация:
    0
    если тебе нужен калькультор с дробной частью то надо немного подмодифицировать. Например дорисовывать лишние нули.

    Функцию diving - писал ещё когда в школе учился, поэтому там есть метки.
    [/quote]



    спасибо большое!!!! Очень выручил, помог!!!
     
Загрузка...
Похожие Темы - Калькулятор на делфи
  1. DreamForse
    Ответов:
    0
    Просмотров:
    2.779
  2. users574
    Ответов:
    0
    Просмотров:
    2.800
  3. Bonuse
    Ответов:
    1
    Просмотров:
    1.819
  4. Powinteh
    Ответов:
    0
    Просмотров:
    1.188
  5. Powinteh
    Ответов:
    1
    Просмотров:
    1.188

Поделиться этой страницей